Linux內(nèi)核配置編譯與文件系統(tǒng)構(gòu)建_第1頁
Linux內(nèi)核配置編譯與文件系統(tǒng)構(gòu)建_第2頁
Linux內(nèi)核配置編譯與文件系統(tǒng)構(gòu)建_第3頁
Linux內(nèi)核配置編譯與文件系統(tǒng)構(gòu)建_第4頁
Linux內(nèi)核配置編譯與文件系統(tǒng)構(gòu)建_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Linux 內(nèi)核配置編譯與文件系統(tǒng)構(gòu)建 南京大學 黃開成 101180046 2012.11.11 一:實驗?zāi)康?1. 了解嵌入式系統(tǒng)的開發(fā)環(huán)境,內(nèi)核與文件系統(tǒng)的下載和啟動; 2. 了解 Linux 內(nèi)核源代碼的目錄結(jié)構(gòu)及各自目錄的相關(guān)內(nèi)容,了解 Linux 內(nèi)核各配置選項內(nèi)容和作用,掌握 Linux 內(nèi)核的編譯過程; 3. 了解嵌入式操作系統(tǒng)中文件系統(tǒng)的類型和應(yīng)用、了解JFFS2文件系 統(tǒng)的優(yōu)點及其在嵌入式系統(tǒng)中的作用、 掌握利用Busybox軟件制作嵌 入式文件系統(tǒng)的方法,并且掌握嵌入式 Linux 文件系統(tǒng)的掛載過程。 二:實驗環(huán)境說明 1. PC 機使用 openSUSE 14 Ent

2、erprise 系統(tǒng)。 2. 開發(fā)板使用深圳市武耀博德信息技術(shù)有限公司生產(chǎn)的基于 Inter 的PXA27C處理器的多功能嵌入式開發(fā)平臺 EELIOD 3. PC機通過RS-232串口與開發(fā)板相連,在PC機終端上運行minicom 程序構(gòu)造一個開發(fā)板上的終端,用于對開發(fā)板的控制。 4. PC機與開發(fā)板通過ethernet網(wǎng)絡(luò)相連接,并可在開發(fā)板上通過加 載網(wǎng)絡(luò)文件系統(tǒng)(NFS與PC機通信。 5. Bootloader可以通過tftp 協(xié)議從PC機上下載內(nèi)核鏡像和根文件 系統(tǒng)鏡像。下載目錄為 /tftpboot 。 6. 用于開發(fā)板的 Linux 內(nèi)核源碼為 linux-2.4.21-51Boa

3、rd_EDR busybox 版本為 busybox-1.00-pre5 。 7. 交叉編譯器的路徑為 /usr/local/arm-linux/bin/arm-linux 三:實驗操作過程和分析記錄 1. 嵌入式系統(tǒng)的開發(fā)環(huán)境和開發(fā)流程: 1.1 啟動 minicom 和開發(fā)板 在PC機上打開一個終端,輸入: minicom 按 Ctrl+A-o 進入 minicom 的 configuration 界面。對串行通信接口 進行配置,串口設(shè)置為:/dev/ttySO (串口線接在PC機的串口 1上)、 bps=115200、8 位數(shù)據(jù)、無校驗、無流控制。 然后打開開發(fā)板電源, 看到屏幕有反應(yīng)之

4、后, 按任意鍵進入配置界面, 如果長時間沒有按下任何鍵, bootloader 將會自動從 flash 中讀取 內(nèi)核和根文件系統(tǒng)并啟動開發(fā)板上的 Linux 系統(tǒng)。 分析:嵌入式系統(tǒng)中,通常并沒有像PC機中BIOS那樣的固件程序, 因此整個系統(tǒng)的加載啟動任務(wù)完全由 bootloader 來完成。 bootloader 的主要作用是:初始化硬件設(shè)備;建立內(nèi)存空間的映射 圖;完成內(nèi)核的加載,為內(nèi)核設(shè)置啟動參數(shù)。 按0進入命令行模式,出現(xiàn)51board,可以設(shè)置開發(fā)板和PC機的IP 地址: 51board set myipaddr 33 ( 設(shè)置開發(fā)板的 IP 地址) 51

5、board set destipaddr 3 (設(shè)置 PC機的 IP 地址) 注意 IP 地址的設(shè)置:使其處于同一網(wǎng)段,并且避免和其他系統(tǒng)的 IP 發(fā)生沖突 通過 bootloader 的主菜單可以完成很多功能, 3下載內(nèi)核, 4 將內(nèi)核燒進 flash , 5下載文件系統(tǒng), 6將文件系統(tǒng)燒進 flash , 7啟動嵌入式操作系統(tǒng)等。 51board tftp zImage kernel ( 下載內(nèi)核 ) 51board tftp ramdisk.gz ramdisk( 下載文件系統(tǒng) ) 51board boot ( 啟動系統(tǒng),進入目標機終端 ) 1.2 NFS 服務(wù)

6、器架設(shè) NFS 是在不同機器不同操作系統(tǒng)之間進行網(wǎng)絡(luò)共享文件的服務(wù)系 統(tǒng)。在嵌入式系統(tǒng)中目標機可以將宿主機的共享文檔掛載在自己的系 統(tǒng)中,從而,目標機使用宿主機上的遠端文件就像是使用自己本地的 文件一樣,有利于嵌入式開發(fā)。 # ifconfig eth0 33( 配置網(wǎng)絡(luò) ) 上面的 eth0 為接口名, eth0 表示第一個以太網(wǎng)接口,如果使用其他 網(wǎng)絡(luò)接口,應(yīng)做相應(yīng)修改。 # mount 33:/exp /test -o nolock -o proto=tcp ( 將 主機上的 exp 目錄掛載到目標機的 test 目錄上) 此時可以對主

7、機上尼xp目錄下的文件進行操作,就像已經(jīng)在制作的文 件系統(tǒng)里面一樣, 便于以后開發(fā)程序的調(diào)試, 不必每次都重新燒寫文 件系統(tǒng)。 1.3 編寫應(yīng)用程序并在目標機上運行 編寫簡單的 c 程序 hello.c : #include int main() printf( “ hello,worldn ”); return 0; 然后在主機上用交叉編譯器進行編譯。 /usr/local/arm-linux/bin/arm-linux-gcc-o hello hello.c 此外也可以設(shè)置好PATH環(huán)境變量以方便使用。 export PATH=/usr/local/arm-linux/bin:$PATH

8、gcc -o hello hello.c 將可執(zhí)行文件 hello 復(fù)制到共享目錄 /exp, 在目標機上運行 hello #./hello 顯示 hello , world 1.4 歸納總結(jié)嵌入式系統(tǒng)下軟件開發(fā)的一般流程 PC 機上編寫軟件代碼并用交叉編譯環(huán)器編譯制作內(nèi)核和文件 系統(tǒng)并通過串口完成下載啟動內(nèi)核并借助于 NFS 文件系統(tǒng)進行 程序測試完成調(diào)試后,將可執(zhí)行文件加入文件系統(tǒng)并運行。 2. Linux 內(nèi)核配置與編譯 本實驗中用的內(nèi)核源碼是 linux-2.4.21-51Board_EDR ,在目錄 /usr/src/linux 下。源代碼樹下有如下目錄: arch (支持的微處理

9、器體系結(jié)構(gòu)),in elude (頭文件),init (初始化代碼),mm (內(nèi)存管 理代碼) ,kernel (主要的內(nèi)核代碼) ,drives (所有的設(shè)備驅(qū)動程 序) ,lib (庫文件代碼) ,net (網(wǎng)絡(luò)相關(guān)代碼)等。 將目標板的開機畫面換成自己設(shè)定的畫面的做法是:將 /usr/src/linux 目錄下的內(nèi)核源代碼拷貝到自己的目錄下,進入這 個目錄,在 arch/arm 下找到開發(fā)板啟動畫面的文件,將其刪除,用 自己的圖畫替換。有兩個小的注意事項是目標板只是別 .ppm 文件, 所以需要改變原來圖畫的文件格式, 可直接改文件后綴名, 或者在終 端中用命令 convert 。且圖畫

10、的文件名必須為 linux_logo 。 convert linux_logo.jpg linux_logo.ppm 2.1 內(nèi)核配置編譯的基本流程 在文件夾 linux-2.4.21-51Board_EDR 打開終端。 make menuconfig( 進入內(nèi)核配置菜單 ) 根據(jù)需要對內(nèi)核配置項進行選擇。配置變量有四種選擇:y 靜 態(tài)編譯進內(nèi)核,m內(nèi)核代碼被編譯成模塊,n表示不編譯進 內(nèi)核,表示配置變量的值為空。按空格鍵可以切換著幾種 選擇。下面針對一些比較重要的內(nèi)核配置項進行說明: 1. Loadable module support ,將不常用的設(shè)備模塊化,動態(tài)地加載。 這樣能更加有效利

11、用內(nèi)存。所以最好選中。 2.System type ,處理器種類。本實驗選中“PXA270/210-based” “ XSBase270-EDR”。 3. 在 Network device support, 網(wǎng)絡(luò)設(shè)備驅(qū)動。選擇對應(yīng)的網(wǎng)卡。本 實驗箱的網(wǎng)卡是“ Ethernet 10M or 100Mbit ”“ SMSC LAN91C1”11。 4. Console drivers,終端設(shè)備驅(qū)動配置。為了以后實驗中要用到的 支持圖像的功能,要選擇“ support for framebuffer devices ”和 “PXA LCD support ”。 5. 在“ General setu

12、p -Default kernel command string ”中設(shè)定 內(nèi)核啟動時的一些參數(shù),在使用 ramdisk 文件系統(tǒng)時該選項的值為 root=/dev/ram0 rw console=ttyS0,115200 mem=64M 其中 root=/dev/ram0 表明使用的是 randisk , rw 表明可讀可寫, console=ttyS0,115200 表明使用串行終端,波特率為115200, mem=64指定內(nèi)存大小。 6. 由于使用ran disk的情況需要內(nèi)核的支持,故需要將“Block devices-RAM disk support ” 編入內(nèi)核,此外將 “ Blo

13、ck devices-Default RAM disk size (kbytes) ”改為 8192,因為后續(xù) 的ramdisk根文件系統(tǒng)將使用8MB大小。 7. 在 “ Multimedia capabilities port drivers-UCB 1400 Touchscreen support on the xsBase 270 Board-GUI to be supported ”選中“Qtopia ”。這是因為在使用LCD寸將能使屏幕持續(xù) 亮大約十分鐘而不睡眠。 上面的這些配置很重要,其余的配置見講義P20。 配置完之后選擇保存,執(zhí)行完之后會生成 .config 文件。然后執(zhí)行 m

14、ak6clea n(清除以前構(gòu)核過程中生成的目標文件、模塊文件、核心 和一些臨寸文件 ) make dep( 建立依賴關(guān)系 ) make( 將生成核心 vmlinux) make zImage 生成的壓縮內(nèi)核映像文件 zImage 在 arch/arm/boot 目錄中。 將生成的內(nèi)核映像文件拷貝到 /tftpboot 下,以便開發(fā)板下載。 在反復(fù)地編譯啟動過程中還需要掌握一些小技巧來幫助加快開發(fā) 進程,比如在配置選項結(jié)束的時候可以“ Save Configuration to an Alternate File ”,此時可以方便在下一次修改的時候可以“ Load an Alternate C

15、onfiguration File ”來讀取上一次的配置,避免一些錯 誤的修改。 2.2 總結(jié)內(nèi)核映像文件的生成方法及其對操作系統(tǒng)的作用。 make menuconfig make clean make dep make make zImage 內(nèi)核文件是操作系統(tǒng)的核心,負責系統(tǒng)的進程管理,內(nèi)存管理,設(shè)備 和文件管理等,決定著系統(tǒng)的性能和穩(wěn)定性。 2.3 內(nèi)核配置中哪些選項對操作系統(tǒng)的正常啟動是必須的。 System type ( 系列選型 ) ;Character devices( 字符設(shè)備驅(qū)動 )中的 Virtual terminal,support for console on seri

16、al support,support for console on virtual terminal;文件系統(tǒng)( File System )。 3. 嵌入式文件系統(tǒng)的構(gòu)建 3.1 根文件系統(tǒng)概述 根文件系統(tǒng)是內(nèi)核啟動時所mou nt的第一個文件系統(tǒng),內(nèi)核代碼映 像文件保存在跟文件系統(tǒng)中, 而系統(tǒng)引導(dǎo)程序會在根文件系統(tǒng)掛載之 后從中把一些基本的初始化腳本和服務(wù)加載到內(nèi)存中運行。 根文件系統(tǒng)中常見目錄有: /bin 存放二進制可執(zhí)行命令的目錄 /sbin 存放管理系統(tǒng)管理員使用的管理程序的目錄 以上由 busybox 生成 /dev 存放設(shè)備文件的目錄 /etc 存放系統(tǒng)管理和配置文件的目錄 /u

17、sr 存放幾乎所有的要用到的應(yīng)用程序和文件 /lib 存放動態(tài)鏈接共享庫的目錄 /mnt 使用戶臨時掛載其他的文件系統(tǒng) /proc 虛擬文件系統(tǒng),直接訪問這個目錄獲取系統(tǒng)信息 以上是需要建立的目錄 /tmp 公用的臨時文件存儲點 /root 存放管理員的主目錄 /var 某些大文件的溢出區(qū) 3.2 Busybox 簡單介紹和編譯 BusyBox 是標準 Linux 工具的一個單個可執(zhí)行實現(xiàn)。 BusyBox 包 含了一些簡單的工具,例如 cat和echo,還包含了一些更大、更復(fù) 雜的工具,例如grep、find、mou nt以及tel net。它集成壓縮了 Li nux 的許多工具和命令。 因

18、為代碼可以在不依賴共享庫的情況下而直接共 享,BusyBox的體積得以大幅縮小。 本次實驗使用的 Busybox版本是busybox-1.00-pre5。進入目錄, 打開終端。 make menuconfig (進入配置界面) 下面簡要對 Busybox 的配置作一些說明: 1. 在 Build Option 菜單下,選擇靜態(tài)庫編譯方式, 這樣不用為 Busybox 提供動態(tài)鏈接庫支持。 2. 設(shè) 置交叉 編譯 器的 路 徑, 在 cross compiler prefix 中輸入 /usr/local/arm-linux/bin/arm-linux- 3. 在 Installation Op

19、tion菜單下, 自定義安裝目錄,一般使用默認 目錄 ./_install 即可。 4. 在 Linux System Utilities中有一些重要組件, 如 mount、umount。 因此要選上 Support mounting NFS file systems,即支持加載網(wǎng)絡(luò) 文件系統(tǒng),如果不選此項,則影響與 PC機的通信。 5. 在 Networking Utilities菜單下配置和網(wǎng)絡(luò)有關(guān)的命令,為了使 用網(wǎng)絡(luò)連接,其中 ping 和 ifconfig 必選。 配置好 busybox 之后保存退出。進行編譯安裝。 make make install 在生成的 _install 目

20、錄里面有 bin 、 sbin 和 usr 三個目錄,并且每 個目錄下都會有 busybox 可執(zhí)行文件的符號鏈接。 3.3 配置文件系統(tǒng) 1. 在_install目錄下倉U建 etc 目錄,并建立 inittab 、rc、motd 三個文件。 inittab 文件由系統(tǒng)啟動程序 init 讀取并解釋執(zhí)行。 chmod +x rc ( 修改屬性為可執(zhí)行 ) Motd 內(nèi)容隨意,由 /etc/rc 調(diào)用顯示在終端上。 在 etc 目錄下創(chuàng)建 init.d 目錄,并將 /etc/rc 向 /etc/init.d/rcS 做符號鏈接,此文件為 inittab 指定的啟動腳本。 mkdir init.

21、d cd init.d ln - s ./rc rcS 初始化腳本,系統(tǒng)執(zhí)行 /sbin/init ,默認情況下它會執(zhí)行 /etc/init.d/rcS 來進行系統(tǒng)的初始化,建立鏈接后,實際執(zhí)行的為 /etc/rc ,在 rc 程序中有調(diào)用 /etc/motd 文件,因此 motd 文件的內(nèi) 容最終顯示在終端上。 2. 創(chuàng)建 dev 目錄,并在該目錄下建立必要的設(shè)備。如終端設(shè)備, dsp, 聲卡,frame buffer 幀緩沖,硬盤(hda),鼠標,鍵盤,ram, 觸 摸屏等。具體見講義 P26。 3. 建立 proc 空目錄,供 proc 文件系統(tǒng)使用。 4. 建 立 lib 目 錄 將

22、交 叉 編 譯 器 鏈 接 庫 路 徑 usr/local/arm-linux/arm-linux/lib 。 然后將下面幾個庫復(fù)制到 lib 目錄: ld-2.3.2.so libc-2.3.2.so libm-2.3.2.so 再做如下軟鏈接: ln - s ld-2.3.2.so ld-linux.so.2 In s libc-2.3.2.so libc.so.6 In - s libm.so.6 libm-2.3.2.so In - s libm.so libm-2.3.2.so 分析:實驗中要用靜態(tài)鏈接的方式來運行應(yīng)用程序, 并且實驗中要 將這些庫安裝在/lib 目錄下。本實驗中安裝

23、了三個庫 ld-2.3.2.so,libc-2.3.2.so,libm-2.3.2.so。它們分別是 linux 的 動態(tài)加載器、 libc 標準的 c 庫函數(shù)和數(shù)學庫。實驗中還做了四個軟 鏈接,這些軟鏈接使其不受版本的影響,從而具有向后兼容的作用, 所有的 linux 版本都能使用這些共享庫。 至此,文件系統(tǒng)目錄構(gòu)造完畢。 在 busybox 目錄終端下: dd if=/dev/zero of=ramdisk_img bs=1k count=8912 /sbin/mke2fs ramdisk_img mount ramdisk_img -o loop 分析:第一條命令是將創(chuàng)建一個寫滿0 文件

24、,bs=1k count=8192 表明創(chuàng)建的文件大小是8192x1k=8M。第二條命令用 于構(gòu)建 e2fs 文件系統(tǒng)。 第三條命令用于將 ramdisk_img 默認掛載 至U/mnt/ramdisk目錄,-o loop 中的-o 意為 option , loop 表明 掛載的是 loopback 設(shè)備。 然后將配置好的跟文件系統(tǒng)目錄(即 _install )中的內(nèi)容全部 復(fù)制至 /mnt/ramdisk/ 目錄下。 此時遇至問題:由于一開始沒有摸清設(shè)備文件與普通文件的區(qū)別, 于是在將掛載文件系統(tǒng)前所建立的設(shè)備文件拷貝至已掛載 ramdisk 的 dev目錄時發(fā)現(xiàn)根本無法復(fù)制。之后找到了解決辦法,就是在掛載的 文件系統(tǒng)里面再次輸入一串的mkno(來建立設(shè)備。 umount /mnt/ramdisk (文件復(fù)制創(chuàng)建完畢后卸載文件系統(tǒng)) gzip ramdisk_img(壓縮映像文件生成 ramdisk_img.gz ) 在掛載與卸載過程中還遇到由于沒有遵循“一掛一卸”的原則 導(dǎo)致多次掛載后不能卸載。loop設(shè)備有l(wèi)oopO Ioop7,所以當掛載 次數(shù)過多會

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論