天外有天,人外有人。
分类: LINUX
2013-09-04 22:38:58
省略。
Note: 下载的文件不能放在linux和win的共享文件夹,否则link会出问题。
2. 下载和安装QEMU
QEMU是一种开源的模拟器/虚拟机. QEMU恩在PC机上模拟ARM等机器。.
从,然后
# tar zxf qemu-0.14.0.tar.gz
# cd qemu-0.14.0
# /.configure
# make
# make install
#qemu //测试qemu是否安装成功
3. 制作根文件系统3.1. 下载编译busybox
busybox占用了很小的空间却集成了多个最常用linux命令和工具. 常用命令都是直接链接到busybox。
从下载busybox-1.18.3.tar.bz2
$tar –jxf busybox-1.18.3.tar.bz2
$cd busybox-1.18.3
$make menuconfig
常见的2个选项:.
Build Options
Build BusyBox as a static binary (no shared libs)
确保不会对共享库产生依赖。
Installation Options
Don't use /usr
确保make install后会所有命令存放在busybox目录下生成的_install目录,否则会覆盖掉现有系统的/usr目录。
然后,保存退出。
$make
$make install
$ ls _install/ -l
total 12
drwxr-xr-x 2 user user 4096 Jun 21 22:05 bin
lrwxrwxrwx 1 user user 11 Jun 21 22:05 linuxrc -> bin/busybox
drwxr-xr-x 2 user user 4096 Jun 21 22:05 sbin
drwxr-xr-x 4 user user 4096 Jun 21 22:05 usr
$ ls _install/bin -l
total 1536
lrwxrwxrwx 1 chenojun chenojun 7 Jun 21 22:05 addgroup -> busybox
lrwxrwxrwx 1 chenojun chenojun 7 Jun 21 22:05 adduser -> busybox
lrwxrwxrwx 1 chenojun chenojun 7 Jun 21 22:05 ash -> busybox
所以命令都链接到_install/bin/busybox
其中可执行文件busybox在bin目录下,其他的都是指向他的符号链接.
$ _install/bin/busybox ls
AUTHORS archival libpwdgrp
Config.in busybox loginutils
可以看出常见命令是作为busybox的参数传入的,输出是该命令的输出。
另外,busybox只有1.5M左右。相对常见的bin和sbin目录非常小。
3.2. 制作root文件系统
$ dd if=/dev/zero of=rootfs.img bs=10240k count=1
1+0 records in
1+0 records out
10485760 bytes (10 MB) copied, 0.306331 seconds, 34.2 MB/s
dd : Copy a file, converting and formatting according to the operands.
if=file 输入文件名. /dev/zero: 输出2进制0流
of=file 输出文件名.
bs=bytes 设置输入&出块的大小为bytes,强制ibs=bytes和obs=bytes。
3.2.1. 格式化ext3文件系统$ mkfs -t ext3 rootfs.img
mke2fs 1.39 (29-May-2006)
rootfs.img is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
2560 inodes, 10240 blocks
512 blocks (5.00%) reserved for the super user
First data block=1
$ mkdir rootfs
$ sudo mount -t ext3 -o loop rootfs.img rootfs
$ ls rootfs
lost+found
拷贝busybox到rootfs.img
$ cp -rf busybox-1.18.3/_install/* rootfs/
$ ls rootfs
bin linuxrc lost+found sbin usr
$ rsync -a busybox-1.18.3/_install/ rootfs
$ sudo chown -R root:root rootfs
Password:
rsync根据地方法刷新, 减少数据传输量。
$ cd rootfs
$ sudo mkdir dev
3.2.2. 创建常用device(mknod 用于制作字符或块相关文件):$sudo cd dev
$ sudo mknod tty0 c 4 0
$ sudo mknod tty1 c 4 1
$ sudo mknod tty2 c 4 2
$ sudo mknod tty3 c 4 3
$ sudo mknod console c 5 1
$ sudo mknod null c 1 1
3.2.3. 创建init启动脚本/etc/inittab文件
$ sudo mkdir etc
$ cd etc/
$ sudo vim inittab
#This is the first script to run when startup
::sysinit:/etc/rc.d/rc.sysinit
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r
$ sudo mkdir rc.d
$ cd rc.d/
$ sudo vim rc.sysinit
加入以下内容:
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/bin/sh
$ sudo chmod a+x rc.sysinit
$ cd ../../../
3.2.4. 根文件系统制作完成,umount rootfs$ sudo umount rootfs.img
$ls rootfs
rootfs umount 后为空目录
4. 编译内核
下载源代码
$tar –jxf linux-3.3.4.tar.bz2
$cd linux-3.3.4
$ make menuconfig
$make
$ ls arch/x86/boot/bzImage -l
-rwxrwxrwx 1 root root 2573200 Jun 14 00:10 arch/x86/boot/bzImage
copy bzImage 到测试目录(一般跟rootfs.img同一目录)
5. 用QEMU跑内核准备就绪,现在可以开始带根文件系统跑内核
#sudo qemu -hda rootfs.img -kernel bzImage --append "root=/dev/hda"
可以看到linux在quem上跑起来了,并且可以输入busybox支持的命令