基于Ubuntu Server编译YTM32 SDK工程

基于Ubuntu Server编译YTM32 SDK工程

文章目录

  • 基于Ubuntu Server编译YTM32 SDK工程
    • 需求
    • 下载软件包
    • 安装与配置
      • 配置虚拟机联网模式
      • 启用ssh连接
      • 启用ftp连接
      • 安装armgcc编译工具链
      • 确认make工具
    • 验证

需求

在Linux系统环境下搭建SDK的编译环境:

  • 方便加入到持续集成工具链
  • Linux系统中运行armgcc的速度更快,适合较为频繁的CI验证过程
  • 服务器上多使用Linux系统,比较容易找到装Linux系统的服务器,用旧电脑、虚拟机或者云服务均可
  • 一些客户需要,要么规避工具链的商业付费授权,要么习惯使用Linux系统(欧美开发者)

下载软件包

  • VirtualBox - Virtual Machine: https://download.virtualbox.org/virtualbox/7.0.12/VirtualBox-7.0.12-159484-Win.exe
  • Ubuntu 18.04 Server ISO Image: https://releases.ubuntu.com/18.04/ubuntu-18.04.6-live-server-amd64.iso
  • Tera Term - Remote Access Terminal:
  • WinSCP - FTP/SFTP Client on Windows: https://winscp.net/eng/download.php
  • gcc-arm-none-eabi for Linux: https://developer.arm.com/downloads/-/gnu-rm

安装与配置

配置虚拟机联网模式

VirtualBox网络模式,默认是NAT,可改为桥接模式。

在桥接模式下,虚拟主机同物理主机相互独立,通过物理主机连接的路由器组网(在Wifi网络中不需要再输入无线路由密码),在同一个局域网网段。桥接模式下的虚拟主机,同在局域网中加入一个物理主机服务器最接近。

为了验证虚拟主机系统已经联网成功,可通过ifconfig命令查看Linux主机的ip地址:

在这里插入图片描述

图x 查看远程服务器ip地址

前期的一些关于网络的配置工作,仍需要在虚拟机界面下完成。例如,先要安装并启用SSH服务,使得本地主机可以通过SSH连接到远程主机。

启用ssh连接

sudo apt install openssh-server # 安装ssh server
sudo service ssh start  # 启动ssh服务
sudo ufw allow 22 # 更新防火墙规则,开放22号端口

为了方便在本地主机(物理主机)系统中操作服务器,接下来将在本地主机使用SSH终端访问远程主机(虚拟主机)系统。
在这里插入图片描述

图x 使用Tera Term建立同远程主机的SSH连接

登录后,接下来的配置工作就都可以在Tera Term终端中进行了。如图x所示。

在这里插入图片描述

图x 使用Tera Term建立同远程主机的SSH连接2

启用ftp连接

通过FTP连接,本机主机可以向远程主机传送文件和下载文件。如此,可以在本地主机下载好必要的软件包,例如armgcc的工具链软件包。

在远程主机安装并启用FTP服务:

sudo apt-get install vsftpd # 安装vsftpd
sudo systemctl start vsftpd # 启用vsftpd服务
sudo systemctl enable vsftpd

配置vsfptd,启用读写访问权限:

sudo nano /etc/vsftpd.conf # 修改配置文件

默认仅需要开启写使能即可:

write_enable=YES

保存修改配置后,重启服务:

sudo systemctl restart vsftpd

在本地主机的Windows系统上,可以使用WinSCP作为FTP客户端。如图x所示。

在这里插入图片描述

图x 使用FTP向远程主机传文件

安装armgcc编译工具链

Ubuntu 18.04的软件源中,gcc-arm-none-eabi工具集的版本比较老,通常要使用较新版的编译器,可以通过直接解压压缩包的方式安装到远程主机的Linux系统中。

在Arm的官网(https://developer.arm.com/downloads/-/gnu-rm)下载Linux版本的gcc-arm-none-eabi工具集,如图x所示。

在这里插入图片描述

图x 下载Linux版本的gcc-arm-none-eabi工具集

使用WinSCP将下载好的gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2文件,上传至远程主机的目录/home/andrew/ytm32-mcu/tools中,再解压:

tar -jxvf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2

最后,将编译器程序所在的目录添加到Linux的环境变量中。

sudo nano /etc/profile

在文件结尾处添加:

export PATH="$PATH:/home/andrew/ytm32-mcu/tools/gcc-arm-none-eabi-10.3-2021.10/bin"

保存.bashrc文件后,重新激活:

source /etc/profile

此时,在bash中试用arm-none-eabi-gcc命令,可以看到,bash已经可以检索到armgcc的编译器:

andrew@andrew-pc:~/ytm32-mcu$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10.3-2021.10) 10.3.1 20210824 (release)
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.andrew@andrew-pc:~/ytm32-mcu$

确认make工具

YTM32的SDK使用Makefile组织源码工程。

PS:Ninja对Windows的支持似乎要好于Linux,因此YTM32的SDK在Windows系统中搭建免费的开发环境,就选用了Ninja。Make在Windows系统上没有专门的软件包,不能在Windows原生的命令行环境中直接调用,只得通过mingw环境套用一个兼容性的make工具。但是,Make在Linux系统环境下是天然被支持的,因此在Linux系统环境下,YTM32的SDK优先使用Make工具。

在bash中,试着运行make命令,确认是否已经安装。

andrew@andrew-pc:~/ytm32-mcu$ make --version
GNU Make 4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
andrew@andrew-pc:~/ytm32-mcu$

确认过眼神,是对的人。

验证

通过WinSCP将SDK的软件包传送至远程主机,解压软件包:

andrew@andrew-pc:~/ytm32-mcu$ unzip YTM32Bx_SDK_RTM_1.1.0.zip

然后以hello_world工程为例,切换至hello_world工程的Makefile文件所在目录,试着编译一下:

andrew@andrew-pc:~/ytm32-mcu/YTM32Bx_SDK_RTM_1.1.0/sdk/demos/YTM32B1MD1/hello_world/GCC$ make
======================================================================
Checked for uname, found: Linux
Assuming Unix like environment
======================================================================
Creating directory for object files
======================================================================
Compiling FLASH/flash/YTM32B1MD1_startup_gcc.o
======================================================================
Compiling FLASH/flash/dma_driver.o
======================================================================
Compiling FLASH/flash/dma_hw_access.o
======================================================================
Compiling FLASH/flash/dma_irq.o
======================================================================
Compiling FLASH/flash/interrupt_manager.o
======================================================================
Compiling FLASH/flash/pins_driver.o
======================================================================
Compiling FLASH/flash/pins_port_hw_access.o
======================================================================
Compiling FLASH/flash/linflexd_uart_driver.o
======================================================================
Compiling FLASH/flash/linflexd_uart_irq.o
======================================================================
Compiling FLASH/flash/clock_YTM32B1Mx.o
======================================================================
Compiling FLASH/flash/osif_baremetal.o
======================================================================
Compiling FLASH/flash/printf.o
======================================================================
Compiling FLASH/flash/startup.o
======================================================================
Compiling FLASH/flash/system_YTM32B1MD1.o
======================================================================
Compiling FLASH/flash/clock_config.o
======================================================================
Compiling FLASH/flash/peripherals_config.o
======================================================================
Compiling FLASH/flash/pin_mux.o
======================================================================
Compiling FLASH/flash/main.o
======================================================================
Linking to FLASH/flash.elftext    data     bss     dec     hex filename6604      84    9324   16012    3e8c FLASH/flash.elf
======================================================================
Build complete!

Bingo。

鉴于大多数在服务器上做CI(持续集成,Continuous Integration)只是编译,不做下载和调试,本文暂不继续介绍下载可执行文件的操作。实际上,编译之后的可执行文件,例如flash.elf,可以通过WinSCP取回到本地主机,在Windows系统下通过各种下载器(例如JLink或者DAPLink)下载到芯片上,或者通过Bootloader的方式更新固件,用户可以根据需要选用合适的操作方式。

  • END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/113524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中间件安全-CVE复现IISApacheTomcatNginx漏洞复现

目录 中间件安全&CVE复现&IIS&Apache&Tomcat&Nginx漏洞复现中间件-IIS安全问题中间件-Nginx安全问题漏洞复现Nginx 解析漏洞复现Nginx 文件名逻辑漏洞 中间件-Apache-RCE&目录遍历&文件解析等安全问题漏洞复现漏洞复现CVE_2021_42013 RCE代码执行&…

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接

一 TCP Fast Open 快速建立连接 说明&#xff1a; 之前讲解TCP 相关知识点遗漏了这个知识点,补充上 ① TFO简介 ② 请求 Fast Open Cookie过程 "原理图" ③ 真正开始 TCP Fast Open 重点&#xff1a; TFO 使 SYN包 可以包含payload 数据 ④ 抓包分析 1、…

AD20原理图库的制作

1、打开“51单片机最小系统”的工程文件。 2、创建原理图库文件&#xff1a;单击“文件”菜单&#xff0c;选择“新的”选项中的“库”选项&#xff0c;再选择“原理图库”&#xff0c;进入原理图库元件的编辑界面。 3、保存原理图库文件&#xff1a;选择“文件”菜单&#xff…

CPU飙高问题排查命令

1. 远程客户端连接服务器,top命令查看cpu占用最高的进程id 2. (top -H -p 进程pid) 命令: 找出进程里面线程占用CPU高的线程有哪些 ? 3. (printf 0x%x\n 线程id) 线程id转16进制 4. (./jstack PID | grep TID(十六进制) -A 30)

设计模式之建造者模式

什么是建造者模式 建造者模式是一种创建型设计模式&#xff0c;它提供了一种创建对象的最佳方式。这种模式将一个复杂的构建与其表示相分离&#xff0c;使得同样的构建过程可以创建不同的表示。 举一个简单的例子&#xff1a;假设我们要创建一个复杂的对象&#xff0c;例如一…

vscode摸鱼插件开发

不知道大家在写代码的时候&#xff0c;摸不摸鱼&#xff0c;是不是时不时得打开一下微博&#xff0c;看看今天发生了什么大事&#xff0c;又有谁塌房&#xff0c;而你没有及时赶上。 为此&#xff0c;我决定开发一个vscode插件&#xff0c;来查看微博热搜 插件名称&#xff1…

influxDB学习记录

一、官网 influxdb官方英文文档&#xff1a;https://docs.influxdata.com/influxdb/v1.8/query_language/spec/influxdb中文文档&#xff1a;https://jasper-zhang1.gitbooks.io/influxdb/content/ 二、centos安装与基本配置 influxdb安装与基本配置&#xff08;centos) 三…

论文阅读[51]通过深度学习快速识别荧光组分

【论文基本信息】 标题&#xff1a;Fast identification of fluorescent components in three-dimensional excitation-emission matrix fluorescence spectra via deep learning 标题译名&#xff1a;通过深度学习快速识别 三维激发-发射矩阵荧光光谱中的荧光组分 期刊与年份&…

【量化交易笔记】10.建立最简单的交易策略

概述 量化说得简单一些用策略进行股票交易&#xff0c;在实施交易之前&#xff0c;需要制定策略&#xff0c;并回测试共效果 为了把交易说明清楚&#xff0c;将这个过程&#xff0c;能简单&#xff0c;就简单&#xff0c;总之&#xff0c;简单&#xff0c;简单再简单。 以下主…

unity NPR 卡通渲染

文章目录 一、 介绍二、 素材准备三、 步骤四、 shader代码五、工程链接 一、 介绍 NPR是计算机图形学中的一类&#xff0c;即非真实感绘制(Non-photorealistic rendering)&#xff0c;主要用于模拟艺术式的绘制风格&#xff0c;也用于发展新绘制风格&#xff0c;形式一般是卡…

冰蝎默认加密的流量解密

破解冰蝎的默认加密 流量包分析 上传的冰蝎流量包 POST /web-zh/DVWA/vulnerabilities/upload/ HTTP/1.1 Host: 192.168.197.111 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0 Accept: text/html,application/xhtmlxml,a…

vscode调试container(进行rocksdb调试)+vscode比较git项目不同分支和fork的哪个分支

vscode调试container&#xff08;进行rocksdb调试&#xff09; 参考链接&#xff1a; https://blog.csdn.net/qq_29809823/article/details/128445308#t5 https://blog.csdn.net/qq_29809823/article/details/121978762#t7 使用vscode中的插件dev containners->点击左侧的…

【微信小程序开发】小程序微信用户授权登录(用户信息手机号)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于小程序的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 授权流程讲解 一.用户信息授权登录 1.w…

MD-MTSP:粒子群优化算法PSO求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、多仓库多旅行商问题MD-MTSP 多旅行商问题&#xff08;Multiple Traveling Salesman Problem, MTSP&#xff09;是著名的旅行商问题&#xff08;Traveling Salesman Problem, TSP&#xff09;的延伸&#xff0c;多旅行商问题定义为&#xff1a;给定一个&#x1d45b;座城市…

LabVIEW中管理大型数据

LabVIEW中管理大数据 LabVIEW的最大优势之一是自动内存管理。这种内存管理允许用户轻松创建字符串、数组和集群&#xff0c;而无需C/C用户经常担心。但是&#xff0c;这种内存管理设计为绝对安全&#xff0c;因此数据被非常频繁地复制。这通常不会造成任何问题&#xff0c;但是…

vue3 列表页开发【选择展示列】功能

目录 背景描述&#xff1a; 开发流程&#xff1a; 详细开发流程&#xff1a; 总结&#xff1a; 背景描述&#xff1a; 这个功能是基于之前写的 封装列表页 的功能继续写的&#xff0c;加了一个选择展示列的功能&#xff0c;可以随时控制表格里展示那些列的数据&#xf…

深度强化学习 第 4 章 DQN 与 Q 学习

4.1 DQN 最优动作价值函数的用途 假如我们知道 Q ⋆ Q_⋆ Q⋆​&#xff0c;我们就能用它做控制。 我们希望知道 Q ⋆ Q_⋆ Q⋆​&#xff0c;因为它就像是先知一般&#xff0c;可以预见未来&#xff0c;在 t t t 时刻就预见 t t t 到 n n n时刻之间的累计奖励的期望。假如…

5G来临,迎客莱带你探索运营商大数据的应用

随着5G时代的来临&#xff0c;不仅在算力的基础上得到了加强和保障&#xff0c;同时也丰富了计算的方式和模式&#xff0c;如边缘计算、霾计算等。计算方式和模式的改变&#xff0c;对于运营商来说&#xff0c;意味着更丰富的数据维度&#xff0c;更鲜活的数据和更强大的数据处…

无人机航拍图像拼接与目标识别

一、简介 无人机用来做图像侦察是常见功能&#xff0c;现有技术基本是无人机对某片区域进行飞行&#xff0c;人工实时监控飞行图像&#xff0c;将图像录制成视频供事后回放。此方法对人员业务要求比较高、反应速度足够快、不利于信息收集、录制视频丢失空间信息、对于后期开展区…