RSS

qemu-lunchlinux

版本信息

系统版本:Ubuntu Server 20.04 LTS 64bit 编译器:9.4.0 交叉编译器:arm-linux-gnueabi-gcc (Linaro GCC 7.5-2019.12) 7.5.0 linux内核:linux-5.15.53 busybox:1.35.0 QEMU:7.0.0 ninja-build:1.10.0

获取交叉编译链

下载地址:Linaro Releases image-20220718155906055

tar xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.tar	#解压
vi ~/.bashrc	#修改环境变量PATH,让系统先去指定目录寻找交叉编译链的可执行文件

image-20220718160818198 在.bashrc文件加上这行,交叉工具链的目录取决于自己解压的目录 export PATH=/home/ubuntu/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/bin:$PATH

source ~/.bashrc	#让.bashrc生效

安装成功 image-20220718160830447

编译QEMU

sudo apt-get install ninja-build	#Need ninja. Ninja is a small build system with a focus on speed. 
wget https://download.qemu.org/qemu-7.0.0.tar.xz	#下载源码
tar xvf qemu-7.0.0.tar.xz	#解压
mkdir qemu_build && cd qemu_build	# 在下载目录新建文件夹build

# 以下均在/build目录下
../qemu-7.0.0/configure

make && make install	#出去喝杯咖啡,打两把游戏在来看结果

编译成功后,qemu-system-arm就生成在当前目录 和上面一样,将编译出的qemu的可执行文件的目录加入PATH环境变量。

vi ~/.bashrc	#修改环境变量PATH

在.bashrc文件上次修改的基础上,重新修改 export PATH=/home/ubuntu/qemu_build:/home/ubuntu/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/bin:$PATH

source ~/.bashrc	#让.bashrc生效

安装成功 image-20220718160842204

编译Linux内核

内核代码下载地址:The Linux Kernel Archives

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j2

ps:Versatile Express系统由ARM Ltd提供,作为CortexA9四核处理器的开发环境,硬件由uATX主板和CoreTile Express A9x4子板组成。

验证只启动Linux内核

qemu-system-arm -M vexpress-a9 -m 128M -kernel ~/linux-5.15.53/arch/arm/boot/zImage -dtb ~/linux-5.15.53/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic

ps:内核和设备树的路径每个人可能不一样,需要自己注意下

image-20220718160857131 启动成功,但还没有文件系统,操作系统稍后制作。 输入ctrl+A+x退出qemu

编译busybox,制作文件系统

编译

wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2	#下载源码
tar xvf busybox-1.35.0.tar.bz2	#解压
cd busybox-1.35.0/
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
  • Settings —>

    • [*] Build static binary (no shared libs) #使用静态库
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install
  • 生成结果位于:当前根目录下的_install文件夹下
  • 备注:默认安装到根目录下的_install,若想更改,可以通过menuconfig里面的选项更改

制作文件系统镜像

根目录构建

mkdir -p rootfs/{dev,etc/init.d,lib,proc,sys}   #创建根目录

cp -raf busybox-1.35.0/_install/* rootfs        #拷贝busybox命令到根目录

sudo mknod -m 666 rootfs/dev/tty1 c 4 1			#创建4个tty端终设备
sudo mknod -m 666 rootfs/dev/tty1 c 4 2
sudo mknod -m 666 rootfs/dev/tty2 c 4 2
sudo mknod -m 666 rootfs/dev/tty3 c 4 3
sudo mknod -m 666 rootfs/dev/tty4 c 4 4
sudo mknod -m 666 rootfs/dev/console c 5 1		#创建console字符设备
sudo mknod -m 666 rootfs/dev/null c 1 3			#创建null 字符设备

vim rootfs/etc/init.d/rcS						#输入如下内容
#!/bin/bash 
mount -t proc proc /proc 
mount -t sysfs sysfs /sys 
/sbin/mdev -s 
echo /sbin/mdev > /proc/sys/kernel/hotplug      #支持热插拔
sudo chmod +x rootfs/etc/init.d/rcS
cd rootfs
find ./ | cpio -o --format=newc > ./rootfs.img

启动qemu

qemu-system-arm -M vexpress-a9 -m 128M -kernel linux-5.15.53/arch/arm/boot/zImage -dtb linux-5.15.53/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -append "root=/dev/ram rdinit=sbin/init console=ttyAMA0" -nographic -initrd rootfs/rootfs.img

启动成功 image-20220718160906354