首页
社区
课程
招聘
[原创]QEMU + Busybox模拟Linux 内核环境
发表于: 2020-12-25 17:38 9400

[原创]QEMU + Busybox模拟Linux 内核环境

2020-12-25 17:38
9400

最近转Linux平台,开始深入Linux内核相关,总结一下进行Linux内核环境模拟流程。结合Linux的内核源码一起,效果会比较好。

Ubuntu 18.04

Linux ubuntu 5.4.0-58-generic #64~18.04.1-Ubuntu SMP Wed Dec 9 17:11:11 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

使用主流的qemu+busybox进行模拟,底层的模拟实现软件内部完成,可以将重心放在内核调试上,避免在环境上浪费过多时间。qemu模拟器原生即支持gdb调试器,所以可以方便地使用gdb的强大功能对操作系统进行调试。

首先安装qemu,依次执行以下命令:

这里不建议使用源码编译的方式进行安装,个人建议是节省时间在核心工作上,工具越快搭建好越能提升效率。源码编译涉及到编译器和主机环境各异性的问题,中间可能出现各种情况,浪费时间。(注意,安装好后,无法直接qemu无法运行,需要使用qemu-system-i386, qemu-system-x86_64, qemu-system-arm这种格式的命令进行运行。如果嫌麻烦,可以设置软链接。)

安装busybox,直接busybox的github上拖源码下来即可。在实际进行文件系统制作的时候再进行其他操作。

最后是下载想进行编译的Linux内核源码,这里给出一个各个版本的Linux内核源码集合

首先对Linux内核进行编译:

注意,这里在进入menuconfig后,需要开启内核参数CONFIG_DEBUG_INFOCONFIG_GDB_SCRIPTS。gdb提供了python接口进行功能扩展,内核基于python接口实现了一系列辅助脚本来简化内核的调试过程。

执行make bzImage时遇到的问题:

fatal error: linux/compiler-gcc7.h: No such file or directory

提示缺少compiler-gcc7.h这个文件,是由于内核版本较低和gcc版本不匹配造成的有三种解决方法:

fatal error: asm/types.h: No such file or directory

linux添加到asm-generic的软链接: ln -s /usr/include/asm-generic asm

Linux启动阶段,boot loader加载完内核文件vmlinuz之后,便开始挂载磁盘根文件系统。挂载操作需要磁盘驱动,所以挂载前要先加载驱动。但是驱动位于/lib/modules,不挂载磁盘就访问不到,形成了一个死循环。initramfs根文件系统就可以解决这个问题,其中包含必要的设备驱动和工具,boot loader会加载initramfs到内存中,内核将其挂载到根目录,然后运行/init初始化脚本,去挂载真正的磁盘根文件系统。

首先需要注意,busybox默认编译的文件系统是和主机OS一样的位数,也就是Ubuntu是x86的,编译出的文件系统就是x86的,如果Ubuntu是x64的,编译出的文件系统是x64的。要保持前面编译的Linux内核和文件系统的位数一样。

进入menu后,修改参数如下:

busybox_settings

其次,修改为静态链接:

然后再执行make和install操作。

编译成功后,会生成_install目录,其内容如下:

依次执行如下命令:

其中init文件的内容如下:

在创建的initramfs中包含busybox可执行程序、必须的设备文件、启动脚本init,且init只挂载了虚拟文件系统procfssysfs,没有挂载磁盘根文件系统,所有操作都在内存中进行,不会落地。

最后打包initramfs:

参数说明:

启动后的根目录,就是initramfs中包含的内容:

qemu_success

至此,一个简单的内核就算编译完成了,可以挂gdb进行调试了。

https://consen.github.io/2018/01/17/debug-linux-kernel-with-qemu-and-gdb/

一些非大量干货的内容会发在自己blog上,争取在看雪发的都是干货比较多的内容。
http://www.v4ler1an.com/

 
sudo apt-get install qemu
sudo apt-get install qemu-system
sudo apt-get install qemu-user-static
sudo apt-get install qemu
sudo apt-get install qemu-system
sudo apt-get install qemu-user-static
cd linux-3.18.6
make menuconfig
make bzImage
cd linux-3.18.6
make menuconfig
make bzImage
Kernel hacking  --->
    [*] Kernel debugging
    Compile-time checks and compiler options  --->
        [*] Compile the kernel with debug info
        [*]   Provide GDB scripts for kernel debuggin
Kernel hacking  --->
    [*] Kernel debugging
    Compile-time checks and compiler options  --->
        [*] Compile the kernel with debug info
        [*]   Provide GDB scripts for kernel debuggin
1.在内核文件夹中include/linux目录下找到compiler-gcc4.h文件,不同内核版本可能不一样,也有可能是compiler-gcc3.h,将它重命名为compiler-gcc7.h。然后重新编译一下就好了。
 
2.在新的内核源码中拷贝一个compiler-gcc7.h,将它拷贝到内核文件夹include/linux目录下,重新编译即可。
 
3.重装一个版本低一点的gcc。
1.在内核文件夹中include/linux目录下找到compiler-gcc4.h文件,不同内核版本可能不一样,也有可能是compiler-gcc3.h,将它重命名为compiler-gcc7.h。然后重新编译一下就好了。
 
2.在新的内核源码中拷贝一个compiler-gcc7.h,将它拷贝到内核文件夹include/linux目录下,重新编译即可。
 
3.重装一个版本低一点的gcc。
cd busybox-1.32.0
make menuconfig
make -j 20
make install
cd busybox-1.32.0
make menuconfig

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (9)
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
干货
2020-12-25 17:43
0
雪    币: 8201
活跃值: (2701)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
收藏学习
2020-12-27 08:36
0
雪    币: 156
活跃值: (3801)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
收藏学习
2020-12-27 23:45
0
雪    币: 1258
活跃值: (598)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
棒的呀批!
2020-12-28 17:58
0
雪    币: 6977
活跃值: (1786)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
经过我自己测试,4.0以上内核根文件系统直接用debootstrap构建就可以了,一个完整的linux发行版,感觉比busybox好使
2020-12-28 18:09
0
雪    币: 15187
活跃值: (16852)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
7
TopC 经过我自己测试,4.0以上内核根文件系统直接用debootstrap构建就可以了,一个完整的linux发行版,感觉比busybox好使
可以,有更简单的方法当然更好。我也接触没多久,可能预研的不够。想对着源码来,我看都说先从低版本的开始看的
2020-12-28 19:53
0
雪    币: 186
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
你博客内容全是404
2020-12-29 20:49
0
雪    币: 15187
活跃值: (16852)
能力值: (RANK:730 )
在线值:
发帖
回帖
粉丝
9
hellojs 你博客内容全是404
已修复
2020-12-31 14:14
0
雪    币: 5594
活跃值: (2168)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
感谢分析 大牛写的文章看着好爽
2020-12-31 16:33
0
游客
登录 | 注册 方可回帖
返回
//