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

Little Kernel分析與移植

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

楊 浩 王正元 孟慶民 張艷彬

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

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

Little Kernel分析與移植

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

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

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

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

Little Kernel;嵌入式系統;移植;TCC8801

little kernel; embedded system; porting; tCC8801

引言

近年來,ARM Cortex-A8高性能處理器被廣泛應用于智能手機、平板電腦等設備。而這些嵌入式系統啟動時需要bootloader程序,所謂bootloader是在操作系統內核運行前執行的一小段程序。這段程序負責完成對硬件設備的基本初始化,創建某些必要信息通過相關機制傳遞給內核,引導和加載內核,并最終調用操作系統內核[1-

2]。

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

a、支持多種NAND Flash啟動;

b、提供USB驅動,支持開發過程中通過USB升級image文件;

c、提供鍵盤驅動,支持開發人員進入fastboot模式升級image文件;

d、提供顯示驅動用于調試和點亮顯示屏;

e、支持多線程。

Little Kernel不僅代碼量小、運行耗時少,更為重要的特點是代碼可維護性好。在Little Kernel架構中將處理器芯片歸為平臺,對于使用同一芯片的不同目標板則對于不同的目標[4]。

1 Little Kernel 源碼分析

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

lk的目錄結構如表1所示。

表1

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

lk啟動流程如下[5]:

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

Step2:進入kmain()函數后,首先執行thread_init_early()函數。Lk支持多線程,因此需要該函數進行相關初始化,例如,初始化線程隊列,初始化線程列表,創建運行線程等。

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

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

Step5:執行target_early_init()、call_constructor()、heap_init()、thread_ init()、dpc_init()、timer_init()函數,而target_early_init()沒有具體實現。

Step6:執行thread_resume(thread_ create(“bootstrap2”,&bootstr ap2, NULL,DEFAULT_PRIORITY,DEFAULT_STACK_SIZE)),即進入引導第二階段,對架構、平臺、目標板進行具體初始化,并裝載、引導內核程序。

2 Little Kernel移植

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

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

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

b、在lkproject目錄下為board_xxx建立頂層規則文件board_xxx.mk,向該文件添加目標板的名稱、調試開關設置。

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

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

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

文件atags.c用于操作標簽列表,而標簽列表用于向內核傳遞引導參數。移植時重點修改文件中的內存信息、目標板的版本號。

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

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

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

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

3 編譯與測試

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

Step1:搭建編譯環境

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

b、安裝Java環境JDK,要求安裝Jdk1.6版本,并設置環境變量。

c、安裝工具repo和git。

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

e、 將開發板board_xxx相關代碼與android2.3-gingerbread源碼整合。

Step2:編譯lk

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

b、進入lk目錄,將移植過的lk文件拷貝至lk目錄下相應子目錄。

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

d、進入linux目錄,編譯linux內核,并生成zImage文件。

Step3:下載

a、準備PC端燒錄環境。Telechips公司提供相應的燒寫程序FWDN及驅動vtcdrv,在PC機上安裝驅動程序vtcdrv,并驗證PC與開發板可連接。

b、撥動TCC8801DEMO 板上的啟動方式設置開關,使TCC8801處于USB啟動方式。

c、打開FWDN軟件,將lk.rom及zImage寫入相應NAND Flash分區。

Step4:測試

a、撥動TCC8801DEMO 板上的啟動方式設置開關,使TCC8801處于NAND Flash啟動方式。

b、加電啟動DEMO板,觀察LCD能否正常點亮并顯示logo圖標。

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

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

4 結語

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

[1]劉剛,趙建川.Linux系統移植[M].清華大學出版社, 2011.

[2]楊紅濤等.嵌入式Linux系統實用開發[M].電子工業出版社, 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

江蘇省高校自然科學研究項目(09KJB510015)

楊浩(1969-),男,講師,博士,主要研究方向為圖像處理、嵌入式系統設計。

主站蜘蛛池模板: 国产日韩丝袜一二三区| 夜夜操国产| 欧美一级在线看| 国产成人亚洲无码淙合青草| 日韩美一区二区| 国产成人精品综合| 久久99国产乱子伦精品免| 免费观看成人久久网免费观看| 欧美一级在线| 亚洲欧美激情小说另类| 国产亚洲精品在天天在线麻豆| 丰满人妻中出白浆| 国产欧美日韩18| 精品少妇人妻av无码久久| 久久这里只有精品66| 亚洲成人播放| 亚洲国产中文在线二区三区免| 国产最爽的乱婬视频国语对白| 国产亚洲精品91| 国产精品视频a| 亚洲成人动漫在线观看| 亚洲AV人人澡人人双人| 亚洲91精品视频| 无码一区二区三区视频在线播放| 国产精品欧美激情| 国产成人你懂的在线观看| 久久国产高清视频| 精品视频在线观看你懂的一区 | 亚洲人精品亚洲人成在线| 四虎影视国产精品| 亚洲AV无码乱码在线观看代蜜桃| 无码中字出轨中文人妻中文中| 亚洲精品福利网站| 2021天堂在线亚洲精品专区 | 丰满人妻被猛烈进入无码| 91色爱欧美精品www| 亚洲第一色视频| 天堂成人av| 欧美日韩午夜| AV不卡国产在线观看| 有专无码视频| 国语少妇高潮| 99精品视频在线观看免费播放| 在线国产你懂的| 欧美成人A视频| 91香蕉国产亚洲一二三区| 干中文字幕| 国产喷水视频| 久热中文字幕在线| 国产乱码精品一区二区三区中文| a级毛片免费网站| 一级毛片在线播放免费观看 | Jizz国产色系免费| 亚洲人成网站在线播放2019| 成人国产精品网站在线看| 欧美综合成人| 99热这里只有精品在线观看| 玖玖免费视频在线观看| 伊人成人在线| 露脸一二三区国语对白| 一区二区三区四区日韩| 日韩人妻少妇一区二区| 东京热高清无码精品| 国产微拍一区二区三区四区| 国产成+人+综合+亚洲欧美| 四虎国产精品永久在线网址| 国产成人精品午夜视频'| 国产伦精品一区二区三区视频优播| 99久久精彩视频| 亚洲午夜国产精品无卡| 国产呦精品一区二区三区下载| julia中文字幕久久亚洲| 亚洲色图在线观看| 91精品aⅴ无码中文字字幕蜜桃| 亚洲AV电影不卡在线观看| 久久久久久高潮白浆| 亚洲美女一区二区三区| 亚洲av无码人妻| 国产区在线观看视频| 在线观看免费黄色网址| 国产杨幂丝袜av在线播放| 性欧美精品xxxx|