1. 编译busybox
需要静态编译。
http://www.busybox.net/下载源代码包包*1
make menuconfig
静态编译设置: Busybox Settings->Build Options->
一直exit, 然后yes
make即可。
cd到源代码目录下的_install。
建立etc, dev, proc, sysfs文件夹
在dev里使用mknod建立如下内容
mknod console c 5 1
mknod null c 1 3
mknod random c 1 8
mknod urandom c 1 9
mknod zero c 1 5
撰写./etc/fstab:
#device mount-point type options dump fsck
proc /proc proc defaults 0 0
sys /sys sysfs defaults 0 0
撰写./etc/inittab:
::sysinit:/etc/init.d/rcs
console::respawn:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
撰写./etc/init.d/rcs:
mount -a
(加上clear应该也行)
2.制作initrd.img.gz
dd if=/dev/zero of=initrd.img bs=1M count=16 (用不着太大0 0, 64也是可以的, 但是不能超过接下来设置的内核支持的大小~)
mkfs -text4 initrd.img
mkdir xxxx
mount -o loop initrd.img xxxx
cp 那个_install的路径/* ./ -r
umount xxxx
gzip -9 initrd.img (可以不做此步)
2. 编译内核
https://www.kernel.org/ 下载源代码
make menuconfig
General setup->
Device Drivers > Block devices
> File systems
一直exit, 然后yes
会生出来arch/x86/boot/bzImage (x86的, 其他的在其他地方)
cp 之 到 initrd.img.gz同目录 (不必要, 只是以后方便)
然后你得到了两个文件!~
bzImage, initrd.img.gz
cd 到initrd.img.gz
qemu -kernel bzImage -initrd initrd.img.gz -append “root=/dev/ram0 rw” 已成功启动。
grub的话可能可以这样写
linux /bzImage root=/dev/ram0 rw
initrd /initrd.img.gz
boot
PS. 之前一直死在最后一步, 就是rootfs死活也挂不上, 后来发现是initrd不对头。
有些文章写用cpio制作initrd, 反正我是没弄成
这里的initrd应该是initramfs
这里有做好的: rel.zip
发表评论