使用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根文件系统的过程.后续将会深入了解仿真的其他内容. 先上 ...
随机推荐
- Effective Java 第三版——49. 检查参数有效性
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Spark初识
一.简介 1.什么是Spark 官网地址:http://spark.apache.org/ Apache Spark™是用于大规模数据处理的统一分析引擎. 从右侧最后一条新闻看,Spark也用于AI人 ...
- LeetCode OJ 238. Product of Array Except Self 解题报告
题目链接:https://leetcode.com/problems/product-of-array-except-self/ 238. Product of Array Except Se ...
- FFmpeg: AVPacket 结构体分析
AVPacket是FFmpeg中很重要的一个数据结构,它保存了解封装之后,解码之前的数据(注意:仍然是压缩后的数据)和关于这些数据的一些附加信息,如显示时间戳(pts).解码时间戳(dts).数据时长 ...
- ECMAScript 6 入门之变量的解构赋值
1.数组 1. var a=1,b=2,c=3; console.log("a:",a) console.log("b:",b) console.log(&qu ...
- linux每日命令(34):ps命令和pstree命令
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- 关于Unity中NGUI的背包实现之Scrollview(基于Camera)
基于UIPanel的scrollview实现方式在移动设备上的性能不如基于camera的方式.因为UIPanel的scrollview实现方式要渲染很多的道具图,性能自然就降低了.如果是用第二个摄像机 ...
- System.Runtime.InteropServices.COMException 检索COM类工厂中CLSID{xxxxxxxxx}的组件时失败解决方法
iis7.5中设定应用程序池中<进程模型>中<标识>为localSystem 提示:System.Runtime.InteropServices.COMException: 命 ...
- 多线程开发之一 NSThread
每个 iOS 应用程序都有个专门用来更新显示 UI 界面.处理用户的触摸事件的主线程,因此不能将其他太耗时的操作放在主线程中执行,不然会造成主线程堵塞(出现卡机现象),带来不好的用户体验. 一般的解决 ...
- scala中隐式转换之总结
1.隐式转换的时机: 1.当方法中的参数的类型与目标类型不一致时 2.当对象调用类中不存在的方法或成员时,编译器会自动将对象进行隐式转换 2.隐式解析机制 即编译器是如何查找到缺失信息的,解析具有 ...