溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

initramfs啟動linux

發(fā)布時間:2020-05-17 03:56:34 來源:網(wǎng)絡(luò) 閱讀:1748 作者:Linux_woniu 欄目:系統(tǒng)運維

一、rootfs制作:

根文件系統(tǒng)是Linux啟動時使用的第一個文件系統(tǒng),就像PC機上的文件目錄

1.創(chuàng)建根文件系統(tǒng)的目錄(目錄名隨便?。?/span>

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,進入busybox根目錄

make menuconfig

選擇需要使用的工具

進入 busybox settings->build option->

選中 “build busybox as a static binary”,靜態(tài)鏈接

更改Cross Compiler prefix 為(arm-linux-)

三、編譯安裝busybox

把相關(guān)的命令/文件拷貝到這個正在創(chuàng)建的文件系統(tǒng)

1.在busybox根目錄下

修改Makefile

ARCH=arm 

CROSS_COMPILE=arm-linux-

make

initramfs啟動linux

make install

initramfs啟動linux

cp -rf _install/*  rootfs

由于/root/rootfs/linuxrc  和/root/rootfs/sbin/init 是同一個程序,可以把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

修改后:開機免登陸直接打開shell(前面數(shù)字代表行號)

 ::sysinit:/etc/init.d/rcS

console::askfirst:-/bin/sh

 ::ctrlaltdel:/bin/umount -a -r

修改后:開機需要登陸(前面數(shù)字代表行號)

 ::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.從本機拷貝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庫(根據(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打開配置菜單

General setup-->選擇 Initial RAM filesystem and RAM disk...... ;[*] Compress ramdisk by lzma instead of gzip ,原因很簡單,我們使用的是initramfs,而不是ramdisk,所以不用配置ramdisk的驅(qū)動支持項Device Drivers-->Block devices-->RAM block device support 項,相應(yīng)的之后的(4096)Default RAM disk size kbytes等相關(guān)默認配置選項就不會再出現(xiàn)了。

另外initramfs技術(shù)和ramdisk技術(shù)的另一個重要的區(qū)別就是initramfs并不是在內(nèi)存中模擬出一個磁盤,所以也就不在需要ramdisk中所需的ext2驅(qū)動支持。所以,F(xiàn)ile systems菜單下的ext2文件系統(tǒng)支持< > Second extended fs support選項就可以取消了。

在這一步還有一個重要的區(qū)別就是需要在General setup-->Initial RAM filesystem and RAM disk...... 項的相關(guān)項(/root/rootfs) Initramfs source file(s)中填寫你要制作成initramfs格式的根文件系統(tǒng)目錄,在這里我要做的根文件系統(tǒng)的目錄是/root/rootfs。

步驟2.制作initramfs根文件系統(tǒng)

制作最小系統(tǒng)根文件系統(tǒng)的步驟和以前制作ramdisk根文件系統(tǒng)的步驟基本一致,這里只說明最后一步有何不同。

另外就是我們制作ramdisk根文件系統(tǒng)鏡像的時候使用的是genext2fs工具,在此我們制作initramfs根文件系統(tǒng)鏡像時,并不需要額外的步驟,而是在你編譯Linux內(nèi)核的時候就自動生成了。自動生成的initramfs根文件系統(tǒng)鏡像在Linux源碼樹的usr目錄下。名字叫initramfs_data.cpio.gz,它是gz格式的壓縮文件

這樣就有一個問題,在編譯可以使用initramfs啟動的內(nèi)核的時候,它的配置選項有一個相關(guān)項,就是要在(/root/rootfs) Initramfs source file(s)中填寫你要制作成initramfs格式的根文件系統(tǒng)目錄。這樣就要求我們在編譯內(nèi)核的時候,首先先把根文件系統(tǒng)做好。值得注意的是我們按照這個方法制作出來的內(nèi)核鏡像實際上比原來的大了許多,這是因為我們在做這一步的時候,實際上是將initramfs根文件系統(tǒng)直接合并到內(nèi)核鏡像里邊了。這樣,合二為一的鏡像就不再需要單獨燒寫根文件系統(tǒng)鏡像了,相應(yīng)的,啟動內(nèi)核時的參數(shù)就不需要添加initrd=……來指定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) 輸出為原始的二進制文件

#使用 -R .note  (或--remove-section)    輸出文件中不要.note這個section,縮小了文件尺寸

#使用 -S        (或 --strip-all)        輸出文件中不要重定位信息和符號信息,縮小了文件尺寸

由于使用u-boot啟動,所以內(nèi)核要制作成uImage,uImage是U-boot專用的映像文件,它是在zImage之前加上一個長度為0x40的“頭”,說明這個映像文件的類型、加載位置、生成時間、大小等信息,vmlinux是最原始的沒有經(jīng)過壓縮的內(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啟動的文件系統(tǒng)

五、嵌入式Linux支持的文件系統(tǒng):

jffs2,yaffs,cramfs,ramdisk,ramfs

jffs2:用于NorFlash上,可讀寫,支持數(shù)據(jù)壓縮

yaffs2:用于NandFlash上,不支持數(shù)據(jù)壓縮,可讀寫

cramfs:既可以用于NorFlash上,又可以用于NandFlash上,只讀,支持數(shù)據(jù)壓縮

ramdisk:用一部分固定大小的內(nèi)存作為分區(qū)來使用,并非是一個實際的文件系統(tǒng),方便內(nèi)核啟動

NFS:文件系統(tǒng)在PC機上,通過網(wǎng)絡(luò)共享
initramfs啟動linux

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI