版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第5章嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境的建立章嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境的建立Page 2本章要點(diǎn)本章要點(diǎn)n 主機(jī)開(kāi)發(fā)環(huán)境的建立主機(jī)開(kāi)發(fā)環(huán)境的建立n 嵌入式嵌入式Linux系統(tǒng)內(nèi)核的裁剪、編譯系統(tǒng)內(nèi)核的裁剪、編譯n 嵌入式嵌入式Linux系統(tǒng)開(kāi)發(fā)板的燒寫系統(tǒng)開(kāi)發(fā)板的燒寫Page 3建立主機(jī)開(kāi)發(fā)環(huán)境建立主機(jī)開(kāi)發(fā)環(huán)境n 1、交叉編譯n 什么是交叉工具鏈?n 為什么要使用交叉工具鏈?n 所謂交叉編譯就是在一個(gè)平臺(tái)上生成可以在另一個(gè)平臺(tái)上執(zhí)行的代碼。Page 4裝置裝置n 進(jìn)行嵌入式開(kāi)發(fā)前,首先需安裝交叉工具鏈,步驟如下:進(jìn)行嵌入式開(kāi)發(fā)前,首先需安裝交叉工具鏈,步驟如下:n 1. 解壓工具鏈到某一目錄下解壓工具鏈到某一目
2、錄下n 例:例:tar xvzf arm-linux-gcc-4.3.2.tar.gz C /n 2. 修改修改/etc/profile ,添加添加n pathmunge /usr/local/arm/4.3.2/binn 3. 執(zhí)行執(zhí)行source /etc/profilePage 5使用使用n 編譯器:編譯器:arm-linux-gccn arm-linux-gcc hello.c o hellon 反匯編工具:反匯編工具:arm-linux-objdumpn arm-linux-objdump D S hellon ELF文件查看工具:文件查看工具:arm-linux-readelfn
3、arm-linux-readelf a hellon arm-linux-readelf d hello 查看查看hello使用的動(dòng)態(tài)庫(kù)使用的動(dòng)態(tài)庫(kù)Page 6編譯嵌入式編譯嵌入式Linux內(nèi)核內(nèi)核嵌入式嵌入式Linux系統(tǒng)由系統(tǒng)由Linux內(nèi)核與根文件系統(tǒng)兩內(nèi)核與根文件系統(tǒng)兩部分構(gòu)成,兩者缺一不可。部分構(gòu)成,兩者缺一不可。Page 7內(nèi)核制作內(nèi)核制作n 制作嵌入式平臺(tái)使用的制作嵌入式平臺(tái)使用的Linux內(nèi)核,方法和制作內(nèi)核,方法和制作PC平臺(tái)的平臺(tái)的Linux內(nèi)核內(nèi)核基本一致,下面使用對(duì)比的方式介紹如何制作用于嵌入式開(kāi)發(fā)板的內(nèi)基本一致,下面使用對(duì)比的方式介紹如何制作用于嵌入式開(kāi)發(fā)板的內(nèi)核。核
4、。n 1、清除原有配置與中間文件、清除原有配置與中間文件n x86: make distcleann arm: make distcleann 2、配置內(nèi)核、配置內(nèi)核n x86: make menuconfign arm: make menuconfig ARCH=armn 3、編譯內(nèi)核、編譯內(nèi)核n x86: make bzImagen arm: make uImage ARCH=arm CROSS_COMPILE=arm-linuxPage 8根文件系統(tǒng)根文件系統(tǒng)n 根文件系統(tǒng)是根文件系統(tǒng)是Linux啟動(dòng)時(shí)使用的第一個(gè)文件系統(tǒng)。沒(méi)有根文件系統(tǒng),啟動(dòng)時(shí)使用的第一個(gè)文件系統(tǒng)。沒(méi)有根文件系統(tǒng),Li
5、nux將無(wú)法正常啟動(dòng)。將無(wú)法正常啟動(dòng)。n 根文件系統(tǒng)由一系列目錄組成,目錄中包含了應(yīng)用程序、根文件系統(tǒng)由一系列目錄組成,目錄中包含了應(yīng)用程序、C庫(kù)、以及庫(kù)、以及相關(guān)的配置文件。相關(guān)的配置文件。Page 9根文件系統(tǒng)根文件系統(tǒng)n 1、創(chuàng)建根文件系統(tǒng)的目錄、創(chuàng)建根文件系統(tǒng)的目錄n mkdir rootfsn cd rootfsn mkdir bin dev etc lib proc sbin sys usr mnt tmp varn mkdir usr/bin usr/lib usr/sbin lib/modulesn 2、創(chuàng)建設(shè)備文件、創(chuàng)建設(shè)備文件n cd dev/n mknod -m 666
6、console c 5 1n mknod -m 666 null c 1 3n cd .n 3、裝置、裝置/etcn tar etc.tar.gz C /xxx/rootfsPage 10根文件系統(tǒng)根文件系統(tǒng)n 4、編譯內(nèi)核模塊、編譯內(nèi)核模塊n 進(jìn)入進(jìn)入Linux內(nèi)核目錄內(nèi)核目錄linux 2.6.29)n make modules ARCH=arm CROSS_COMPILE=arm-linux-n 5、安裝內(nèi)核模塊、安裝內(nèi)核模塊n make modules_install ARCH=arm INSTALL_MOD_PATH=/xxx/rootfsPage 11根文件系統(tǒng)根文件系統(tǒng)Busyb
7、ox: 嵌入式開(kāi)發(fā)中的瑞士軍刀嵌入式開(kāi)發(fā)中的瑞士軍刀n 6、配置、配置busyboxn 進(jìn)入進(jìn)入busybox目錄執(zhí)行目錄執(zhí)行n make menuconfign a.進(jìn)入進(jìn)入Busybox Settings n build Options-n 選中選中“Build busybox as a static binary”, 靜態(tài)鏈接靜態(tài)鏈接n Cross Compiler prefix (arm-linux-)n Installation Options-n 選中選中“Dont use /usr”, 選中該項(xiàng)可以避免選中該項(xiàng)可以避免busybox 被安裝到宿被安裝到宿主系統(tǒng)的主系統(tǒng)的/usr目
8、錄下,破壞宿主系統(tǒng)目錄下,破壞宿主系統(tǒng)n Busybox Installation Prefix (/xxx/rootfs)n 該選項(xiàng)表明編譯后的該選項(xiàng)表明編譯后的busybox的安裝位置的安裝位置Page 12根文件系統(tǒng)根文件系統(tǒng)n 7、編譯、安裝、編譯、安裝busyboxn make ARCH=arm CROSS_COMPILE=arm-linux-n make installPage 13Ramdiskn 基于前面步驟制作好的根文件系統(tǒng),可進(jìn)基于前面步驟制作好的根文件系統(tǒng),可進(jìn)n 一步制作一步制作ramdisk,步驟如下:,步驟如下:n 1、genext2fs -b 8192 -d /x
9、xx/rootfs ramdiskn * genext2fs 為產(chǎn)生為產(chǎn)生ramdisk的工具的工具*n 2、gzip -9 -f ramdiskPage 14BootLoadern 什么是什么是BootLoader?Page 15軟件層次軟件層次n 一個(gè)嵌入式系統(tǒng)從軟件角度來(lái)看分為三個(gè)層次:一個(gè)嵌入式系統(tǒng)從軟件角度來(lái)看分為三個(gè)層次:n 1. 引導(dǎo)加載程序引導(dǎo)加載程序n 包括固化在固件包括固化在固件(firmware)中的中的boot 程序程序(可選可選),和,和BootLoader 兩兩大部分。大部分。n 2. Linux 內(nèi)核內(nèi)核n 特定于嵌入式平臺(tái)的定制內(nèi)核。特定于嵌入式平臺(tái)的定制內(nèi)核。
10、n 3. 文件系統(tǒng)文件系統(tǒng)n 包括了系統(tǒng)命令和應(yīng)用程序。包括了系統(tǒng)命令和應(yīng)用程序。Page 16n 一個(gè)同時(shí)裝有BootLoader、內(nèi)核的啟動(dòng)參數(shù)、內(nèi)核映像和根文件系統(tǒng)映像的固態(tài)存儲(chǔ)設(shè)備的典型空間分配結(jié)構(gòu)圖:軟件層次軟件層次Page 17回憶回憶PCn PC機(jī)中的引導(dǎo)加載程序由機(jī)中的引導(dǎo)加載程序由BIOS其本質(zhì)是一段固件程序和其本質(zhì)是一段固件程序和GRUB或或LILO一起組成。一起組成。BIOS在完成硬件檢測(cè)和資源分配后,將硬盤中的在完成硬件檢測(cè)和資源分配后,將硬盤中的引導(dǎo)程序讀到系統(tǒng)內(nèi)存中然后將控制權(quán)交給引導(dǎo)程序。引導(dǎo)程序的主引導(dǎo)程序讀到系統(tǒng)內(nèi)存中然后將控制權(quán)交給引導(dǎo)程序。引導(dǎo)程序的主要任
11、務(wù)是將內(nèi)核從硬盤上讀到內(nèi)存中要任務(wù)是將內(nèi)核從硬盤上讀到內(nèi)存中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,即啟動(dòng)操作系統(tǒng)。行,即啟動(dòng)操作系統(tǒng)。Page 18定義定義n 在嵌入式系統(tǒng)中,通常沒(méi)有像在嵌入式系統(tǒng)中,通常沒(méi)有像BIOS那樣的固件程序,因此整個(gè)系統(tǒng)那樣的固件程序,因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由的加載啟動(dòng)任務(wù)就完全由BootLoader來(lái)完成。比如在一個(gè)基于來(lái)完成。比如在一個(gè)基于ARM7TDMI core的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)都從地址的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)都從地址0 x00000000開(kāi)始執(zhí)行。而在這個(gè)地址處安排的通常就是系統(tǒng)的開(kāi)始執(zhí)行。而在這個(gè)地
12、址處安排的通常就是系統(tǒng)的BootLoader程序。程序。Page 19定義定義n 簡(jiǎn)單地說(shuō),簡(jiǎn)單地說(shuō),BootLoader就是在操作系統(tǒng)運(yùn)行之前運(yùn)行的一段小程序。就是在操作系統(tǒng)運(yùn)行之前運(yùn)行的一段小程序。通過(guò)這段小程序,可以初始化硬件設(shè)備,從而將系統(tǒng)的軟硬件環(huán)境帶通過(guò)這段小程序,可以初始化硬件設(shè)備,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)做好準(zhǔn)備。到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)做好準(zhǔn)備。Page 20裝置裝置n 系統(tǒng)加電或復(fù)位后,所有的系統(tǒng)加電或復(fù)位后,所有的CPU通常都從通常都從CPU制造商預(yù)先安排地址制造商預(yù)先安排地址開(kāi)始執(zhí)行。比如,開(kāi)始執(zhí)行。比如,S3C2
13、410在復(fù)位后從地址在復(fù)位后從地址0 x00000000起開(kāi)始執(zhí)行。起開(kāi)始執(zhí)行。而嵌入式系統(tǒng)則將固態(tài)存儲(chǔ)設(shè)備比如:而嵌入式系統(tǒng)則將固態(tài)存儲(chǔ)設(shè)備比如:FLASH安排在這個(gè)地址安排在這個(gè)地址上,而上,而bootloader程序又安排在固態(tài)存儲(chǔ)器的最前端,這樣就能保證程序又安排在固態(tài)存儲(chǔ)器的最前端,這樣就能保證在系統(tǒng)加電后,在系統(tǒng)加電后,CPU首先執(zhí)行首先執(zhí)行BootLoader程序。程序。Page 21移植移植n 為什么需要進(jìn)行為什么需要進(jìn)行bootloader移植?移植?Page 22移植移植n 每種不同的每種不同的CPU體系結(jié)構(gòu)都有不同的體系結(jié)構(gòu)都有不同的BootLoader。除了依賴于。除了
14、依賴于CPU的體系結(jié)構(gòu)外,的體系結(jié)構(gòu)外,BootLoader 還依賴于具體的嵌入式板級(jí)設(shè)備的配置,還依賴于具體的嵌入式板級(jí)設(shè)備的配置,比如板卡的硬件地址分配,外設(shè)芯片的類型等。這也就是說(shuō),對(duì)于兩比如板卡的硬件地址分配,外設(shè)芯片的類型等。這也就是說(shuō),對(duì)于兩塊不同的開(kāi)發(fā)板而言,即使它們是基于同一種塊不同的開(kāi)發(fā)板而言,即使它們是基于同一種CPU而構(gòu)建的,但如果而構(gòu)建的,但如果他們的硬件資源或配置不一致的話,要想在一塊開(kāi)發(fā)板上運(yùn)行的他們的硬件資源或配置不一致的話,要想在一塊開(kāi)發(fā)板上運(yùn)行的BootLoader程序也能在另一塊板子上運(yùn)行,還是需要作修改。程序也能在另一塊板子上運(yùn)行,還是需要作修改。Page
15、 23流程流程n BootLoader 的啟動(dòng)過(guò)程可分為單階段的啟動(dòng)過(guò)程可分為單階段Single-Stage和多階段和多階段Multi-Stage兩種,通常多階段的兩種,通常多階段的BootLoader 具有更復(fù)雜的功具有更復(fù)雜的功能,更好的可移植性。從固態(tài)存儲(chǔ)設(shè)備上啟動(dòng)的能,更好的可移植性。從固態(tài)存儲(chǔ)設(shè)備上啟動(dòng)的BootLoader 大多采大多采用兩階段,即啟動(dòng)過(guò)程可以分為用兩階段,即啟動(dòng)過(guò)程可以分為stage 1和和stage2:stage1完成初始完成初始化硬件,為化硬件,為stage2準(zhǔn)備內(nèi)存空間,并將準(zhǔn)備內(nèi)存空間,并將stage2復(fù)制到內(nèi)存中,設(shè)置復(fù)制到內(nèi)存中,設(shè)置堆棧,然后跳轉(zhuǎn)到堆
16、棧,然后跳轉(zhuǎn)到stage2。Page 24流程流程n BootLoader 的的stage1 通常包括以下步驟:通常包括以下步驟:n 硬件設(shè)備初始化硬件設(shè)備初始化n 為加載為加載BootLoader 的的stage2 準(zhǔn)備準(zhǔn)備RAM 空間空間n 拷貝拷貝BootLoader 的的stage2 到到RAM 空間中空間中n 設(shè)置好堆棧設(shè)置好堆棧why?)n 跳轉(zhuǎn)到跳轉(zhuǎn)到stage2 的的C 入口點(diǎn)入口點(diǎn)Page 25流程流程n BootLoader 的的stage2 通常包括以下步驟:通常包括以下步驟:n 初始化本階段要使用到的硬件設(shè)備初始化本階段要使用到的硬件設(shè)備n 將內(nèi)核映像和根文件系統(tǒng)映像從
17、將內(nèi)核映像和根文件系統(tǒng)映像從flash 上讀到上讀到RAM 中中n 調(diào)用內(nèi)核調(diào)用內(nèi)核Page 26內(nèi)存分布內(nèi)存分布Page 27Uboot介紹介紹n Uboot是德國(guó)是德國(guó)DENX小組開(kāi)發(fā)的用于多種嵌入式小組開(kāi)發(fā)的用于多種嵌入式CPU( MIPS、x86、ARM、XScale等的等的bootloader程序程序,UBoot不僅支持嵌入式不僅支持嵌入式Linux系統(tǒng)的引導(dǎo),還支持系統(tǒng)的引導(dǎo),還支持VxWorks, QNX等多種嵌入式操作系統(tǒng)。等多種嵌入式操作系統(tǒng)。n 從下面地址可以下載到從下面地址可以下載到uboot的源代碼:的源代碼:n ftpftp.denx.de/pub/u-boot/Pa
18、ge 28目錄結(jié)構(gòu)目錄結(jié)構(gòu)n 進(jìn)入到進(jìn)入到UBOOT目錄,可以得到如下的目錄結(jié)構(gòu):目錄,可以得到如下的目錄結(jié)構(gòu):n boardn commonn cpun diskn docn driversn dttn examplesn fsn includePage 29目錄結(jié)構(gòu)目錄結(jié)構(gòu)n lib_armn lib_genericn lib_i386n lib_m68kn lib_microblazen lib_mipsn lib_niosn lib_nios2n lib_ppcn netn postn rtcn toolsPage 30目錄結(jié)構(gòu)目錄結(jié)構(gòu)n Boardn 和開(kāi)發(fā)板有關(guān)的文件。每一個(gè)開(kāi)發(fā)板
19、都以一個(gè)子目錄出現(xiàn)在當(dāng)前目錄和開(kāi)發(fā)板有關(guān)的文件。每一個(gè)開(kāi)發(fā)板都以一個(gè)子目錄出現(xiàn)在當(dāng)前目錄中,比如中,比如:SMDK2410,子目錄中存放與開(kāi)發(fā)板相關(guān)的文件。子目錄中存放與開(kāi)發(fā)板相關(guān)的文件。n Commonn 實(shí)現(xiàn)實(shí)現(xiàn)Uboot支持的命令。支持的命令。n Cpun 與特定與特定CPU架構(gòu)相關(guān)的代碼,每一款架構(gòu)相關(guān)的代碼,每一款Uboot下支持的下支持的CPU在該目錄下在該目錄下對(duì)應(yīng)一個(gè)子目錄,比如有子目錄對(duì)應(yīng)一個(gè)子目錄,比如有子目錄arm920t等。等。Page 31目錄結(jié)構(gòu)目錄結(jié)構(gòu)n Diskn 對(duì)磁盤的支持。對(duì)磁盤的支持。n Docn 文檔目錄。文檔目錄。Uboot有非常完善的文檔,推薦大家參考閱讀。有非常完善的文檔,推薦大家參考閱讀。n Driversn Uboot支持的設(shè)備驅(qū)動(dòng)程序都放在該目錄,比如各種網(wǎng)卡、支
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度不動(dòng)產(chǎn)登記信息共享與安全保障合同3篇
- 2025年度新型住宅水電費(fèi)分時(shí)計(jì)費(fèi)合同4篇
- 2025年度生態(tài)廁所建設(shè)與資源化利用合同4篇
- 2024版貨車租賃吊車合同3篇
- 2025年度生物制藥研發(fā)成果轉(zhuǎn)化保密合同4篇
- 2025年度智能節(jié)能窗戶系統(tǒng)研發(fā)、安裝與運(yùn)營(yíng)合同3篇
- 2025年度LED廣告車租賃及智能控制系統(tǒng)集成服務(wù)合同3篇
- 2025賓館一次性餐飲用品采購(gòu)及庫(kù)存管理合同3篇
- 2024版貨物出口運(yùn)輸服務(wù)協(xié)議書(shū)
- 2025年度山地旅游項(xiàng)目土石方運(yùn)輸與景觀開(kāi)發(fā)合同匯編3篇
- 綿陽(yáng)市高中2022級(jí)(2025屆)高三第二次診斷性考試(二診)歷史試卷(含答案)
- 露天礦山課件
- 經(jīng)濟(jì)效益證明(模板)
- 銀行卡凍結(jié)怎么寫申請(qǐng)書(shū)
- 果樹(shù)蔬菜病害:第一章 蔬菜害蟲(chóng)
- 借條借款合同帶擔(dān)保人
- 人工地震動(dòng)生成程序
- 創(chuàng)意綜藝風(fēng)脫口秀活動(dòng)策劃PPT模板
- SSB變槳系統(tǒng)的基礎(chǔ)知識(shí)
- 大五人格量表(revised)--計(jì)分及解釋
- CFA考試(LevelⅠ)歷年真題詳解2015LevelⅠMockExamAfternoonSession
評(píng)論
0/150
提交評(píng)論