999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Little Kernel分析與移植

2012-10-27 02:40:34王正元孟慶民張艷彬
中國(guó)科技信息 2012年22期

楊 浩 王正元 孟慶民 張艷彬

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ì)。

主站蜘蛛池模板: 岛国精品一区免费视频在线观看| 99er精品视频| 91欧美亚洲国产五月天| 国产精品第页| 亚洲IV视频免费在线光看| 2020最新国产精品视频| 国产精品成人AⅤ在线一二三四| 亚洲欧美日韩中文字幕一区二区三区| 精品久久久无码专区中文字幕| 久久久精品国产SM调教网站| 美女视频黄频a免费高清不卡| 丝袜高跟美脚国产1区| 亚洲AⅤ波多系列中文字幕| 亚洲欧美另类久久久精品播放的| a欧美在线| 国产免费a级片| 在线免费无码视频| 国产在线精彩视频二区| 亚洲制服中文字幕一区二区| 亚洲天堂.com| 久久综合婷婷| 欧美三级自拍| 亚洲午夜福利在线| 亚洲中文字幕日产无码2021| 国产在线97| 日韩区欧美区| 精品国产91爱| 四虎国产在线观看| 国产成人综合久久精品尤物| 国内精品视频| 日韩欧美一区在线观看| 成人一区在线| 日韩高清成人| 网友自拍视频精品区| 免费视频在线2021入口| 青青久视频| 自拍欧美亚洲| 国产黑丝一区| 99久久99视频| 国产精品视频a| 二级特黄绝大片免费视频大片| 夜夜爽免费视频| 国产成人精品亚洲77美色| 92午夜福利影院一区二区三区| 日韩欧美网址| 亚洲va在线观看| 国内精品九九久久久精品| 亚卅精品无码久久毛片乌克兰| 日本欧美一二三区色视频| 国产91九色在线播放| 国产午夜无码专区喷水| 日韩视频精品在线| 日韩东京热无码人妻| 国产成人免费高清AⅤ| 亚洲欧美日韩色图| 国产欧美日韩综合一区在线播放| 国产另类视频| 欧美日韩亚洲综合在线观看| 尤物视频一区| 久久激情影院| 欧美亚洲国产一区| 无码网站免费观看| 国产杨幂丝袜av在线播放| 国产精品美女自慰喷水| 91区国产福利在线观看午夜 | 午夜国产小视频| 日本国产精品| 国模私拍一区二区| 日韩av资源在线| 一级毛片无毒不卡直接观看| 亚洲欧美色中文字幕| 天堂成人av| 国产丝袜无码一区二区视频| 找国产毛片看| 国产午夜看片| 久久婷婷五月综合色一区二区| 在线免费不卡视频| 亚洲乱强伦| 日韩欧美中文在线| 国产又黄又硬又粗| 九九热在线视频| 国产69精品久久|