因为没有找到完整版linux 3.10版本编译加qemu仿真教程,准备自己总结一下整个的过程因为我的出发点是为了仿真一个内核为linux3.10版本、交叉编译器版本也为特定的版本路由器固件我们要进行qemu系统仿真,需要至少两个文件,linux内核文件,磁盘文件(文件系统)。这里我们可能看到过不同的仿真命令,有的会需要三个文件:内核文件,磁盘文件(文件系统),initrd文件。这里的主要区别是,内核有没有内置访问存储设备所需的所有驱动。当只有两个文件时,qemu的启动过程是: 内核启动 → 直接检测硬盘 → 挂载根分区当多了一个initrd文件时,qemu的启动过程是:在一般我们的系统模拟路由器固件的过程中,我们只需要去下载打包好的三种文件即可:下载网站 所以这里我们就要自己来制作这三个文件,至少两个文件。因为我们要仿真的路由器架构是arm32,所以要想在amd64架构下编译出可以运行在arm架构的文件,我们需要配置我们的交叉编译环境。到这个网站下载我们arm版本的交叉编译器 然后进行解压Index of /pub/linux/kernel/在这个网站下载对应版本的内核文件 进入目录,生成默认配置文件指定交叉编译器开始编译这里可能会报错
显示是yyloc多次定义错误,解决方法是修改内核目录下'scripts/dtc/dtc-lexer.lex.c_shipped'文件,在'YYLTYPEyyloc'前添加'extern'关键字,然后重新编译,问题即可得到解决编译成功后在内核目录下会有 zImage 和 vexpress-v2p-ca9.dtb,这里的zImage文件即为我们需要的linux内核文件 这里我们要制作系统的文件系统,即Linux下的常规目录,我们使用BusyBox进行制作,这里BusyBox版本我使用的是和Linux 3.10内核版本发行时间差不多的1.30.1下载busybox源码生成配置文件这里直接默认,到界面下方Save即可编译busybox再进行busybox安装,就是生成常规的linux命令这个命令会在busybox目录下生成一个_install文件现在的文件系统 _install 并不完整,缺少了很多目录。下面补充一些缺少的必要目录和文件。这里是我已经补充过的完整目录(直接mkdir,然后补充常规文件即可),正常刚install完成,里面只有bin、usr、sbin和linuxrc文件
在配置lib目录时要注意:将交叉编译工具链里面的 lib 目录拷贝到当前的 _install 目录,而交叉编译工具链下面有好几个 lib 目录。如果不能确定的话,就用命令 find xxx -name "ld-linux-armhf.so.3" 搜索,有这个 ld 的文件就是要拷贝的 lib 目录。我们在把这个交叉编译目录的lib目录拷贝进去的同时,也要把我们之前一并下载解压的 _runtime目录中文件拷贝进去
这是完整的_install/lib目录下的动态链接库文件 创建 etc/inittab 文件,写入下面内容创建 etc/init.d/rcS 文件,写入下面内容。并且给 etc/init.d/rcS 文件 777 的权限创建 etc/fstab 文件,写入下面内容创建 etc/profile 文件,写入下面内容。创建 dev 目录创建终端文件创建其他目录 用 dd 创建一个 1024M 的空白镜像,再用 mkfs.ext3 命令在 rootfs.ext3.img 文件中生成一个 ext3 格式的文件系统。通过挂载的方式,访问 rootfs.ext3.img 文件,将之前的 _install 目录下文件拷贝至挂载点 mnt_tmpfs,最后取消挂载。至此一个装有文件系统的磁盘镜像制作完毕。 到此我们需要的至少两个文件就准备好了,即为带有文件系统的磁盘文件和linux内核文件将这两个文件移动到新的目录下并创建qemu启动脚本和网络配置脚本 boot.shnet.sh,需要提前下载virbruntils工具启动完net.sh之后,启动boot.sh我们就可以成功模拟出我们想要的linux系统了 本人是刚刚开始接触路由器固件漏洞挖掘,很多基础都不懂,都是在现有大佬的技术博客的基础上进行学习,也希望大佬们觉得哪里不到位直接指出,我一定虚心接受,之后估计会更新一些路由器漏洞复现和漏洞挖掘之类的文章,加油。跟随大师的脚步,模仿大师的行为,感受大师的意境,成为真正的大师。
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-287157.htm
[原创]linux 3.10 版本编译 qemu仿真 busybox
247 浏览
3 回复
感谢楼主分享,不过Linux3.x的内核也太老了,现在基本都不用了,可以试试看5.x的内核
pureGavin
感谢楼主分享,不过Linux3.x的内核也太老了,现在基本都不用了,可以试试看5.x的内核
谢谢,是的,我针对的是一个比较久远的调制解调器
感谢楼主分享,不过Linux3.x的内核也太老了,现在基本都不用了,可以试试看5.x的内核
谢谢,是的,我针对的是一个比较久远的调制解调器
niub plus