Linux之搭建arm的qemu模拟器
OS:kali
1.安装交叉编译工具、GDB 和 QEMU
# sudo apt-get install qemu debootstrap qemu-user-static
# sudo apt-get install qemu-system-arm
# sudo apt-get install gdb-multiarch //支持多架构cpu的gdb
# sudo apt-get install gcc-arm-linux-gnueabi //安装arm-linux-gcc交叉编译器
# sudo apt-get install g++-arm-linux-gnueabi //安装arm-linux-g++交叉编译器
2.下载、解压linux5.0内核
<0>.下载:https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.7.tar.xz
# xz -d linux5.0.tar.xz
# tar -xvf linux5.0.tar
<1>.编译
最顶层的Makefile文件里面,做如下修改:
# emacs Makefile
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabi-
Or
# make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
# make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm
<2>.arch/arm/configs目录里的各个厂商的内核配置文件,这个文件非常重要,并做如下操作
# sudo apt-get install bison libncurses5-dev u-boot-tools bc
# make vexpress_defconfig
<3>.配置kernel内核
# make menuconfig
<4>.编译kernel
# make LOADADDR=0X60003000 uImage -j4
or
# make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
# make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm
3.下载busybox制作根文件系统
<1>.下载编译busybox
# wget https://busybox.net/downloads/busybox-1.30.1.tar.bz2 --no-check-certificate
# tar -jxvf busybox-1.30.1.tar.bz2
# emacs Makefile
# make defconfig
# make CROSS_COMPILE=arm-linux-gnueabi-
# make CROSS_COMPILE=arm-linux-gnueabi- install
4.开始制作根文件系统
1.创建必要的目录
# mkdir rootfs
# cd rootfs
# mkdir rootfs /lib
# mkdir rootfs /dev
2.拷贝busybox编译生产的目录和文件,编译器自带的lib
# cp busybox-1.25.0/_install/* -r rootfs/
# cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
3.创建4个tty终端设备
# sudo mknod rootfs/dev/tty1 c 4 1
# sudo mknod rootfs/dev/tty2 c 4 2
# sudo mknod rootfs/dev/tty3 c 4 3
# sudo mknod rootfs/dev/tty4 c 4 4
4.生成512M大小的镜像,并拷文件系统树到镜像文件中
# dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=512
# mkfs.ext3 a9rootfs.ext3 //把a9rootfs.ext3格式化为ext3文件系统
# mkdir tmpfs
# mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
# cp -r rootfs/* tmpfs/
# sudo umount tmpfs
//启动qemu arm文件系统
# qemu-system-arm -M vexpress-a9 -m 1024M -kernel ~/tools/linux-5.0.7/arch/arm/boot/zImage -dtb ~/tools/linux-5.0.7/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd a9rootfs.ext3
后续可以把gdb移植上去,就可以调试学习ARM汇编指令了。