mac搭建嵌入式编程环境--交叉编译工具链crosstool-ng

2023-05-16

1.  第一个思路就是和ubuntu一样,是否有apt-get一样的管理软件包工具。查了一下有类似的macport和homebrew

  macport下载方法:https://guide.macports.org/#installing.xcode,直接下载dmg镜像安装即可

  brew下载方法方法:https://brew.sh/按照官网下载安装

   下面是换源方法:

-------------------------------------------------------------------------------------------------

  (1)macport  查看/opt/local/etc/macports/macports.conf发现https://trac.macports.org/wiki/Mirrors#MacPortsSource

  最下面有中国过的服务器,搜了一下发现是上海大学的,按照指示添加rsync_server和rsync_dir,另外的修改/opt/local/etc/macports/sources.conf在最下面添加rsync://mirrors.shu.edu.cn/macports/release/ports/ [default]

  (2)brew  https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/上面有很详细的方法,不赘述。

-------------------------------------------------------------------------------------------------

  首先我们要下载交叉编译工具链:arm-none-linux-gnueabi-gcc 

  brew没有交叉工具链的包,macport也是只有一个很旧的包。

  没有就没有吧,那我去下载一个,http://www.veryarm.com/arm-none-linux-gnueabi-gcc  也没有mac的版本。

  下不到就下不到吧,那我自己编译一个。http://crosstool-ng.github.io/ 

  注:关于mac文件系统不区分大小写:就在磁盘工具里面添加卷,选择有大小写的,存储大小搞大一点10个G,上次5G不够用。

大小写盘

  命令行进入你的大小写分区。

  ct-ng命令行里面打出来后回车就有帮助选项。ct-ng list-samples 把所有例子列出来了,有arm-unknown-linux-gnueabi就是我们4412想要的。

  直接ct-ng arm-unkown-linux-guneabi 会把conf文件导入到现在的你所在的位置。

  Paths and misc options--Local tarballs directory这个是你下载依赖包的文件夹,修改你大小写分区的位置。Prefix directory 也是把 home 替换成大小写分区位置。

path

  下面是https://stackoverflow.com/questions/5245444/cross-compiler-for-linux-on-mac-os-x 摘录

 

    1. install the xcode base build tools
    2. install the optional xcode command line tools
    3. install homebrew
    4. install the homebrew build tools
      4.1 brew install crosstool-ng mpfr gmp grep
      4.2 brew tap homebrew/dupes
    5. create a case sensitive volume using "disk utility"
    6. use this volume to build the tool chain itself
      6.1 generate a base configuration (for me this is an arm cortex a8)
      6.1.1 ct-ng arm-cortex_a8-linux-gnueabi
      6.2 use menuconfig (ct-ng menuconfig) to tweak the configuration
      6.2.1. disable fortran and java (c compiler)
      6.2.2. turn off static linking (c compiler)
      6.2.3. change the paths to be on the volume you created above (paths and misc options)
      6.2.4. remove dmalloc (debug facilities)
      6.3 invoke the build:
      6.3.1 ulimit -n 1024 //这里是在我的mbp里面是不够的  sudo ulimit -n 2048才解决
      6.3.2 ct-ng build

 

  上面已经写的很清楚了,修改了几处添加了armv7-a的架构,就开始build了,报错。在复制getext库的时候出错了

  ---20180909更新

  因为我没有太多的查看build.log,现在出查看了他,发现缺少了automake1.5.0的工具,在menuconfig里面设置automake [X]

  ulimit -n 2048  还有就是创建的大小写的盘

  最后我编译成功了 哈哈哈哈哈

 

2.  为了不使用虚拟机,试试docker,好吧虽然都是虚拟的。mac 安装 docker 官网就有然后就是拉镜像docker pull synapsedev/gcc-arm-none-eabi

  我已经把镜像拉下来了,运行docker run -it -v ~/build-tool:/home synapsedev/gcc-arm-none-eabi

  -it 选项是一起配合的大概就是进入里面运行交互的命令行,-v就是和本地的文件和里面的文件关联,也就是挂载。

  在镜像里面,我们在/home下用vim写了一个测试浮点的程序helloworld。使用/usr/local/bin/gcc-arm-none-eabi-6_2-2016q4/bin/arm-none-eabi-gcc 编译,发现报错

/usr/local/bin/gcc-arm-none-eabi-6_2-2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-exit.o): In function `exit':

exit.c:(.text.exit+0x2c): undefined reference to `_exit'

/usr/local/bin/gcc-arm-none-eabi-6_2-2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-sbrkr.o): In function `_sbrk_r':

sbrkr.c:(.text._sbrk_r+0x18): undefined reference to `_sbrk'

/usr/local/bin/gcc-arm-none-eabi-6_2-2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-writer.o): In function `_write_r':

writer.c:(.text._write_r+0x24): undefined reference to `_write'

/usr/local/bin/gcc-arm-none-eabi-6_2-2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-closer.o): In function `_close_r':

closer.c:(.text._close_r+0x18): undefined reference to `_close'

/usr/local/bin/gcc-arm-none-eabi-6_2-2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-fstatr.o): In function `_fstat_r':

fstatr.c:(.text._fstat_r+0x20): undefined reference to `_fstat'

/usr/local/bin/gcc-arm-none-eabi-6_2-2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-isattyr.o): In function `_isatty_r':

isattyr.c:(.text._isatty_r+0x18): undefined reference to `_isatty'

/usr/local/bin/gcc-arm-none-eabi-6_2-2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-lseekr.o): In function `_lseek_r':

lseekr.c:(.text._lseek_r+0x24): undefined reference to `_lseek'

/usr/local/bin/gcc-arm-none-eabi-6_2-2016q4/bin/../lib/gcc/arm-none-eabi/6.2.1/../../../../arm-none-eabi/lib/libc.a(lib_a-readr.o): In function `_read_r':

readr.c:(.text._read_r+0x24): undefined reference to `_read'

  到https://stackoverflow.com/questions/19419782/exit-c-text0x18-undefined-reference-to-exit-when-using-arm-none-eabi-gcc  在交叉编译的时候,更加要关注工具链的选项,提及了semihosting,大概就是现在的运行环境并不是在目标机上面,处于non-semihosting/retarget状态,要加上 --specs=nosys.specs 

  也就是/usr/local/bin/gcc-arm-none-eabi-6_2-2016q4/bin/arm-none-eabi-gcc --specs=nosys.specs  -o test test.c 

 

 

转载于:https://www.cnblogs.com/mrAAron/p/9575196.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mac搭建嵌入式编程环境--交叉编译工具链crosstool-ng 的相关文章

随机推荐

  • 操作系统中的中断(详细介绍+图片理解)

    中断的概念 中断是指程序执行过程中 xff0c 遇到急需处理的事件时 xff0c 暂时中止CPU上现行程序的运行 xff0c 转去执行相应的事件处理程序 xff0c 待处理完成后再返回原程序被中断处或调度其他程序执行的过程操作系统是 中断驱
  • Android 如何杀死Service

    方法很简单就是用ActivityManager private void killeService List lt RunningAppProcessInfo gt infos TODO 自动生成的方法存根 ActivityManager
  • [自动驾驶]Build a Traffic Sign Recognition Program

    看 准确率98 的深度学习交通标志识别是如何做到的 xff1f 这篇文章的时候 xff0c 发现了udacity的自动驾驶课程 可惜要收费 xff0c 不过课程project在github上有 xff0c 那直接做project就好了 xf
  • 教你快速学习PID控制原理

    教你快速学习PID控制原理 写在前面 在这篇文章中我会通过举例的方式来让大家了解什么是PID控制 xff0c 这篇博客是让大家更加容易的理解PID控制 xff0c 如果大家想要跟深入的了解的话最好是自己上手去做一个关于PID控制的实物 xf
  • opencv HSV找颜色,找轮廓用最小旋转矩形框出

    include lt opencv2 opencv hpp gt include lt iostream gt include lt string gt using namespace cv using namespace std 输入图像
  • FreeRTOS学习笔记——FreeRTOS 任务基础知识

    RTOS 系统的核心就是任务管理 xff0c FreeRTOS 也不例外 xff0c 而且大多数学习RTOS 系统的工程师或者学生主要就是为了使用RTOS 的多任务处理功能 xff0c 初步上手RTOS 系统首先必须掌握的也是任务的创建 删
  • linux c char * char[]相互转换

    1 char 转char 可以直接赋值 char pp 20 61 34 helloworld 34 char p 61 pp 2 char 转char 主要有两种方法可以将char 转换为char 类型 xff0c 分别是 xff1a s
  • GDB改变程序的执行

    1 修改变量值 xff1a set var var name 61 num 最佳 print var name 61 num 2 跳转执行 gdb提供了乱序执行的功能 jump linespec linespec可以是文件的行号 xff0c
  • Linux缓冲区

    所有的磁盘I O都要进过内核的快缓冲区 xff08 内核缓冲区高速缓冲 xff09 xff0c 既然read和write都要被内核缓冲 xff0c 那么 不带缓冲的IO 指的是在用户的进程中对这两个函数不会进行缓冲 xff0c 每次read
  • git忽略本地的已经push过的提交

    先使用如下命令 xff1a span class hljs comment git span span class hljs comment rm span span class hljs literal span span class h
  • 计算机启动过程

    BIOS BIOS做了底层的一些初始化的工作 BIOS的初始化过程 xff1a 在计算机电源刚打开的时候 xff0c 首先会 xff1a 1 硬件自检 2 检查系统中的内存和显卡等关键部件的存在和工作状态 3 查找并执行显卡等接口卡BIOS
  • 系统调用

    系统调用 xff1a 操作系统对上提供服务的接口 通过软中断触发中断 INT和IRET指令用于系统调用 xff0c 系统调用时 xff0c 堆栈切换和特权级的切换 开销 1 引导机制 2 建立内核堆栈 3 验证参数 4 内核态映射到用户态的
  • ERVER CONSOLE DEBUG: onBackendConnect: gdb-server session closed

    Waiting for gdb server to start 2022 08 24T07 08 56 126Z SERVER CONSOLE DEBUG onBackendConnect gdb server session connec
  • Linux离线安装telnet命令

    参考 xff1a https www hangge com blog cache detail 2935 html 一 离线包下载 xff08 1 xff09 首先下载 telnet client 或 telnet 客户端软件包 xff0c
  • 嵌入式开发--CAN总线与高速光耦6N137

    嵌入式开发 CAN总线与高速光耦6N137 6N137简介 CAN总线应用时 xff0c 有时候需要加光耦隔离电路 xff0c 以免在雷击或遇到高压干扰时 xff0c 保护设备安全 常用的有光耦隔离和专用芯片隔离 本文介绍使用高速光耦6N1
  • 处理机调度

    调度算法 第一类就绪队列怎么排 第二类是每一次执行时间的长短的控制 第三类关于多种算法如何综合到一起 先来先服务算法 按着到就绪队列里的先后顺序来排队的在找就绪进程的时候也是按照这个先后顺序来 按先来后到没有考虑到进程的特征 缺点 xff1
  • 死锁产生和预防

    死锁的产生 1 资源是互斥的 资源在同一时刻只有一个进程才能够使用和访问 2 持有并等待 一个进程持有一份资源阻塞等待其它进程释放资源 3 资源不可抢占 只有一个进程使用完资源之后其它进程才能够占有使用 4 循环等待 在等待资源的进程集合中
  • 第一次实验报告:使用Packet Tracer分析HTTP数据包

    姓名 xff1a 刘钰 学号 xff1a 201821121036 班级 xff1a 计算1812 1 实验目的 熟练使用Packet Tracer工具 分析抓到的HTTP数据包 xff0c 深入理解 xff1a HTTP协议 xff0c
  • 超详细|一篇搞定操作系统——用户接口

    文章目录 6 1 用户接口6 2 其他特殊操作系统6 2 1 嵌入式操作系统6 2 2 分布式操作系统 操作系统全家桶 xff1a 传送门 一 操作系统引述 xff1a https blog csdn net diviner s artic
  • mac搭建嵌入式编程环境--交叉编译工具链crosstool-ng

    1 第一个思路就是和ubuntu一样 xff0c 是否有apt get一样的管理软件包工具 查了一下有类似的macport和homebrew macport下载方法 xff1a https guide macports org instal