基于嵌入式Cramfs 的根文件系統(tǒng)配置新方法
網(wǎng)絡(luò)類,包括/etc/gated.conf、/etc/networks、/etc/protocols、/etc/gateway、/etc/services、 /etc/inetd.conf、/etc/sysconfig/netword、/etc/recolv.conf、/etc/rpc、/etc/exports 等文件,它們 記錄著系統(tǒng)對(duì)網(wǎng)絡(luò)接口的配置信息、網(wǎng)絡(luò)服務(wù)程序、網(wǎng)絡(luò)協(xié)議、網(wǎng)絡(luò)文件系統(tǒng)配置等信息。
系統(tǒng)命令類,包括/etc/lilo.conf、/etc/logrotate.conf、/et/identd.conf、/etc/ld.so.conf、 /etc/inittab、/etc/termcp 等文件,這些文件記錄著要獨(dú)占地控制系統(tǒng)的系統(tǒng)命令及動(dòng)態(tài)鏈接 程序配置等信息等。
系統(tǒng)初始化腳本類,包括/etc/init.d 和/etc/rc/init.d 等文件,它們包含一些系統(tǒng)服務(wù)類 程序及系統(tǒng)啟動(dòng)腳本。
根文件系統(tǒng)對(duì)掛載文件系統(tǒng)的配置主要由兩個(gè)文件決定,即fstab、init.d/rcS[3],fstab 描述了當(dāng)前系統(tǒng)中已被定義好的可以被系統(tǒng)掛載的文件系統(tǒng),init.d/rcS 文件描述了系統(tǒng)啟 動(dòng)時(shí)將啟動(dòng)的命令、服務(wù)程序及將要掛載的的文件系統(tǒng)。
由此可見,要使 Cramfs 根文件系統(tǒng)能滿足應(yīng)用程序的讀寫要求,必須在系統(tǒng)啟動(dòng) 時(shí)為應(yīng)用程序掛載一個(gè)可寫型的文件系統(tǒng),即配置/etc/fstab 及/etc/init.d/rcS 文件來掛載可寫 型的文件系統(tǒng)。
3.2 為Crmafs文件系統(tǒng)添加應(yīng)用程序
要發(fā)布應(yīng)用程序到嵌入式系統(tǒng)中,須將應(yīng)用程序及應(yīng)用程序所需要的共享庫(kù)文件一起 添加到根文件系統(tǒng)中。根文件系統(tǒng)可以根據(jù)需要定制,但這樣需要花費(fèi)大量時(shí)間且工作量 大;也可以修改已有的根文件系統(tǒng),這樣可以節(jié)省大量的時(shí)間和精力,且不易出錯(cuò)[4]。
以下 是以藍(lán)海微芯LJD-2410DVK-I 嵌入式開發(fā)板所提供的root.cramfs 根文件系統(tǒng)為基礎(chǔ)進(jìn)行修 改和配置的,root.cramfs 是只讀型的文件系統(tǒng),為了能向里邊加入用戶應(yīng)用程序,需要將其 重新掛載、壓縮及解壓縮成新的目錄,步驟如下:
在root.cramfs 的相同目錄下新建立一個(gè)目錄,如myroot。
在終端中執(zhí)行命令:mount -o loop root.cramfs myroot, tar –cvf myroot.tar myroot。這兩條 命令的功能分別是將已有的root.cramfs 以塊設(shè)備的方式掛載到myroot 并將myroot 壓縮為 myroot.tar。
為不出現(xiàn)目錄重名,將 myroot.tar 拷貝到另一目錄進(jìn)行解壓:tar –xvf myroot.tar,解壓 出來的文件夾myroot 即是即將作為根文件系統(tǒng)的目錄,它是可讀可寫的。
將已經(jīng)交叉編譯并調(diào)試過的用戶目標(biāo)程序拷貝到myroot 目錄下的/usr/bin 目錄下,此目 錄為根文件系統(tǒng)中為用戶程序準(zhǔn)備的目錄。同時(shí)將用戶程序所需要用到的關(guān)聯(lián)庫(kù)文件拷貝到 myroot 目錄下的/usr/lib 目錄下,用戶程序的關(guān)聯(lián)庫(kù)文件可通過ldd 命令查看,ldd 命令格式 如下:
Ldd [選項(xiàng)] 文件
選項(xiàng)有-v:打印ldd 的版本號(hào);-d:執(zhí)行符號(hào)重部署,并報(bào)告缺少的目標(biāo)對(duì)象(只對(duì)ELF 格式適用);-r:對(duì)目標(biāo)對(duì)象和函數(shù)執(zhí)行重新部署,并報(bào)告缺少的目標(biāo)對(duì)象和函數(shù)(只對(duì)ELF 格式適用);-h:幫助信息。
執(zhí)行如下命令來查看應(yīng)用程序所關(guān)聯(lián)的庫(kù):
Ldd –v 程序名
將交叉編譯工具目錄下的/3.4.1/arm-linux/lib 下的libgcc-s.so.*,libstdc++.so.6 復(fù)制到 myroot 目錄下的/root/lib 目錄下。
3.3 配置Cramfs根文件系統(tǒng)
為使Cramfs 能支持應(yīng)用程序的寫操作,需要修改文件系統(tǒng)的配置文件,即/etc 目錄下的 文件。
(1) 修改/etc/init.d/rcS 文件
/etc/init.d/rcS 是Linux 的系統(tǒng)初始化腳本,修改步驟如下:
用 vi 或其它文本工具打開myroot 目錄下的/etc/init.d/rcS 文件;
在文件中增加:
/bin/mount –n –t ramfs ramfs /mnt/yaffs(yaffs 是文件系統(tǒng)的一個(gè)目錄);
/bin/mkdir /mnt/yaffs/Qtopia;
/bin/mkdir /mnt/yaffs/Qtopia/tmp。
保存并退出 vi 或文本工具。
根文件系統(tǒng)的配置如圖 1 所示。
圖1 根文件系統(tǒng)的配置
當(dāng)系統(tǒng)啟動(dòng)并執(zhí)行到系統(tǒng)初始化腳本/etc/init.d/rcS 時(shí),mount 命令將/mnt/yaffs 目錄掛載 為ramfs 類型的隨機(jī)存儲(chǔ)文件系統(tǒng),并在此文件系統(tǒng)上建立Qtopia 和Qtopia/tmp 目錄[5], /Qtopia/tmp 目錄即為應(yīng)用程序可能對(duì)文件系統(tǒng)進(jìn)行寫操作的臨時(shí)文件目錄,故應(yīng)用程序便可 對(duì)/mnt/yaffs 目錄進(jìn)行讀寫操作,保障有讀寫操作要求的應(yīng)用程序的正常執(zhí)行。
(2) 修改/etc/profile 文件
用 vi 或其它文本工具打開myroot 目錄下的/etc/profile 文件;
將 PATH 改為:PATH=/bin: /sbin: /usr/sbin: /用戶程序目錄名
在文件中新增以下語句:
LD_LIBRARY_PATH=/lib: /usr/lib: /用戶庫(kù)目錄名
export PATH LD_LIBRARY_PATH
保存并退出 vi 或文本工具。
其中,修改環(huán)境變量 PATH 的目的是使系統(tǒng)命令/程序目錄擴(kuò)展到用戶程序目錄,這樣, 當(dāng)執(zhí)行用戶應(yīng)用程序時(shí),系統(tǒng)才能找到相應(yīng)的共享文件等;修改LD_LIBRARY_PATH 的目的是將系統(tǒng)的共享庫(kù)路徑擴(kuò)展為包含系統(tǒng)程序和用戶程序庫(kù)文件路徑的庫(kù)文件路徑,以便在 運(yùn)行用戶程序時(shí)能使系統(tǒng)找到應(yīng)用程序所使用的庫(kù)文件。
4 制做Cramfs 根文件系統(tǒng)
制做Cramfs 根文件系統(tǒng),即是把上述配置好的myroot 目錄文件夾壓縮成為能夠讓Linux 內(nèi)核支持的Cramfs 格式的映像文件[6]。
制做 Cramfs 根文件系統(tǒng)需要用到mkcramfs 工具,mkcramfs 工具用來創(chuàng)建Cramfs 文件系統(tǒng),它能把配置好的根文件系統(tǒng)壓縮成Cramfs 格式的根文件系統(tǒng),壓縮比可達(dá)到2:
1,下面是mkcramfs 命令的格式:
mkcramfs [-h] [-e edition] [-i file] [-n name] dirnAME outfile
其中參數(shù)含義分別是-h:顯示幫助信息;-e edition:設(shè)置生成的文件系統(tǒng)中的版本 號(hào);-i file:將一個(gè)文件映象插入到文件系統(tǒng)中(只能在Linux2.4.0 以后的內(nèi)核版本中使用); -n name:設(shè)定Cramfs 文件系統(tǒng)的名稱;dirname:指明需要被壓縮的整個(gè)目錄樹;outfile: 最終輸出的文件。
將mkcramfs 工具拷貝到myroot 相同目錄下,在終端中執(zhí)行:
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論