基于Qemu hobot-sigi-virt平台的bringup
在新增Qemu芯片平台之后,我们就可以基于这个平台进行最小系统的移植适配,从而加快系统软件的开发节奏。随着Qemu里面模拟的外设越来越多,我们BSP里面的很多驱动都可以先在这个芯片平台上完成function逻辑的验证,等验证到一定程度,我们再迁移到FPAG上集中验证一遍,从而大大节省验证的时间代价和成本,因为Qemu里面调试极其方便。
- Qemu: v7.2.0
- U-Boot: v2022.04
- ATF: lts-v2.8.1
- Linux Kernel: linux-6.1.12
- aarch64-none-linux-gnu-gcc: 10.3.1 20210621
启动介绍
在运行起来之前,我们先明确最小系统涉及的组件以及它们的启动顺序
- ATF:提供EL3 runtime service,具有整个硬件系统的全部权限
- U-Boot:加载和启动不同OS的镜像
- Xen: Hypervisor OS,支持多个虚拟机的运行
- Kernel:Linux kernel OS,常用的OS
- initramfs:最小的文件系统,用作临时跳转
- Ubuntu Rootfs:根文件系统,存放在存储介质上,里面包含很多应用、库和工具
启动顺序
该平台支持上面三种启动方式,每个人在开发早期根据自己的喜好和开发特点来选择一个启动方法,来加快软件的开发验证效率。
镜像构建
U-Boot构建
1 | git clone -b hobot-uboot https://github.com/chasinglulu/u-boot.git |
ATF构建
1 | git clone -b sigi-atf https://github.com/chasinglulu/arm-trusted-firmware.git |
在arm-trusted-firmware/build/sigi/
目录下构造出bl31.bin
镜像。
Kernel构建
1 | git clone -b linux-v6.1-rt https://github.com/chasinglulu/linux.git |
Initramfs构建
1 | git clone https://github.com/chasinglulu/buildroot.git |
在buildroot/output/images
目录下产出rootfs.cpio.lz4
镜像。
启动验证
仅启动U-Boot
1 | qemu-system-aarch64 -M hobot-sigi-virt -m 4G -display none -device loader,addr=0x3000200000,file=/path/to/u-boot/u-boot.bin,cpu-num=0 -serial stdio |
启动U-Boot+Kernel
将Image
、hobot-sigi-virt.dtb
和rootfs.cpio.lz4
三个镜像先复制到执行qemu-system-aarch64的当前目录$(PWD)
下,U-Boot将使用semihosting方式让qemu自动地将这三个镜像加载到hobot-sigi-virt平台模拟的内存中。
1 | qemu-system-aarch64 -M hobot-sigi-virt -m 4G -display none -device loader,addr=0x3000200000,file=/path/to/u-boot/u-boot.bin,cpu-num=0 -serial stdio -semihosting |
或者直接从eMMC上加载Kernel等镜像
1 | qemu-system-aarch64 -M hobot-sigi-virt -m 4G -display none -device loader,addr=0x3000200000,file=/home/charleye/24-Xen/u-boot/u-boot.bin,cpu-num=0 -serial stdio -drive file=/path/to/emmc-aarch64.img,format=raw,if=emmc |
启动日志附件:U-Boot -> Kernel Booting
启动ATF+U-Boot
1 | qemu-system-aarch64 -M hobot-sigi-virt,virt=on,secure=on -m 4G -display none -device loader,addr=0x04001000,file=/path/to/arm-trusted-firmware/build/sigi/release/bl31.bin,cpu-num=0 -device loader,addr=0x3004000000,file=/path/to/u-boot/u-boot-dtb.bin -serial stdio |
启动ATF+U-Boot+Kernel
将Image
、hobot-sigi-virt.dtb
和rootfs.cpio.lz4
三个镜像先复制到执行qemu-system-aarch64的当前目录$(PWD)
下
1 | qemu-system-aarch64 -M hobot-sigi-virt,virt=on,secure=on -m 4G -display none -device loader,addr=0x04001000,file=/path/to/arm-trusted-firmware/build/sigi/release/bl31.bin,cpu-num=0 -device loader,addr=0x3004000000,file=/path/to/u-boot/u-boot-dtb.bin -serial stdio -semihosting |
或者直接从eMMC上加载Kernel等镜像
1 | qemu-system-aarch64 -M hobot-sigi-virt,virt=on,secure=on,emmc=on -m 4G -display none -device loader,addr=0x04001000,file=/path/to/arm-trusted-firmware/build/sigi/release/bl31.bin,cpu-num=0 -device loader,addr=0x3004000000,file=/path/to/u-boot/u-boot-dtb.bin -serial stdio -drive file=/path/to/emmc-aarch64.img,format=raw,if=emmc |
启动日志附件:ATF->U-Boot->kernel Booting