使用qemu模拟调试内核和debian根文件系统
开发环境:Ubuntu 14.04.3 LTS 64bit
sudo debootstrap jessie /mnt/jessie http://mirrors.163.com/debian
在/mnt/jessie目录下建立一个init文件,内容如下:
james@james-OptiPlex-380:~$ sudo vi /mnt/jessie/init #!/bin/sh # devtmpfs does not get automounted for initramfs echo "******** init **********" /bin/mount -t devtmpfs devtmpfs /dev exec 0</dev/console exec 1>/dev/console exec 2>/dev/console exec /sbin/init $*
参考linux 内核文档 Documentation/filesystems/ramfs-rootfs-initramfs.txt,用下面脚本打包initramfs
james@james-OptiPlex-380:/mnt$ cat mkinitramfs.sh #!/bin/sh # Copyright 2006 Rob Landley <rob@landley.net> and TimeSys Corporation. # Licensed under GPL version 2 if [ $# -ne 2 ] then echo "usage: mkinitramfs directory imagename.cpio.gz" exit 1 fi if [ -d "$1" ] then echo "creating $2 from $1" (cd "$1"; find . | cpio -o -H newc | gzip) > "$2" else echo "First argument must be a directory" exit 1 fi
打包命令:
mkinitramfs.sh jessie rootfs.cpio.gz
使用以下命令启动内核和根文件系统:
qemu-system-x86_64 -kernel bzImage -initrd /mnt/rootfs.cpio.gz /dev/zero -m 2G -nographic -append "console=ttyS0"
问题:启动时无法进入initramfs,原因是没根目录下的 init文件。
[ 11.815891] rtc_cmos 00:00: setting system clock to 2015-12-02 07:21:59 UTC (1449040919) [ 11.818523] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 11.818900] EDD information not available. [ 11.819783] ALSA device list: [ 11.819991] No soundcards found. [ 12.396667] input: ImExPS/2 Generic Explorer Mouse as /devices/platform/i8042/serio1/input/input3 [ 12.403434] VFS: Cannot open root device "(null)" or unknown-block(0,0): error -6 [ 12.403941] Please append a correct "root=" boot option; here are the available partitions: [ 12.404870] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) [ 12.405584] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.13.0 #7 [ 12.405945] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011 [ 12.406561] 0000000000008001 ffff880074d01dd0 ffffffff81b8de3a ffffffff8201c2c8 [ 12.407087] ffff880074d01e48 ffffffff81b89a24 223d746f00000010 ffff880074d01e58 [ 12.407557] ffff880074d01df8 000000000000004f ffff880074d01e68 0000000000000052 [ 12.408077] Call Trace: [ 12.408502] [<ffffffff81b8de3a>] dump_stack+0x45/0x56 [ 12.408502] [<ffffffff81b89a24>] panic+0xc2/0x1c1 [ 12.408502] [<ffffffff8234e338>] mount_block_root+0x1a8/0x250 [ 12.408502] [<ffffffff8234e61b>] mount_root+0xf1/0xfa [ 12.408502] [<ffffffff8234f2a0>] ? initrd_load+0x2c9/0x2d8 [ 12.408502] [<ffffffff8234e78b>] prepare_namespace+0x167/0x19f [ 12.408502] [<ffffffff8234e04a>] kernel_init_freeable+0x1c4/0x1d1 [ 12.408502] [<ffffffff8234d833>] ? do_early_param+0x88/0x88 [ 12.408502] [<ffffffff81b85b00>] ? rest_init+0x80/0x80 [ 12.408502] [<ffffffff81b85b0e>] kernel_init+0xe/0x120 [ 12.408502] [<ffffffff81b9f2ac>] ret_from_fork+0x7c/0xb0 [ 12.408502] [<ffffffff81b85b00>] ? rest_init+0x80/0x80 [ 12.408502] general protection fault: fff2 [#1] SMP [ 12.408502] Modules linked in: [ 12.408502] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.13.0 #7 [ 12.408502] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011 [ 12.408502] task: ffff880074c58000 ti: ffff880074d00000 task.ti: ffff880074d00000 [ 12.408502] RIP: 0010:[<ffffffff81b89aea>] [<ffffffff81b89aea>] panic+0x188/0x1c1 [ 12.408502] RSP: 0018:ffff880074d01de0 EFLAGS: 00000246 [ 12.408502] RAX: 0000000000006a6a RBX: ffffffff8201c2c8 RCX: 00000000000000a0 [ 12.408502] RDX: 000000000000006a RSI: 0000000000000000 RDI: ffffffff826c8a70 [ 12.408502] RBP: ffff880074d01e48 R08: 0000000000000001 R09: 00000000000001e1 [ 12.408502] R10: 736572203f205d3e R11: 3030623538623138 R12: 0000000000000000 [ 12.408502] R13: 0000000000000000 R14: 0000000000000000 R15: ffff88007fa93000 [ 12.408502] FS: 0000000000000000(0000) GS:ffff880077800000(0000) knlGS:0000000000000000 [ 12.408502] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b [ 12.408502] CR2: 00007fbb08c44140 CR3: 000000000220c000 CR4: 00000000000006f0 [ 12.408502] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 12.408502] DR3: 0000000000000000 DR6: 0000000000000000 DR7: 0000000000000000 [ 12.408502] Stack: [ 12.408502] 223d746f00000010 ffff880074d01e58 ffff880074d01df8 000000000000004f [ 12.408502] ffff880074d01e68 0000000000000052 ffff880000095070 6120657361656c50 [ 12.408502] 00000000000001ce ffff88007fa93000 0000000000008001 0000000000008001 [ 12.408502] Call Trace: [ 12.408502] [<ffffffff8234e338>] mount_block_root+0x1a8/0x250 [ 12.408502] [<ffffffff8234e61b>] mount_root+0xf1/0xfa [ 12.408502] [<ffffffff8234f2a0>] ? initrd_load+0x2c9/0x2d8 [ 12.408502] [<ffffffff8234e78b>] prepare_namespace+0x167/0x19f [ 12.408502] [<ffffffff8234e04a>] kernel_init_freeable+0x1c4/0x1d1 [ 12.408502] [<ffffffff8234d833>] ? do_early_param+0x88/0x88 [ 12.408502] [<ffffffff81b85b00>] ? rest_init+0x80/0x80 [ 12.408502] [<ffffffff81b85b0e>] kernel_init+0xe/0x120 [ 12.408502] [<ffffffff81b9f2ac>] ret_from_fork+0x7c/0xb0 [ 12.408502] [<ffffffff81b85b00>] ? rest_init+0x80/0x80 [ 12.408502] Code: 00 00 49 ff cc 74 0c bf 58 89 41 00 e8 e0 90 83 ff eb ef 48 83 c3 64 eb b6 83 3d a1 80 93 00 00 74 05 e8 5a 3f 4e ff fb 45 31 e4 <4d> 39 ec 7c 18 41 83 f6 01 44 89 f7 ff 15 64 80 93 00 49 01 c4 [ 12.408502] RIP [<ffffffff81b89aea>] panic+0x188/0x1c1 [ 12.408502] RSP <ffff880074d01de0> [ 12.408502] ---[ end trace 96badb4295b8f792 ]---
qemu提供了几个快捷键,ctrl+a h打开帮助
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2014-12-02 Android下pm 命令详解
2014-12-02 android系统权限SET_PREFERRED_APPLICATIONS怎么获取
2014-12-02 Android 中各种权限深入体验及详解