ubuntu 20.04 qemu arm64 linux6.3.8 开发环境搭建

开发环境

  • 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/

ubuntu 20.04 qemu arm64 linux6.3.8 开发环境搭建_第1张图片

安装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

ubuntu 20.04 qemu arm64 linux6.3.8 开发环境搭建_第2张图片

  • 查看当前的arm gcc 版本

  • 输入 shell 命令 aarch64-linux-gnu-gcc -v

ubuntu 20.04 qemu arm64 linux6.3.8 开发环境搭建_第3张图片

编译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 开发环境搭建_第4张图片

ubuntu 20.04 qemu arm64 linux6.3.8 开发环境搭建_第5张图片

  • ubuntu 20.04 qemu arm64 linux6.3.8 开发环境搭建 Linux 内核部分搭建完成了

小结

  • 接下来,需要基于 busybox,制作根文件系统 rootfs,在 qemu arm64 平台 运行 Linux shell,执行用户的程序

你可能感兴趣的:(嵌入式Linux,ubuntu,qemu,arm64)