Ubuntu 10.04 下编译交叉编译环境,编译RTEMS,测试HelloWorld程序

工作调整,需要使用到RTEMS这个实时操作系统 

步骤在http://download.csdn.net/source/2584092  这个文档里写的还是比较清楚的。我这里就是列出一些问题的是如何解决的

关于binutils,gdb,gcc,newlib,gmp,mpfr的版本选择问题,我的建议是选择最新的。

一.编译binutils时遇到的问题及解决方法

   (1)出错 /usr/rtems/binutils-build-new/bfd/doc 目录的Makefile提示找不到makeinfo

   处理:1.看系统中是否真的没有这个命令,如果没有apt-get 安装

               2.如果是有这个命令还报这个问题,则是/usr/rtems/binutils-build-new/bfd/doc/Makefile的问题

                  搜索makeinfo,将前边的...missing全部去掉,再到/usr/rtems/binutils-build-new/bfd下边执行make,再正常执行make即可

   (2)出错 ../download/binutils-2.18/binutils/cxxfilt.c 66和71行 error: format not a string literal and no format arguments

   处理:对应的Makefile删除掉-Werror ,避免编译器将warning转换为error

   (3)出错 /usr/rtems/binutils-build-new/libiberty/Makefile 提示找不到makeinfo

   处理:同(1)相同,注意是到 /usr/rtems/binutils-build-new/libiberty 这个目录执行 make info ,再正常执行make info

二.编译gdb时遇到的问题及解决方法

   (1)出错 ../download/gdb-6.7.1/gdb/cli/cli-cmds.c:323 error: ignoring return value of ‘getcwd’

   处理: 同 一(2)

三.编译gcc时遇到的问题及解决方法

   (1)需要下载gmp-4.3.2和mpfr-2.4.2并编译,需要注意,编译选项只有一个 --prefix=/usr

   (2)建立newlib的连接,是软连接 如ln -sf  ../newlib-1.16.0/newlib/ newlib

   (3)执行完configure,说部分目录可以适应这些配置,不用管,直接make

 四.编译rtems内核时遇到的问题及解决方法

   (1)出错 ../download/rtems-4.9.0/c/src/../../cpukit/libcsupport/src/readlink.c:21: 错误:与‘readlink’类型冲突

                 ../download/rtems-4.9.0/c/src/../../cpukit/libcsupport/src/sync.c 错误:与‘sync’类型冲突

   处理:改名readlink 改为readdlink sync改为syncc

   (2)出错 错误:sys/rtprio.h

   处理:烦请亲手touch一个

   (3)出错 错误:‘getopt_data’未声明(在此函数内第一次使用)

   处理:在/etc/rtems/(目标系统)/i386-rtems/include/getopt.h 增加

               typedef sturct getopt_data

               {

                   int optind;

                   char *optarg;

               }

   (4)出错 /usr/rtems/rtems-build-new/i386-rtems/c/pc686/lib/libbsp/i386/pc386/tools里边的ld段错误

   处理:cd /usr/rtems/rtems-build-new/i386-rtems/c/pc686/lib/libbsp/i386/pc386/tools 执行make即可,继续正常make

   (5)出错 undefined reference to `getopt_r'

   处理: 修改rtems源码,用getopt 代替getopt_r 放弃第四个参数

   (6)出错 undefined reference to `readlink'

   处理: 改成我们修改的readdlink

五. 编译的hello.exe如何用Grub引导的问题

处理:如果是grub 按照文档没有问题

            如果是grub2 则是与下边写的类似 在/boot/grub/grub.cfg里边添加

                menuentry 'hello'{

                                    set root='(hd0,6)'

                                    multiboot   /hello.exe

                }

 这样在重启机器,选择这个启动项启动,就是hello程序了

posted @   cpx3216  阅读(1931)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示