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

rtems 5.3 qemu realview_pbx_a9 环境搭建:生成 rtems arm 工具链

前言

  • rtems 是一款比较优秀的 RTOS,官方网址 https://www.rtems.org/

  • 当前 rtems 最新发布的版本:rtems-5.3 版本, 下载地址 https://ftp.rtems.org/pub/rtems/releases/5/5.3/

  • rtems 支持的 平台也是比较多的,当前支持 STM32F4,也支持 qemu(模拟器)realview_pbx_a9

下载 rtems-5.3

  • 通过下载地址 https://ftp.rtems.org/pub/rtems/releases/5/5.3/ 下载 rtmes-5.3 以及 rtems-source-builder-5.3

在这里插入图片描述

  • rtems-5.3.tar.xz 是 rtems 5.3 版本的源码

  • rtems-source-builder-5.3.tar.xz 是 rtems 5.3 编译工具链的构建源码,用于构建编译 rtems 的编译工具链,比如 ARM gcc 交叉编译工具链

编译 rtems 的工具链

  • rtems bsp realview_pbx_a9,需要使用 ARM gcc 交叉编译工具链,使用 rtems-source-builder-5.3 进行构建

  • 编译平台: ubuntu 20.04

  • 解压下载的 rtems-source-builder-5.3.tar.xztar xf /mnt/hgfs/rtems/5.3/rtems-5.3.tar.xz -C ./

  • 进入 rtems-source-builder-5.3/rtems 目录,运行
    ../source-builder/sb-set-builder --prefix=$HOME/rtems/arm/5.3 config/5/rtems-arm

  • 这里的 --prefix=$HOME/rtems/arm/5.3 表示编译的产物,也就是 rtems arm gcc 交叉编译工具链的存放路径,rtems 默认使用 newlib C 库,因此需要手动编译 rtems arm gcc 交叉编译工具链

  • rtems-source-builder 是一套编译 rtems 工具链的脚本,会自动下载 编译工具链依赖的各个软件包,如 gcc、gdb 等,并编译生成一套编译工具链,可以认为是生成编译工具链的一套脚本。

在这里插入图片描述

  • 当前 rtems 5.3 版本:arm (32位) gcc 交叉编译工具链依赖的软件包清单如下:
$ ls sources/
autoconf-2.69.tar.gz    expat-2.1.0.tar.gz  gmp-6.1.0.tar.bz2   mpfr-3.1.4.tar.bz2
automake-1.12.6.tar.gz  gcc-7.5.0.tar.xz    isl-0.16.1.tar.bz2  newlib-7947581.tar.gz
binutils-2.34.tar.bz2   gdb-9.1.tar.xz      mpc-1.0.3.tar.gz    rtems-tools-5.3.tar.xz
  • 工具链编译过程比较长,如果电脑性能、内存比较小的情况下,如果网速慢,下载各个软件包也需要较长的时间

在这里插入图片描述

  • 【备注】如果某个软件包下载失败导致编译终止,建议手动下载指定的版本,然后放在 rtems-source-builder-5.3/rtems/sources 目录下,再次编译

验证 rtems arm gcc 工具

  • 可以进入 rtems arm gcc 的目录,运行 ./arm-rtems5-gcc -v,也可以把 rtems arm gcc 的路径设置到环境变量中,export PATH=$PATH:/home/zhangsz/rtems/arm/5.3/bin,然后运行 arm-rtems5-gcc -v
zhangsz@zhangsz:~/rtems/arm/5.3$ arm-rtems5-gcc -v
Using built-in specs.
COLLECT_GCC=arm-rtems5-gcc
COLLECT_LTO_WRAPPER=/home/zhangsz/rtems/arm/5.3/libexec/gcc/arm-rtems5/7.5.0/lto-wrapper
Target: arm-rtems5
Configured with: ../gcc-7.5.0/configure --prefix=/home/zhangsz/rtems/arm/5.3 --bindir=/home/zhangsz/rtems/arm/5.3/bin --exec_prefix=/home/zhangsz/rtems/arm/5.3 --includedir=/home/zhangsz/rtems/arm/5.3/include --libdir=/home/zhangsz/rtems/arm/5.3/lib --libexecdir=/home/zhangsz/rtems/arm/5.3/libexec --mandir=/home/zhangsz/rtems/arm/5.3/share/man --infodir=/home/zhangsz/rtems/arm/5.3/share/info --datadir=/home/zhangsz/rtems/arm/5.3/share --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-rtems5 --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --verbose --with-newlib --disable-nls --without-included-gettext --disable-win32-registry --disable-werror --enable-version-specific-runtime-libs --enable-newlib-io-c99-formats --enable-newlib-iconv --enable-newlib-iconv-encodings=big5,cp775,cp850,cp852,cp855,cp866,euc_jp,euc_kr,euc_tw,iso_8859_1,iso_8859_10,iso_8859_11,iso_8859_13,iso_8859_14,iso_8859_15,iso_8859_2,iso_8859_3,iso_8859_4,iso_8859_5,iso_8859_6,iso_8859_7,iso_8859_8,iso_8859_9,iso_ir_111,koi8_r,koi8_ru,koi8_u,koi8_uni,ucs_2,ucs_2_internal,ucs_2be,ucs_2le,ucs_4,ucs_4_internal,ucs_4be,ucs_4le,us_ascii,utf_16,utf_16be,utf_16le,utf_8,win_1250,win_1251,win_1252,win_1253,win_1254,win_1255,win_1256,win_1257,win_1258 --enable-threads --disable-plugin --enable-libgomp --enable-languages=c,c++,lto
Thread model: rtems
gcc version 7.5.0 20191114 (RTEMS 5, RSB 5.3, Newlib 7947581) (GCC)
  • 当前 rtems 5.3 arm gcc 的版本: gcc version 7.5.0

  • 自此, rtems 5.3 版本 ARM 32位 的 交叉编译工具链生成成功

小结

  • 本篇注意记录 rtems 5.3 版本 arm gcc 交叉编译工具链的生成,使用了 newlib C 库

  • rtems 支持 bsp qemu realview_pbx_a9 ,后续可以在没有硬件的情况下运行、调试 rtems,熟悉 rtems

  • rtems arm gcc 交叉编译工具链还支持其他 arm 系列的平台,比如 rtems 支持的 STM32F4 平台,后续尝试在 STM32 平台上移植适配 rtems

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Maven下载安装
  • 物联网之Arduino编程语言、条件语句、循环语句、变量、数组、函数
  • IP协议及相关特性
  • WMS仓储系统的真正价值:从混乱到有序,亿发WMS如何重塑仓库管理
  • 算法:双指针题目练习
  • while循环及简单案例
  • Dubbo与SpringCloud的区别和优缺点
  • 1.熟悉接口测试(Postman工具)
  • 在Windows 7上安装Redis
  • 图说GPT网络结构(参数量与计算量估计)
  • Android Framework(六)WMS-窗口显示流程——窗口内容绘制与显示
  • 更换代理IP技术有哪些?
  • 如何在多台Linux虚拟机上安装和配置Kafka集群
  • 【FastAPI】服务器使用SSE实现客户端之间的广播和点对点功能
  • C#命令行参数解析库System.CommandLine介绍
  • JavaScript-如何实现克隆(clone)函数
  • 07.Android之多媒体问题
  • CEF与代理
  • JavaScript设计模式与开发实践系列之策略模式
  • JAVA多线程机制解析-volatilesynchronized
  • log4j2输出到kafka
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Swoft 源码剖析 - 代码自动更新机制
  • windows-nginx-https-本地配置
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 编写高质量JavaScript代码之并发
  • 基于组件的设计工作流与界面抽象
  • 前端工程化(Gulp、Webpack)-webpack
  • 思否第一天
  • 优秀架构师必须掌握的架构思维
  • 在weex里面使用chart图表
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​Spring Boot 分片上传文件
  • ​VRRP 虚拟路由冗余协议(华为)
  • #13 yum、编译安装与sed命令的使用
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (30)数组元素和与数字和的绝对差
  • (初研) Sentence-embedding fine-tune notebook
  • (二)构建dubbo分布式平台-平台功能导图
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (十六)视图变换 正交投影 透视投影
  • (转)拼包函数及网络封包的异常处理(含代码)
  • . Flume面试题
  • ... 是什么 ?... 有什么用处?
  • .NET Core Web APi类库如何内嵌运行?
  • .NET 反射 Reflect
  • .NET 服务 ServiceController
  • .NET 回调、接口回调、 委托
  • .net后端程序发布到nignx上,通过nginx访问
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .net实现客户区延伸至至非客户区
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...