一、重打包
-
找到要解压的ramdisk.img文件。
通过file命令可以查看ramdisk.img文件的类型:
file ramdisk.img
ramdisk.img: gzip compressed data, from Unix
由此,可知其文件类型为gzip类型的。解压的步骤如下:
1》.先将ramdisk.img文件重命名为ramdisk.img.gzip文件
2》.使用gunzip ramdisk.img.gz对其进行解压得到ramdisk.img文件。
3》.使用cpio提取ramdisk.img文件中的内容
新建一个temp目录:
mkdir temp
cd temp
cpio -i -F …/ramdisk.img
解压以后可以在temp目录下看到ramdisk.img中的内容。
2. 修改相应要修改的文件后,打包成ramdisk.img文件的步骤如下:
cd /temp
find . |cpio -ov -H newc |gzip > ../ramdisk.img
cd ..
ls
可以看到生成的ramdisk.img文件。
编译busybox 生成initram
二、静态文件系统
构建根文件系统
1 编译busybox
cd $BUSY_BOX_PATH
make menuconfig
make install
2 创建系统所需的目录。并给启动程序创建一个软连接
cd _install
mkdir -p proc sys dev etc etc/init.d lib tmp
ln -sf linuxrc init
3 创建配置文件
cat > etc/init.d/rcS <<EOF
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
ifconfig lo up
EOF
chmod +x etc/init.d/rcS
cat > etc/inittab <<EOF
#/etc/inittab
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
EOF
三、动态文件系统
1.创建所需文件夹(根据FHS标准)
mkdir dev etc home lib media mnt opt proc sys tmp var root
- 拷贝lib/下编译文件的系统库
lib64目录下面有一库必要放在lib64下,否则init执行不起来。
3.添加配置文件(即/etc下的文件)
这里对照我们之前的分析步骤
a.首先是inittab文件,内容如下:
#/etc/inittab
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::once:/usr/sbin/telnetd -l /bin/login
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
b.添加init.d/rcS文件,内容如下:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH
#
#Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
mkdir -p /var/lock
hwclock -s
feed_wdg &
ifconfig lo 127.0.0.1
ifconfig eth0 192.168.2.99
/bin/hostname -F /etc/HOSTNAME
c.添加HOSTNAME文件,内容就是代表主机名,可以随意定,如:
Blue
d.添加fstab文件:
#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
var /dev tmpfs defaults 0 0
ramfs /dev ramfs defaults 0 0
e.根据inittab文件的内容console::askfirst:-/bin/sh,
在启动脚本etc/init.d/rcS执行完后将在终端启动一个shell。Shell启动过程中会根据文件/etc/profile配置登陆环境。
所以需要添加profile文件,内容如下:
USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]# ' # 这个显示的是命令行下的主机名和用户名格式,如:[root@Blue etc]#
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
f.如果要配置正确的用户,必须具有两个文件:group和passwd
group内容如下:
root:x:0:root
passwd内容如下:
root::0:0:root:/:/bin/sh
4.在/dev/下创建设备节点:
mknod console c 5 1
mknod null c 1 3
5 使用cpio生成根文件系统
find . | cpio -o --format=newc > $CUR_DIR/initramfs