一、rootfs制作:
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、如皋網(wǎng)站維護(hù)、網(wǎng)站推廣。
根文件系統(tǒng)是Linux啟動(dòng)時(shí)使用的第一個(gè)文件系統(tǒng),就像PC機(jī)上的文件目錄
1.創(chuàng)建根文件系統(tǒng)的目錄(目錄名隨便取)
mkdir rootfs
cd rootfs
mkdir bin dev etc lib home proc sbin sys usr mnt tmp var
mkdir usr/bin usr/lib usr/sbin lib/modules
2.創(chuàng)建設(shè)備文件
cd dev/
mknod -m 666 console c 5 1
mknod -m 666 null c 1 3
二、配置busybox
解壓busybox,進(jìn)入busybox根目錄
make menuconfig
選擇需要使用的工具
進(jìn)入 busybox settings->build option->
選中 “build busybox as a static binary”,靜態(tài)鏈接
更改Cross Compiler prefix 為(arm-linux-)
三、編譯安裝busybox
把相關(guān)的命令/文件拷貝到這個(gè)正在創(chuàng)建的文件系統(tǒng)
1.在busybox根目錄下
修改Makefile
ARCH=arm
CROSS_COMPILE=arm-linux-
make
make install
cp -rf _install/* rootfs
由于/root/rootfs/linuxrc 和/root/rootfs/sbin/init 是同一個(gè)程序,可以把linuxrc刪除,以節(jié)省空間,ln -s /sbin/init init
[root@RSM-2 rootfs]# ls
bin dev etc home lib init mnt root proc sbin sys tmp usr var
2.創(chuàng)建etc下的目錄文件
cd etc
cp -a /root/busybox-1.20.2/examples/bootfloppy/etc/* .
[root@RSM-2 etc]# ls
fstab init.d inittab profile
3.修改這些文件
修改inittab
原始文件:
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:/bin/sh
::ctrlaltdel:/bin/umount -a -r
修改后:開(kāi)機(jī)免登陸直接打開(kāi)shell(前面數(shù)字代表行號(hào))
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
修改后:開(kāi)機(jī)需要登陸(前面數(shù)字代表行號(hào))
::sysinit:/etc/init.d/rcS
::respawn:-/bin/login
::ctrlaltdel:/bin/umount -a -r
修改fstab
proc /proc proc defaults 0 0
none /var ramfs defaults 0 0
none /sys sysfs default 0 0
none /dev/pts devpts default 0 0
修改profile
# /etc/profile: system-wide .profile file for the Bourne shells
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export LD_LIBRARY_PATH=/lib:/usr/lib
/bin/hostname test
USER="`id -un`"
LOGNAME=$USER
HOSTNAME='/bin/hostname'
PS1='[\u@\h \W]# '
echo "All done!" echo
4.修改/etc/init.d/rcS
echo "Starting rcS..."
echo "++ Mounting filesystem..."
mount -t tmpfs mdev /dev
mkdir /dev/pts
mount -t devpts devpts /dev/pts
mount -t sysfs sysfs /sys
echo "++ Setting up mdev..."
echo /bin/mdev > /proc/sys/kernel/hotplug
mdev -s
mount -a
echo "++ Starting telnet daemon..."
telnetd -l /bin/sh
echo "++ Set network..."
/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0
/sbin/ifconfig eth9 192.168.3.1
/sbin/ifconfig eth9 netmask 255.255.255.0
echo "rcS Complete"
5.從本機(jī)拷貝passwd、shadow、group文件。
[root@vm-dev etc]# cp /etc/passwd .
[root@vm-dev etc]# cp /etc/shadow .
[root@vm-dev etc]# cp /etc/group .
[root@vm-dev etc]# cp /etc/localtime .
echo "root::0:0:root:/root:/bin/sh" > /etc/passwd
echo "root:x:0:root" > /etc/group
echo "root:$1$3jZ93Mwq$oaeef6lWIuThavs8wD0Wh2:0:0:99999:7:::" > /etc/shadow
用戶名為root,密碼為123456。
6.拷貝交叉編譯器里***/lib/***.so庫(kù)(根據(jù)自己系統(tǒng)需要的)到/lib目錄下
[root@vm-dev lib]# cp ***/lib/***.so . -a
到此文件系統(tǒng)制作完
四、制作initramfs
刪除.config
cp linux-2.6.26/arch/mips/configs/xxxxx_config linux-2.6.26/.config
修改Makefile
ARCH=mips
CROSS_COMPILE=mipsel-linux-
步驟1.make menuconfig打開(kāi)配置菜單
General setup-->選擇 Initial RAM filesystem and RAM disk...... ;[*] Compress ramdisk by lzma instead of gzip ,原因很簡(jiǎn)單,我們使用的是initramfs,而不是ramdisk,所以不用配置ramdisk的驅(qū)動(dòng)支持項(xiàng)Device Drivers-->Block devices-->RAM block device support 項(xiàng),相應(yīng)的之后的(4096)Default RAM disk size kbytes等相關(guān)默認(rèn)配置選項(xiàng)就不會(huì)再出現(xiàn)了。
另外initramfs技術(shù)和ramdisk技術(shù)的另一個(gè)重要的區(qū)別就是initramfs并不是在內(nèi)存中模擬出一個(gè)磁盤(pán),所以也就不在需要ramdisk中所需的ext2驅(qū)動(dòng)支持。所以,F(xiàn)ile systems菜單下的ext2文件系統(tǒng)支持< > Second extended fs support選項(xiàng)就可以取消了。
在這一步還有一個(gè)重要的區(qū)別就是需要在General setup-->Initial RAM filesystem and RAM disk...... 項(xiàng)的相關(guān)項(xiàng)(/root/rootfs) Initramfs source file(s)中填寫(xiě)你要制作成initramfs格式的根文件系統(tǒng)目錄,在這里我要做的根文件系統(tǒng)的目錄是/root/rootfs。
步驟2.制作initramfs根文件系統(tǒng)
制作最小系統(tǒng)根文件系統(tǒng)的步驟和以前制作ramdisk根文件系統(tǒng)的步驟基本一致,這里只說(shuō)明最后一步有何不同。
另外就是我們制作ramdisk根文件系統(tǒng)鏡像的時(shí)候使用的是genext2fs工具,在此我們制作initramfs根文件系統(tǒng)鏡像時(shí),并不需要額外的步驟,而是在你編譯Linux內(nèi)核的時(shí)候就自動(dòng)生成了。自動(dòng)生成的initramfs根文件系統(tǒng)鏡像在Linux源碼樹(shù)的usr目錄下。名字叫initramfs_data.cpio.gz,它是gz格式的壓縮文件
這樣就有一個(gè)問(wèn)題,在編譯可以使用initramfs啟動(dòng)的內(nèi)核的時(shí)候,它的配置選項(xiàng)有一個(gè)相關(guān)項(xiàng),就是要在(/root/rootfs) Initramfs source file(s)中填寫(xiě)你要制作成initramfs格式的根文件系統(tǒng)目錄。這樣就要求我們?cè)诰幾g內(nèi)核的時(shí)候,首先先把根文件系統(tǒng)做好。值得注意的是我們按照這個(gè)方法制作出來(lái)的內(nèi)核鏡像實(shí)際上比原來(lái)的大了許多,這是因?yàn)槲覀冊(cè)谧鲞@一步的時(shí)候,實(shí)際上是將initramfs根文件系統(tǒng)直接合并到內(nèi)核鏡像里邊了。這樣,合二為一的鏡像就不再需要單獨(dú)燒寫(xiě)根文件系統(tǒng)鏡像了,相應(yīng)的,啟動(dòng)內(nèi)核時(shí)的參數(shù)就不需要添加initrd=……來(lái)指定initramfs的位置了。
步驟3.編譯安裝內(nèi)核
cd Linux 2.6.26
make modules_install INSTALL_MOD_PATH=/***/rootfs //生成 rootfs/lib/modules/2.6.26
步驟4.修改makefile編譯
objcopy 工具參數(shù)介紹
#使用 -O binary (或--out-target=binary) 輸出為原始的二進(jìn)制文件
#使用 -R .note (或--remove-section) 輸出文件中不要.note這個(gè)section,縮小了文件尺寸
#使用 -S (或 --strip-all) 輸出文件中不要重定位信息和符號(hào)信息,縮小了文件尺寸
由于使用u-boot啟動(dòng),所以內(nèi)核要制作成uImage,uImage是U-boot專用的映像文件,它是在zImage之前加上一個(gè)長(zhǎng)度為0x40的“頭”,說(shuō)明這個(gè)映像文件的類型、加載位置、生成時(shí)間、大小等信息,vmlinux是最原始的沒(méi)有經(jīng)過(guò)壓縮的內(nèi)核文件。
COMP=lzma(壓縮方式)p_w_picpath: mkp_w_picpath
$(CROSS_COMPILE)objcopy -O binary -R .note -R .comment -S $(ROOTDIR)/$(LINUXDIR)/vmlinux $(KERNELZ)
cd $(IMAGEDIR) ; rm -f $(KERNELZ).*; $(COMP) -9 -f -S .$(COMP) $(KERNELZ)
cd $(IMAGEDIR) ; $(CUR_DIR)/mkp_w_picpath -A mips -O linux -T kernel -C $(COMP) -a 80000000 -e $(shell readelf -h $(ROOTDIR)/$(LINUXDIR)/vmlinux | grep "Entry" | awk '{print $$4}') -n "Linux Kernel Image" -d $(KERNELZ).$(COMP) $(IMAGE)
make以后生成的uImage就是initramfs啟動(dòng)的文件系統(tǒng)
五、嵌入式Linux支持的文件系統(tǒng):
jffs2,yaffs,cramfs,ramdisk,ramfs
jffs2:用于NorFlash上,可讀寫(xiě),支持?jǐn)?shù)據(jù)壓縮
yaffs2:用于NandFlash上,不支持?jǐn)?shù)據(jù)壓縮,可讀寫(xiě)
cramfs:既可以用于NorFlash上,又可以用于NandFlash上,只讀,支持?jǐn)?shù)據(jù)壓縮
ramdisk:用一部分固定大小的內(nèi)存作為分區(qū)來(lái)使用,并非是一個(gè)實(shí)際的文件系統(tǒng),方便內(nèi)核啟動(dòng)
NFS:文件系統(tǒng)在PC機(jī)上,通過(guò)網(wǎng)絡(luò)共享
新聞標(biāo)題:initramfs啟動(dòng)linux
當(dāng)前鏈接:http://chinadenli.net/article4/piggie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、軟件開(kāi)發(fā)、Google、外貿(mào)建站、微信公眾號(hào)、定制開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)