Ubuntu 22.04 GCC Arm 12.2.rel1编译 DAPLink
ARMmbed / DAPLink 项目
仓库地址 https://github.com/ARMmbed/DAPLink
Arm Mbed 应该属于Arm的机构或者是Arm资助的机构. 常用的 DAPLink 基本上都是从这个项目派生的. 仓库主要是使用 Keil, 对 GCC 的支持是 2020 年才正式合并进来的 #750.
目录结构
├── docs # 文档
├── mbed-os.lib
├── projectfiles # 根据不同的编译器, 对各个project生成的编译配置文件
│ ├── make_gcc_arm
│ └── uvision
├── projects.yaml # project 列表
├── records
│ ├── board
│ ├── daplink
│ ├── family
│ ├── hic_hal
│ ├── rtos
│ ├── tools # 对不同编译器的预设编译参数
│ └── usb
├── requirements.txt # python依赖
├── source
│ ├── board
│ ├── cmsis-core
│ ├── daplink # daplink的源码
│ ├── family # 针对各厂商各型号的flash_blob.c 和 target.c
│ │ ├── ambiq
│ │ ├── arm
│ │ ├── freescale
│ │ ├── maxim
│ │ ├── nordic
│ │ ├── nuvoton
│ │ ├── nxp
│ │ ├── realtek
│ │ ├── renesas
│ │ ├── st
│ │ └── toshiba
│ ├── hic_hal
│ ├── rtos
│ ├── rtos2
│ ├── rtos_none
│ ├── target
│ └── usb
├── test
├── tools
Ubuntu 下使用 GCC Arm 编译
参考说明 How to Build
GCC Arm 工具链
下载地址
- 10.3 https://developer.arm.com/downloads/-/gnu-rm
- 11.x 及之后的版本 https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads
环境配置
安装python3
下载 GCC Arm 工具链, 并解压到合适的目录
导出项目, 在项目下创建 virtualenv
$ git clone https://github.com/mbedmicro/DAPLink
$ cd DAPLink
$ pip install virtualenv
$ virtualenv venv
启用虚拟环境(因为要使用progen)
$ source venv/bin/activate
第一次运行(如果后面仓库有更新也需要运行)
(venv) $ pip install -r requirements.txt
编译
方式一
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
方式二
progen generate -t make_gcc_arm -p stm32f103xb_bl
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 编译, 会报这样的错误
Compiling ../../../source/usb/msc/usbd_core_msc.c
Compiling ../../../source/usb/msc/usbd_msc.c
Compiling ../../../source/usb/usbd_core.c
Assembling ../../../source/hic_hal/stm32/stm32f103xb/gcc/startup_stm32f103xb.S
Linking build/stm32f103xb_bl.elf
/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':
/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
/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':
/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
/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':
/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
/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':
/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
Memory region Used Size Region Size %age Used
m_interrupts: 1 KB 1 KB 100.00%
m_text: 46 KB 46 KB 100.00%
m_cfgrom: 0 GB 1 KB 0.00%
m_data: 9168 B 20224 B 45.33%
m_cfgram: 142 B 256 B 55.47%
collect2: error: ld returned 1 exit status
make: *** [Makefile:283: build/stm32f103xb_bl.elf] Error 1
make: Leaving directory '/home/milton/WorkC/DAPLink/projectfiles/make_gcc_arm/stm32f103xb_bl'
需要做以下的修改
- 编辑 vi source/daplink/sdk_stub.c
增加以下内容
__attribute__((weak)) int _write(int file, char *ptr, int len)
{
(void)file;
//int DataIdx;
//for (DataIdx = 0; DataIdx < len; DataIdx++)
//{
// __io_putchar(*ptr++);
//}
return len;
}
__attribute__((weak)) int _read(int file, char *ptr, int len)
{
(void)file;
//int DataIdx;
//for (DataIdx = 0; DataIdx < len; DataIdx++)
//{
// *ptr++ = __io_getchar();
//}
return len;
}
__attribute__((weak)) int _isatty(int fd)
{
if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)
return 1;
errno = EBADF;
return 0;
}
__attribute__((weak)) int _close(int fd)
{
if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)
return 0;
errno = EBADF;
return -1;
}
__attribute__((weak)) int _lseek(int fd, int ptr, int dir)
{
(void)fd;
(void)ptr;
(void)dir;
errno = EBADF;
return -1;
}
- 修改 records/tools/gcc_arm.yaml
在 ld_flags 下增加 -Wl,--no-warn-rwx-segment
之后就能顺利编译了
相关链接
Ubuntu 22.04 GCC Arm 12.2.rel1编译 DAPLink的更多相关文章
- Ubuntu 14.04 安装VMware 12
/*********************************************************************** * Ubuntu 14.04 安装VMware 12 ...
- Qemu/Limbo/KVM镜像 Ubuntu 22.04 精简版,可运行Windows软件,内存占用不到200M
镜像特征: Ubuntu 22.04系统 内置Wine 7.8,可运行大量Windows 软件 高度精简,内存占用仅200M不到. 自制UI,Windows3.1风格. 完全开源 镜像说明: 用户名为 ...
- Ubuntu 14.04 正式版 12.4
安装Ubuntu 14.04后要做的5件事情 4月17日,开源免费系统Ubuntu官方正式宣布发布Ubuntu 14.04 LTS(代号Trusty Tahr)正式版.官方声称该版本主打云计算,在云平 ...
- ubuntu 10.04 安装arm交叉编译器
家里有一台cotext-A9(armv7-a) 的盒子,现在不用了, 一直想着废物利用.于是想怎么为这盒子编译程序. 目标机器: root@routon-h1:/# uname -a Linux ro ...
- ubuntu 14.04 gcc/g++版本降低
Matlab 2014a支持的gcc/g++版本是4.7x,而ubuntu 14.04以及更高版本默认安装的版本都是4.8及以上,因此需要降低gcc/g++版本,方法如下: 1 安装 $ sudo a ...
- GCC Arm 12.2编译提示 LOAD segment with RWX permissions 警告
使用GCC Arm工具链开发的项目, 在升级到 arm-gnu-toolchain-12.2 之后, 编译出现警告 arm-gnu-toolchain-12.2.mpacbti-bet1-x86_64 ...
- Ubuntu 14.04 LTS 下使用源码编译安装 Sagemath 6.7 x64 (小结)
原先博客放弃使用,几篇文章搬运过来 下载源码包 系统的最低要求: 6GB 硬盘 : 2GB RAM. 命令行工具: A C/C++ compiler: Since Sage builds its ow ...
- Ubuntu 18.04 gcc降级为4.8.5版本
1. 下载gcc/g++ 4.8 $ sudo apt-get install -y gcc-4.8.5 $ sudo apt-get install -y g++-4.8.5 2. 链接gcc/g ...
- ubuntu 18.04 gcc g++降级4.8版
$ sudo apt-get install -y gcc-4.8 $ sudo apt-get install -y g++-4.8 $ cd /usr/bin $ sudo rm gcc $ su ...
- ubuntu 10.04 fcitx 4.12 实现按下shit切换输入法同时提交英文输入
安装: echo "add fcitx ppa..." sudo apt-add-repository ppa:fcitx-team/nightly sudo apt-get in ...
随机推荐
- 32bit和64bit系统的区别,运行机制浅析
32bit:内存的最大寻址空间是2^32=4G,就是说32位系统的处理器最大只支持到4G内存 64bit:内存的最大寻址空间是2^64,大于1亿GB,但是实际上支持不到那么大的内存,大概是2^40+ ...
- RabbitMq发布确认
RabbitMq发布确认 发布确认原理 生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始),一旦消息被 ...
- vmware workstation NAT模式配置
一. 配置虚拟网络编辑器 1. 打开虚拟网络编辑器 2. 点击右下角更改设置 3. 选择NAT模式 点击选中NAT模式的虚拟网络,默认为VMnet8(可调整),可设置NAT模式的子网IP和掩码 4. ...
- 封装适用于CentOS7的MySQL离线包
1 构建一个centos7.6.1810的docker镜像,用于下载MySQL+xtrabackup所需安装包 7.6.1810的docker镜像,低版本最小安装,会尽可能把所需的包拉齐. Docke ...
- CLion和动态链接库
目录 生成链接库 链接库的使用 生成链接库 创建一个library项目 在项目中写好自己的代码 cmakelist cmake_minimum_required(VERSION 3.21) proje ...
- 【机器学习】李宏毅——生成式对抗网络GAN
1.基本概念介绍 1.1.What is Generator 在之前我们的网络架构中,都是对于输入x得到输出y,只要输入x是一样的,那么得到的输出y就是一样的. 但是Generator不一样,它最大的 ...
- git相关问题解析,你想要的都有🔥
官网文档: https://git-scm.com/doc 本地克隆远程代码仓库 git clone 地址 本地同步全量历史数据,克隆所有文件的历史记录 git clone 地址 -depth 1 本 ...
- table表格的合并
如上图,实现单元格合并功能,不多说,直接上代码 一,添加 :span-method="objectSpanMethod" <el-table :key="ti ...
- 红袖添香,绝代妖娆,Ruby语言基础入门教程之Ruby3基础语法,第一次亲密接触EP01
书接上回,前一篇我们在全平台构建好了Ruby3的开发环境,现在,可以和Ruby3第一次亲密接触了. Ruby是一门在面向对象层面无所不用其极的解释型编程语言. 我们可以把编写Ruby代码看作是一场行为 ...
- mybatis 之定义拦截器 控制台SQL的打印
类型 先说明Mybatis中可以被拦截的类型具体有以下四种: 1.Executor:拦截执行器的方法.2.ParameterHandler:拦截参数的处理.3.ResultHandler:拦截结果集的 ...