Zynq-7000移植——根文件系統(tǒng)ramdisk擴(kuò)容教程
掃描二維碼
隨時(shí)隨地手機(jī)看文章
前言
由于zynq 7000系列 自帶的文件系統(tǒng)(ramdisk)大小為16M的,而我現(xiàn)在使用的開發(fā)板中,除去嵌入式linux系統(tǒng)所需要的存儲(chǔ)空間后,剩余的空間只有4M多了。當(dāng)在開發(fā)過程中移植一些庫或者程序到文件系統(tǒng),16M的文件系統(tǒng)容量更顯的相形見絀了。所以給文件系統(tǒng)擴(kuò)容是給zynq 7000 系列開發(fā)新功能的重要環(huán)節(jié)。
目前我在我的zynq 開發(fā)版上測(cè)試,成功將根文件系統(tǒng)擴(kuò)容到336M,至于為什么只能擴(kuò)容到336M,暫時(shí)還沒找到相關(guān)的資料(我的zynq 開發(fā)版硬件ddr3是4G,內(nèi)存是512M),如果有知道原因的,懇請(qǐng)留言評(píng)論,在此感激不盡。
根文件系統(tǒng)ramdisk擴(kuò)容分為三個(gè)步驟(以擴(kuò)容24M為例):
- 制作存儲(chǔ)空間為24M的根文件系統(tǒng)(ramdisk.image.gz)
- 拷貝原有的linux文件系統(tǒng)中的所有文件
- 制作支持24M以上的linux內(nèi)核文件(uImage)
制作存儲(chǔ)空間為24M的根文件系統(tǒng)
制作存儲(chǔ)空間為24M的根文件系統(tǒng),使用到三個(gè)命令:
dd命令: 作用是用指定大小的塊拷貝一個(gè)文件,并在拷貝的同時(shí)進(jìn)行指定的轉(zhuǎn)換 mke2fs命令:作用是將鏡像文件制作成ext2格式的文件系統(tǒng) tune2fs命令:作用是調(diào)整和查看ext2/ext3文件系統(tǒng)的文件系統(tǒng)參數(shù) 123
三個(gè)命令的簡單介紹:
-
dd命令:
主要選項(xiàng): if=file 輸入文件名,默認(rèn)為標(biāo)準(zhǔn)輸入 of=file 輸出文件名,默認(rèn)為標(biāo)準(zhǔn)輸出 ibs=bytes 一次讀入bytes個(gè)字節(jié)(即一個(gè)塊大小為bytes個(gè)字節(jié)) obs=bytes 一次寫入bytes個(gè)字節(jié) bs=bytes 同時(shí)設(shè)置讀和寫的塊大小為bytes cbs=bytes 一次轉(zhuǎn)換bytes個(gè)字節(jié) skip=blocks 從輸入文件開頭跳過blocks個(gè)塊后再開始復(fù)制 seek=blocks 從輸出文件開頭跳過blocks個(gè)塊后再開始復(fù)制 count=blocks 僅僅拷貝blocks個(gè)塊,塊大小等于ibs指定的字節(jié)數(shù) 1234567891011 -
mke2fs命令:
一般用法: mke2fs -F 設(shè)備 -L 標(biāo)簽名稱 -m xx% -b 區(qū)塊大小 -b<區(qū)塊大小> 指定區(qū)塊大小,單位為字節(jié)。 -c 檢查是否有損壞的區(qū)塊。 -f<不連續(xù)區(qū)段大小> 指定不連續(xù)區(qū)段的大小,單位為字節(jié)。 -F 不管指定的設(shè)備為何,強(qiáng)制執(zhí)行mke2fs。 -i<字節(jié)> 指定"字節(jié)/inode"的比例。 -N 指定要建立的inode數(shù)目。 -l<文件> 從指定的文件中,讀取文件西中損壞區(qū)塊的信息。 -L<標(biāo)簽> 設(shè)置文件系統(tǒng)的標(biāo)簽名稱。 -m<百分比值> 指定給管理員保留區(qū)塊的比例,預(yù)設(shè)為5%。 -M 記錄最后一次掛入的目錄。 -q 執(zhí)行時(shí)不顯示任何信息。 -r 指定要建立的ext2文件系統(tǒng)版本。 -R=<區(qū)塊數(shù)> 設(shè)置磁盤陣列參數(shù)。 -S 僅寫入superblock與group descriptors,而不更改inode able inode bitmap以及block bitmap。 -v 執(zhí)行時(shí)顯示詳細(xì)信息。 -V 顯示版本信息。 1234567891011121314151617181920 -
tune2fs命令:
常用選項(xiàng)說明: -l 查看文件系統(tǒng)信息 -c max-mount-counts 設(shè)置強(qiáng)制自檢的掛載次數(shù),如果開啟,每掛載一次mount conut就會(huì)加1,超過次數(shù)就會(huì)強(qiáng)制自檢 -i interval-between-checks[d|m|w] 設(shè)置強(qiáng)制自檢的時(shí)間間隔[d天m月w周] -m reserved-blocks-percentage 保留塊的百分比 -j 將ext2文件系統(tǒng)轉(zhuǎn)換為ext3類型的文件系統(tǒng) -L volume-label 類似e2label的功能,可以修改文件系統(tǒng)的標(biāo)簽 -r reserved-blocks-count 調(diào)整系統(tǒng)保留空間 -o [^]mount-option[,...] Set or clear the indicated default mount options in the filesystem. 設(shè)置或清除默認(rèn)掛載的文件系統(tǒng)選項(xiàng) 12345678910
好了,啰嗦了那么多,現(xiàn)在來看制作存儲(chǔ)空間為24M的根文件系統(tǒng)的詳細(xì)步驟。
1. 制作 ramdisk 文件系統(tǒng)
1)建立文件系統(tǒng)映象,設(shè)置文件系統(tǒng)大小為24576/1024 = 24M :
Host# dd if=/dev/zero of=ramdisk.image bs=1k count=24576 1
2)格式化為 ext2 文件系統(tǒng):
Host# mke2fs -F ramdisk.image -L“24M volume” -b 1024 -m 0 1
3)調(diào)整和查看 ext2/ext3 文件系統(tǒng)的文件系統(tǒng)參數(shù):
Host# tune2fs ramdisk.image -i 0 1
4)修改權(quán)限:
Host# chmod a+rwx ramdisk.image 1
5)壓縮鏡像文件,生成 ramdisk.image.gz :
Host# gzip -v9 ramdisk.image 1
拷貝原有的linux文件系統(tǒng)中的所有文件
擴(kuò)容的根文件系統(tǒng)(ramdisk.image.gz)已經(jīng)生成,但剛才生成的跟文件系統(tǒng)里什么東西都沒有,而能運(yùn)行l(wèi)inux系統(tǒng)的根文件系統(tǒng),需要很多系統(tǒng)文件,直接拷貝原有的linux文件系統(tǒng)中的所有文件,到這個(gè)新生成的根文件系統(tǒng)中,就能像以前運(yùn)行l(wèi)inux系統(tǒng)。
1)提取 initrd 鏡像文件:
Host# gunzip ramdisk.image.gz 1
2)掛載 initrd 鏡像文件:
Host# chmod u+rwx ramdisk.image Host# mkdir tmp_mnt/ Host# mount -o loop ramdisk.image tmp_mnt/ 123
3)提取 原有的initrd 鏡像文件:
Host# gunzip ramdisk.image.gz 1
4)掛載 原有的initrd 鏡像文件: 新建一個(gè)目錄src_ramdisk,將原有的根文件系統(tǒng)放如這個(gè)目錄下。
Host# cd src_ramdisk Host# chmod u+rwx ramdisk.image Host# mkdir tmp_mnt/ Host# mount -o loop ramdisk.image tmp_mnt/ Host# cd tmp_mnt/ 12345
5)將原來的文件系統(tǒng)中的所有文件復(fù)制到tmp_mnt中:
Host# cp -ri * ../tmp_mnt 1
6)壓縮ramdisk.image,并生成 uramdisk.image
Host# cd .. Host# gzip ramdisk.image.gz Host# mkimage -A arm -T ramdisk -C gzip -d ramdisk.image.gz uramdisk.image.gz 123
制作支持24M以上的linux內(nèi)核文件
我們將文件系統(tǒng)擴(kuò)容后,在啟動(dòng)過程中可能會(huì)報(bào)錯(cuò),報(bào)錯(cuò)的原因是在內(nèi)核配置里預(yù)留的啟動(dòng)內(nèi)存空間不夠引起的,所以需要改內(nèi)核的配置,從新編譯,內(nèi)核配置要改的地方如下:
# make ARCH=arm menuconfig 1


保存設(shè)置后,編譯生成uImage:
Host# make -j 4 ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- UIMAGE_LOADADDR=0X8000 uImage 1
驗(yàn)證
將修改好的uImage 和ramdisk 復(fù)制到sd卡中,并加載進(jìn)入系統(tǒng)。
使用 df -h 命令查看空間使用情況。
Host# df -h 1





