ramdisk作為根系統(tǒng)的配置.docx_第1頁
ramdisk作為根系統(tǒng)的配置.docx_第2頁
ramdisk作為根系統(tǒng)的配置.docx_第3頁
ramdisk作為根系統(tǒng)的配置.docx_第4頁
ramdisk作為根系統(tǒng)的配置.docx_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

轉(zhuǎn)帖從ramdisk根文件系統(tǒng)啟動(dòng)Linux成功,總結(jié)一下 今天做了個(gè)試驗(yàn),讓Linux從ramdisk根文件系統(tǒng)啟動(dòng)成功,總結(jié)一下。其中涉及的內(nèi)容較多,很多東西不再詳述,如需深入研究請查閱相關(guān)資料(百度或谷歌一下一大堆)。開發(fā)環(huán)境:Fedora 9交叉編譯工具鏈:arm-linux-gcc 4.3.2 with EABI嵌入式Linux內(nèi)核版本:-FriendlyARM。昨天寫貼子的時(shí)候具體記不清了,今天起來啟動(dòng)開發(fā)板用uname -r查一下,就是叫做-FriendlyARM,帖子已經(jīng)改好了。本文就是友善之臂的-FriendlyARM的那個(gè)版本的內(nèi)核的基礎(chǔ)上改的。其它版本的應(yīng)該也類似,僅供參考。開發(fā)板:mini2440-128M Nand FlashBootloader:u-boot-2009.11具體步驟如下:1.解壓內(nèi)核源碼樹解壓linux-2.6.29-mini2440-20090708.tgz到自己的工作目錄,會(huì)生成一個(gè)友善之臂修改過的并且有幾個(gè)mini2440默認(rèn)配置文件的內(nèi)核源碼目錄linux-2.6.29。具體步驟參照友善之臂mini2440開發(fā)板用戶手冊,具體不詳述了。2.修改內(nèi)核配置選項(xiàng)進(jìn)入內(nèi)核源碼目錄linux-2.6.29目錄#cp config_mini2440_t35 .config#make menuconfig ARCH=arm打開配置菜單,修改兩個(gè)配置項(xiàng),分別是:a):General setup-選擇 Initial RAM filesystem and RAM disk. 項(xiàng)b):Device Drivers-Block devices-選擇 RAM block device support 項(xiàng)并檢查Optimize for size是否被選中,如果沒有則選中,此項(xiàng)優(yōu)化內(nèi)核大小,根據(jù)需要進(jìn)行配置。修改(8192)Default RAM disk size kbytes選項(xiàng)為(4096)Default RAM disk size kbytes,之所以修改是因?yàn)槲抑笾谱鞯膔amdisk是4096KB大小的。當(dāng)然如果你想制作8192KB大小的ramdisk,這里就要對應(yīng)為8192了,以此類推。但是最小系統(tǒng)嘛,是不用那么大的ramdisk的。此項(xiàng)的默認(rèn)配置就是(4096),以前我改過這個(gè)配置,所以是(8192)了。如果這個(gè)大小和你做的ramdisk不匹配,則啟動(dòng)時(shí)仍然會(huì)出現(xiàn)kernel panic內(nèi)核恐慌,提示ramdisk格式不正確,掛載不上ramdisk。然后特別要注意的一點(diǎn)是,ramdisk是一種內(nèi)存虛擬磁盤技術(shù),實(shí)質(zhì)上并不是一種文件系統(tǒng),它使用的文件系統(tǒng)時(shí)ext2文件系統(tǒng)。所以一定要在make menuconfig ARCH=arm的時(shí)候進(jìn)入File systems菜單,選上 Second extended fs support。以提供內(nèi)核對ext2文件系統(tǒng)的支持。我以前添加過了ext2文件系統(tǒng)了,所以開始的時(shí)候在此沒有說明,在此為了說明為什么有的人照著我的方法做了,但是仍然kernel panic,特別把這一步也加上。然后保存配置退出。這樣就為內(nèi)核添加好了ramdisk啟動(dòng)功能和ramdisk的驅(qū)動(dòng)支持了。3.修改內(nèi)核啟動(dòng)參數(shù)方法有二:a):修改.config的第310行,修改CONFIG_CMDLINE=的定義修改為CONFIG_CMDLINE=initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M保存。意思為從ramdisk啟動(dòng),ramdisk壓縮文件起始地址在內(nèi)存地址0x31000000處,文件大小為0x200000。此參數(shù)也可以在make menuconfig ARCH=arm時(shí)進(jìn)入Boot options菜單,然后在Default kernel command string里修改。效果是一樣的。b):或者不修改.config的的第310行CMDLINE定義,而是用u-boot的bootargs環(huán)境變量來傳遞啟動(dòng)參數(shù)。同樣也是修改該環(huán)境變量為bootargs=initrd=0x31000000,0x200000 root=/dev/ram0 rw init=/linuxrc console=ttySAC0 mem=64M并saveenv保存u-boot環(huán)境變量以上a),b)的效果是一樣的。4.編譯內(nèi)核#make zImage ARCH=arm CROSS_COMPILE=arm-linux-然后是二十分鐘左右的等待。編譯完成后在當(dāng)前目錄下就出現(xiàn)了zImage內(nèi)核映像了。好像友善之臂把內(nèi)核源碼目錄里的uImage目標(biāo)給注釋了,以前在論壇里看到過有人說,直接make uImage好像提示沒有uImage的目標(biāo)。所以我就先制作zImage,然后再用u-boot的mkimage工具轉(zhuǎn)化為uImage。其實(shí)uImage就是在zImage的開頭部分增加了一個(gè)64字節(jié)的內(nèi)核映像說明。5.制作uImage內(nèi)核映像由于我使用的Bootloader是u-boot,所以要將zImage轉(zhuǎn)化為uImage,方法如下:#mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -n Linux kernel Image -d zImage uImage-ramdisk說明:mkimage工具是u-boot格式uImage內(nèi)核映像制作工具。如果成功編譯u-boot之后,它會(huì)在u-boot源碼樹下的tools目錄之下。建議將其拷貝到宿主機(jī)的/sbin/目錄下,以方便使用。mkimage使用時(shí)的具體參數(shù)不再詳述,不清楚的請自己查閱。6.制作ramdisk根文件系統(tǒng)該過程是制作ramdisk根文件系統(tǒng)的核心步驟,方法如下:a)創(chuàng)建根文件系統(tǒng)目錄:#cd轉(zhuǎn)入到你的工作目錄。#mkdir rootfs#cd rootfs#mkdir bin dev etc lib proc sbin sys usr mnt tmp var#mkdir usr/bin usr/lib usr/sbin lib/modulesb)創(chuàng)建最基本的設(shè)備文件:#cd dev#mknod -m 666 console c 5 1#mknod -m 666 null c 1 3#cd .c)安裝/etc配置文件:這里可以直接把友善之臂的root_qtopia里的幾個(gè)基本的配置文件拷貝過來,只拷貝必要的即可,并對其內(nèi)容進(jìn)行刪減,因?yàn)槲易龅膔amdisk并不包含Qtopia等,全拷貝過來也沒有用。我是從網(wǎng)上找的最小系統(tǒng)的etc配置文件直接解壓到我制作的根文件系統(tǒng)里了,并做參照友善之臂的root_qtopia添加了一些內(nèi)容,見最后的說明。操作如下:#tar etc.tar.gz -C /xxx/rootfsxxx表示你要制作的rootfs所在的目錄。d)編譯內(nèi)核模塊:方法是如下:進(jìn)入Linux內(nèi)核源碼目錄(linux-2.6.29)#make modules ARCH=arm CROSS_COMPILE=arm-linux-e)安裝內(nèi)核模塊:#make modules_install ARCH=arm INSTALL_MOD_PATH=/xxx/rootfsxxx表示你要制作的rootfs所在的目錄。f)配置busybox進(jìn)入busybox目錄執(zhí)行#make menuconfig進(jìn)入Busybox Settings - build Options -選中Build busybox as a static binary“,即靜態(tài)鏈接,免去拷貝大量的庫文件。Installation Options - 選中Dont use /usr,以免busybox不慎被安裝到宿主機(jī)系統(tǒng)的相應(yīng)目錄下,破壞宿主機(jī)系統(tǒng)。Busybox Installation Prefix (/xxx/rootfs),修改該選項(xiàng)表明編譯后的busybox將安裝到該位置。g)編譯、安裝busybox#make ARCH=arm CROSS_COMPILE=arm-linux-幾分鐘編譯完成后#make install安裝到Busybox Installation Prefix (/xxx/rootfs)設(shè)定的目錄里。當(dāng)前為我要制作的根文件系統(tǒng)目錄(/xxx/rootfs)。h)制作ramdisk根文件系統(tǒng)鏡像方法如下:上/下載可以簡單方便的制作ramdisk文件系統(tǒng)的工具genext2fs,這樣就不用像網(wǎng)上大多數(shù)說的那樣繁瑣的制作ramdisk映像了,當(dāng)前最新版本為genext2fs-1.4.1.tar.gz 。編譯生成該工具genext2fs,并將其放入宿主機(jī)的/sbin/目錄下以方便使用。跳轉(zhuǎn)到要制作的rootfs的上一級(jí)目錄#genext2fs -b 4096 -d rootfs ramdisk-b是指制作的ramdisk大小為4096K字節(jié)-d是指要制作成ramdisk的根文件系統(tǒng)目錄最后的ramdisk是制作出來的ramdisk的名字,當(dāng)然可以改名了。#gzip -9 -f ramdisk將該ramdisk以最優(yōu)方式壓縮為ramdisk.gz7.下載內(nèi)核映像和ramdisk映像啟動(dòng)u-boot,暫停u-boot自動(dòng)啟動(dòng),在u-boot命令行中鍵入如下命令下載內(nèi)核和ramdisk映像:u-bootMINI2440# tftp 0x32000000 uImage-ramdiskdm9000 i/o: 0x20000300, id: 0x90000a46DM9000: running in 16 bit modeMAC: 08:08:11:18:12:27operating at 100M full duplex modeUsing dm9000 deviceTFTP from server 17; our IP address is 30Filename uImage-ramdisk.Load address: 0x32000000Loading: T T # # #doneBytes transferred = 1917752 (1d4338 hex)u-bootMINI2440# tftp 0x31000000 ramdisk.gzdm9000 i/o: 0x20000300, id: 0x90000a46DM9000: running in 16 bit modeMAC: 08:08:11:18:12:27operating at 100M full duplex modeUsing dm9000 deviceTFTP from server 17; our IP address is 30Filename ramdisk.gz.Load address: 0x31000000Loading: T T # #doneBytes transferred = 1002594 (f4c62 hex)8)使用ramdisk根文件系統(tǒng)啟動(dòng)內(nèi)核在u-boot命令行下鍵入如下命令啟動(dòng)系統(tǒng):bootm 0x32000000# Booting kernel from Legacy Image at 32000000 . Image Name: Linux--FriendlyARM Created: 2010-04-09 15:13:52 UTC Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1917688 Bytes = 1.8 MB Load Address: 30008000 Entry Point: 30008000 Verifying Checksum . OK Loading Kernel Image . OKOKStarting kernel .Uncompressing Linux. done, booting the kernel.Linux version -FriendlyARM (rootlocalhost.localdomain) (gcc version 4.3.2 (Sourcery G+ Lite 2008q3-72) ) #3 Fri Apr 9 23:13:36 CST 2010CPU: ARM920T 41129200 revision 0 (ARMv4T), cr=c0007177CPU: VIVT data cache, VIVT instruction cacheMachine: FriendlyARM Mini2440 development boardMemory policy: ECC disabled, Data cache writeback中間過長的內(nèi)容在此省略了RAMDISK: Compressed image found at block 0VFS: Mounted root (ext2 filesystem) on device 1:0.Freeing init memory: 136Keth0: link downProcessing /etc/profile. Done# eth0: link up, 100Mbps, full-duplex, lpa 0x45E1至

溫馨提示

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

評(píng)論

0/150

提交評(píng)論