Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。

步骤如下:

  1. 安装qemu
bash 复制代码
apt install qemu-system
  1. 安装aarch64-none-elf-gcc

需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-elf.tar.xz?rev=a05df3001fa34105838e6fba79ee1b23&hash=DCB97F9E407955B162E4652F4E78B6CCDF75E4FF

下载后无需编译。下载完虎,执行如下命令设置编译环境:

bash 复制代码
vim ~/.bashrc

export PATH=$PATH:/home/ljg/aarch/arm-gnu-toolchain-13.2.Rel1-x86_64-aarch64-none-elf/aarch64-none-elf/bin

source ~/.bashrc
  1. 编译uart.c源文件

代码:

c 复制代码
void outputstr(char * str){

        int * base = (int*)0x9000000;
        while(*str){
                *base = (int)*str;
               str++;
        }
}

int main(){
        outputstr("hello world!\r\n");

        return 0x12345678;
}
~  

命令:

bash 复制代码
aarch64-none-elf-gcc -I -include -c uart.c -o uart.o
  1. 编写start.s汇编源文件

代码:

bash 复制代码
.global _start

_start:
ldr x30,=stack_top
mov sp,x30
bl main
b .
~   

命令:

bash 复制代码
aarch64-none-elf-as -c start.s -o start.o
  1. 链接

链接脚本文件:

bash 复制代码
ENTRY(_start)
SECTIONS
{
        . = 0x40000000;
        .startup . : {start.o(.text)}
        .text :{*(.text)}
        .data : {*(.data)}
        .bss : {*(.bss COMMON)}
        . = ALIGN(8);
        . = .+0x1000;
        stack_top = .;
}

命令:

bash 复制代码
aarch64-none-elf-ld -Tlink.ld  uart.o start.o -o hello.elf
  1. 制作镜像文件。
bash 复制代码
aarch64-none-elf-objcopy -O binary hello.elf hello.bin
  1. 运行测试
bash 复制代码
qemu-system-aarch64 -M virt -cpu cortex-a710 -monitor none -kernel hello.bin

或者:

bash 复制代码
qemu-system-aarch64 -M virt -cpu cortex-a710 -monitor none -nographic -serial stdio -kernel hello.bin

参考链接:

  1. https://blog.csdn.net/jingyu_1/article/details/135631512
  2. https://zhuanlan.zhihu.com/p/16952747762
  3. https://stdrc.cc/post/2021/02/23/u-boot-qemu-virt/
  4. https://zhuanlan.zhihu.com/p/708166648
  5. https://www.qemu.org/docs/master/system/arm/virt.html
相关推荐
女神下凡10 小时前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范
NamoAmitabha12812 小时前
ARM Cortex-A9 核心架构(演化后的“缝合怪”)--deepseek
arm开发·zynq--ps
AllData公司负责人15 小时前
AllData 可定义数据中台完成信创适配|银河麒麟 + 海光X86 CPU / 华为鲲鹏ARM CPU+ OceanBase / 人大金仓国产化环境部署落地
大数据·arm开发·数据库·人工智能·oceanbase·kingbase
a5986522 天前
ARM服务器搭建云手机靠谱吗?个人自建方案优缺点总结
服务器·arm开发·智能手机·云手机
jiecy2 天前
在 ARM 的 UOS 系统里布署 WebDav
arm开发·docker·debian
女神下凡2 天前
芯参谋(87):Linux 系统(SPI NOR)驱动开发指南
linux·运维·arm开发·驱动开发·嵌入式硬件·设计规范
Zevalin爱灰灰2 天前
Linux入门第二部分(ARM裸机篇) 第二章 Cortex-A7 MPCore架构与ARM汇编基础
linux·汇编·arm开发·嵌入式
Zevalin爱灰灰2 天前
Linux入门第二部分(ARM裸机篇) 第三章 汇编LED驱动实验
linux·汇编·arm开发
女神下凡3 天前
芯参谋(83):AliOS Things_驱动开发指南
arm开发·驱动开发·单片机·嵌入式硬件·设计规范·1024程序员节
女神下凡3 天前
芯参谋(84):Linux eMMC 驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件