首页
社区
课程
招聘
[原创]linux 3.10 版本编译 qemu仿真 busybox
发表于: 2025-6-8 20:44 1271

[原创]linux 3.10 版本编译 qemu仿真 busybox

2025-6-8 20:44
1271

因为没有找到完整版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.sh

net.sh,需要提前下载virbruntils工具

启动完net.sh之后,启动boot.sh我们就可以成功模拟出我们想要的linux系统了

图片描述

图片描述

本人是刚刚开始接触路由器固件漏洞挖掘,很多基础都不懂,都是在现有大佬的技术博客的基础上进行学习,也希望大佬们觉得哪里不到位直接指出,我一定虚心接受,之后估计会更新一些路由器漏洞复现和漏洞挖掘之类的文章,加油。

跟随大师的脚步,模仿大师的行为,感受大师的意境,成为真正的大师。
跟随大师的脚步,模仿大师的行为,感受大师的意境,成为真正的大师。
https://people.debian.org/~aurel32/qemu/
https://people.debian.org/~aurel32/qemu/
https://releases.linaro.org/archive/12.11/components/toolchain/binaries/
https://releases.linaro.org/archive/12.11/components/toolchain/binaries/
make ARCH=arm vexpress_defconfig
make ARCH=arm vexpress_defconfig
make ARCH=arm CROSS_COMPILE=/home/ccy/hardware/Linuxkernel_3.10.31_9350/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/bin/arm-linux-gnueabihf- all
make ARCH=arm CROSS_COMPILE=/home/ccy/hardware/Linuxkernel_3.10.31_9350/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/bin/arm-linux-gnueabihf- all
https://busybox.net/downloads/busybox-1.30.1.tar.bz2
https://busybox.net/downloads/busybox-1.30.1.tar.bz2
make ARCH=arm menuconfig
make ARCH=arm menuconfig
make ARCH=arm CROSS_COMPILE=/home/ccy/hardware/Linuxkernel_3.10.31_9350/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/bin/arm-linux-gnueabihf- all
make ARCH=arm CROSS_COMPILE=/home/ccy/hardware/Linuxkernel_3.10.31_9350/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/bin/arm-linux-gnueabihf- all
make ARCH=arm CROSS_COMPILE=/home/ccy/hardware/Linuxkernel_3.10.31_9350/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/bin/arm-linux-gnueabihf- install
make ARCH=arm CROSS_COMPILE=/home/ccy/hardware/Linuxkernel_3.10.31_9350/gcc-linaro-arm-linux-gnueabihf-4.7-2012.11-20121123_linux/bin/arm-linux-gnueabihf- install
# 系统启动时
::sysinit:/etc/init.d/rcS
 
# 系统启动按下Enter键时
::askfirst:-/bin/sh
 
# 按下Ctrl+Alt+Del键时
::ctrlaltdel:/sbin/reboot
 
# 系统关机时
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
 
# 系统重启时
::restart:/sbin/init
# 系统启动时
::sysinit:/etc/init.d/rcS
 
# 系统启动按下Enter键时
::askfirst:-/bin/sh
 
# 按下Ctrl+Alt+Del键时
::ctrlaltdel:/sbin/reboot
 
# 系统关机时
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
 
# 系统重启时
::restart:/sbin/init

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2025-6-10 10:44 被GotEOF编辑 ,原因: 添加一句话
收藏
免费 2
支持
分享
最新回复 (3)
雪    币: 15661
活跃值: (18963)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
2
感谢楼主分享,不过Linux3.x的内核也太老了,现在基本都不用了,可以试试看5.x的内核
2025-6-9 08:43
0
雪    币: 239
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
pureGavin 感谢楼主分享,不过Linux3.x的内核也太老了,现在基本都不用了,可以试试看5.x的内核
谢谢,是的,我针对的是一个比较久远的调制解调器
2025-6-9 09:42
0
雪    币: 5049
活跃值: (7720)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
niub plus
2025-6-10 09:49
0
游客
登录 | 注册 方可回帖
返回