文章目录
- 一、 编译文件系统
- 1.1 下载资源安装包
- 1.2 配置模板ARM64目标平台
- 1.3 配置交叉编译器
- 1.4 配置登录用户名和密码
- 1.5 配置Linux 控制台
- 1.6 配置文件系统格式
- 1.7 编译buildroot文件系统
- 二、编译ARM64 Linux
- 三、启动 Qemu Linux系统
- 参考链接:
一、 编译文件系统
1.1 下载资源安装包
我们使用buildroot软件包来制作rootfs文件系统映像,下载buildroot软件包,并进入配置界面:
wget https://buildroot.org/downloads/buildroot-2021.08.tar.bz2
tar xvf buildroot-2021.02.4.tar.bz2
cd buildroot-2021.02.4
make menuconfig
1.2 配置模板ARM64目标平台
- Target options->AArch64(little endian)
- Target options-> Target Architecture Variant (cortex-A57)
示意图如下:
- Target options->AArch64(little endian)
- Target options-> Target Architecture Variant (cortex-A57)
这里可以根据自己的需要选择不同的CPU进行仿真调试
示意图如下:
1.3 配置交叉编译器
- Toolchain->Toolchain type 选择“External toolchain”:
- Toolchain->Toolchain选择"Arm AArch64 2020.11”:
1.4 配置登录用户名和密码
- System configuration-> Enable root login with password, 并且设置root密码,这里设置为"adsf”:
1.5 配置Linux 控制台
- System configuration-> Run a getty (login prompt) after boot->TTY port设置为"TTYAMA0"。
- Target packages-> Debugging, profiling and benchmark可以选择自己感兴趣的工具,这里选择strace:
1.6 配置文件系统格式
- Filesystem images选择cpio the root filesystem (for use as an initial RAM filesystem):
1.7 编译buildroot文件系统
cd $WORK_DIR/buildroot-2021.08
make
buildroot-2021.08/output/images目录下会生成两个系统映像:
”Your PATH contains spaces, TABs, and/or newline (\n) characters. This doesn‘t work. Fix you PATH“
如果编译时出现上述报错,sudo su 切换root用户即可
二、编译ARM64 Linux
安装交叉编译器
sudo apt install gcc-aarch64-linux-gnu
下载Linux内核,并生成默认的配置文件:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.14.6.tar.xz
tar xvf linux-5.14.6.tar.xz
cd linux-5.14.6.tar.xz
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
在产生的linux-5.14.6/.config文件中修改以下三个选项:
CONFIG_CMDLINE="console=ttyAMA0"
CONFIG_INITRAMFS_SOURCE="/home/tom/hdd/linux-qemu/repos/buildroot-2021.08/output/images/rootfs.cpio"
CONFIG_DEBUG_INFO=y
CONFIG_INITRAMFS_SOURCE这里填写你自己的路径地址
编译kernel:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j4
在编译的过程中会出现需要用户配置选项的交互输入,则一路默认回车键,直到出现交互输入Built-in initramfs compression mode时,因为我们编译initramfs文件系统时,没有选择压缩模式,所以这里选择8:
继续回车,直到遇到Kernel command line type交互输入时,选择1:
其余一路回车直到配置结束,生成vmlinux,Image,Image.gz示意图如下:
Note: Linux原始镜像为vmlinux,后续可能是Image、Image.gz、uImage镜像, 处理过程是
- 通过link-vmlinux.sh生成vmlinux和map文件。
- 通过objcopy移除vmlinux中不必要段,输出binary格式Image。
- 对Image进行压缩,输出不同格式的压缩文件,比如gzip对应的gz。
- 对gz加上uboot头信息,生成uImage文件。
- ARM64平台则仅支持Image.gz和Image
三、启动 Qemu Linux系统
qemu-system-aarch64 \
-machine virt \
-cpu cortex-a57 \
-machine type=virt \
-nographic -smp 1 \
-m 2048 \
-kernel ./arch/arm64/boot/Image \
--append "console=ttyAMA0"
示意图如下:
参考链接:
- gdb调试Qemu ARM64仿真平台上的Linux Kernel
- QEMU+GDB调试Linux内核总结(全)