开发环境
-
ubuntu 20.04
-
VMware Workstation Pro 16
-
基于qemu(模拟器),ARM64 :virt cortex-a57 平台
-
搭建Linux 6.3.8 (当前最新版本)
准备
-
Linux 内核下载,下载最新稳定版本,当前为 linux-6.3.8,因为是qemu 模拟器,可以尝试最新Linux 版本的学习与工程验证
-
Linux kernel 下载地址
https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/
,也可以直接在https://kernel.org/
找到最新版本 -
aarch64 gcc
交叉编译工具链,这里使用较新的:gcc-linaro-12.2.1-2023.04-x86_64_aarch64-linux-gnu.tar.xz
,下载地址https://snapshots.linaro.org/gnu-toolchain/12.2-2023.04-1/aarch64-linux-gnu/
安装qemu
- 这里是 qemu 安装在 虚拟机的ubuntu 20.04 上,当然条件允许可以直接安装在ubuntu 主机上
$ sudo apt-get install qemu
$ sudo apt-get install qemu-system
$ qemu-system-aarch64 -M help /* 查看支持的板子的列表 */
使用 ARM64 virt 平台,这是arm64 也就是 aarch64 平台
-
交叉编译工具链
-
解压 gcc-linaro-13.0.0-2022.10-x86_64_arm-linux-gnueabihf.tar.xz
/* arm gcc 交叉编译器存放的目录,可以放在自己的用户目录home下 */
mkdir /home/zhangsz/tools
tar xvf gcc-linaro-12.2.1-2023.04-x86_64_aarch64-linux-gnu.tar.xz -C /home/zhangsz/tools/
- 添加到环境变量
/* 环境变量追加到 /etc/profie 中 */
$ sudo vim /etc/profile
/* 最后面追加 aarch64 gcc 交叉编译工具链的路径 */
export PATH=$PATH:/home/zhangsz/linux/tools/gcc-linaro-12.2.1-2023.04-x86_64_aarch64-linux-gnu/bin
/* 环境变量生效 */
$ source /etc/profile
-
查看当前的arm gcc 版本
-
输入 shell 命令
aarch64-linux-gnu-gcc -v
编译Linux 内核
- Linux 内核解压缩到 ubuntu 中
$ mkdir /home/zhangsz/linux
$ mkdir /home/zhangsz/linux/kernel
/* 解压缩 tar.gz 格式的 linux kernel 文件 */
$ tar xf linux-6.3.8.tar.xz -C /home/zhangsz/linux/kernel
配置与编译
- 安装部分软件包依赖
/* ubuntu 根据需求安装一些依赖 */
$ sudo apt-get install bison
$ sudo apt-get install flex
$ sudo apt-get install make
/* arm64 平台的 默认配置文件,注意当前Linux arm64 下只有一个 defconfig 文件 */
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
/* 直接编译,如果编译报错,安装依赖继续编译,直到编译完成 */
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j8
编译 Linux 的产物
- 产物为 :
linux-6.3.8/arch/arm64/boot/Image.gz
或者linux-6.3.8/arch/arm64/boot/Image
/* 默认编译会生成 zImage */
/home/zhangsz/linux/linux-6.3.8/arch/arm64/boot/Image.gz 或者(Image 非压缩)
/* 同时编译生成了 arm64 下的 设备树文件,注意是 dtb 文件,当前暂未使用到 */
/home/zhangsz/linux/linux-6.0.1/arch/arm64/boot/dts/arm/
qemu 启动Linux
-
qemu 因为是模拟器,所以不需要
u-boot
引导就可以直接启动 Linux 内核 -
把Linux 内核生成的产物,也就是 Image.gz 拷贝到一个目录下,如
执行命令:
#!/bin/bash
echo "---------- boot qemu ----------"
echo $1
sudo qemu-system-aarch64 \
-M virt \
-cpu cortex-a57 \
-smp 4 \
-m 4G \
-kernel Image.gz \
-nographic \
-append "console=ttyAMA0"
- 注意这里暂时没有 rootfs 根文件系统,只能启动内核,然后启动后会卡住
- ubuntu 20.04 qemu arm64 linux6.3.8 开发环境搭建 Linux 内核部分搭建完成了
小结
- 接下来,需要基于 busybox,制作根文件系统 rootfs,在 qemu arm64 平台 运行 Linux shell,执行用户的程序