ִӭһۡܶණڸ⣬ӭָ
ʵ黷ubuntu 12.04 LTS
ں˰汾linux-3.9.4
ΪһֱLinuxĹȽϸȤлúõоһ£л˵ֱӽ⡣
˵ĺã£ôһϵͳں˼оȻܴԼеں֣һں˱Щء±һʵںǷdzҪġLinuxѧϰ֮ں˱ϵͳá
ڱεһģҲǷdzҪģҪDzqemuģģlinuxºܳãﲻ
ں밲װqemuģɺͿʽʼ֮ˡ
ΪںѾҪΪԼLinuxϵͳһdzҪIJ֡ļϵͳҪַ
һ
ȽĿĿ¼ӳ
dd if=/dev/zero of=myinitrd.img bs=4096 count=1024
dd Linux/UNIX µһdzõָСĿ鿽һļڿͬʱָתdd Ҫѡ
1ֵָĵطַβӦ: b=512, c=1, k=1024, w=2, xm=number m
2if=file ļȱʡΪ롣
3of=file ļȱʡΪ
4ibs=bytes һζ bytes ֽ(һСΪ bytes ֽ)
5obs=bytes һд bytes ֽ(һСΪ bytes ֽ)
6bs=bytes ͬʱöдĴСΪ bytes ɴ ibs obs
7cbs=bytes һת bytes ֽڣתС
8skip=blocks ļͷ blocks ٿʼơ
9seek=blocks ļͷ blocks ٿʼơ(ֻͨеļǴ̻ŴʱЧ)
10count=blocks blocks 飬С ibs ָֽ
11conv=conversion[,conversion...] ָIJתļ
mkfs.ext3 myinitrd.img
˼ǽ֮ǰ.imgļʽΪext3ļʽ
ȻrootfsĿ¼ΪһյĹص㣬֮ǰʽΪext3ļϵͳʽӳļصrootfsĿ¼¡
mkdir rootfs
sudo mount -o loop myinitrd.img rootfs
һʹǿںԴext3ļϵͳӳӦIJ
ȻһԼinitҪȷһlinuxϵͳϵͳĹУinit̹ʵʵļϵͳ֮жǷûָinit=,ûУִ֮һ/sbin/init/etc/init/bin/init/bin/shǴԼinitΪûָ
ԿinitҪ仰
Ȼʹþ̬ӵķɿִļһִļĿĿ¼£rootfs¡
gcc -static -o init init.c
cp init rootfs/
ȻdevĿ¼/devĿ¼Ҫǰlinux豸ļ
sudo mkdir rootfs/dev
sudo mknod rootfs/dev/console c 5 1
sudo mknod rootfs/dev/ram b 1 0
consolę豸ֱڵϵļ̺ʾֱӺͼӵԭ豸̨Ҳ̨֮linuxбزٵ豸ramΪlinuxĸ豸صġ
Ϊ֮ǰѾext3ļϵͳʽļϵͳӳصrootfsĿ¼£Щʵ϶myinitrd.imgһԼĸļϵͳӳеIJȻжء
sudo umount rootfs
ˣһӦóĸĿ¼ӳmyinitrd.imgˡ
Ȼʹ֮ǰװõqemuģģ⣬Լlinuxϵͳܷ
qemu -kernel linux-3.9.4/arch/x86/boot/bzImage -initrd myinitrd.img -append "root=/dev/ram init=/init"
Կqemu-kernelָԼLinuxϵͳںӳλã֮ǰں˵bzImageľ·Ȼͨ-initrdָԼĸĿ¼ӳ-appendָǵĸ豸/dev/ramָΪûָinitн£
ԿԼinitΪûָɹinitִУˣ÷һĸļϵͳɹء
õķͨʹbusyboxļϵͳ
busyboxԴ룬ѹ
http://busybox.net/downloads/busybox-1.19.3.tar.bz2
Ȼbusybox-1.19.3Ŀ¼£busyboxñ롣
make defconfig
make menuconfig
Ҫ:
busybox settings -> build options -> build busybox as a static binaryһѡϡ
make
ȻĿ¼ӳװbusyboxĿ¼ӳС
dd if=/dev/zero of=busyboxmyinitrd12M.img bs=4096 count=3072
mkfs.ext3 busyboxmyinitrd12M.img
mkdir rootfs
sudo mount -o loop busyboxmyinitrd12M.img rootfs
cd busybox-1.19.3
sudo make CONFIG_PREFIX=../rootfs/ install
sudo umount rootfs
ԼͨbusyboxĸĿ¼ӳѾˣʹqemuģһ¡
qemu -kernel linux-3.9.4/arch/x86/boot/bzImage -initrd busyboxmyinitrd12M.img -append "root=/dev/ram init=/bin/ash"
н£
Կ뵽busyboxṩshell˸ļϵͳسɹ
ΪֹǿǰĹʵĽĿʼˡ
ǽgrubĴӳ
Ȼgrubgrub̡
grub,ѹ
ftp://alpha.gnu.org/gnu/grub/grub-0.97-i386-pc.tar.gz
ӳ
dd if=/dev/zero of=vampirem.img bs=512 count=2880
grub
sudo losetup /dev/loop3 vampirem.img
sudo dd if=./grub-0.97-i386-pc/boot/grub/stage1 of=/dev/loop3 bs=512 count=1
sudo dd if=./grub-0.97-i386-pc/boot/grub/stage2 of=/dev/loop3 bs=512 seek=1
sudo losetup -d /dev/loop3
losetupϸlosetuploop豸ʹ
ʵ൱ڲһѭ豸loop3ΪһмĹص㣬Լgrubӳvampirem.imgӦĺͲ
Ȼqemuģϲһ£ǷԽgrub档
qemu -fda vampirem.img
OKǿgrubɹˡ
ʼԼlinuxϵͳĴӳ
dd if=/dev/zero of=40M.img bs=4096 count=10240
sudo losetup /dev/loop3 40M.img
ȻҪڴӳϽһ
sudo fdisk /dev/loop3
ԿmDz쿴ϢģDz쿴һ
Ȼn½һaǽΪpǴӡwǰѷдϲ˳ǣ
֮ʽΪext3fsļϵͳʽصrootfsĿ¼¡
sudo losetup -d /dev/loop3
sudo losetup -o 1048576 /dev/loop3 40M.img
ƫֵ1048576Ϊ֮ǰ÷ʱǿԿһ20482048*512=1048576Ǵ˴ƫֵ
sudo mkfs.ext3 /dev/loop3
sudo mount -o loop /dev/loop3 rootfs/
Ȼ֮ǰõģļϵͳӳļںӳļrootfsĿ¼£ǵĴӳļС
sudo cp busyboxmyinit12M.img rootfs/
sudo cp linux-3.9.4/arch/x86/boot/bzImage rootfs/
Ȼrootfs½bootĿ¼ԼbootĿ¼µgrubĿ¼
sudo mkdir rootfs/boot
sudo mkdir rootfs/boot/grub
Ȼ֮ǰصgrubboot/grubĿ¼µļrootfs/boot/grubĿ¼¡
sudo cp ./grub-0.97-i386-pc/boot/grub/* rootfs/boot/grub
ȻҪrootfs/boot/grubĿ¼½һ˵ļmenu.lst£
˼ԣﲻ
sudo umount rootfs
sudo losetup -d /dev/loop3
ŵʱ̵ˣǿһ£ܷgruḅڴӳgrubܡ
qemu -boot a -fda vampirem.img -hda 40M.img
Կɹӡ
һ£ӸղõԼlinuxϵͳĴӳļgrubȻ
qemu -hda 40M.img
ˣԼһС͵LINUXϵͳ~
|