亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

initramfs啟動linux

發布時間:2020-05-17 03:56:34 來源:網絡 閱讀:1750 作者:Linux_woniu 欄目:系統運維

一、rootfs制作:

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

1.創建根文件系統的目錄(目錄名隨便取)

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.創建設備文件

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”,靜態鏈接

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

三、編譯安裝busybox

把相關的命令/文件拷貝到這個正在創建的文件系統

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刪除,以節省空間,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.創建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(前面數字代表行號)

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

console::askfirst:-/bin/sh

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

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

 ::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庫(根據自己系統需要的)到/lib目錄下

[root@vm-dev lib]# cp ***/lib/***.so .  -a 

到此文件系統制作完

四、制作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的驅動支持項Device Drivers-->Block devices-->RAM block device support 項,相應的之后的(4096)Default RAM disk size kbytes等相關默認配置選項就不會再出現了。

另外initramfs技術和ramdisk技術的另一個重要的區別就是initramfs并不是在內存中模擬出一個磁盤,所以也就不在需要ramdisk中所需的ext2驅動支持。所以,File systems菜單下的ext2文件系統支持< > Second extended fs support選項就可以取消了。

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

步驟2.制作initramfs根文件系統

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

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

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

步驟3.編譯安裝內核

cd Linux 2.6.26

make modules_install  INSTALL_MOD_PATH=/***/rootfs //生成 rootfs/lib/modules/2.6.26


步驟4.修改makefile編譯

objcopy 工具參數介紹

#使用 -O binary (或--out-target=binary) 輸出為原始的二進制文件

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

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

由于使用u-boot啟動,所以內核要制作成uImage,uImage是U-boot專用的映像文件,它是在zImage之前加上一個長度為0x40的“頭”,說明這個映像文件的類型、加載位置、生成時間、大小等信息,vmlinux是最原始的沒有經過壓縮的內核文件。

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啟動的文件系統

五、嵌入式Linux支持的文件系統:

jffs2,yaffs,cramfs,ramdisk,ramfs

jffs2:用于NorFlash上,可讀寫,支持數據壓縮

yaffs2:用于NandFlash上,不支持數據壓縮,可讀寫

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

ramdisk:用一部分固定大小的內存作為分區來使用,并非是一個實際的文件系統,方便內核啟動

NFS:文件系統在PC機上,通過網絡共享
initramfs啟動linux

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

犍为县| 黄浦区| 顺义区| 临颍县| 二连浩特市| 灌南县| 麦盖提县| 马公市| 蒙自县| 陆丰市| 获嘉县| 晋城| 资溪县| 区。| 介休市| 连云港市| 潮州市| 体育| 河东区| 穆棱市| 宝丰县| 南京市| 平阳县| 阜新| 通许县| 砀山县| 新巴尔虎左旗| 扎赉特旗| 温泉县| 伊川县| 朝阳区| 会理县| 中牟县| 博客| 通城县| 宁城县| 梁平县| 霍州市| 佛冈县| 榕江县| 黄大仙区|