版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第7章嵌入式Linux操作系統(tǒng)的移植 本章主要內(nèi)容7.1 Bootloader7.2 Linux的移植7.3 根文件系統(tǒng)的制作 思考與習題本章主要內(nèi)容 本章介紹將Linux-移植到ARM平臺的過程,開發(fā)板為廣州友善之臂公司計算機科技有限公司的mini2440開發(fā)板。這里要說明的是,從Linux-2.6.32開始,Linux內(nèi)核已經(jīng)對mini2440開發(fā)板有了有限的支持,因此,我們這里主要介紹移植的方法。 Linux移植必然要涉及到驅(qū)動程序的移植,而Linux驅(qū)動程序足足可以寫一本書,所以,本章只簡單的介紹移植Linux的流程,對于驅(qū)動程序則不作過多介紹,讀者可以參考相關(guān)書籍進行深入學習。7.1
2、 Bootloader7.1.1 Bootloader簡介7.1.2 常見Bootloader回本章目錄7.1 Bootloader7.1.1 Bootloader簡介 Bootloader是在操作系統(tǒng)內(nèi)核運行之前運行的一段程序,它類似于PC中的BIOS程序。通過這段程序,可以完成硬件設(shè)備的初始化,并建立內(nèi)存空間的映射關(guān)系,從而將系統(tǒng)的軟/硬件環(huán)境帶到一個合適的狀態(tài),為最終加載系統(tǒng)內(nèi)核做好準備。 大多數(shù)Bootloader都包含兩種不同的操作模式:(1) 啟動加載模式(2) 下載模式回本節(jié)目錄7.1 Bootloader7.1.1 Bootloader簡介(續(xù))(2) 下載模式 下載模式是目標
3、機上的Bootloader將通過串口連接或網(wǎng)絡(luò)連接等通信手段從主機下載文件,如下載內(nèi)核映像和根文件系統(tǒng)映像等。從主機下載的文件通常首先被Bootloader保存到目標機的RAM中,然后被Bootloader寫入到目標機上的固態(tài)存儲設(shè)備中。Bootloader的這種模式在系統(tǒng)更新時使用。 工作于這種模式下的Bootloader通常都會向它的終端用戶提供一個簡單的命令行接口。7.1 Bootloader7.1.1 Bootloader簡介(續(xù))Bootloader的啟動流程一般分為兩個階段:stage1和stage2。stage1的代碼一般用匯編語言編寫stage2的代碼一般用C語言編寫。7.1
4、Bootloader7.1.1 Bootloader簡介(續(xù))(2)stage2主要完成以下工作 用匯編語言跳轉(zhuǎn)到stage2的入口函數(shù)。 初始化本階段要使用到的硬件設(shè)備,包括初始化串口、初始化定時器等。 檢測系統(tǒng)的內(nèi)存映射,所謂內(nèi)存映射就是指在整個物理地址空間中指出哪些地址范圍被分配用來尋址系統(tǒng)的內(nèi)存。 加載內(nèi)核映像和根文件系統(tǒng)映像,這里包括規(guī)劃內(nèi)存占用的布局和從Flash上復制數(shù)據(jù)。 設(shè)置內(nèi)核的啟動參數(shù)并啟動內(nèi)核。7.1 Bootloader7.1.2 常見Bootloader1)Redboot Redboot是Redhat公司隨eCos發(fā)布的一個BOOT方案,是一個開源項目。Redboo
5、t支持的處理器構(gòu)架有ARM、MIPS、MN10300、PowerPC、Renesas SHx、v850、x86等。 Redboot的特性有: 支持eCos、Linux操作系統(tǒng)引導; 在線讀寫Flash; 支持串行口kermit,S-record下載代碼; 監(jiān)控(Monitor)命令集,包括讀寫I/O,內(nèi)存,寄存器、內(nèi)存、外設(shè)測試功能等?;乇竟?jié)目錄7.1 Bootloader7.1.2 常見Bootloader(續(xù))2)UBoot UBoot(Universal Bootloader)是由開源項目PPCBoot發(fā)展起來的,它是在GPL下資源代碼最完整的一個通用Bootloader。目前UBoot
6、差不多以每隔3個月發(fā)布一次。UBoot的官網(wǎng)是http:/www.denx.de/wiki/U-Boot。 UBoot支持的處理器構(gòu)架包括PowerPC、ARM、MIPS、x86等,UBoot提供兩種操作模式:啟動加載模式和下載模式,并具有大型Boot Loader的全部功能。7.1 Bootloader7.1.2 常見Bootloader(續(xù))3)vivi vivi是當前比較流行的專為ARM9處理器而設(shè)計的一款Bootloader,它操作簡便,同時提供了完備的命令體系。vivi是由韓國Mizi公司開發(fā)的一種Bootloader,適合于ARM9處理器,支持S3C2410 x處理器,其源代碼可以
7、在網(wǎng)站下載。 一個功能完備的大型Bootloader的工作量,相當于一個小型的操作系統(tǒng)。由于Bootloader的移植比較復雜,這里就不能詳述了,讀者可以查閱其他資料。7.2 Linux的移植7.2.1 安裝前的準備工作7.2.2 Linux的移植步驟回本章目錄7.2 Linux的移植7.2.1 安裝前的準備工作(續(xù))1)熟悉硬件 mini2440的Bootloader對NAND Flash的分區(qū)如下。分區(qū)名稱起始地址分區(qū)大小vivi0 x000000000 x00040000param0 x000400000 x00020000kernel0 x000600000 x00500000root
8、0 x005600000 x3fa80000 IIC。mini2440具有一個直接連接CPU的IIC信號引腳的EEPROM 芯片AT24C08,它的容量為1024B,器件地址為A0。 DM9000。mini2440采用了DM9000網(wǎng)卡芯片,它可以自適應 10/100Mbit/s網(wǎng)絡(luò)。MAC地址需要通過軟件設(shè)定。7.2 Linux的移植7.2.1 安裝前的準備工作(續(xù))1)熟悉硬件 UDA134x。mini2440分別使用CPU的GPB2、GPB3、GPB4端口模擬實現(xiàn)L3-Bus規(guī)范的L3MODE、L3DATA、L3CLOCK。 以上內(nèi)容在mini2440的平臺設(shè)備文件(arch/arm/m
9、ach-s3c2440/mach-mini2440.c)中,讀者可以查看該文件以了解詳細內(nèi)容。7.2 Linux的移植7.2.1 安裝前的準備工作(續(xù))2)獲取內(nèi)核源代碼 Linux版本很多,而且更新很快。我們這里選擇Linux-作為我們移植的對象。 Linux內(nèi)核的官網(wǎng)地址為/,該網(wǎng)站列出了最近更新的幾個穩(wěn)定版。讀者要下載歷史版本,可以從/pub/linux/kernel/下載。7.2 Linux的移植7.2.1 安裝前的準備工作(續(xù))3)檢測移植環(huán)境 桌面Linux發(fā)行版:這里選擇fedora 14。 make程序:要編譯Linux沒有make程序是不行的,用戶可以使用make -v命令來
10、查看make是否存在以及其版本號。 交叉編譯器:交叉編譯器的安裝在6.2節(jié)已經(jīng)介紹過,這里不再重復。 必要的庫:這里必要的庫很難一一列出,如果出現(xiàn)了Linux需要而系統(tǒng)中不存在的庫,Linux會有提示,fedora用戶可以使用yum命令來下載并安裝所需的庫。7.2 Linux的移植7.2.1 安裝前的準備工作(續(xù))4)下載YAFFS2 YAFFS/YAFFS2文件系統(tǒng)是專門針對NAND Flash設(shè)計,其具有可寫入、修改并能永久保存文件的特性,并提供了損耗平衡和掉電保護。 在Linux下,使用命令 git clone git:/www.aleph1.co.uk/yaffs2來下載YAFFS2的
11、源代碼。YAFFS的官網(wǎng)地址為/,讀者可以查看該網(wǎng)站以了解YAFFS的有關(guān)信息。7.2 Linux的移植7.2.1 安裝前的準備工作(續(xù))4)下載YAFFS2csufedora Documents$ git clone git:/www.aleph1.co.uk/yaffs2Cloning into yaffs2.remote: Counting objects: 6930, doneremote: Compressing objects: 100% (4153/4153), doneremote: Total 6930 (delta 5484), reused 3476 (delta 270
12、0)Receiving Objects: 100% (6930/6930), 3.42MiB | 17 Kibit/s, done.Receiving deltas: 100% (5484/5484), done7.2 Linux的移植7.2.2 Linux的移植步驟(續(xù))2)建立自己的平臺文件 在Linux內(nèi)核中,每個支持的開發(fā)板都有一個平臺文件,Linux自帶的mini2440開發(fā)板的平臺文件為“arch/arm/mach-s3c2440/mach-mini2440.c”。我們這里就使用內(nèi)核自帶的平臺設(shè)備文件,讀者可以自己查看該文件以學習平臺設(shè)備文件的寫法。 如果使用內(nèi)核不支持的平臺移植,
13、或為內(nèi)核添加一個新平臺時,需要自己創(chuàng)建一個新的平臺設(shè)備文件,并需要修改平臺設(shè)備文件下的Makefile文件和Kconfig文件,其中Makefile文件負責編譯,Kconfig文件用于配置。7.2 Linux的移植7.2.2 Linux的移植步驟(續(xù))3)修改驅(qū)動程序 驅(qū)動程序要根據(jù)實際情況進行修改,對于mini2440,這里有三個關(guān)鍵的地方需要修改,其他需要修改的內(nèi)容這里就不再一一列舉。 (1)UDA134x驅(qū)動mini2440的聲卡驅(qū)動 (2)DM9000驅(qū)動mini2400的網(wǎng)卡驅(qū)動 (3)為DM9000指定MAC地址mini2440所用的DM9000網(wǎng)卡并沒有外接EEPROM用以存儲M
14、AC地址,即MAC地址需要通過軟件進行修改7.2 Linux的移植7.2.2 Linux的移植步驟(續(xù))3)修改驅(qū)動程序(2)DM9000驅(qū)動static int _init dm9000_init(void)#if defined(CONFIG_MACH_MINI2440)#include unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON;*(volatile unsigned int *)S3C2410_BWSCON) = ( oldval_bwscon & (3dev_addr) /* try re
15、ading from mac */mac_src = chip;for (i = 0; i dev_addri = ior(db, i+DM9000_PAR);#if defined(CONFIG_MACH_MINI2440)/* 指定MAC 地址為 08:90:90:90:90:90 */memcpy(ndev-dev_addr, x08x90 x90 x90 x90 x90, 6);#endif7.2 Linux的移植7.2.2 Linux的移植步驟(續(xù))4)配置內(nèi)核cd /home/csu/fedoramake ARCH=arm menuconfig7.2 Linux的移植7.2.2 L
16、inux的移植步驟(續(xù))4)配置內(nèi)核 內(nèi)核可以配置的選項有兩種: 一種是使用用方括號的選項,這種選項可以選擇編譯進內(nèi)核( * )或者不編譯( ); 另一種選項使用的是尖括號,這種選項可以選擇編譯進內(nèi)核()、編譯成模塊()或者不編譯()。 按空格鍵可以在這幾個選項間切換,按Y鍵選擇編譯進內(nèi)核,按M鍵選擇編譯成模塊,按N鍵選擇不編譯。7.2 Linux的移植7.2.2 Linux的移植步驟(續(xù))4)配置內(nèi)核 除了使用menuconfig,還可以使用xconfig或gconfig來使用圖形界面進行配置。 內(nèi)核的配置根據(jù)實際情況進行選擇,這里只列出幾個關(guān)鍵的選項,其他選項讀者可以自己查找相關(guān)資料。(1
17、)系統(tǒng)類型(2)內(nèi)核特性(3)設(shè)備驅(qū)動(4)文件系統(tǒng)7.2 Linux的移植7.2.2 Linux的移植步驟(續(xù))4)配置內(nèi)核(1)系統(tǒng)類型系統(tǒng)類型決定要將Linux移植到哪個平臺7.2 Linux的移植7.2.2 Linux的移植步驟(續(xù))4)配置內(nèi)核(2)內(nèi)核特性內(nèi)核特性決定Linux內(nèi)核的一些基本特性7.2 Linux的移植7.2.2 Linux的移植步驟(續(xù))4)配置內(nèi)核(2)內(nèi)核特性 這里要注意兩點: 一是使能Use the ARM EABI to compile the kernel后,要在圖7-3的Floating point emulation中選擇至少一項,一般就選NWFPE
18、 math emulation; 二是從Linux- 2.6.36開始,參數(shù)的傳遞方式有所改變,mini2440的Bootloader仍然使用的是舊方式,所以這里要選擇Provide old way to pass kernel parameters,以允許舊的參數(shù)傳遞方式。7.2 Linux的移植7.2.2 Linux的移植步驟(續(xù))4)配置內(nèi)核(3)設(shè)備驅(qū)動 Linux提供的設(shè)備驅(qū)動很多,要根據(jù)實際情況進行選擇,這里就不再一一列舉了。7.2 Linux的移植7.2.2 Linux的移植步驟(續(xù))4)配置內(nèi)核(4)文件系統(tǒng) 決定Linux支持的文件系統(tǒng),這里選擇yaffs2,一般FAT格式要
19、選擇,這樣就可以讀取SD卡上的文件,NFS文件系統(tǒng)在調(diào)試文件系統(tǒng)時很有用。7.2 Linux的移植7.2.2 Linux的移植步驟(續(xù))5)編譯內(nèi)核 使用如下命令編譯內(nèi)核:make ARCH=arm CROSS_COMPILE=arm-linux- -j2 zImage 其中,CROSS_COMPILE指定了交叉編譯器的前綴,zImage是最終的目標,是壓縮版的內(nèi)核,-j2表示使用兩個編譯線程,可以加快編譯速度。 編譯好的zImage文件保存在arch/arm/boot目錄下。7.2 Linux的移植7.2.2 Linux的移植步驟(續(xù))6)編譯內(nèi)核模塊 使用如下命令編譯內(nèi)核模塊:make A
20、RCH=arm CROSS_COMPILE=arm-linux- modules7.3 根文件系統(tǒng)的制作 只有內(nèi)核而沒有文件系統(tǒng)是工作不起來的,根文件系統(tǒng)是內(nèi)核啟動時使用的第一個文件系統(tǒng),根文件系統(tǒng)由一系列目錄組成,目錄中包含了應用程序、C語言庫以及相關(guān)的配置文件?;乇菊履夸?.3 根文件系統(tǒng)的制作 Busybox是一個集成了一百多個最常用Linux命令和工具的軟件,它甚至還集成了一個http服務(wù)器和一個telnet服務(wù)器,而所有這一切功能卻只有區(qū)區(qū)1MB左右的大小。Busybox把常用的工具和命令集成壓縮在一個可執(zhí)行文件里,功能基本不變,而大小卻小了很多,在嵌入式Linux中有非常廣的應用。
21、7.3 根文件系統(tǒng)的制作 Busybox基于這樣一個事實:很多標準Linux工具都可以共享很多共同的元素。例如,很多基于文件的工具(比如grep和find)都需要在目錄中搜索文件的代碼。當這些工具被合并到一個可執(zhí)行程序中時,它們就可以共享這些相同的元素,這樣可以產(chǎn)生更小的可執(zhí)行程序。實際上,Busybox可以將大約3.5MB的工具包裝成大約200KB大小。這就為可引導的磁盤和使用Linux的嵌入式設(shè)備提供了更多功能。7.3 根文件系統(tǒng)的制作 根文件系統(tǒng)的制作流程如下所述。1)下載Busybox Busybox的官網(wǎng)是,用戶可到/downloads/ 網(wǎng)站下載。Busybox也有多個版本,用戶可
22、以選擇合適的版本下載。這里以最新的Busybox-1.19.4為例來說明。7.3 根文件系統(tǒng)的制作2)建立根文件系統(tǒng)目錄 用戶可以使用如下命令來建立所有必須的文件。csufedora $ mkdir rootfscsufedora $ cd rootfs/csufedora rootfs$ mkdir bin dev etc home lib mnt opt proc root sbin tmp usr varcsufedora rootfs$ mkdir usr/bin usr/lib usr/sbin lib/modules7.3 根文件系統(tǒng)的制作3)創(chuàng)建必要的設(shè)備文件 用戶需要使用如下命
23、令來建立console和null兩個設(shè)備文件。csufedora rootfs$ cd devcsufedora dev$ mknod -m 666 console c 5 1csufedora dev$ mknod -m 666 null c 1 37.3 根文件系統(tǒng)的制作4)配置Busybox 依次執(zhí)行如下命令來開始配置Busybox:csufedora $ tar xjf busybox-1.19.4.tar.bz2csufedora $ cd busybox-1.19.4csufedora busybox-1.19.4$ make menuconfig7.3 根文件系統(tǒng)的制作4)配置B
24、usybox Busybox的配置這里不再詳細說明,只說明三點。(1)為了避免出錯,需要選擇“Dont use /usr”。Busybox Settings -General Configuration -* Dont use /usr(2)這里將Busybox編譯為動態(tài)鏈接,并制定交叉編譯器前綴。Build Options - Build BusyBox as a static binary (arm-linux-) Cross Compiler prefix(3)指定將Busybox安裝的位置,即上面的rootfs文件夾。 Installation Options (make instal
25、l behavior) -What kind of applet links to install (as soft-links) -(/home/csu/rootfs) BusyBox installation prefix7.3 根文件系統(tǒng)的制作5)編譯并安裝Busybox 使用命令make來編譯Busybox,使用命令make install命令將Busybox安裝到配置時指定的目錄。6)安裝必要的庫 由于這里使用了動態(tài)鏈接,所以需要將使用到的庫復制到rootfs/lib目錄下。讀者可以使用arm-linux-readelf -d命令來查看需要的庫。這里為了方便,將交叉編譯器中所有的庫復
26、制過來,因為即使Busybox不使用這些庫,其他應用程序也可能要使用這些庫。7.3 根文件系統(tǒng)的制作7)編寫配置文件 至少需要編寫如下配置文件:etc/init.d/rcSetc/inittabetc/profileetc/resolv.confetc/ inetd.confetc/fstabetc/passwd7.3 根文件系統(tǒng)的制作7)編寫配置文件 這幾個文件的作用是:rcS:啟動腳本文件,inittab:init進程按照inittab文件所提供的信息創(chuàng)建進程,profile:主要負責系統(tǒng)的環(huán)境變量,resolv.conf:是域名解析器的配置文件,inetd.conf:保存了系統(tǒng)提供int
27、ernet服務(wù)的數(shù)據(jù)庫,fstab:存放系統(tǒng)的文件系統(tǒng)信息,passwd:用于存放用戶關(guān)鍵信息。7.3 根文件系統(tǒng)的制作7)編寫配置文件(1)etc/init.d/rcS需要開啟該文件的執(zhí)行權(quán)限。#!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin runlevel=S prevlevel=N umask 022 export PATH runlevel prevlevel /bin/hostname Micro2440/bin/mount -aecho /sbin/mdev/proc/sys/kernel/hotplug mdev -smkdir /dev/ptsmount -t devpts
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026屆銀川市重點中學高三英語第一學期期末達標測試試題含解析
- 票據(jù)管理制度適用范圍(3篇)
- 藥品紙箱管理制度范本(3篇)
- 設(shè)計工時管理制度范本(3篇)
- 輔材配件管理制度范本(3篇)
- 野生種質(zhì)資源圃管理制度(3篇)
- 防疫臨時駐場人員管理制度(3篇)
- 食品品質(zhì)責任管理制度內(nèi)容(3篇)
- 疾病預防與安全應急 溺水的預防與急救 課件2025-2026學年人教版初中+體育與健康七年級全一冊
- 中學學生社團財務(wù)管理制度
- 2026年藥店培訓計劃試題及答案
- 2026春招:中國煙草真題及答案
- 六年級寒假家長會課件
- 物流鐵路專用線工程節(jié)能評估報告
- 2026河南省氣象部門招聘應屆高校畢業(yè)生14人(第2號)參考題庫附答案
- 2026天津市南開區(qū)衛(wèi)生健康系統(tǒng)招聘事業(yè)單位60人(含高層次人才)備考核心試題附答案解析
- 2025江蘇無錫市宜興市部分機關(guān)事業(yè)單位招聘編外人員40人(A類)備考筆試試題及答案解析
- 卵巢過度刺激征課件
- 漢服行業(yè)市場壁壘分析報告
- 重瞼手術(shù)知情同意書
- 2026華潤燃氣校園招聘(公共基礎(chǔ)知識)綜合能力測試題附答案解析
評論
0/150
提交評論