![北航國(guó)家課程嵌入式系統(tǒng)-實(shí)驗(yàn)3 linux內(nèi)核在arm平臺(tái)上的移植_第1頁(yè)](http://file4.renrendoc.com/view/8cebb431e87b610be280b67c7293e6af/8cebb431e87b610be280b67c7293e6af1.gif)
![北航國(guó)家課程嵌入式系統(tǒng)-實(shí)驗(yàn)3 linux內(nèi)核在arm平臺(tái)上的移植_第2頁(yè)](http://file4.renrendoc.com/view/8cebb431e87b610be280b67c7293e6af/8cebb431e87b610be280b67c7293e6af2.gif)
![北航國(guó)家課程嵌入式系統(tǒng)-實(shí)驗(yàn)3 linux內(nèi)核在arm平臺(tái)上的移植_第3頁(yè)](http://file4.renrendoc.com/view/8cebb431e87b610be280b67c7293e6af/8cebb431e87b610be280b67c7293e6af3.gif)
![北航國(guó)家課程嵌入式系統(tǒng)-實(shí)驗(yàn)3 linux內(nèi)核在arm平臺(tái)上的移植_第4頁(yè)](http://file4.renrendoc.com/view/8cebb431e87b610be280b67c7293e6af/8cebb431e87b610be280b67c7293e6af4.gif)
![北航國(guó)家課程嵌入式系統(tǒng)-實(shí)驗(yàn)3 linux內(nèi)核在arm平臺(tái)上的移植_第5頁(yè)](http://file4.renrendoc.com/view/8cebb431e87b610be280b67c7293e6af/8cebb431e87b610be280b67c7293e6af5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
LINUX內(nèi)核在arm平臺(tái)上的移植牛建偉鄒琪嵌入式系統(tǒng)課程——實(shí)驗(yàn)三實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)內(nèi)容BootloaderLinux內(nèi)核實(shí)驗(yàn)步驟實(shí)驗(yàn)?zāi)康牧私鈈ootloader及其作用,了解Linux內(nèi)核結(jié)構(gòu)。掌握配置和編譯Linux系統(tǒng)內(nèi)核的方法以及移植嵌入式Linux的基本步驟。實(shí)驗(yàn)內(nèi)容在Linux系統(tǒng)的宿主PC下,修改裁減內(nèi)核源碼,編譯生成bootloader、內(nèi)核映像和根文件系統(tǒng)。在Windows系統(tǒng)的宿主PC下,燒寫bootloader、內(nèi)核映像和根文件系統(tǒng)。(帶U盤)嵌入式Linux系統(tǒng)構(gòu)成引導(dǎo)加載程序(armboot,blob,redboot,vivi,U-Boot)啟動(dòng)加載模式(正常工作模式),下載模式內(nèi)核文件系統(tǒng)用戶應(yīng)用程序(有時(shí)還包括嵌入式圖形用戶界面)內(nèi)核根文件系統(tǒng)Bootloader啟動(dòng)參數(shù)Bootloader介紹引導(dǎo)加載程序bootloader是系統(tǒng)加電后運(yùn)行的第一段代碼,它完成整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)。在基于ARM的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)通常都從地址0x00000000處開始執(zhí)行,而在這個(gè)地址處放的通常就是系統(tǒng)的bootloader。通過(guò)這段小程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。Bootloader的啟動(dòng)流程第一個(gè)階段主要包括依賴于CPU的體系結(jié)構(gòu)硬件初始化的代碼,通常用匯編語(yǔ)言實(shí)現(xiàn)。這個(gè)階段的任務(wù)有:◆基本的硬件設(shè)備初始化(屏蔽所有中斷、關(guān)閉處理器內(nèi)部指令/數(shù)據(jù)cache等)◆為第二階段準(zhǔn)備RAM空間◆如果是從某個(gè)固態(tài)存儲(chǔ)媒質(zhì)中,則復(fù)制Bootloader的第二階段代碼到RAM◆設(shè)置堆棧◆跳轉(zhuǎn)到第二階段的C程序入口點(diǎn)第二個(gè)階段通常用C語(yǔ)言完成,以便實(shí)現(xiàn)更復(fù)雜的功能,也使程序有更好的可讀性和移植性。這個(gè)階段的任務(wù)有:◆初始化本階段要使用到的硬件設(shè)備◆檢測(cè)系統(tǒng)內(nèi)存映射◆將內(nèi)核映像和根文件系統(tǒng)映像從flash讀到RAM◆為內(nèi)核設(shè)置啟動(dòng)參數(shù)◆啟動(dòng)內(nèi)核(將控制交給內(nèi)核)Linux內(nèi)核介紹目前專門針對(duì)嵌入式設(shè)備的Linux改版有針對(duì)無(wú)MMU的uClinux和針對(duì)有MMU的標(biāo)準(zhǔn)Linux在各硬件體系結(jié)構(gòu)上的移植版本。uClinux是通過(guò)對(duì)標(biāo)準(zhǔn)Linux內(nèi)核裁減,去除虛擬內(nèi)存管理部分的代碼,并對(duì)內(nèi)存分配進(jìn)行優(yōu)化,從而達(dá)到提高系統(tǒng)運(yùn)行效率的目的。因此uClinux的應(yīng)用程序開發(fā)要求用戶自己正確的處理內(nèi)存管理,一旦錯(cuò)誤地修改了其他進(jìn)程的內(nèi)存,將可能造成系統(tǒng)死機(jī)?;谙馎RM2410這樣的ARM9內(nèi)核的ARM-Linux使用了MMU的內(nèi)存管理,對(duì)進(jìn)程有保護(hù),提高了嵌入式系統(tǒng)中多進(jìn)程的保護(hù)能力。使用戶應(yīng)用程序的可靠性得以提高,降低了用戶的開發(fā)難度。Linux內(nèi)核結(jié)構(gòu)/arch目錄,包含了體系結(jié)構(gòu)相關(guān)部分的內(nèi)核代碼,如i386arm等平臺(tái),而每個(gè)平臺(tái)又包括以下幾個(gè)目錄:boot:包括啟動(dòng)內(nèi)核所用的部分或全部代碼
kernel:存放支持體系結(jié)構(gòu)特有的特征的實(shí)現(xiàn)lib:存放高速的體現(xiàn)結(jié)構(gòu)特有的通用函數(shù)的實(shí)現(xiàn)
mm:存放體系結(jié)構(gòu)特有的內(nèi)存管理程序的實(shí)現(xiàn)/drivers目錄,保存了內(nèi)核中所有設(shè)備驅(qū)動(dòng)程序。/fs目錄,列出了Linux支持的所有文件系統(tǒng)的代碼,如ntfsext3和yaffs等/include目錄,包括編譯核心所需要的大部分頭文件,例如與平臺(tái)無(wú)關(guān)的頭文件在include/linux子目錄下。不同的平臺(tái)需要的頭文件會(huì)有所不同,因此該目錄和arch目錄一樣,按平臺(tái)劃分多個(gè)子目錄,如asm-arm是arm平臺(tái)的。Linux內(nèi)核結(jié)構(gòu)(續(xù))/init目錄,包含了內(nèi)核的初始化代碼,有
兩個(gè)文件。/ipc目錄,包含了核心進(jìn)程間的通信代碼。/kernel目錄,內(nèi)核管理的核心代碼在此,與處理器結(jié)構(gòu)相關(guān)的代碼都在arch/*/kernel目錄下。/lib目錄,包括與平臺(tái)無(wú)關(guān)的通用函數(shù)。/mm目錄,包含了所有的內(nèi)存管理代碼。與具體硬件體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于arch/*/kernel目錄下。/net目錄,里面是核心的網(wǎng)絡(luò)部分代碼,其每個(gè)子目錄對(duì)應(yīng)于網(wǎng)絡(luò)的一個(gè)方面。其他目錄,Documentation目錄存放了許多文檔。scripts目錄存放配置內(nèi)核的一些腳本文件。Linux內(nèi)核移植1Linux內(nèi)核的移植主要包含啟動(dòng)代碼的修改,內(nèi)核的鏈接及裝入,參數(shù)傳遞,內(nèi)核引導(dǎo)幾個(gè)部分。我們?cè)谝浦补ぷ髦幸膭?dòng)的代碼主要集中在與體系結(jié)構(gòu)相關(guān)部分。在/arch/arm/boot/bootp目錄中,有個(gè)的ARM匯編文件,它就是引導(dǎo)Linux內(nèi)核在arm平臺(tái)上啟動(dòng)的初始化代碼。它里面定義了一個(gè)全局符號(hào)_start,它定義了默認(rèn)的起始地址,同時(shí)它也是整體內(nèi)核二進(jìn)制鏡像的起始標(biāo)志。主要完成以下功能:◆定義數(shù)據(jù)、代碼段、bbs(未初始化數(shù)據(jù)段)起始地址變量并對(duì)bbs段初始化◆設(shè)置寄存器以初始化系統(tǒng)硬件◆關(guān)閉中斷◆初始化LCD顯示◆將數(shù)據(jù)段復(fù)制到內(nèi)存◆跳轉(zhuǎn)到內(nèi)核起始函數(shù)start_kernel繼續(xù)執(zhí)行◆對(duì)主寄存器的修改/****Copyright(C)2000RussellKing**Thisprogramisfreesoftware;youcanredistributeitand/ormodify*itunderthetermsoftheGNUGeneralPublicLicenseversion2as*publishedbytheFreeSoftwareFoundation.**Headerfileforsplittingkernel+initrd.Notethatwepass*r0throughtor3straightthrough.*/ .section.start,#alloc,#execinstr .type _entry,#function_entry: adr r10,initdata ldr r11,initdata sub r11,r10,r11 @workoutexecoffset b splitify .size _entry,.-_entry .type initdata,#objectinitdata: .word initdata @compiledaddressofthis .size initdata,.-initdata .textsplitify: adr r13,data ldmia r13!,{r4-r6} @movetheinitrd add r4,r4,r11 @correction bl move ldmia r13!,{r4-r6} @thenthekernel mov r12,r5 add r4,r4,r11 @correction bl move/**Setuptheinitrdparameterstopasstothekernel.Thiscaneitherbe*passedinviaaparam_structorataglist.Wespottheparam_struct*methodbylookingatthefirstword;thisshouldeitherindicateapage*sizeof4K,16Kor32K.*/ ldmia r13,{r4-r8} @getsizeandaddrofinitrd @r5=ATAG_INITRD @r6=initrdstart @r7=initrdend @r8=param_structaddress ldr r9,[r8,#0] @noparamstruct? teq r9,#0x1000 @4K? teqne r9,#0x4000 @16K? teqne r9,#0x8000 @32K? beq param_struct ldr r9,[r8,#4] @getfirsttag teq r9,r4 bne taglist @ok,wehaveataglist/**Wedidn'tfindavalidtaglist-createone.*/ str r4,[r8,#4] mov r4,#8 str r4,[r8,#0] mov r4,#0 str r4,[r8,#8]/**findtheendofthetaglist,andthenaddanINITRDtagontheend.*IfthereisalreadyanINITRDtag,thenweignoreit;thelastINITRD*tagtakesprecidence.*/taglist: ldr r9,[r8,#0] @taglength teq r9,#0 @lasttag? addne r8,r8,r9 bne taglist mov r4,#16 @lengthofinitrdtag mov r9,#0 @endoftaglistterminator stmia r8,{r4,r5,r6,r7,r9} mov pc,r12 @callkernel/**Wefoundaparamstruct.Modifytheparamstructfortheinitrd*/param_struct: add r8,r8,#16*4 stmia r8,{r6,r7} @saveinparam_struct mov pc,r12 @callkernelmove: ldmia r4!,{r7-r10} @move32-bytesatatime stmia r5!,{r7-r10} ldmia r4!,{r7-r10} stmia r5!,{r7-r10} subs r6,r6,#8*4 bcs move mov pc,lrdata: .word initrd_start .word initrd_addr .word initrd_len .word kernel_start .word kernel_addr .word kernel_len .word 0x54410001 @r4=ATAG_CORE .word 0x54420005 @r5=ATAG_INITRD .word initrd_addr @r6 .word initrd_len @r7 .word params @r8 .type kernel_start,#object .type initrd_start,#objectLinux內(nèi)核移植2修改根目錄下的Makefile,指定目標(biāo)平臺(tái)和交叉編譯器ARCH:=arm
CROSS_COMPILE=/opt/host/armv4l/bin/armv4l-unknown-linux-修改/arch/arm下的Makefile,手動(dòng)增加下面內(nèi)容:ifeq($(CONFIG_ARCH_S3C2410),y)TEXTADDR =0xC0008000MACHINE =s3c2410endif
TEXTADDR決定內(nèi)核起始運(yùn)行地址,從0xC0008000開始32M的空間修改/arch/arm下,makemenuconfig菜單中,在版本內(nèi)核中沒(méi)有S3C2410處理器,需要加相關(guān)信息:if["$CONFIG_ARCH_S3C2410"="y"];thencomment'S3C2410Implementation'dep_bool'SMDK(MERITECHBOARD)'CONFIG_S3C2410_SMDK$CONFIG_ARCH_S3C2410
"$CONFIG_ARCH_S3C2400"="y"-o"$CONFIG_ARCH_S3C2410"="y"-o\Linux內(nèi)核移植3還有以下文件需要修改,具體細(xì)節(jié)在此不一一列出,請(qǐng)查閱相關(guān)資料arch/arm/boot/Makefilearch/arm/boot/compressed/Makefilearch/arm/def-configs目錄中復(fù)制配置好的config文件arch/arm/kernel/Makefilearch/arm/kernel/debug-arch/arm/kernel/entry-arch/arm/kernel/arch/arm/mm/mm-arch/arm/math-s3c2410目錄在版內(nèi)核中沒(méi)有,這里都是C語(yǔ)言編寫的程序,是用戶自己添加的有關(guān)開放板上USB、電源管理等功能的相關(guān)代碼。實(shí)驗(yàn)步驟1以下步驟在Linux下完成◆將所需文件copy到工作目錄
[m@RHEL~]$cp-r/arm2410s/exp/bootloader//root/embedded◆編譯生成bootloadervivi在/exp/bootloader/vivi/目錄下包含有vivi的源文件在終端下鍵入makemenuconfig,出現(xiàn)vivi的配置菜單,可根據(jù)實(shí)際情況對(duì)vivi的功能進(jìn)行添加修改,默認(rèn)的是適合本開發(fā)板的。然后鍵入make命令,會(huì)自動(dòng)在當(dāng)前目錄下生成可用的bootloader文件vivi實(shí)驗(yàn)步驟2◆裁減Linux內(nèi)核進(jìn)入源代碼所在的/root/embedded/kernel-2410s/目錄在終端下鍵入makemenuconfig,出現(xiàn)內(nèi)核配置菜單,可根據(jù)實(shí)際情況對(duì)內(nèi)核的功能進(jìn)行添加修改,默認(rèn)的是針對(duì)本開發(fā)板定制的選項(xiàng)。為了配合下次驅(qū)動(dòng)程序的實(shí)驗(yàn),在配置內(nèi)核時(shí),請(qǐng)將觸摸屏驅(qū)動(dòng)的選項(xiàng)設(shè)置為[M],在makemenuconfig中位置如下:
Characterdevices>Mice>
<M>UP-NETARM2410touchscreenforADS7843support實(shí)驗(yàn)步驟3◆編譯Linux內(nèi)核在./kernel-2410s/目錄下,執(zhí)行以下幾條命令:makeclean這條命令是在正式編譯內(nèi)核之前把環(huán)境清理干凈,保證沒(méi)有不正確的.o文件存在。makedep這條命令是編譯相關(guān)依賴文件makezImage這條命令就是最終的編譯命令。生成的內(nèi)核文件zImage將會(huì)在/kernel-2410s/arch/arm/boot/目錄下實(shí)驗(yàn)步驟4◆編譯生成根文件系統(tǒng)首先將,/root/embedded/develop//目錄下面的兩個(gè)文件mkcramfs和拷貝到/develop/目錄下。然后,將/develop/目錄下的文件解壓 tarjxf 在/root/embedded/develop/目錄下生成了一個(gè)名為root的目錄在/root/embedded/下建立img目錄來(lái)存放將會(huì)生成的文件在/root/embedded/develop/目錄下執(zhí)行命令./,生成根文件系統(tǒng)為/root/embedded/img/目錄下的。實(shí)驗(yàn)步驟5以下步驟在windows下完成◆格式化flash首先將步驟1至4生成的文件vivi、zImage和通過(guò)局域網(wǎng)samba服務(wù)器或U盤傳到旁邊的windows主機(jī)下,將此臺(tái)PC通過(guò)串口和開發(fā)板相連。Samba服務(wù)器的使用和網(wǎng)上鄰居類似將redhat的IP地址改到網(wǎng)段[root@RHEL~]ifconfigeth0add192.168.1.$機(jī)器號(hào)打開超級(jí)終端,設(shè)置好相關(guān)參數(shù):波特率為115200,數(shù)據(jù)位8,無(wú)奇偶校驗(yàn),停止位為1,無(wú)數(shù)據(jù)流控制。啟動(dòng)開發(fā)板,按除了Enter外的任意鍵進(jìn)入vivi,按照以下命令格式化flash,重新分區(qū)。-注意下面的數(shù)字
vivi>bonpart0128k192k1216k4288k:m64704k實(shí)驗(yàn)步驟6◆燒寫vivi這時(shí)已格式化flash,運(yùn)行的是RAM中的vivi,注意不要重啟或斷電丟失數(shù)據(jù),否則會(huì)造成無(wú)法啟動(dòng)開發(fā)板。在超級(jí)終端下輸入:vivi>loadflashvivix回車此時(shí)超級(jí)終端提示:ReadyfordownloaddingusingxmodemWaiting…$$$點(diǎn)擊超級(jí)終端任務(wù)欄上“傳送”下拉菜單中的“發(fā)送文件”,選擇Xmodem,選擇鏡像文件vivi,點(diǎn)擊“發(fā)送”。燒寫完成后,可以重啟開發(fā)板,重新進(jìn)入新的vivi>來(lái)燒寫kernel和root了。實(shí)驗(yàn)步驟7◆燒寫內(nèi)核映像zImage在超級(jí)終端下輸入:vivi>loadflashkernelx回車此時(shí)超
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小區(qū)兩間門面租賃合同
- 單位向私人借款合同書
- 國(guó)際空運(yùn)運(yùn)輸代理合同
- 風(fēng)險(xiǎn)管理與應(yīng)對(duì)策略制定作業(yè)指導(dǎo)書
- 2025年泰安考從業(yè)資格證貨運(yùn)試題
- 小學(xué)三年級(jí),五年級(jí)下冊(cè)數(shù)學(xué)口算題比賽試卷
- 小學(xué)二年級(jí)數(shù)學(xué)萬(wàn)以內(nèi)口算題
- 2025年北京交通運(yùn)輸從業(yè)資格證怎樣考試
- 2025年西藏貨運(yùn)從業(yè)資格證模擬考試系統(tǒng)
- 2025年烏蘭察布下載貨運(yùn)從業(yè)資格證模擬考試題
- 2024年同等學(xué)力人員申請(qǐng)碩士學(xué)位英語(yǔ)試卷與參考答案
- 臨床用血管理培訓(xùn)
- 介入手術(shù)室護(hù)理風(fēng)險(xiǎn)
- 小學(xué)一年級(jí)數(shù)學(xué)20以內(nèi)的口算題(可直接打印A4)
- 春季安全行車教育培訓(xùn)
- 2024年6月第3套英語(yǔ)六級(jí)真題
- 2024年江蘇省公務(wù)員錄用考試《行測(cè)》題(A類)
- 2024年10月時(shí)政100題(附答案)
- 江蘇省無(wú)錫市2024年中考數(shù)學(xué)試卷(含答案)
- 2024年保密知識(shí)測(cè)試試題及答案(奪冠)
- 北師大版八年級(jí)下冊(cè)因式分解(分組分解法)100題及答案
評(píng)論
0/150
提交評(píng)論