• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Little Kernel分析與移植

      2012-10-27 02:40:34王正元孟慶民張艷彬
      中國(guó)科技信息 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)入源碼樹(shù)的Bootloader程序,并被多款智能手機(jī)和平板電腦所采用。論文介紹了lk的主要功能,分析了lk的源碼結(jié)構(gòu),并在此基礎(chǔ)上詳細(xì)說(shuō)明了lk移植的方法和過(guò)程。將移植后的lk進(jìn)行編譯并下載至TCC8801 DEMO板上,lk能夠正常啟動(dòng)并引導(dǎo)linux內(nèi)核。

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

      little kernel; embedded system; porting; tCC8801

      引言

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

      2]。

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

      a、支持多種NAND Flash啟動(dòng);

      b、提供USB驅(qū)動(dòng),支持開(kāi)發(fā)過(guò)程中通過(guò)USB升級(jí)image文件;

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

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

      e、支持多線程。

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

      1 Little Kernel 源碼分析

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

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

      表1

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

      lk啟動(dòng)流程如下[5]:

      Step1:從lk鏈接文件lkarcharm system-onesegment.ld可知,入口點(diǎn)在_ start。而_start在匯編語(yǔ)言文件crt0.S中,從_start跳轉(zhuǎn)到reset,開(kāi)始進(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將每種具體型號(hào)的ARM處理器歸為一個(gè)平臺(tái)。platform_early_ init()函數(shù)對(duì)具體型號(hào)的處理器進(jìn)行初始化,包括設(shè)置時(shí)鐘、設(shè)置中斷向量、初始化定時(shí)器/串口/I2C總線控制器等。

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

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

      2 Little Kernel移植

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

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

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

      b、在lkproject目錄下為board_xxx建立頂層規(guī)則文件board_xxx.mk,向該文件添加目標(biāo)板的名稱、調(diào)試開(kāi)關(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中必須指明:采用的平臺(tái)、內(nèi)存基地址、內(nèi)存大小、目標(biāo)板硬件版本號(hào)、SDRAM控制器的類(lèi)型、處理器型號(hào)、SDRAM芯片型號(hào)、顯示器型號(hào)、標(biāo)簽列表的地址、內(nèi)核的地址、RAMDISK的地址等。移植時(shí)只要修改目標(biāo)板硬件版本號(hào),其他基本不用修改。

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

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

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

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

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

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

      3 編譯與測(cè)試

      lk移植后需要進(jìn)行編譯并下載到目標(biāo)板上測(cè)試,驗(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英寸顯示屏,型號(hào)為AT070TN93,內(nèi)存采用DDR3,型號(hào)MT41J128M8JP-15E。編譯服務(wù)器采用浪潮塔式服務(wù)器NP3060,操作系統(tǒng)采用Ubuntu11.04-Server-64bit。編譯lk及測(cè)試過(guò)程如下所述:

      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、 將開(kāi)發(fā)板board_xxx相關(guān)代碼與android2.3-gingerbread源碼整合。

      Step2:編譯lk

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

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

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

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

      Step3:下載

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

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

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

      Step4:測(cè)試

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

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

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

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

      4 結(jié)語(yǔ)

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

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

      [2]楊紅濤等.嵌入式Linux系統(tǒng)實(shí)用開(kāi)發(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)頁(yè)源碼結(jié)構(gòu)理解的自適應(yīng)爬蟲(chóng)代碼生成方法
      基于圖神經(jīng)網(wǎng)絡(luò)的軟件源碼漏洞檢測(cè)方法
      萬(wàn)物皆可IP的時(shí)代,我們當(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處理器
      米易县| 女性| 荥经县| 京山县| 集安市| 和政县| 博湖县| 茂名市| 丰台区| 沂源县| 伊宁县| 沙坪坝区| 安徽省| 新龙县| 尼勒克县| 石楼县| 偃师市| 福贡县| 肇源县| 东平县| 惠来县| 石屏县| 新晃| 晋中市| 岢岚县| 苏尼特左旗| 江津市| 昌江| 陇西县| 同仁县| 石屏县| 泰来县| 临江市| 安国市| 太保市| 福贡县| 托克逊县| 易门县| 铁力市| 正镶白旗| 报价|