qemu启动文件重打包

一、重打包

  1. 找到要解压的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

  1. 拷贝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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值