版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGEPAGE7嵌入式linux開發(fā)技術(shù)摘要:本文介紹了一種現(xiàn)在嵌入式linux環(huán)境下開發(fā)的通用方法,其硬件開發(fā)環(huán)境是基于ARM處理器。闡述了交叉編譯工具搭建、系統(tǒng)移植、設(shè)備驅(qū)動(dòng)移植、內(nèi)核補(bǔ)丁、網(wǎng)絡(luò)調(diào)試文件系統(tǒng)、根文件系統(tǒng)制作方法以及啟動(dòng)環(huán)境參數(shù)設(shè)置。關(guān)鍵詞:嵌入式;linux;移植;ARM0引言嵌入式linux是將日益流行的Linux操作系統(tǒng)進(jìn)行裁剪修改,使之能在嵌入式計(jì)算機(jī)系統(tǒng)上運(yùn)行的一種操作系統(tǒng)。嵌入式linux既繼承了Internet上開放的源代碼資源,又具有嵌入式操作系統(tǒng)的特性。嵌入式Linux的特點(diǎn)是版權(quán)費(fèi)免費(fèi),購(gòu)買費(fèi)用、媒介、成本、技術(shù)支持由全世界的自由軟件開發(fā)者提供,支持網(wǎng)絡(luò)免費(fèi)特性,而且性能優(yōu)異,軟件移植容易,代碼開放,有許多應(yīng)用軟件支持,應(yīng)用產(chǎn)品開發(fā)周期短,新產(chǎn)品上市迅速,因?yàn)橛性S多公開的代碼可以參考和移植,那么,如何真正移植和使用嵌入式linux?本文從實(shí)際角度闡述了一種現(xiàn)在通用的嵌入式linux開發(fā)環(huán)境的搭建方法。1系統(tǒng)總體框架圖1系統(tǒng)總體框圖圖1系統(tǒng)總體框圖*指導(dǎo)教師:劉偉(19xx-),男,吉林xx人,吉林化工學(xué)院講師,主要從事單片機(jī)應(yīng)用、自動(dòng)控制、信號(hào)檢測(cè)等方面的研究.聯(lián)系方式:0432-xxxxxxx.系統(tǒng)總體框架如圖1所示,嵌入式linux系統(tǒng)從軟件的角度通常可以分為4個(gè)層次:引導(dǎo)加載程序,包括固化在固件(firmware)中的boot代碼(可選)和bootloader兩部分組成。Linux內(nèi)核,特定于嵌入式板子的定制內(nèi)核以及內(nèi)核的啟動(dòng)參數(shù),內(nèi)核的啟動(dòng)參數(shù)可以使內(nèi)核默認(rèn)的,或是由bootloader傳遞給它的。文件系統(tǒng),包括根文件系統(tǒng)和建立于flash內(nèi)存設(shè)備上的文件系統(tǒng)。包含了linux系統(tǒng)能夠運(yùn)行所必須的應(yīng)用程序、庫(kù)文件等,例如shell、glibc庫(kù)等。用戶應(yīng)用程序,特定于用戶的應(yīng)用程序,存儲(chǔ)于文件系統(tǒng)中。嵌入式圖形用戶界面一般存在于用戶應(yīng)用程序和內(nèi)核層之間,常用的GUI有Qt,miniGUI。2搭建交叉編譯工具登陸arm-linux-gcc官方網(wǎng)站下載源碼包,解壓縮arm-linux-gcc源碼包,放于系統(tǒng)中通過解壓命令解壓,然后可以通過兩種方式配置環(huán)境變量,第一種是臨時(shí)使用方法,即用exportPATH將交叉編譯器解壓后的路徑導(dǎo)入添加到環(huán)境變量中,第二種方法是永久使用方法,即編輯環(huán)境變量文件,將交叉編譯器解壓后的路徑寫入文件。3linux移植3.1獲取內(nèi)核源碼登陸linux內(nèi)核的官方網(wǎng)站/下載源碼包,解壓縮linux壓縮包。雖然內(nèi)核文件數(shù)目總共3萬多個(gè),但是這些文件的組織結(jié)構(gòu)并不復(fù)雜,而是分別為于頂層目錄下的17個(gè)子目錄。各個(gè)目錄功能獨(dú)立,各目錄功能見表3-1。表3-1linux內(nèi)核子目錄結(jié)構(gòu)目錄名描述arch體系結(jié)構(gòu)相關(guān)代碼,每個(gè)架構(gòu)的CPU均有block塊設(shè)備的通用函數(shù)crypto常用加密和散列算法,例AES、SHA、CRCdrivers設(shè)備驅(qū)動(dòng)程序fs文件系統(tǒng)代碼include內(nèi)核頭文件init內(nèi)核的初始化代碼ipckernel進(jìn)程間通信的代碼內(nèi)核管理的核心代碼lib內(nèi)核用到的一些庫(kù)函數(shù)mm內(nèi)存管理代碼net網(wǎng)絡(luò)支持代碼security安全、密鑰相關(guān)代碼sound音頻設(shè)備驅(qū)動(dòng)程序usr用來制作壓縮cpio歸檔文件(一般不用)document內(nèi)核文檔Scripts配置、編譯內(nèi)核的腳本文件3.2Makefile分析 通過頂層Makefile決定交叉編譯工具,具體Makefile分類見表3-2。表3-2linux內(nèi)核Makefile分類文件名描述頂層Makefile所有Makefile核心,總體控制內(nèi)核編譯、鏈接.config配置文件,所有Makefile文件根據(jù).config決定使用arch/$(ARCH)/Makefile對(duì)應(yīng)體系結(jié)構(gòu)的Makefilescripts/MakefileMakefile的通用規(guī)則、腳本kbuildMakefile各級(jí)目錄下的Makefile3.3確定機(jī)器ID在uboot工程中搜索cmd_bootm.c文件,在文件中搜索bootm得到do_bootm函數(shù)調(diào)用處,進(jìn)入do_bootm函數(shù),根據(jù) boot_fn=boot_os[images.os.os];語句進(jìn)入boot_os結(jié)構(gòu)體,得到#ifdefCONFIG_BOOTM_LINUX[IH_OS_LINUX]=do_bootm_linux,進(jìn)入arch/arm/lib/bootm.c中do_bootm_linux函數(shù),得到 boot_jump_linux(images);函數(shù),進(jìn)入同文件此函數(shù)函數(shù)體,得到kernel_entry(0,machid,r2);,即進(jìn)入linux的入口。此時(shí),通過同一函數(shù)體可以得知機(jī)器ID一方面可以通過uboot環(huán)境變量中獲得,也可以通過默認(rèn)參數(shù)獲得。其中默認(rèn)參數(shù)為193,即MACH_TYPE_S3C2440的宏定義得到。得到機(jī)器ID后,與內(nèi)核中機(jī)器ID匹配,調(diào)用初始化函數(shù)初始化,其中MACH_TYPE_S3C2440宏定義在文件arch/arm/tools/mach-types中有定義,最后會(huì)轉(zhuǎn)換成一個(gè)頭文件include/asm-arm/mach-type.h供其他文件包含。3.4確定波特率及晶振內(nèi)核源碼中arch/arm/mach-s3c24xx/mach-smdk2440.c中時(shí)鐘初始化函數(shù)所使用參數(shù)為16934400,在時(shí)鐘初始化中按照硬件資源修改相應(yīng)的參數(shù),然后,進(jìn)入uboot環(huán)境下后,通過set命令修改與串口軟件secureCRT統(tǒng)一波特率,然后保存即可。3.5構(gòu)建分區(qū)表圖2典型分區(qū)結(jié)構(gòu)圖2典型分區(qū)結(jié)構(gòu)通過以上修改,內(nèi)核已經(jīng)可以正常打印消息,通過makes3c2410_defconfig設(shè)置為芯片默認(rèn)參數(shù)后,通過makeuImage制作內(nèi)核鏡像,并且通過nfs下載命令下載到最小系統(tǒng)中。此時(shí),分區(qū)消息錯(cuò)誤,打印"BootAgent"等非正常分區(qū)信息。此時(shí),通過"\"Boot\Agent\""搜索找到錯(cuò)誤信息程序位置,即命令grep命令全文件搜索,得到arch/arm/mach-s3c24xx/common-smdk.c文件中的分區(qū)設(shè)置,修改smdk_default_nand_part數(shù)組中分區(qū)名稱和分區(qū)大小,而典型分區(qū)結(jié)構(gòu)如圖2所示。3.6yaffs2文件系統(tǒng)驅(qū)動(dòng)通過apt-getinstall安裝命令安裝git。然后,通過git下載yaffs2補(bǔ)丁源碼包,解壓縮yaffs2補(bǔ)丁源碼包,通過patch命令打補(bǔ)丁,此命令可以通過README-linux獲取,之后通過圖形配置界面makemenuconfig配置yaffs2filesystemsupport選項(xiàng)。位置位于文件系統(tǒng)選項(xiàng)次級(jí)目錄Miscellaneousfilesystems選項(xiàng)中,最后通過帶頭部的內(nèi)核制作命令makeuImage生成uImage鏡像。3.7NORFLASH驅(qū)動(dòng)通過makemenuconfig圖形配置,于DeviceDrivers次級(jí)目錄的MemoryTechnologyDevice(MTD)support的次級(jí)目錄Mappingdriversforchipaccess中,勾選Flashdeviceinphysicalmemorymap選項(xiàng),2.6內(nèi)核以前為CFI選項(xiàng),選擇后,自動(dòng)生成的子目錄,設(shè)置起始地址、長(zhǎng)度、位寬即可完成NORFLASH的驅(qū)動(dòng)支持。3.8DM9000網(wǎng)卡驅(qū)動(dòng)將arch\arm\mach-s3c24xx\Mach-smdk2440.c文件中添加DM9000網(wǎng)卡驅(qū)動(dòng)匹配部分程序,設(shè)置訪問基地址、資源結(jié)構(gòu)體、平臺(tái)設(shè)備結(jié)構(gòu)體,以便匹配設(shè)備驅(qū)動(dòng)程序。并增加*smdk2440_devices[]結(jié)構(gòu)體內(nèi)DM9000的設(shè)備驅(qū)動(dòng)結(jié)構(gòu)體。3.9內(nèi)核裁剪首先,將內(nèi)核中支持的其他沒有使用的芯片及其通用單板、特定單板禁止編譯進(jìn)內(nèi)核,其次,將內(nèi)核中支持的其他沒有使用文件系統(tǒng)禁止編譯進(jìn)內(nèi)核,之后,將內(nèi)核中沒有使用的輸入、輸出設(shè)備,根據(jù)設(shè)計(jì)需要進(jìn)行必要的裁剪,以保證內(nèi)核所占空間盡量縮減,節(jié)省硬件存儲(chǔ)資源。3.10制作內(nèi)核補(bǔ)丁及使用首先,將修改好的內(nèi)核源代碼根目錄中的.config配置文件保存,然后通過makedistclean清空配置,之后,新解壓linux內(nèi)核源碼,執(zhí)行diff命令比較命令制作補(bǔ)丁,縮短以后同類芯片開發(fā)項(xiàng)目的進(jìn)度。給同版本其他內(nèi)核打補(bǔ)丁的時(shí)候,可以直接執(zhí)行patch命令修改成曾經(jīng)修改好的內(nèi)核,然后,再將曾經(jīng)保存的配置文件拷貝到內(nèi)核根目錄,執(zhí)行makeuImage或其他內(nèi)核制作命令即可直接完成內(nèi)核修改和配置。4制作根文件系統(tǒng)4.1構(gòu)建zlib數(shù)據(jù)壓縮函式庫(kù)登陸linux內(nèi)核的官方網(wǎng)站下載源碼包,解壓縮zlib壓縮包,放于ubuntu系統(tǒng)中通過解壓命令解壓,通過配置./configure--shared--prefix=/usr,share為動(dòng)態(tài)庫(kù),prefix為安裝路徑,然后make編譯,makeinstall安裝。4.2mtd_utilsNANDFLASH工具登陸mtd_utils官方網(wǎng)站/mtd-utils.git下載源碼包,解壓縮mtd_utils源碼包,放于ubuntu系統(tǒng)中通過解壓命令解壓,然后make編譯,makeinstall安裝。4.3yaffs2工具登陸yaffs2官方網(wǎng)站git://www.aleph1.co.uk/yaffs2下載源碼包,解壓縮yaffs2源碼包,放于ubuntu系統(tǒng)中通過解壓命令解壓,然后于生成的文件夾中的utils子目錄中make編譯,然后將生成的mkyaffs2image拷貝到/usr/local/bin目錄下,添加可執(zhí)行權(quán)限。4.4busybox工具登陸busybox官方網(wǎng)站/下載源碼包,解壓縮busybox源碼包,放于系統(tǒng)中通過解壓命令解壓,通過圖形配置設(shè)置交叉編譯工具,將前綴修改為arm-linux-,創(chuàng)建根文件系統(tǒng)安裝目錄,makeinstall安裝。4.5構(gòu)建glibc庫(kù)創(chuàng)建lib目錄,將之前制作交叉編譯工具時(shí)生成的glibc庫(kù)拷貝到lib目錄下構(gòu)建根文件系統(tǒng),即位置/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/中動(dòng)態(tài)庫(kù)文件拷貝于根目錄lib下和/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/ar--mv4t/usr/lib/*so*中的動(dòng)態(tài)庫(kù)文件拷貝于usr/lib目錄下。4.6構(gòu)建etc目錄etc目錄為配置文件目錄,基本上軟硬件上的配置均在此文件夾下,其中etc目錄下inittab文件為linux啟動(dòng)后第一個(gè)運(yùn)行的文件,用來創(chuàng)建其他子進(jìn)程,比如調(diào)用腳本文件配置IP,掛接其他文件系統(tǒng),最后啟動(dòng)shell,etc目錄下的內(nèi)容取決于要運(yùn)行的程序。4.6.1構(gòu)建inittab文件創(chuàng)建inittab文件,并編寫腳本位置,輸入輸出解析。4.6.2構(gòu)建rcS文件創(chuàng)建rcS腳本文件,添加以下自動(dòng)配置IP、熱插拔設(shè)置等自動(dòng)執(zhí)行的命令,并將文件權(quán)限設(shè)置為可執(zhí)行權(quán)限。 4.6.3構(gòu)建fstab文件創(chuàng)建fstab文件,以便定義文件系統(tǒng)的用于控制mount命令行為的信息。4.7構(gòu)建dev目錄創(chuàng)建dev目錄,并且創(chuàng)建console、null設(shè)備節(jié)點(diǎn)。4.8構(gòu)建其他目錄通過mkdir創(chuàng)建其余系統(tǒng)用到的文件夾,例如proc、mnt、tmp、sys、root。4.9構(gòu)建jffs2文件系統(tǒng)通過之前安裝完畢的mtd-utils工具,直接在文件系統(tǒng)上一級(jí)目錄下輸入命令mkfs.jffs2即可。4.10構(gòu)建yaffs2文件系統(tǒng)通過之前安裝完畢的yaffs2工具,直接在文件系統(tǒng)上一級(jí)目錄下輸入命令mkyaffs2image即可。4.11構(gòu)建網(wǎng)絡(luò)文件系統(tǒng)首先,通過ifconfig配置目標(biāo)板ip,然后,通過ping命令測(cè)試網(wǎng)絡(luò),之后,通過服務(wù)器端配置文件/etc/exports手工掛載服務(wù)器端目錄。 最后,手動(dòng)重啟NFS服務(wù),在本地創(chuàng)建一個(gè)測(cè)試目錄,掛載測(cè)試,nfs命令可以從linux-3.4.2\Documentation\filesystems\nfs\nfsboot.txt中查詢。 經(jīng)過測(cè)試后,使用將目標(biāo)板uboot環(huán)境參數(shù)通過set設(shè)置。5啟動(dòng)環(huán)境參數(shù)設(shè)置 自動(dòng)掛載根文件系統(tǒng),在uboot中設(shè)置啟動(dòng)命令‘nandread.jffs2內(nèi)存中內(nèi)核啟動(dòng)地址kernel;bootm內(nèi)存中內(nèi)核啟動(dòng)地址’,啟動(dòng)參數(shù)‘console=串口,波特率root=/dev/分區(qū)位置rootfstype=文件系統(tǒng)格式’。 自動(dòng)掛載調(diào)試用的網(wǎng)絡(luò)文件系統(tǒng),啟動(dòng)參數(shù)‘console=串口,波特率root=/dev/nfsnfsroot=服務(wù)器IP:服務(wù)器上網(wǎng)絡(luò)文件夾ip=開發(fā)平臺(tái)IP:服務(wù)器IP:網(wǎng)關(guān):子網(wǎng)掩碼:主機(jī)名:網(wǎng)卡:自動(dòng)配置’。6結(jié)論上述移植方法及實(shí)現(xiàn)結(jié)果:可以正常使用NANDFLASH、NORFLASH、DM9000網(wǎng)卡、yaffs2文件系統(tǒng)環(huán)境、jffs2文件系統(tǒng)環(huán)境、網(wǎng)絡(luò)文件系統(tǒng)環(huán)境、自動(dòng)啟動(dòng),掛載等。由于開發(fā)環(huán)境功能強(qiáng)大,適用于各類工業(yè)控制、消費(fèi)電子、汽車電子、醫(yī)療電子設(shè)備等領(lǐng)域的基礎(chǔ)開發(fā)環(huán)境。參考文獻(xiàn)[1]趙炯.linux內(nèi)核完全注釋[M].北京:機(jī)械工業(yè)出版社,2005[2]毛德操,胡希明,等.linux內(nèi)核源代碼情景分析[
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024離婚協(xié)議要點(diǎn)及范本
- 2024石材礦山荒料資源整合與開發(fā)合同3篇
- 2025年度鴨苗繁育基地建設(shè)與運(yùn)營(yíng)管理合同3篇
- 2025年度船舶船員體檢與健康保險(xiǎn)合同3篇
- 二零二五年搬家物流運(yùn)輸合同樣本6篇
- 2024版建設(shè)工程施工合同ef0203
- 二零二五年度房地產(chǎn)項(xiàng)目土地置換合同3篇
- 2025年草原生態(tài)保護(hù)與草原旅游開發(fā)一體化合同3篇
- 2024版深圳股權(quán)轉(zhuǎn)讓合同協(xié)議書范本
- 2025年度高空樓頂廣告設(shè)計(jì)與施工一體化服務(wù)合同4篇
- 深圳2024-2025學(xué)年度四年級(jí)第一學(xué)期期末數(shù)學(xué)試題
- 中考語文復(fù)習(xí)說話要得體
- 《工商業(yè)儲(chǔ)能柜技術(shù)規(guī)范》
- 華中師范大學(xué)教育技術(shù)學(xué)碩士研究生培養(yǎng)方案
- 醫(yī)院醫(yī)學(xué)倫理委員會(huì)章程
- xx單位政務(wù)云商用密碼應(yīng)用方案V2.0
- 風(fēng)浪流耦合作用下錨泊式海上試驗(yàn)平臺(tái)的水動(dòng)力特性試驗(yàn)
- 高考英語語法專練定語從句含答案
- 有機(jī)農(nóng)業(yè)種植技術(shù)操作手冊(cè)
- 【教案】Unit+5+Fun+Clubs+大單元整體教學(xué)設(shè)計(jì)人教版(2024)七年級(jí)英語上冊(cè)
- 2020年的中國(guó)海外工程示范營(yíng)地申報(bào)材料及評(píng)分標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論