使用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打开帮助
使用qemu模拟调试内核和debian根文件系统的更多相关文章
- 关于UBOOT,LINUX内核编译,根文件系统的15个小问题
(1)内核默认运行地址和加载地址在哪里设置? 由 arch/arm/kernel/vmlinux.lds.S 生成的 arch/armkernel/vmlinux.lds决定 (2)从FLASH什 ...
- linux 内核移植和根文件系统的制作【转载】
原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...
- linux 内核移植和根文件系统的制作
1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1 Linux版本 Linux内核的版本号 ...
- Linux内核启动及根文件系统载入过程
上接博文<u-boot之u-boot-2009.11启动过程分析> Linux内核启动及文件系统载入过程 当u-boot開始运行bootcmd命令,就进入Linux内核启动阶段.与u-bo ...
- 嵌入式linux内核制作、根文件系统制作
嵌入式系统构成: 主要由bootloader.kernel.以及根文件系统三部分组成. 内核制作步骤: 制作嵌入式平台使用的linux内核制作方法与pc平台上的linux内核基本一致 1.清除原有配置 ...
- ubuntu12.04下使用qemu模拟mips处理器安装debian
注:ubuntu是不支持mips处理器的,只能在x86下安装运行第一步.安装qemu sudo apt-get install qemu qemu-system .执行 qemu-system-mip ...
- qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统
qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和linux kernel,达到与开发板上一样的学习效果! 虽然已经买了2440开发板,但是在实际学习 ...
- qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统【转】
转自:http://www.cnblogs.com/riskyer/p/3366001.html qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和l ...
- CentOS 7 利用qemu模拟ARM vexpress A9开发板
听说qemu用于仿真arm很不错,今日就来试了一把.由于刚刚开始,了解的并不多.本文仅仅记录Qemu装载Linux kernel和busybox根文件系统的过程.后续将会深入了解仿真的其他内容. 先上 ...
随机推荐
- Spark 核心概念RDD
文章正文 RDD全称叫做弹性分布式数据集(Resilient Distributed Datasets),它是一种分布式的内存抽象,表示一个只读的记录分区的集合,它只能通过其他RDD转换而创建,为此, ...
- Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范与推荐标准
Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范与推荐标准 1. 界面gui方面的前后端分离重大意义1 2. 业务逻辑也适当的迁移js化1 3. 常用分离方法2 3.1. 页面 ...
- malloc()參数为0的情况
以下的代码片段输出是什么?为什么? char *ptr; ))==NULL) puts("Got a null pointer"); else puts("Got a v ...
- 基于mindwave脑电波进行疲劳检测算法的设计(5)
时隔两个多月了,前段时间在弄Socket,就没有弄这个了.现在好了,花了几天的时间,终于又完成了一小部分了.这一小节主要讲α,β,δ,θ等等波段之间的关系.废话不多说,直接给出这几天的成果. 上一次, ...
- 如何在TextView类中创建超链接 Linkify
Linkify是一个辅助类,通过RegEx样式匹配,自动地在TextView类(和继承的类)中创建超链接.符合特定的RegEx样式的文本会被转变成可点击的超链接,这些超链接隐式的调用startActi ...
- 解剖 Elasticsearch 集群 - 之一
解剖 Elasticsearch 集群 - 之一 本篇文章是一系列涵盖 Elasticsearch 底层架构和原型示例的其中一篇.在本篇文章中,我们会讨论底层的存储模型以及 CRUD(创建.读取.更新 ...
- 最详尽的 JS 原型与原型链终极详解,没有「可能是」。(一)
最详尽的 JS 原型与原型链终极详解,没有「可能是」.(一) 第二篇已更新,点击进入第三篇已更新,点击进入
- 有趣的JavaScript原生数组函数
本文由 伯乐在线 - yanhaijing 翻译.未经许可,禁止转载!英文出处:flippinawesome.欢迎加入翻译小组. 在JavaScript中,可以通过两种方式创建数组,Array构造函数 ...
- 【转】ELK到底是什么鬼?辣么多公司用!
Sina.饿了么.携程.华为.美团.freewheel.畅捷通 .新浪微博.大讲台.魅族.IBM...... 这些公司都在使用ELK!ELK!ELK! ELK竟然重复了三遍,是个什么鬼? 一. ...
- MYSQL + MHA +keepalive + VIP安装配置(二)--MHA的配置
一.总概 1.MHA介绍 MHA(Master High Availability)是自动的master故障转移和Slave提升的软件包.它是基于标准的MySQL复制(异步/半同步). MH ...