经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Linux/Shell » 查看文章
Ubuntu 22.04 GCC Arm 12.2.rel1编译 DAPLink
来源:cnblogs  作者:Milton  时间:2023/2/3 8:42:29  对本文有异议

ARMmbed / DAPLink 项目

仓库地址 https://github.com/ARMmbed/DAPLink

Arm Mbed 应该属于Arm的机构或者是Arm资助的机构. 常用的 DAPLink 基本上都是从这个项目派生的. 仓库主要是使用 Keil, 对 GCC 的支持是 2020 年才正式合并进来的 #750.

目录结构

  1. ├── docs # 文档
  2. ├── mbed-os.lib
  3. ├── projectfiles # 根据不同的编译器, 对各个project生成的编译配置文件
  4.    ├── make_gcc_arm
  5.    └── uvision
  6. ├── projects.yaml # project 列表
  7. ├── records
  8.    ├── board
  9.    ├── daplink
  10.    ├── family
  11.    ├── hic_hal
  12.    ├── rtos
  13.    ├── tools # 对不同编译器的预设编译参数
  14.    └── usb
  15. ├── requirements.txt # python依赖
  16. ├── source
  17.    ├── board
  18.    ├── cmsis-core
  19.    ├── daplink # daplink的源码
  20.    ├── family # 针对各厂商各型号的flash_blob.c 和 target.c
  21.       ├── ambiq
  22.       ├── arm
  23.       ├── freescale
  24.       ├── maxim
  25.       ├── nordic
  26.       ├── nuvoton
  27.       ├── nxp
  28.       ├── realtek
  29.       ├── renesas
  30.       ├── st
  31.       └── toshiba
  32.    ├── hic_hal
  33.    ├── rtos
  34.    ├── rtos2
  35.    ├── rtos_none
  36.    ├── target
  37.    └── usb
  38. ├── test
  39. ├── tools

Ubuntu 下使用 GCC Arm 编译

参考说明 How to Build

GCC Arm 工具链

下载地址

环境配置

安装python3

下载 GCC Arm 工具链, 并解压到合适的目录

导出项目, 在项目下创建 virtualenv

  1. $ git clone https://github.com/mbedmicro/DAPLink
  2. $ cd DAPLink
  3. $ pip install virtualenv
  4. $ virtualenv venv

启用虚拟环境(因为要使用progen)

  1. $ source venv/bin/activate

第一次运行(如果后面仓库有更新也需要运行)

  1. (venv) $ pip install -r requirements.txt

编译

方式一

  1. PATH=$PATH:/opt/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/;python tools/progen_compile.py -t make_gcc_arm --clean -v --parallel stm32f103xb_if

方式二

  1. progen generate -t make_gcc_arm -p stm32f103xb_bl
  2. PATH=$PATH:/opt/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/;make -C projectfiles/make_gcc_arm/stm32f103xb_bl

遇到的问题

用 gcc arm 10.3 可以顺利编译, 如果用 gcc arm 11.2 会报 SysTick 错误, 如果用 11.3 或 12.2 编译, 会报这样的错误

  1. Compiling ../../../source/usb/msc/usbd_core_msc.c
  2. Compiling ../../../source/usb/msc/usbd_msc.c
  3. Compiling ../../../source/usb/usbd_core.c
  4. Assembling ../../../source/hic_hal/stm32/stm32f103xb/gcc/startup_stm32f103xb.S
  5. Linking build/stm32f103xb_bl.elf
  6. /opt/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/bin/ld: /opt/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp/libc_nano.a(libc_a-closer.o): in function `_close_r':
  7. /data/jenkins/workspace/GNU-toolchain/arm-11/src/newlib-cygwin/newlib/libc/reent/closer.c:47: warning: _close is not implemented and will always fail
  8. /opt/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/bin/ld: /opt/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp/libc_nano.a(libc_a-lseekr.o): in function `_lseek_r':
  9. /data/jenkins/workspace/GNU-toolchain/arm-11/src/newlib-cygwin/newlib/libc/reent/lseekr.c:49: warning: _lseek is not implemented and will always fail
  10. /opt/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/bin/ld: /opt/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp/libc_nano.a(libc_a-readr.o): in function `_read_r':
  11. /data/jenkins/workspace/GNU-toolchain/arm-11/src/newlib-cygwin/newlib/libc/reent/readr.c:49: warning: _read is not implemented and will always fail
  12. /opt/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/bin/ld: /opt/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v7-m/nofp/libc_nano.a(libc_a-writer.o): in function `_write_r':
  13. /data/jenkins/workspace/GNU-toolchain/arm-11/src/newlib-cygwin/newlib/libc/reent/writer.c:49: warning: _write is not implemented and will always fail
  14. Memory region Used Size Region Size %age Used
  15. m_interrupts: 1 KB 1 KB 100.00%
  16. m_text: 46 KB 46 KB 100.00%
  17. m_cfgrom: 0 GB 1 KB 0.00%
  18. m_data: 9168 B 20224 B 45.33%
  19. m_cfgram: 142 B 256 B 55.47%
  20. collect2: error: ld returned 1 exit status
  21. make: *** [Makefile:283: build/stm32f103xb_bl.elf] Error 1
  22. make: Leaving directory '/home/milton/WorkC/DAPLink/projectfiles/make_gcc_arm/stm32f103xb_bl'

需要做以下的修改

  1. 编辑 vi source/daplink/sdk_stub.c

增加以下内容

  1. __attribute__((weak)) int _write(int file, char *ptr, int len)
  2. {
  3. (void)file;
  4. //int DataIdx;
  5. //for (DataIdx = 0; DataIdx < len; DataIdx++)
  6. //{
  7. // __io_putchar(*ptr++);
  8. //}
  9. return len;
  10. }
  11. __attribute__((weak)) int _read(int file, char *ptr, int len)
  12. {
  13. (void)file;
  14. //int DataIdx;
  15. //for (DataIdx = 0; DataIdx < len; DataIdx++)
  16. //{
  17. // *ptr++ = __io_getchar();
  18. //}
  19. return len;
  20. }
  21. __attribute__((weak)) int _isatty(int fd)
  22. {
  23. if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)
  24. return 1;
  25. errno = EBADF;
  26. return 0;
  27. }
  28. __attribute__((weak)) int _close(int fd)
  29. {
  30. if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)
  31. return 0;
  32. errno = EBADF;
  33. return -1;
  34. }
  35. __attribute__((weak)) int _lseek(int fd, int ptr, int dir)
  36. {
  37. (void)fd;
  38. (void)ptr;
  39. (void)dir;
  40. errno = EBADF;
  41. return -1;
  42. }
  1. 修改 records/tools/gcc_arm.yaml

在 ld_flags 下增加 -Wl,--no-warn-rwx-segment

之后就能顺利编译了

相关链接

原文链接:https://www.cnblogs.com/milton/p/17085726.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号