QEMU + armv8 模拟器搭建,启动bios, kernel

本文旨在搭建armv8测试环境以运行自定义bootloader。介绍了使用QEMU启动自定义BIOS和kernel的方法,给出相应命令及解释,如启动自定义BIOS的命令参数含义,还提及编译基本方法,同时给出了测试环境信息和相关参考资料、资源链接。

目的:搭建一个armv8的测试环境,跑自己的bootloader(类似于ATF + uboot)

问题:如何模拟armv8开发板,如何让自己的BL能被load,如何使自己的BL能有输出

 

第一部分: 使用QEMU 启动自定义BIOS方法

使用命令:

qemu-system-aarch64 -machine virt,secure=on -cpu cortex-a57 -nographic -m 1057 -smp 2 -bios filename

 

命令解释:

qemu-system-aarch64:armv8 QEMU模拟工具

-machine virt,secure=on: 设备类型为虚拟,目前不知道为什么“secure=on”必须设置,否则我的测试平台测试中一直没有输出

-cpu cortex-a57: 模拟a57

-nographic:  不支持graphic

-m 1057:内存大小

-smp 2: CPU 个数

-bios filename: 自己需要测试的bios bin file

 

 

注意事项:

  1. qemu-system-aarch64 需要使用较高的版本,目前发现3.0 可以工作,2.5不能工作(目前是下载最新QEMU代码自己基于linaro gcc编译得到)
  2. 只能模拟最高arm a57
  3. 模拟串口型号为pl01

 

 

测试环境:

Linux jun-VirtualBox 4.15.0-47-generic #50~16.04.1-Ubuntu SMP Fri Mar 15 16:06:21 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

 

基于ATF改写的bare metal 测试代码演示

qemu-system-aarch64 -machine virt,secure=on -cpu cortex-a57 -nographic -m 1057 -smp 2 -bios ~/code/mytest/bl1.bin
NOTICE:  Booting Trusted Firmware
NOTICE:  BL1: this is my own BIOS test
 

编译基本方法

1. atf: make plat=qemu bl1

2. qemu:参见网上的方法,我使用的是optee整体来编译

参见:Optee 官网
https://github.com/OP-TEE/manifest

make -f toolchain.mk toochains (下载arm gcc编译器总是不成功,自己从linaro官网上下的 )

make -f qemu_v8.mk all 

make -f qemu_v8.mk run

 

第二部分: 使用QEMU 启动kernel方法

使用命令:

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt -nographic -m 2048 -smp 2 -kernel Image -initrd rootfs_my.cpio.gz -append 'rdinit=/stest console=ttyAMA0 root=/dev/ram'

说明:

  1. rootfs_my.cpio.gz是自己通过cpio, gzip生成的,命令比如echo stest | cpio -o -H newc | gzip > ../rootfs.cpio.gz
  2. stest 就是自己通过linaro gcc 7.3 编译的一个简单main程序
  3. Image使用的kernel 4.19. "make defconfig | make"
  4. 编译器都是使用的linaro gcc, ARCH=arm64

 

参考:

模拟arm

https://blog.youkuaiyun.com/member82/article/details/80880182

从零使用qemu模拟器搭建arm运行环境

https://blog.youkuaiyun.com/member82/article/details/80864238

https://blog.youkuaiyun.com/dddddttttt/article/details/80792762 (使用Qemu运行ARMv8的OP-TEE)

 

模拟arm64

https://blog.youkuaiyun.com/snail_coder/article/details/82935081

(qemu模拟arm64一直卡住不动) 

https://blog.youkuaiyun.com/weixin_43572000/article/details/85267499

 

资源:

qemu下载网页:https://www.qemu.org/download/

### **命令解析:`make O=build/qemu_armv8 tplink-fep_qemu_armv8_defconfig`** #### **1. 命令结构分解** ```bash make O=build/qemu_armv8 tplink-fep_qemu_armv8_defconfig ``` - **`make`**:调用GNU Make构建工具 - **`O=build/qemu_armv8`**:指定输出目录(Output) - **`tplink-fep_qemu_armv8_defconfig`**:目标配置规则 #### **2. 关键参数详解** | 参数部分 | 作用说明 | |------------------------------|--------------------------------------------------------------------------| | `O=build/qemu_armv8` | 强制所有构建产物输出到指定目录,实现**源码与构建分离** | | `tplink-fep_qemu_armv8_defconfig` | 特定平台的默认配置文件规则,通常对应`defconfig/`目录下的同名文件 | #### **3. 执行流程** 1. **定位defconfig文件** Make会在以下路径搜索: ```bash ./defconfig/tplink-fep_qemu_armv8_defconfig ./configs/tplink-fep_qemu_armv8_defconfig ``` 2. **生成.config** 将defconfig内容复制到输出目录: ```bash cp defconfig/tplink-fep_qemu_armv8_defconfig build/qemu_armv8/.config ``` 3. **处理依赖关系** 自动执行`make olddefconfig`更新隐藏配置项 #### **4. 目录结构示例** 执行后生成的典型结构: ``` build/qemu_armv8/ ├── .config # 主配置文件 ├── include/ # 自动生成的头文件 └── autoconf.h # 配置宏定义文件 ``` #### **5. 与直接编译的区别** | 操作类型 | 命令示例 | 输出内容 | |------------------------|-------------------------------------|---------------------------------| | 仅生成配置 | `make O=dir xxx_defconfig` | 只产生.config文件 | | 完整编译 | `make O=dir` | 生成镜像/固件 | | 带环境变量的配置 | `ARCH=arm64 make xxx_defconfig` | 架构特定的配置 | #### **6. 常见问题处理** - **报错:*No rule to make target*** ```bash # 解决方案: find . -name "*qemu_armv8*" # 确认文件实际名称 make O=build/qemu_armv8 help # 查看支持的配置目标 ``` - **配置覆盖问题** 若需重置配置: ```bash rm build/qemu_armv8/.config ``` #### **7. 实际应用场景** ```bash # 典型开发流程 make O=build/qemu_armv8 tplink-fep_qemu_armv8_defconfig make O=build/qemu_armv8 -j$(nproc) # 启动编译 ``` **输出产物**: `build/qemu_armv8/images/` 下生成 `fep-qemu-armv8.img`
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值