裸机开发及开发环境搭建

ARM 的裸机开发,也就是不带操作系统开发,就和我们开发 STM32 一样,如果
STM32 开发经验的话学起本篇会很容易
1、裸机开发是了解所使用的 CPU 最直接、最简单的方法,裸机开发是直接操作 CPU 的寄存器。
Linux 驱动开发最终也是操作的寄存器,但 是在操作寄存器之前要先编写一个符合 Linux 驱动的框架。同样一个点灯驱动,裸机可能只需 要十几行代码,但是 Linux 下的驱动就需要几十行代码。
2.  Linux 驱动开发和 STM32 开发区别 很大,比如 Linux 没有 MDK、IAR 这样的集成开发环境,需要我们自己在 Ubuntu 下搭建交叉编译环境。
3、裸机开发是连接 Cortex-M(如 STM32)单片机和 Cortex-A(I.MX6U)处理器的桥梁

1.开发环境搭建

1.1Ubuntu Windows 文件互传

在 Windwos 下进行 代码编写,然后将编写好的代码拿到 Ubuntu 下进行编译。Windows Ubuntu 下的文件互传我 们需要使用 FTP 服务,设置方法如下:

1.1.1开启ubuntu下的FTP服务

打开 Ubuntu 的终端窗口,然后执行如下命令来安装 FTP 服务:

确保上面两行前面没有“#”,有的话就取消掉

修改完 vsftpd.conf 以后保存退出,使用如下命令重启 FTP 服务: 

sudo /etc/init.d/vsftpd restart

1.1.2windows下FTP客户端安装

Windows FTP 客户端我们使用 FileZilla,这是个免费的 FTP 客户端软件,可以在 FileZilla
官网下载,下载地址如下:https://www.filezilla.cn/download
安装完毕界面如图
FileZilla 软件设置
Ubuntu 作为 FTP 服务器,FileZilla 作为 FTP 客户端,客户端肯定要连接到服务器上,打开
站点管理器,点击:文件->站点管理器
点击图 中的“新站点(N)”按钮来创建站点,将新的站点命名为“Ubuntu”
终端窗口输入ifconfig查看地址及参数
然后打开站点管理器,选中要设置的站点“Ubuntu”,选择“字符集”,
设置好字符集以后重新连接到 FTP 服务器上,重新链接到 FTP 服务器以后
Ubuntu 下的文件目录中文显示就正常了就可以直接拖文件过去。

 1.1.3Ubuntu NFS SSH 服务开启

NFS 服务开启
后面进行 Linux 驱动开发的时候需要 NFS 启动,因此要先安装并开启 Ubuntu 中的 NFS
务,使用如下命令安装 NFS 服务:
等待安装完成,安装完成以后在用户根目录下创建一个名为“linux”的文件夹,以后所有
的东西都放到这个“linux”文件夹里面,在“linux”文件夹里面新建一个名为“nfs”的文件夹,
创建的 nfs 文件夹供 nfs 服务器使用,以后我们可以在开发板上通过网络文件系
统来访问 nfs 文件夹,要先配置 nfs,使用如下命令打开 nfs 配置文件/etc/exports: 重启 NFS 服务,使用命令如下:
SSH 服务开启
开启 Ubuntu SSH 服务以后我们就可以在 Windwos 下使用终端软件登陆到 Ubuntu,比如
使用 SecureCRTUbuntu 下使用如下命令开启 SSH 服务: 上述命令安装 ssh 服务,ssh 的配置文件为/etc/ssh/sshd_config,使用默认配置即可。

2.Ubuntu 交叉编译工具链安装

ARM 裸机、Uboot 移植、Linux 移植这些都需要在 Ubuntu 下进行编译,编译就需要编译
器,而我们现在 要编译的是 ARM 架构的代码,所以我们需要一个在 X86 架构的 PC 上运行,可以编译 ARM 架 构代码的 GCC 编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:
1.它肯定是一个 GCC 编译器。
2、这个 GCC 编译器是运行在 X86 架构的 PC 上的。
3、这个 GCC 编译器是编译 ARM 架构代码的,也就是编译出来的可执行文件是在 ARM
片上运行的。
交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架
构“交叉”起来了
Linaro GCC 编译器下载地址如下:
https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/我们要先将交叉编译工具拷贝到 Ubuntu 中,我们在当前用户根目录下创建了一个名为“linux”的文件夹,在这个 linux 文件夹里面再创建一个名为“tool”的文件夹,用来存放一些开发工具。使用前面已经安装好的 FileZilla 将交叉编译器拷贝到 Ubuntu 中刚刚新建的“tool”文件夹中,操作如图
Ubuntu 中创建目录:/usr/local/arm,命令如下:
创建完成以后将刚刚拷贝的交叉编译器复制到/usr/local/arm 这个目录中,在终端使用命令
cd ” 进 入 到 存 放 有 交 叉 编 译 器 的 目 录 , 比 如 我 前 面 将 交 叉 编 译 器 拷 贝 到 了 目 录 “/home/zuozhongkai/linux/tool”中,然后使用如下命令将交叉编译器复制到/usr/local/arm 中:拷贝完成以后在/usr/local/arm 目录中对交叉编译工具进行解压,解压命令如下:
等待解压完成,解压完成以后会生成一个名为“gcc-linaro-4.9.4-2017.01-x86_64_arm-linux
gnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。
修改环境变量,使用 VI 打开/etc/profile 文件,命令如下: 打开/etc/profile 以后,在最后面输入如下所示内容:
添加完成以后的/etc/profile 如图 重启 Ubuntu 系统,交叉编译工具链(编译器)就安装成功
安装相关库
在使用交叉编译器之前还需要安装一下其它的库,命令如下:
交叉编译器验证
首先查看一下交叉编译工具的版本号,输入如下命令:
如果交叉编译器安装正确的话就会显示版本号可以看出当前交叉编译器的版本号为 4.9.4,说明交叉编译工具链安装成功。
arm-linux-gnueabihf
gcc”的含义如下:
1arm 表示这是编译 arm 架构代码的编译器。
2linux 表示运行在 linux 环境下。
3gnueabihf 表示嵌入式二进制接口。
4gcc 表示是 gcc 工具
### 如何搭建ARM架构的裸机开发环境 #### 配置交叉工具链 在Linux环境下进行ARM裸机开发时,需要配置一个适合目标系统的交叉编译器。这可以通过安装预构建的工具链或者自行编译来实现。通常推荐使用现成的工具链,例如GNU Arm Embedded Toolchain[^1]。 对于Windows或MacOS用户,可以分别参考特定的操作指南。例如,在MacOS环境中,开发者可以选择基于Homebrew或其他包管理工具获取必要的依赖项,并完成工具链的部署[^2]。 #### 下载必要软件包 为了简化设置过程,可以从官方资源或者其他可信站点下载预先打包好的工具集。比如Yagarto是一个流行的解决方案之一,它包含了GCC、GDB以及Newlib库的支持,非常适合初学者快速入门[^3]。 另外还需要考虑硬件通信需求,如果计划通过串口连接设备,则可能需要用到相应的驱动程序支持,像CH340系列芯片对应的驱动就是常见例子。 #### 创建首个项目实例 一旦完成了上述准备工作之后,就可以着手创建自己的第一个工程项目了。按照惯例,我们会先尝试点亮一块板子上的LED作为验证手段;为此需经历几个主要环节——包括但不限于虚拟工作区建立(即模拟运行条件)、实际物理连线确认还有最终代码上传测试等等具体事项均已在先前资料有所提及[^4]。 以下是简单的Blinking LED C源码片段用于演示目的: ```c #include "stm32f4xx.h" void delay(volatile uint32_t count){ while(count--); } int main(void){ RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // Enable clock access to GPIO port A GPIOA->MODER &= ~(GPIO_MODER_MODE5_Msk); // Clear mode bits for pin PA5 GPIOA->MODER |= (0b01 << 10); // Set output mode on pin PA5 while(1){ GPIOA->ODR ^= GPIO_ODR_OD5; // Toggle state of pin PA5 delay(900000); // Wait some time before toggling again } } ``` 此段落展示了如何控制STM32微控制器的一个通用I/O端口以达到周期性改变其电平状态的效果,从而使得外接于此管脚处的小型发光二极管能够规律闪动起来。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值