mkdir -p ~/misc/qemu
cd ~/misc/qemu
wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.3.7.tar.bz2
tar xvfj linux-3.3.7.tar.bz2
cd linux-3.3.7
make defconfig
make
cp arch/x86/boot/bzImage ..
2. 制作根文件系统
cd ~/misc/qemu
dd if=/dev/zero of=rootfs.img bs=1M count=10
mkfs.ext3 rootfs.img
mkdir rootfs
sudo mount -t ext3 -o loop rootfs.img rootfs
cd rootfs
mkdir dev proc sys
3. 编译busybox
cd ~/misc/qemu
wget http://busybox.net/downloads/busybox-1.20.1.tar.bz2
tar xvfj busybox-1.20.1.tar.bz2
cd busybox-1.20.1
make defconfig
make menuconfig
(将busybox编译为静态连接方式)
- Busybox Settings
- Build options
- Build Busybox as a static binary
make
make install CONFIG_PREFIX=~/misc/qemu/rootfs
cd ~/misc/qemu
sudo umount rootfs
4. 运行
图形界面下:
qemu -kernel bzImage -hda rootfs.img -append "root=/dev/sda init=/bin/ash"
命令行界面:
qemu -kernel bzImage -hda rootfs.img -append "root=/dev/sda init=/bin/ash" -curses
通过vnc运行:
qemu -kernel bzImage -hda rootfs.img -append "root=/dev/sda init=/linuxrc" -curses -vnc 192.168.1.237:1
上面192.168.1.237为本机的一个IP地址。在另外一台机器上运行vnc client,填入192.168.1.237:1,即可通过vnc连接到linux系统
改进1:mount /proc和/sys,以及创建/dev/下的设备节点
启动后,/dev下无设备文件,而且/proc, /sys都没有mount上,导致有些命令无法运行(如top)。为了解决这个问题,可以修改启动脚本/linuxrc为:
#!/bin/ash
/bin/mount -t proc proc /proc
/bin/mount -t sysfs sysfs /sys
/bin/echo /sbin/mdev >/proc/sys/kernel/hotplug
mdev -s
/bin/ash
然后chmod a+x /linuxrc,umount后再执行
qemu -kernel bzImage -hda rootfs.img -append "root=/dev/sda init=/linuxrc"
有关mdev的介绍和使用可以参考:
http://hi.baidu.com/kebey2004/blog/item/3692f6079b8e9dda7a894721.html
改进2:编一个最小kernel
make allnoconfig
make menuconfig
选择:
- Executable file formats / Emulations
- 选择Kernel support for ELF binaries
- Device Drivers
- 选择ATA/ATAPI/MFM/RLL support
- 选择generic/default IDE chipset support
- File systems
- 选择Ext3 journalling file system support
make
qemu -kernel linux-3.3.7/arch/x86/boot/bzImage -hda rootfs.img -append "root=/dev/hda init=/linuxrc" -curses
busybox工具包
静态编译设置好后,
报错一般是export变量没有起作用,修改Makefile的内容就好了
在另外一个terminal输入 killall qemu-system-arm 关闭QEMU平台
要确保内核要包含调试信息
Ubuntu18没有添加到官方仓库,需要手动安装
参考: https://zhuanlan.zhihu.com/p/134031693
重编译内核,在超级终端中输入
-S:中断CPU相应GDB
-s:在1234端口接受GDB调试连接
在调试窗口
在gdb中
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)