在安装QEMU前需要安装nijia工具,使用ninja1.12会出现bug,更换官网1.11.1版本,就可以正常编译了
下载地址:
https://github.com/ninja-build/ninja/releases
配置安装
hudahua@wiat:~/workspace/QEMU/ninja-1.11.1$ ./configure.py --bootstrap
提示:/usr/bin/env: “python”: 没有那个文件或目录
hudahua@wiat:~/workspace/QEMU/ninja-1.11.1$
hudahua@wiat:~/workspace/QEMU/ninja-1.11.1$ vi configure.py
方法: 将运行的程序开头的声明 #! /usr/bin/env python 改为 #! /usr/bin/env python3 ,因为noetic(或者使用者安装)的python版本是3。再配置。
复制ninja执行文件到系统
sudo cp ninja /usr/bin/
ninja --version #查看安装版本,出现版本即安装成功
wget https://download.qemu.org/qemu-8.2.0.tar.xz #下载源码
tar xf qemu-8.2.0.tar.xz # 解压
mkdir build && cd build # 在下载目录新建文件夹build(这是必须的,因为configure命令必须在build文件夹下执行)
以下均在/build目录下
./…/qemu-8.2.0/configure -prefix ~/path/test/qemu-install #执行配置文件,可参看上一个教程
hudahua@wiat:~/workspace/QEMU/build_qemu$ ./../qemu-8.2.0/configure -prefix ~/workspace/test/qemu-install
python determined to be ‘/usr/bin/python3’
python version: Python 3.10.12
hudahua@wiat:~/workspace/QEMU/build_qemu$ make
hudahua@wiat:~/workspace/QEMU/build_qemu$ sudo make install
hudahua@wiat:~/workspace/QEMU/build_qemu$ which qemu-system-aarch64
下载最新Linux kernel版本内核。
https://www.kernel.org/
hudahua@wiat:~/workspace/kernel$ tar xf linux-6.7.3.tar.xz
到ARM官网下载交叉编译工具
https://developer.arm.com/downloads/-/gnu-a#panel4a
gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
hudahua@wiat:~/workspace/tools$ tar xf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
重命名交叉编译工具文件夹
mv gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu aarch64-linux-gnu-8.3
配置环境变量,生效。
aarch64-linux-gnu-gcc -v
__gcc 版本 8.3.0
安装kernel必要的包
sudo apt-get install libncurses5-dev build-essential git bison flex libssl-dev
编译内核
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image -j8
编译成功。
hudahua@wiat:~/workspace/kernel/linux-6.7.3$ ls arch/arm64/boot/
dts Image install.sh Makefile
下载rootfs
https://busybox.net/downloads/
配置rootfs
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
打开静态库编译选项
Settings ─
[*] Build static binary (no shared libs)
安装ncurses库
sudo apt-get install libncurses5-dev libncursesw5-dev
执行安装
make # 编译源码
出错:
/usr/bin/ld: coreutils/lib.a(mktemp.o): in function mktemp_main': mktemp.c:(.text.mktemp_main+0x98): 警告: the use of
mktemp’ is dangerous, better use mkstemp' or
mkdtemp’
/usr/bin/ld: networking/lib.a(ipcalc.o): in function `ipcalc_main’:
date.c:(.text.date_main+0x25b): undefined reference to `stime’
collect2: error: ld returned 1 exit status
需要声明环境变量,
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0$ export ARCH=arm64
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0$ export CROSS_COMPILE=aarch64-linux-gnu-
重新编译通过
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0$ make
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0$ make install
安装路径:
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0$ ls _install/
配置必要的系统文件
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0/_install$ mkdir etc dev lib
声明系统环境参数
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0/_install$ vi etc/profile
#!/bin/sh
export HOSTNAME=myQEMU
export USER=root
export HOME=/home
export PS1="[$USER@$HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
配置系统初始化文件
inittab文件中关于运行等级的所有操作执行完成,便代表了boot完成,之后就引导进入登录界面,用户可以使用账户密码登陆进入系统
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0/_install$ vi etc/fstab
#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
kmod_mount /mnt 9p trans=virtio 0 0
系统启动文件,挂载系统
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0/_install$ vi etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
编写rootfs启动脚本文件
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0/_install$ mkdir etc/init.d
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0/_install$ vi etc/init.d/rcS
mkdir -p /sys
mkdir -p /tmp
mkdir -p /proc
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
创建系统console
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0/_install/dev$
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0/_install/dev$ sudo mknod console c 5 1
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0/_install/dev$ sudo mknod null c 1 3
首先压缩rootfs为cpio.gz文件系统
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0/_install$ find . | cpio -o -H newc | gzip > ../rootfs.cpio.gz
3990 块
将编译制作完成的 Image,rootfs.cpio.gz和启动脚本qemu.sh放在同一目录
hudahua@wiat:~/workspace$ mkdir aarch64_rootfs
hudahua@wiat:~/workspace/aarch64_rootfs$ cp ../kernel/linux-6.7.3/arch/arm64/boot/Image ./
hudahua@wiat:~/workspace/aarch64_rootfs$ cp ../rootfs/busybox-1.31.0/rootfs.cpio.gz .
hudahua@wiat:~/workspace/aarch64_rootfs$ ls
Image rootfs.cpio.gz
编写QEMU启动脚本
$ cat qemu.sh
qemu-system-aarch64 \
-machine virt,virtualization=true,gic-version=3 \
-nographic \
-m size=1024M \
-cpu cortex-a57 \
-smp 2 \
-kernel Image \
-initrd rootfs.cpio.gz \
--append "console=ttyAMA0 rdinit=/linuxrc"
hudahua@wiat:~/workspace/aarch64_rootfs$ chmod +x qemu.sh
启动 QEMU成功。
hudahua@wiat:~/workspace/aarch64_rootfs$ ./qemu.sh
[root@myQEMU ]#
[root@myQEMU ]#
提示rcS启动脚本,不能运行,没有权限
can't run '/etc/init.d/rcS': Permission denied
[root@myQEMU ]# ls etc/init.d/rcS -l
-rw-rw-r-- 1 1000 1000 172 Feb 2 11:01 etc/init.d/rcS
[root@myQEMU ]#
脚步没有执行权限。
退出 QEMU
快捷键:按住Crtl+a,然后松开,按x。
hudahua@wiat:~/workspace/aarch64_rootfs$ cd ../rootfs/busybox-1.31.0/_install/
修改rcS的执行权限。
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0/_install$ chmod +x etc/init.d/rcS
重新压缩成cpio.gz文件系统
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0/_install$ find . | cpio -o -H newc | gzip > ../rootfs.cpio.gz
hudahua@wiat:~/workspace/rootfs/busybox-1.31.0/_install$ cd ../../../aarch64_rootfs/
hudahua@wiat:~/workspace/aarch64_rootfs$ cp ../rootfs/busybox-1.31.0/rootfs.cpio.gz .
编写QEMU启动脚本
QEMU 启动 Qt
mount: mounting kmod_mount on /mnt failed: No such file or directory
/etc/init.d/rcS: line 8: can't create /proc/sys/kernel/hotplug: nonexistent directory
参考博文
https://blog.csdn.net/m0_56588389/article/details/123201717
https://zhuanlan.zhihu.com/p/662500724
https://zhuanlan.zhihu.com/p/77564702