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 工具链

下载地址

环境配置

安装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'

需要做以下的修改

  1. 编辑 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;
}
  1. 修改 records/tools/gcc_arm.yaml

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

之后就能顺利编译了

相关链接

Ubuntu 22.04 GCC Arm 12.2.rel1编译 DAPLink的更多相关文章

  1. Ubuntu 14.04 安装VMware 12

    /*********************************************************************** * Ubuntu 14.04 安装VMware 12 ...

  2. Qemu/Limbo/KVM镜像 Ubuntu 22.04 精简版,可运行Windows软件,内存占用不到200M

    镜像特征: Ubuntu 22.04系统 内置Wine 7.8,可运行大量Windows 软件 高度精简,内存占用仅200M不到. 自制UI,Windows3.1风格. 完全开源 镜像说明: 用户名为 ...

  3. Ubuntu 14.04 正式版 12.4

    安装Ubuntu 14.04后要做的5件事情 4月17日,开源免费系统Ubuntu官方正式宣布发布Ubuntu 14.04 LTS(代号Trusty Tahr)正式版.官方声称该版本主打云计算,在云平 ...

  4. ubuntu 10.04 安装arm交叉编译器

    家里有一台cotext-A9(armv7-a) 的盒子,现在不用了, 一直想着废物利用.于是想怎么为这盒子编译程序. 目标机器: root@routon-h1:/# uname -a Linux ro ...

  5. ubuntu 14.04 gcc/g++版本降低

    Matlab 2014a支持的gcc/g++版本是4.7x,而ubuntu 14.04以及更高版本默认安装的版本都是4.8及以上,因此需要降低gcc/g++版本,方法如下: 1 安装 $ sudo a ...

  6. 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 ...

  7. Ubuntu 14.04 LTS 下使用源码编译安装 Sagemath 6.7 x64 (小结)

    原先博客放弃使用,几篇文章搬运过来 下载源码包 系统的最低要求: 6GB 硬盘 : 2GB RAM. 命令行工具: A C/C++ compiler: Since Sage builds its ow ...

  8. 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 ...

  9. 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 ...

  10. ubuntu 10.04 fcitx 4.12 实现按下shit切换输入法同时提交英文输入

    安装: echo "add fcitx ppa..." sudo apt-add-repository ppa:fcitx-team/nightly sudo apt-get in ...

随机推荐

  1. 32bit和64bit系统的区别,运行机制浅析

    32bit:内存的最大寻址空间是2^32=4G,就是说32位系统的处理器最大只支持到4G内存 64bit:内存的最大寻址空间是2^64,大于1亿GB,但是实际上支持不到那么大的内存,大概是2^40+ ...

  2. RabbitMq发布确认

    RabbitMq发布确认 发布确认原理 生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始),一旦消息被 ...

  3. vmware workstation NAT模式配置

    一. 配置虚拟网络编辑器 1. 打开虚拟网络编辑器 2. 点击右下角更改设置 3. 选择NAT模式 点击选中NAT模式的虚拟网络,默认为VMnet8(可调整),可设置NAT模式的子网IP和掩码 4. ...

  4. 封装适用于CentOS7的MySQL离线包

    1 构建一个centos7.6.1810的docker镜像,用于下载MySQL+xtrabackup所需安装包 7.6.1810的docker镜像,低版本最小安装,会尽可能把所需的包拉齐. Docke ...

  5. CLion和动态链接库

    目录 生成链接库 链接库的使用 生成链接库 创建一个library项目 在项目中写好自己的代码 cmakelist cmake_minimum_required(VERSION 3.21) proje ...

  6. 【机器学习】李宏毅——生成式对抗网络GAN

    1.基本概念介绍 1.1.What is Generator 在之前我们的网络架构中,都是对于输入x得到输出y,只要输入x是一样的,那么得到的输出y就是一样的. 但是Generator不一样,它最大的 ...

  7. git相关问题解析,你想要的都有🔥

    官网文档: https://git-scm.com/doc 本地克隆远程代码仓库 git clone 地址 本地同步全量历史数据,克隆所有文件的历史记录 git clone 地址 -depth 1 本 ...

  8. table表格的合并

    如上图,实现单元格合并功能,不多说,直接上代码 一,添加    :span-method="objectSpanMethod" <el-table :key="ti ...

  9. 红袖添香,绝代妖娆,Ruby语言基础入门教程之Ruby3基础语法,第一次亲密接触EP01

    书接上回,前一篇我们在全平台构建好了Ruby3的开发环境,现在,可以和Ruby3第一次亲密接触了. Ruby是一门在面向对象层面无所不用其极的解释型编程语言. 我们可以把编写Ruby代码看作是一场行为 ...

  10. mybatis 之定义拦截器 控制台SQL的打印

    类型 先说明Mybatis中可以被拦截的类型具体有以下四种: 1.Executor:拦截执行器的方法.2.ParameterHandler:拦截参数的处理.3.ResultHandler:拦截结果集的 ...