首页 » 软件优化 » 嵌入式裸机开发(编译器如下图所示安装裸机)

嵌入式裸机开发(编译器如下图所示安装裸机)

南宫静远 2024-11-17 19:31:47 0

扫一扫用手机浏览

文章目录 [+]

前沿

Ubuntu 和 Windows 文件传输

Ubuntu 中启用了 NFS 和 SSH 服务

嵌入式裸机开发(编译器如下图所示安装裸机) 软件优化
(图片来自网络侵删)

Ubuntu交叉编译工具链安装

Source Insight软件安装与使用

Visual Studio Code软件的安装和使用

前沿

为什么要学习裸机开发

1、裸机开发是最直接最简单的了解所用CPU的方式,比如你用的是I.MX6U,跟STM32一样,裸机开发直接操作CPU寄存器。
Linux驱动开发最后也是操作寄存器,不过操作寄存器之前要先写一个符合Linux驱动的框架。
同样的灯饰驱动,裸机驱动可能只需要十几行代码,但Linux下的驱动却要写几十行代码。

2、Linux驱动初学者大部分都是从STM32过来的,Linux驱动开发和STM32开发有很大区别,比如Linux没有MDK、IAR这样的集成开发环境,所以需要自己在Ubuntu下搭建交叉编译环境。

3、裸机开发是连接Cortex-M(如STM32)微控制器和Cortex-A(如i.MX6U)处理器的桥梁。

要进行裸机开发,首先要搭建开发环境,我们开始学习STM32的时候,要安装很多软件,比如MDK、IAR、串口调试助手等等,这就是STM32的开发环境。
同样的,如果要在Ubuntu下开发Cortex-A(I.MX6U),也需要安装一些软件来搭建开发环境。
环境搭建好之后,我们就可以进行开发了。
环境分为Ubuntu和Windows,因为我们最熟悉Windows,所以代码的编写、资料的查找都要在Windows下进行。
但是Linux的开发肯定要在Ubuntu下进行,所以也需要在Ubuntu下搭建开发环境,主要是交叉编译器的安装,所以下面分为:Ubuntu和Windows,分别介绍这两个系统下的环境搭建。

Ubuntu 和 Windows 文件传输

在开发过程中,会经常在Windows和Ubuntu之间传输文件,比如在Windwos下编写代码,然后在Ubuntu下编译编写的代码。
在Windows和Ubuntu之间传输文件,我们需要使用FTP服务,设置方法如下:

1.在Ubuntu中启用FTP服务

在Ubuntu中打开终端窗口,执行以下命令安装FTP服务:

sudo apt-get install vsftpd

等待软件自动安装,安装完成后使用vi命令打开/etc/vsftpd.conf,命令如下:

sudo vi/etc/vsftpd.conf

打开vsftpd.conf文件,找到以下两行:

local_enable=YESwrite_enable=YES

确保上面两行前面没有“#”,如果有,取消掉,完成后如下图:

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

sudo /etc/init.d/vsftpd restart

2.Windows下FTP客户端安装

我们使用 FileZilla 作为 Windows 的 FTP 客户端。
这是一款免费的 FTP 客户端软件。

从官网下载,下载地址如下:,下载界面如下图:

打开FileZilla软件,界面如下图:

3.FileZilla软件设置

Ubuntu作为FTP服务器,FileZilla作为FTP客户端,客户端必须连接服务器,打开站点管理器,点击:File->Site Manager,打开后如下图所示:

点击图中的“新建站点(N)”按钮,创建站点,新建站点创建完成后会出现在“我的站点”下,站点名称可以自行修改,比如我给新建站点命名为“Ubuntu”,如下图所示:

选择刚刚创建的“Ubuntu”站点,然后按照下图设置该站点的“常规”:

如上图设置好后,点击“连接”按钮,第一次连接可能会弹出对话框询问是否保存密码,点击确定即可,连接成功后如下图:

连接成功后,如上图所示,左侧为Windows文件目录,右侧为Ubuntu文件目录,默认进入用户根目录(如我电脑上是“/home/zhangyu”)。
但请注意,图中Ubuntu文件目录下的中文目录全部乱码,这是因为编码方式选择不正确。
先断开连接,点击:服务器(S)->断开连接,然后打开站点管理器,选择要设置的站点“Ubuntu”,选择“字符集”,如下图所示:

按上图设置完字符集之后,重新连接FTP服务器,重新连接FTP服务器之后,Ubuntu下的文件目录就可以正常显示中文了,如下图所示:

如果要从 Windows 复制文件或文件夹到 Ubuntu,只需要在上图左侧的 Windows 区域选中需要复制的文件或文件夹,然后直接拖拽到右侧的 Ubuntu 指定目录即可。
也可以通过直接拖拽的方式将文件或文件夹从 Ubuntu 复制到 Windows。

Ubuntu 中启用了 NFS 和 SSH 服务

1. NFS 服务已启用

后面的Linux驱动开发需要用到NFS启动功能,所以首先要在Ubuntu中安装并启用NFS服务,使用以下命令安装NFS服务:

sudo apt-get install nfs-kernel-server rpcbind

等待安装完成,安装完成后在用户的根目录下建立一个名为“linux”的文件夹,以后所有的东西都放在这个“linux”文件夹中。
在“linux”文件夹下新建一个名为“nfs”的文件夹,如下图:

上图中创建的nfs文件夹是给nfs服务器使用的,后面我们可以通过开发板上的网络文件系统来访问nfs文件夹,先配置nfs,使用以下命令打开nfs配置文件/etc/exports:

sudo vi/etc/exports

使用以下命令重新启动 NFS 服务:

sudo /etc/init.d/nfs-kernel-server restart

SSH 服务已启用

开启Ubuntu的SSH服务之后,我们就可以在Windwos下使用终端软件来登录Ubuntu了,比如使用SecureCRT。
在Ubuntu下开启SSH服务使用以下命令:

sudo apt-get install openssh-server

以上命令安装ssh服务,ssh的配置文件是/etc/ssh/sshd_config,使用默认配置即可。

Ubuntu交叉编译工具链安装

1.交叉编译器安装

ARM裸机、Uboot移植、Linux移植,这些都需要在Ubuntu下进行编译,而编译又需要编译器。
在之前的文章Ubuntu下Linux C编程中,我们介绍了如何在Liux中进行C语言开发,其中使用的是GCC编译器来编译代码,但是Ubuntu自带的gcc编译器是针对X86架构的!
我们现在要编译的是ARM架构的代码,所以我们需要一个可以在X86架构的PC上运行,并且能够编译ARM架构代码的GCC编译器。
这个编译器就叫做交叉编译器。
总结一下,交叉编译器就是:

肯定是GCC编译器,这个GCC编译器运行在X86架构的PC上,这个GCC编译器编译的是ARM架构的代码,也就是说编译出来的可执行文件是在ARM芯片上运行的。

交叉编译器中的“交叉”是指将一种架构的代码在另一个架构上进行编译,相当于“跨越”了两种架构。

交叉编译器有很多种,我们使用的是Linaro公司出品的交叉编译器。
Linaro是一家非盈利的开源软件工程公司,开发了很多软件,其中最有名的就是Linaro GCC编译工具链(编译器)。
关于Linaro的详细介绍请访问Linaro官网。
Linaro GCC编译器的下载地址如下:

打开后的界面如下图:

上图中有很多交叉编译器,我们只需要关注这两个:gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf.tar.tar.xz 和 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz,第一个是针对32位系统的,第二个是针对64位系统的。
根据你使用的Ubuntu系统类型选择合适的版本。
例如,我安装的Ubuntu 16.04是64位系统,所以我要使用gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz。

我们首先需要将交叉编译工具复制到Ubuntu中。
上面我们在当前用户的根目录下建立一个名为“linux”的文件夹,然后在这个linux文件夹下建立一个名为“tool”的文件夹,用于存放一些开发工具。
使用之前安装好的FileZilla将交叉编译器复制到Ubuntu中新建的“tool”文件夹中。
操作如下图所示,操作成功完成后FileZilla会有提示。

在Ubuntu中创建目录:/usr/local/arm,并运行以下命令:

sudo mkdir /usr/local/arm

创建完成后,将刚刚复制的交叉编译器复制到目录/usr/local/arm下。
在终端中使用命令“cd”进入交叉编译器存放的目录。
例如我之前将交叉编译器复制到了目录“/home/zuozhongkai/linux/tool”,然后使用以下命令将交叉编译器复制到/usr/local/arm下:

sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f

操作如下图所示:

复制完成后,解压/usr/local/arm目录下的交叉编译工具,解压命令如下:

sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

等待解压完成,解压完成后会生成一个名为“gcc-linaro-4.9.4-2017.01-x86_64_arm-linuxgnueabihf”的文件夹,这个文件夹中就包含了我们的交叉编译工具链。

修改环境变量,使用vi打开/etc/profile文件,命令如下:

sudo vi /etc/profile

打开/etc/profile后,在最后输入以下内容:

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

添加后/etc/profile如下所示:

修改完之后保存退出,重启Ubuntu系统,交叉编译工具链(编译器)就安装成功了。

2.安装相关库

在使用交叉编译器之前需要安装其他库,命令如下:

sudo apt-get install lsb-core lib32stdc++6

等待这些库安装完成

3. 交叉编译器验证

首先查看交叉编译工具的版本号,输入以下命令:

arm-linux-gnueabihf-gcc -v

如果交叉编译器安装正确的话,会显示版本号,如下图:

从上图我们可以看到当前的交叉编译器版本号为4.9.4,说明交叉编译工具链已经安装成功。
在前面的介绍中,我们使用了Ubuntu自带的GCC编译器,使用的命令是“gcc”。
要使用刚刚安装好的交叉编译器,使用的命令是“arm-linux-gnueabihf-gcc”。
“arm-linux-gnueabihfgcc”的含义如下:

arm 表示这是一个用于编译 arm 架构代码的编译器。
linux 表示运行在 linux 环境中。
gnueabihf 表示嵌入式二进制接口。
gcc 表示是 gcc 工具。

最好的验证方式就是直接编译一个例程,我们先编译第一个裸机例程“1_leds”,并在之前创建的linux文件夹下建立一个driver/board_driver文件夹专门用来存放裸机例程,如下图所示:

将第一个裸机示例“1_leds”复制到board_driver中,然后执行make命令进行编译,如下图所示:

从上图我们可以看到例程“1_leds”编译成功,生成了led.o、led.bin两个文件。
使用以下命令查看led.o文件信息:

file led.o

结果如下图所示:

从上图中我们可以看出led.o是32位LSB ELF格式文件,并且目标机器架构是ARM,说明我们的交叉编译器可以正常工作。

Source Insight软件安装与使用

由于这个软件是收费的,所以我不太喜欢用它进行开发,先介绍一下,在开发过程中我还是喜欢用Visual Studio Code。

1.Source Insight安装

Source Inisght 是一款功能强大的代码编辑和阅读工具,工作在 Windows 下。
我们可以使用 Source Insight 来编写和阅读代码。
编写完成后,将代码复制到 Ubuntu 上进行编译即可。
SourceInsight 下载地址为:,如下图:

双击“sourceinsight4086-setup.exe”开始安装。
首先是欢迎界面如下图:

点击上图所示的“Next”按钮,进行下一步,如下图所示:

在上图中选择“我接受许可协议中的条款”,然后点击“下一步”按钮,进入安装目录选择界面,根据自己的实际情况选择合适的安装目录,如下图所示:

选择安装目录后,点击“下一步”按钮,进入安装准备界面如图4.4.1.5所示:

点击上图中的“安装”按钮,开始安装,等待安装完成,安装完成后如下图所示:

点击上图中的“完成”按钮,退出安装,安装成功后桌面上会出现Source Insight4.0的图标,如下图:

双击图标打开Source Inisght 4.0,首次打开会有License提示,因为Source Insight 4.0是付费软件,所以需要购买License,如果不购买可以免费试用30天,如下图:

上图中,如果你已经购买了许可证,那么就选择第一个。
如果你还没有购买许可证,那么就选择第二个,可以免费试用30天。
选择好之后,点击“下一步”按钮,进入下图所示界面。

填写上图的信息,然后点击“下一步”,填写完之后一路点击“下一步”就行了,打开之后默认界面如下图

现在Source Insight安装已完成。

2.在Source Insight中创建一个新项目

Source Insight 和 MDK、IAR 一样,需要创建工程,但是远没有 MDK、IAR 那么复杂。
首先新建一个工程文件夹,比如 test。
test 用于存放所有工程文件,包括 Source Insight 工程文件和 C 语言源代码文件。

注意!
Source Insight项目不能有中文路径!





Visual Studio Code软件的安装和使用

1.Visual Studio Code 的安装

Visual Studio Code 是一款类似 Source Insight 的编辑器,本教程中将 Visual Studio Code 简称为 VSCode。
VSCode 是微软发布的一款编辑器,不过是免费的,有 Windows、Linux、macOS 三个版本,是一款跨平台的编辑器。
VSCode 可以从以下网址下载:,下载界面如下图所示:

在上图中下载你想要的版本。
本教程需要 Windows 和 Linux 版本,因此只需下载这两个版本即可。

Windows版本安装(傻瓜式安装)

Windows 版本的安装非常简单,就像任何其他 Windows 版本一样,双击.exe 安装包,然后单击“下一步”。

是的,安装完成后桌面上会有一个VSCode的图标,如下图:

双击上图打开VSCode,默认界面如下:

Linux版本安装

有时候我们也需要在 Ubuntu 中读取代码,所以我们还需要在 Ubuntu 中安装 VSCode。
那么我们使用以下命令进行安装:

sudo dpkg -i code_1.32.3-1552606978_amd64.deb

等待安装完成,如下图:

2.Visual Studio Code插件的安装

VSCode 支持多种语言,例如 C/C++、Python、C# 等。
本教程中我们主要使用它来编写 C/C++ 程序,所以需要安装 C/C++ 扩展包。
扩展包的安装非常简单,如下图所示:

我们需要关注的插件如下:

1)C/C++,这个肯定是必须的。
2)C/C++ Snippets,即C/C++复用代码块。
3)C/C++ Advanced Lint,即C/C++静态检测。
4)Code Runner,即代码运行。
5)Include AutoComplete,即自动头文件包含。
6)Rainbow Brackets,彩虹花括号,有助于阅读代码。
7)One Dark Pro,VSCode的主题。
8)GBKtoUTF8,将GBK转换为UTF8。
9)ARM,即支持ARM汇编语法高亮。
10)Chinese (Simplified),即中文环境。
11)vscode-icons,VSCode的图标插件,主要是资源管理器下各个文件夹的图标。
12)compareit,比对插件,可以用来对比两个文件的区别。
13)DeviceTree,设备树语法插件。
14)TabNine,一款AI自动完成插件,强烈推荐,谁用过谁就知道!

如果想要查看已经安装的插件可以如下图查看:

安装插件之后就可以编辑代码了,到目前为止VSCode界面都是英文的,我们安装好中文插件了。
最后把VSCode换成中文环境,按“Ctrl+Shift+P”打开搜索框,在搜索框中输入“config”,然后选择“配置显示语言”。
如下图:

在打开的local.json文件中,将locale改为zh-cn,如下图:

修改完成后,保存local.json,然后重新打开VSCode,测试VSCode已经变成中文了,如下图所示:

3.在 Visual Studio Code 中创建新项目

新建一个文件夹存放项目,比如我新建的文件夹名为E:\VScode_Program\1_test,路径尽量不要有中文或者空格,打开VSCode,在VSCode上点击File->Open Folder...,选择

创建的“test”文件夹将打开,如下所示:

从上图中我们可以看到此时文件夹“TEST”是空的,点击File->Save Workspace As…打开Workspace Naming对话框,输入需要保存的工作区路径和工作区名称,如下图所示:

工作区保存成功后,点击上图中的“New File”按钮,创建main.c、main.h两个文件,创建成功后VSCode如下图所示:

从下图可以看出,此时在“实验TEST”里面有main.c和main.h,这三个文件和文件夹也会出现在“实验TEST文件夹”里面,如下图所示:

在main.h中输入以下内容:

# includeint add(int a, int b)

在main.c中输入以下内容:

# include int add(int a, int b){ return (a+b);}int main(void){ int value = 0; value = add(5,6); printf("5 + 6 = %d", value); return 0;}

代码编辑完成后VSCode界面如下图所示:

从上图可以看出,VSCode 的代码高亮非常美观,阅读起来很舒服。
但是提示找不到头文件“stdio.h”,如下图所示:

上图提示找不到“main.h”,同样在main.h文件中,提示找不到“stdio.h”,这是因为我们没有添加头文件路径。
按“Ctrl+Shift+P”打开搜索框,然后输入“Edit configuration”,选择“C/C++:Edit configuration...”,

C/C++配置文件是一个json文件,文件名为:c_cpp_properties.json,该文件默认内容如下图所示:

c_cpp_properties.json 中的变量“includePath”用于指定项目中的头文件路径,但是“stdio.h”是 C 语言库文件,而 VSCode 只是一个没有编译器的编辑器,所以肯定没有 stdio.h,除非我们自己安装一个编译器,比如 CygWin,然后在 includePath 中添加编译器的头文件。
这里就不添加了,因为我们不会用 VSCode 来编译程序,这里主要了解如何指定头文件路径。

当我们在 VScode 上打开新文件时,之前的文件会被覆盖。
这是因为 VSCode 默认开启了预览模式,在预览模式下,点击左侧的文件会覆盖当前打开的文件。
如果不想覆盖,直接双击打开即可,或者设置 VSCode 关闭预览模式,如下图所示:

我们在编写代码的时候,有时候会出现右下角如下图所示的警告提示:

这是因为 C/C++ Lint 插件开启了几个功能,我们直接关闭就可以了。
顺便也可以学习一下如何配置 VSCode 插件,如下图所示:

在C/C++ Lint配置界面,找到CLang:Enable、Cppcheck:Enable、Flexlint:Enable,并将其取消勾选,如下图所示:

如上图所示,取消掉C/C++ Lint相关的三个配置之后,就不会出现如图所示的错误提示了。
不过关闭Cppcheck:Enable之后,VSCode就无法实时检查错误了,大家根据实际情况选择即可。

标签:

相关文章

无愧优质偶像(驰援偶像多个集结无愧)

据悉,青年演员肖战携手吴磊、黄渤、佟丽娅等多位艺人联合集结救援队驰援河北涿州,不仅如此,大家还捐赠了非常多专业设备和生活物资,帮助...

软件优化 2024-12-24 阅读441 评论0

开始免费报名!(时代基地分赛区人说创新)

时代是创造出来的清控创新基地邀请每一位敢想敢拼的创造者参加第二季时代新人说大型讲述活动○○实现你的讲述梦想主办单位中共太原市委宣传...

软件优化 2024-12-24 阅读756 评论0

一起来学习(机井灌溉控制系统查询农田)

历史数据查询: 报警查询:设备异常、余额 不足等。 事件查询:机井开泵、关泵相关记录等。 操作查询:开 卡、充值、补卡等信息。 用...

软件优化 2024-12-24 阅读334 评论0

一共6步搞定!(地图数据最简单制作搞定)

之前曾给大家介绍过几种制作数据地图的方法。不过这次,我要分享一个更为直接简单的方法!从导入数据到出图,一共6步搞定!关于数据地图的...

软件优化 2024-12-24 阅读686 评论0

到底咋回事?(租房柔性房管所儿子申请)

杨先生:说给我改成两套公租房,但不愿返还我多交的房租9月2日,家在礼泉的杨先生向华商-二三里资讯反映称,他家共5口人,于2014年...

软件优化 2024-12-24 阅读614 评论0

落户这里(项目选址青龙公示投资)

武汉海康威视科技有限公司海康威视武汉智慧产业园(一期) (平面方案)批前公示公布,这意味着传说中的海康威视产业基地将正式在江夏动工...

软件优化 2024-12-24 阅读667 评论0