国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Little Kernel分析與移植

2012-10-27 02:40王正元孟慶民張艷彬
中國(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)入源碼樹的Bootloader程序,并被多款智能手機(jī)和平板電腦所采用。論文介紹了lk的主要功能,分析了lk的源碼結(jié)構(gòu),并在此基礎(chǔ)上詳細(xì)說明了lk移植的方法和過程。將移植后的lk進(jìn)行編譯并下載至TCC8801 DEMO板上,lk能夠正常啟動(dòng)并引導(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)啟動(dòng)時(shí)需要bootloader程序,所謂bootloader是在操作系統(tǒng)內(nèi)核運(yùn)行前執(zhí)行的一小段程序。這段程序負(fù)責(zé)完成對(duì)硬件設(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啟動(dòng);

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

c、提供鍵盤驅(qū)動(dòng),支持開發(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在匯編語言文件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將每種具體型號(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()沒有具體實(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)之下,將某類處理器共用的代碼放在lkplatform目錄下。而對(duì)于采用特定處理器設(shè)計(jì)的目標(biāo)板,其相關(guān)代碼則放在lk arget下。同時(shí)在lkproject目錄下為相應(yīng)目標(biāo)板編寫頂層規(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)試開關(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控制器的類型、處理器型號(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ù)、最大速度、頁面大小、突發(fā)長(zhǎng)度等等相關(guān)參數(shù)。倘若目標(biāo)板上采用的SDRAM在頭文件ddr.h沒有定義,則在頭文件增加該款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ù),保證處理器能夠正確讀寫SDRAM。

文件init.c中的主要函數(shù)是target_ init(),該函數(shù)用于對(duì)目標(biāo)板初始化,包括對(duì)鍵盤初始化、修改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è)試過程如下所述:

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ū)動(dòng)vtcdrv,在PC機(jī)上安裝驅(qū)動(dòng)程序vtcdrv,并驗(yàn)證PC與開發(fā)板可連接。

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

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

Step4:測(cè)試

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

b、加電啟動(dòng)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ù),啟動(dòng)速度快,多用于手機(jī)和平板電腦。本文通過對(duì)Little Kernel的源碼分析,給出具體的移植過程。測(cè)試結(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)核處理器
多內(nèi)核操作系統(tǒng)綜述①
面向數(shù)據(jù)可靠傳輸?shù)母咦g碼率帶反饋的LT碼
強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
國(guó)內(nèi)一站式工程設(shè)備租賃平臺(tái)眾能聯(lián)合完成C2、C3兩輪融資
活化非遺文化 承啟設(shè)計(jì)內(nèi)核
淺談開源操作系統(tǒng)的歷史
企業(yè)如何保護(hù)源碼
微軟發(fā)布新Edge瀏覽器預(yù)覽版下載換裝Chrome內(nèi)核
ADI推出新一代SigmaDSP處理器
火線熱訊
新兴县| 延长县| 滦平县| 昌平区| 哈密市| 稻城县| 广宁县| 普陀区| 册亨县| 方山县| 阳西县| 遂宁市| 岗巴县| 太原市| 大洼县| 肇州县| 大田县| 麻城市| 拉萨市| 阳新县| 都昌县| 慈溪市| 论坛| 射洪县| 肥西县| 隆尧县| 大冶市| 南和县| 万盛区| 洞口县| 正蓝旗| 巫溪县| 贵德县| 尤溪县| 明星| 海安县| 祁连县| 任丘市| 奈曼旗| 彭阳县| 象州县|