亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Little Kernel分析與移植

        2012-10-27 02:40:34王正元孟慶民張艷彬
        中國科技信息 2012年22期
        關(guān)鍵詞:源碼內(nèi)核處理器

        楊 浩 王正元 孟慶民 張艷彬

        1.南京郵電大學(xué)電子科學(xué)與工程學(xué)院,江蘇 南京 210003

        2.南京郵電大學(xué)通信與信息工程學(xué)院,江蘇 南京 210003

        Little Kernel分析與移植

        楊 浩1王正元1孟慶民2張艷彬2

        1.南京郵電大學(xué)電子科學(xué)與工程學(xué)院,江蘇 南京 210003

        2.南京郵電大學(xué)通信與信息工程學(xué)院,江蘇 南京 210003

        Little Kernel(lk)是被Android系統(tǒng)接受進(jìn)入源碼樹的Bootloader程序,并被多款智能手機(jī)和平板電腦所采用。論文介紹了lk的主要功能,分析了lk的源碼結(jié)構(gòu),并在此基礎(chǔ)上詳細(xì)說明了lk移植的方法和過程。將移植后的lk進(jìn)行編譯并下載至TCC8801 DEMO板上,lk能夠正常啟動并引導(dǎo)linux內(nèi)核。

        Little Kernel;嵌入式系統(tǒng);移植;TCC8801

        little kernel; embedded system; porting; tCC8801

        引言

        近年來,ARM Cortex-A8高性能處理器被廣泛應(yīng)用于智能手機(jī)、平板電腦等設(shè)備。而這些嵌入式系統(tǒng)啟動時需要bootloader程序,所謂bootloader是在操作系統(tǒng)內(nèi)核運(yùn)行前執(zhí)行的一小段程序。這段程序負(fù)責(zé)完成對硬件設(shè)備的基本初始化,創(chuàng)建某些必要信息通過相關(guān)機(jī)制傳遞給內(nèi)核,引導(dǎo)和加載內(nèi)核,并最終調(diào)用操作系統(tǒng)內(nèi)核[1-

        2]。

        目前,常見的bootloader有[3]:Redboot、U-Boot、Blob、vivi等。其中以U-Boot應(yīng)用最為廣泛,支持的操作系統(tǒng)和處理器芯片最多。Little Kernel 是最近幾年才推出的一種Bootloader,并被Android系統(tǒng)所接受進(jìn)入Android源碼樹,大量應(yīng)用于智能手機(jī)與平板電腦。Little Lernel除了支持高通、TI、三星、Telechips等公司的芯片組,目前還具備如下功能[4]:

        a、支持多種NAND Flash啟動;

        b、提供USB驅(qū)動,支持開發(fā)過程中通過USB升級image文件;

        c、提供鍵盤驅(qū)動,支持開發(fā)人員進(jìn)入fastboot模式升級image文件;

        d、提供顯示驅(qū)動用于調(diào)試和點(diǎn)亮顯示屏;

        e、支持多線程。

        Little Kernel不僅代碼量小、運(yùn)行耗時少,更為重要的特點(diǎn)是代碼可維護(hù)性好。在Little Kernel架構(gòu)中將處理器芯片歸為平臺,對于使用同一芯片的不同目標(biāo)板則對于不同的目標(biāo)[4]。

        1 Little Kernel 源碼分析

        為了進(jìn)行移植,必須仔細(xì)分析Little Kernel(下面簡稱lk)的源碼目錄結(jié)構(gòu),據(jù)此理解lk的系統(tǒng)架構(gòu),只有這樣移植工作才會有的放矢、事半功倍。

        lk的目錄結(jié)構(gòu)如表1所示。

        表1

        從表1可以看出,lk的架構(gòu)清晰、功能簡捷。

        lk啟動流程如下[5]:

        Step1:從lk鏈接文件lkarcharm system-onesegment.ld可知,入口點(diǎn)在_ start。而_start在匯編語言文件crt0.S中,從_start跳轉(zhuǎn)到reset,開始進(jìn)行CPU早期初始化、建立堆棧等常規(guī)的初始化任務(wù),然后跳到kmain()函數(shù)執(zhí)行。

        Step2:進(jìn)入kmain()函數(shù)后,首先執(zhí)行thread_init_early()函數(shù)。Lk支持多線程,因此需要該函數(shù)進(jìn)行相關(guān)初始化,例如,初始化線程隊(duì)列,初始化線程列表,創(chuàng)建運(yùn)行線程等。

        Step3:執(zhí)行arch_early_init()函數(shù)。主要初始化MMU(內(nèi)存管理單元)、ARM NEON通用SIMD(單指令多數(shù)據(jù))引擎。

        Step4:執(zhí)行platform_early_init()函數(shù)。如前所述,lk將每種具體型號的ARM處理器歸為一個平臺。platform_early_ init()函數(shù)對具體型號的處理器進(jìn)行初始化,包括設(shè)置時鐘、設(shè)置中斷向量、初始化定時器/串口/I2C總線控制器等。

        Step5:執(zhí)行target_early_init()、call_constructor()、heap_init()、thread_ init()、dpc_init()、timer_init()函數(shù),而target_early_init()沒有具體實(shí)現(xiàn)。

        Step6:執(zhí)行thread_resume(thread_ create(“bootstrap2”,&bootstr ap2, NULL,DEFAULT_PRIORITY,DEFAULT_STACK_SIZE)),即進(jìn)入引導(dǎo)第二階段,對架構(gòu)、平臺、目標(biāo)板進(jìn)行具體初始化,并裝載、引導(dǎo)內(nèi)核程序。

        2 Little Kernel移植

        從lk的源碼目錄和架構(gòu)組織思想可知,lk將不同體系架構(gòu)處理器相關(guān)的文件放在lkarch目錄下,目前主要支持ARM處理器,以后會逐步增加更多的處理器。而對于同一體系架構(gòu)處理器,不同廠家或者不同系列處理器又歸屬在不同的平臺之下,將某類處理器共用的代碼放在lkplatform目錄下。而對于采用特定處理器設(shè)計(jì)的目標(biāo)板,其相關(guān)代碼則放在lk arget下。同時在lkproject目錄下為相應(yīng)目標(biāo)板編寫頂層規(guī)則文件用于編譯lk。

        基于上述思想及對lk啟動流程的分析,為某個目標(biāo)板(簡稱board_xxx)進(jìn)行Little Kernel移植時可以遵循以下步驟:

        a、在lk源碼目錄中l(wèi)k arget下新建子目錄board_xxx,在父其目錄下找到與board_xxx采用相同處理器電路板(簡稱board_orig)的代碼,將board_orig的所有文件拷貝至目錄lk argetoard_xxx之下,以board_orig的代碼為基礎(chǔ)進(jìn)行修改。

        b、在lkproject目錄下為board_xxx建立頂層規(guī)則文件board_xxx.mk,向該文件添加目標(biāo)板的名稱、調(diào)試開關(guān)設(shè)置。

        c、修改lk argetoard_xxx目錄下的文件,這些文件包括編譯規(guī)則文件rules.mk,頭文件ddr.h,C文件atags.c、gpio.c、init_clock.c、init_memory.c、init.c。

        規(guī)則文件rules.mk中必須指明:采用的平臺、內(nèi)存基地址、內(nèi)存大小、目標(biāo)板硬件版本號、SDRAM控制器的類型、處理器型號、SDRAM芯片型號、顯示器型號、標(biāo)簽列表的地址、內(nèi)核的地址、RAMDISK的地址等。移植時只要修改目標(biāo)板硬件版本號,其他基本不用修改。

        頭文件ddr.h定義一些參數(shù)用于配置SDRAM,主要包括:物理SDRAM片數(shù)、邏輯SDRAM片數(shù)、最大速度、頁面大小、突發(fā)長度等等相關(guān)參數(shù)。倘若目標(biāo)板上采用的SDRAM在頭文件ddr.h沒有定義,則在頭文件增加該款SDRAM的參數(shù)定義,否則不用修改ddr.h。

        文件atags.c用于操作標(biāo)簽列表,而標(biāo)簽列表用于向內(nèi)核傳遞引導(dǎo)參數(shù)。移植時重點(diǎn)修改文件中的內(nèi)存信息、目標(biāo)板的版本號。

        文件gpio.c用于對目標(biāo)板上處理器的通用輸入/輸出端口進(jìn)行配置。lk啟動階段需要配置的端口不多,而大量的端口配置留待內(nèi)核啟動以后再進(jìn)行配置。lk需要配置的端口主要包括串行口、I2C總線接口、按鍵接口和相關(guān)的控制接口。

        文件init_clock.c用于對處理器的時鐘進(jìn)行初始化,一般不需要修改。

        文件init_memory.c中相關(guān)函數(shù)根據(jù)規(guī)則文件rules.mk中指明SDRAM芯片型號,查找頭文件ddr.h中定義的參數(shù),根據(jù)這些參數(shù)對處理器的SDRAM控制器進(jìn)行初始化、配置參數(shù),保證處理器能夠正確讀寫SDRAM。

        文件init.c中的主要函數(shù)是target_ init(),該函數(shù)用于對目標(biāo)板初始化,包括對鍵盤初始化、修改NAND Flash中的信息等。

        3 編譯與測試

        lk移植后需要進(jìn)行編譯并下載到目標(biāo)板上測試,驗(yàn)證移植后的lk能否正確引導(dǎo)linux內(nèi)核。本文的移植工作在基于TCC8801處理器的目標(biāo)板上進(jìn)行,TCC8801是Telechips公司生產(chǎn)的一款A(yù)RM Cortex-A8處理器,目標(biāo)板采用7英寸顯示屏,型號為AT070TN93,內(nèi)存采用DDR3,型號MT41J128M8JP-15E。編譯服務(wù)器采用浪潮塔式服務(wù)器NP3060,操作系統(tǒng)采用Ubuntu11.04-Server-64bit。編譯lk及測試過程如下所述:

        Step1:搭建編譯環(huán)境

        a、安裝必須的底層包,例如flex、bison、curl等工具軟件。

        b、安裝Java環(huán)境JDK,要求安裝Jdk1.6版本,并設(shè)置環(huán)境變量。

        c、安裝工具repo和git。

        d、利用repo工具下載android2.3-gingerbread源碼。

        e、 將開發(fā)板board_xxx相關(guān)代碼與android2.3-gingerbread源碼整合。

        Step2:編譯lk

        a、初始化編譯環(huán)境,使用命令source build/envsetup.sh。

        b、進(jìn)入lk目錄,將移植過的lk文件拷貝至lk目錄下相應(yīng)子目錄。

        c、從鍵盤輸入編譯命令make board_ xxx編譯lk并生成lk.rom文件。

        d、進(jìn)入linux目錄,編譯linux內(nèi)核,并生成zImage文件。

        Step3:下載

        a、準(zhǔn)備PC端燒錄環(huán)境。Telechips公司提供相應(yīng)的燒寫程序FWDN及驅(qū)動vtcdrv,在PC機(jī)上安裝驅(qū)動程序vtcdrv,并驗(yàn)證PC與開發(fā)板可連接。

        b、撥動TCC8801DEMO 板上的啟動方式設(shè)置開關(guān),使TCC8801處于USB啟動方式。

        c、打開FWDN軟件,將lk.rom及zImage寫入相應(yīng)NAND Flash分區(qū)。

        Step4:測試

        a、撥動TCC8801DEMO 板上的啟動方式設(shè)置開關(guān),使TCC8801處于NAND Flash啟動方式。

        b、加電啟動DEMO板,觀察LCD能否正常點(diǎn)亮并顯示logo圖標(biāo)。

        DEMO板加電后,lk引導(dǎo) kernel過程中向串口輸出的信息如下:

        以上信息反映出lk.rom能夠引導(dǎo)內(nèi)核,且LCD正確顯示logo圖標(biāo),說明按照本文移植方法生成的lk.rom是可用的。

        4 結(jié)語

        Little Kernel是一種小型的bootloader程序,代碼量小,便于移植與維護(hù),啟動速度快,多用于手機(jī)和平板電腦。本文通過對Little Kernel的源碼分析,給出具體的移植過程。測試結(jié)果表明移植過程和方法是正確的,能夠正確引導(dǎo)Linux內(nèi)核。

        [1]劉剛,趙建川.Linux系統(tǒng)移植[M].清華大學(xué)出版社, 2011.

        [2]楊紅濤等.嵌入式Linux系統(tǒng)實(shí)用開發(fā)[M].電子工業(yè)出版社, 2010.

        [3][EB/OL] http://baike.baidu.com/ view/1223454.htm.

        [4][EB/OL] https://www.codeaurora. org/2010/03/02/little-kernel-based-android-Bootloader.

        [5][EB/OL] http://blog.csdn.net/hankhanti/article/ details/6133570.

        Analysis and Porting of Little Kernel

        Yang Hao1, Wang Zhenyuan1, Meng Qingming2, Zhang Yanbin2
        1.ElectroniSc ciencea nd EngineerinNg,a njingU niversityo f Po ts and TelecommunicatJioiannsg, suN anjingC, hina;
        2.Communication and Information Engineering, Nanojfi nPgo sUtn ainvder Tseitlye communications, Jiangsu Nanjing, China

        The Little Kernel(lk)i s a Bootloadepr rogra m acceptedi nto the sourcet ree of Androids ystem. It is adoptebd y a variety of smart phoneas nd tablet PCs. In the paper, lk’s main functio ns are describeda, nd the structure of its sourc e codes is analyzed. The methoda nd process of portingo f lk are also describeAd.f ter compilinlkg and downloadtinog TCC8801 DEMO target board, the linux kernel can be started up correctly.

        TP311.54

        A

        10.3969/j.issn.1001-8972.2012.22.035

        江蘇省高校自然科學(xué)研究項(xiàng)目(09KJB510015)

        楊浩(1969-),男,講師,博士,主要研究方向?yàn)閳D像處理、嵌入式系統(tǒng)設(shè)計(jì)。

        猜你喜歡
        源碼內(nèi)核處理器
        基于網(wǎng)頁源碼結(jié)構(gòu)理解的自適應(yīng)爬蟲代碼生成方法
        基于圖神經(jīng)網(wǎng)絡(luò)的軟件源碼漏洞檢測方法
        萬物皆可IP的時代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
        強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
        企業(yè)如何保護(hù)源碼
        基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
        Linux內(nèi)核mmap保護(hù)機(jī)制研究
        基于數(shù)據(jù)結(jié)構(gòu)教輔系統(tǒng)的實(shí)驗(yàn)課程改革
        Imagination的ClearCallTM VoIP應(yīng)用現(xiàn)可支持Cavium的OCTEON? Ⅲ多核處理器
        ADI推出新一代SigmaDSP處理器
        汽車零部件(2014年1期)2014-09-21 11:41:11
        91中文人妻熟女乱又乱| 色播在线永久免费视频网站| 久久老子午夜精品无码怎么打| 中文字幕无码不卡一区二区三区| 久久久久久久妓女精品免费影院| 色人阁第四色视频合集网| 日本国产一区二区在线| 日本二区在线视频观看| 亚洲处破女av日韩精品中出| 亚洲av无码乱码精品国产| 妺妺窝人体色www看人体| 亚洲精品无码国产| av无码久久久久不卡网站下载| 黄色成人网站免费无码av| 2021年最新久久久视精品爱| 人人爽亚洲aⅴ人人爽av人人片 | 亚洲一区区| 一区=区三区国产视频| 日本二一三区免费在线| 狠狠色综合7777久夜色撩人| 国产精品无码av一区二区三区| 亚洲va在线∨a天堂va欧美va| 欧美色色视频| 久久久久久AV无码成人| 国产午夜三级精品久久久| 99国产精品久久99久久久| 国产av永久无码天堂影院| 亚洲欧美日韩综合久久| 亚洲性无码av在线| 日本一级二级三级在线| 手机在线免费观看的av| 国产午夜av秒播在线观看| 亚洲av无码乱码在线观看裸奔| 在线播放亚洲第一字幕| 亚洲成a人片在线观看导航| 日本经典中文字幕人妻| 久久久精品国产老熟女| 国产乱人精品视频av麻豆网站| 大地资源网高清在线播放| 男人扒开女人下面狂躁小视频| 日韩精品久久久中文字幕人妻|