当前位置: 首页 > java >正文

Qemu arm操作系统开发环境

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

步骤如下:

  1. 安装qemu
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

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

vim ~/.bashrcexport PATH=$PATH:/home/ljg/aarch/arm-gnu-toolchain-13.2.Rel1-x86_64-aarch64-none-elf/aarch64-none-elf/binsource ~/.bashrc
  1. 编译uart.c源文件

代码:

void outputstr(char * str){int * base = (int*)0x9000000;while(*str){*base = (int)*str;str++;}
}int main(){outputstr("hello world!\r\n");return 0x12345678;
}
~  

在这里插入图片描述

命令:

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

代码:


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

在这里插入图片描述

命令:

aarch64-none-elf-as -c start.s -o start.o
  1. 链接

链接脚本文件:


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

在这里插入图片描述

命令:

aarch64-none-elf-ld -Tlink.ld  uart.o start.o -o hello.elf
  1. 制作镜像文件。

aarch64-none-elf-objcopy -O binary hello.elf hello.bin
  1. 运行测试
qemu-system-aarch64 -M virt -cpu cortex-a710 -monitor none -kernel hello.bin

或者:

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
http://www.xdnf.cn/news/12475.html

相关文章:

  • Python图像处理基础(五)
  • 第34次CCF-CSP认证真题解析(目标300分做法)
  • 预训练语言模型T5-11B的简要介绍
  • 精益数据分析(95/126):Socialight的定价转型启示——B2B商业模式的价格策略与利润优化
  • 外卖大战背后的创始人IP智慧:差异化、护城河与心智占领
  • c++中的输入输出流(标准IO,文件IO,字符串IO)
  • GenAI 工程师学习路径总结
  • 【EN18031】标准系列深度解读
  • C++中的概念(Concepts)
  • ABP VNext 与 Neo4j:构建基于图数据库的高效关系查询
  • 【Linux 学习计划】-- 进程程序替换
  • 大模型在脑梗塞后遗症风险预测及治疗方案制定中的应用研究
  • 中科院提出多方协作注意力控制方法MCA-Ctrl,无需调优的即可使用文本和复杂的视觉条件实现高质量的图像定制。
  • Java适配器模式深度解析:无缝集成不兼容系统的艺术
  • 永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
  • 前段三剑客之JavaScript-02
  • 案例分析|棘轮行为有限元分析
  • 构建 MCP 服务器:第 3 部分 — 添加提示
  • vue3实战第四步:引入Font Awesome图标库(二)
  • 第3章——SSM整合
  • 高危文件识别的常用算法:原理、应用与企业场景
  • Ctrl+R 运行xxx.exe,发现有如下问题.
  • Java设计模式之状态模式详解
  • Qt客户端技巧 -- 窗口美化 -- 圆角窗口
  • postman基础
  • day45python打卡
  • 特大地磁暴来袭,解析超导磁测量技术引领多领域应用突破
  • drssionPage+ddddocr 滑块验证方案
  • Unity优化篇之DrawCall
  • Python获取网易云音乐的评论