百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

「正点原子Linux连载」第四章开发环境搭建(1)

sinye56 2024-11-14 17:40 1 浏览 0 评论

1)实验平台:正点原子Linux开发板

2)摘自《正点原子I.MX6U嵌入式Linux驱动开发指南

关注官方微信号公众号,获取更多资料:正点原子


第四章开发环境搭建


要进行裸机开发肯定要先搭建好开发环境,我们在开始学习STM32的时候肯定需要安装一堆的软件,比如MDK、IAR、串口调试助手等等,这个就是STM32的开发环境搭建。同样的,要想在Ubuntu下进行Cortex-A(I.MX6U)开发也需要安装一些软件,也就是网上说的开发环境搭建,环境搭建好以后我们就可以进行开发了。环境搭建分为Ubuntu和Windows,因为我们最熟悉Windows,所以代码编写、查找资料啥的肯定是在Windows下进行的。但是Linux开发又必须在Ubuntu下进行,所以还需要搭建Ubuntu下的开发环境,主要是交叉编译器的安装,本章我们就分为Ubuntu和Windows,讲解这两种操作系统下的环境搭建。

4.1Ubuntu和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=YES

write_enable=YES

确保上面两行前面没有“#”,有的话就取消掉,完成以后如图4.1.1所示:


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

sudo /etc/init.d/vsftpd restart

2、Windows下FTP客户端安装

Windows下FTP客户端我们使用FileZilla,这是个免费的FTP客户端软件,可以在FileZilla官网下载,下载地址如下:https://www.filezilla.cn/download,下载界面如图4.1.2所示:


我们已经下载好FileZilla并放到开发板光盘中了,路径为:3、软件->FileZilla_3.39.0_win64-setup_bundled.exe,双击安装即可。安装完成以后找到安装目录,找到图标,然后发送图标快捷方式到桌面,完成以后如图4.1.3所示:

打开FileZilla软件,界面如图4.1.4所示:

3、FileZilla软件设置

Ubuntu作为FTP服务器,FileZilla作为FTP客户端,客户端肯定要连接到服务器上,打开站点管理器,点击:文件->站点管理器,打开以后如图4.1.5所示:

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

选中新创建的“Ubuntu”站点,然后对站点的“常规”进行设置,设置如图4.1.7所示:

按照图4.1.7中设置好以后,点击“连接”按钮,第一次连接可能会弹出提示是否保存密码的对话框,点击确定即可。连接成功以后如图4.1.8所示:

连接成功以后如图4.1.8所示,其中左边就是Windows文件目录,右边是Ubuntu文件目录,默认进入用户根目录下(比如我电脑的“/home/zuozhongkai”)。但是注意观察在图4.1.8中Ubuntu文件目录下的中文目录都是乱码的,这是因为编码方式没有选对,先断开连接,点击:服务器(S)->断开连接,然后打开站点管理器,选中要设置的站点“Ubuntu”,选择“字符集”,设置如图4.1.9所示:

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

如果要将Windows下的文件或文件夹拷贝到Ubuntu中,只需要在图4.1.10中左侧的Windows区域选中要拷贝的文件或者文件夹,然后直接拖到右侧的Ubuntu中指定的目录即可。将Ubuntu中的文件或者文件夹拷贝到Windows中也是直接拖放。

4.2 Ubuntu下NFS和SSH服务开启

4.2.1 NFS服务开启

后面进行Linux驱动开发的时候需要NFS启动,因此要先安装并开启Ubuntu中的NFS服务,使用如下命令安装NFS服务:

sudo apt-get install nfs-kernel-server rpcbind

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

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

sudo vi /etc/exports

打开/etc/exports以后在后面添加如下所示内容:

/home/zuozhongkai/linux/nfs *(rw,sync,no_root_squash)

添加完成以后的/etc/exports如图4.2.2所示:

重启NFS服务,使用命令如下:

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

4.2.2 SSH服务开启

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

sudo apt-get install openssh-server

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

4.3Ubuntu交叉编译工具链安装

4.3.1交叉编译器安装

ARM裸机、Uboot移植、Linux移植这些都需要在Ubuntu下进行编译,编译就需要编译器,我们在第三章“Linux C编程入门”里面已经讲解了如何在Liux进行C语言开发,里面使用GCC编译器进行代码编译,但是Ubuntu自带的gcc编译器是针对X86架构的!而我们现在要编译的是ARM架构的代码,所以我们需要一个在X86架构的PC上运行,可以编译ARM架构代码的GCC编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:

1、它肯定是一个GCC编译器。

2、这个GCC编译器是运行在X86架构的PC上的。

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

交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。

交叉编译器有很多种,我们使用Linaro出品的交叉编译器,Linaro一间非营利性质的开放源代码软件工程公司,Linaro开发了很多软件,最著名的就是Linaro GCC编译工具链(编译器),关于Linaro详细的介绍可以到Linaro官网查阅。Linaro GCC编译器下载地址如下:

https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/,打开以后下载界面如图4.3.1.1所示:

在图4.3.1.1中有很多种GCC交叉编译工具链,因为我们所使用的I.MX6U-ALPHA开发板是一个Cortex-A7内核的开发板,因此选择arm-linux-gnueabihf,点击后面的“Binaries”进入可执行文件下载界面,如图4.3.1.2所示:

在写本教程的时候最新的编译器版本是7.3.1,但是笔者在测试7.3.1版本编译器的时候发现编译完成后的uboot无法运行。所以这里不推荐使用最新版的编译器。笔者测试过4.9版本的编译器可以正常工作,所以我们需要下载4.9版本的编译器,下载地址为:https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/,如图4.3.1.3所示:

图4.3.1.3中有很多种交叉编译器,我们只需要关注这两种: 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系统类型选择合适的版本,比如我安装的Ubuntu16.04是64位系统,因此我要使用gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz。

这两种交叉编译器我们已经下载好放到了开发板光盘中,路径:5、开发工具->1、交叉编译器。我们要先将交叉编译工具拷贝到Ubuntu中,在4.2.1小节中我们在当前用户根目录下创建了一个名为“linux”的文件夹,在这个linux文件夹里面再创建一个名为“tool”的文件夹,用来存放一些开发工具。使用前面已经安装好的FileZilla将交叉编译器拷贝到Ubuntu中刚刚新建的“tool”文件夹中,操作如图4.3.1.4所示:

拷贝完成的话FileZilla会有提示,如图4.3.1.5:

在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

操作步骤如图4.3.1.6所示:

拷贝完成以后在/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-linux-gnueabihf”的文件夹,这个文件夹里面就是我们的交叉编译工具链。

修改环境变量,使用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如图4.3.1.7所示:

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

4.3.2 安装相关库

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

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

等待这些库安装完成。

4.3.3交叉编译器验证

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

arm-linux-gnueabihf-gcc -v

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

从图4.3.3.1中可以看出当前交叉编译器的版本号为4.9.4,说明交叉编译工具链安装成功。第三章“Linux C编程入门”中使用Ubuntu自带的GCC编译器,我们用的是命令“gcc”。要使用刚刚安装的交叉编译器的时候使用的命令是“arm-linux-gnueabihf-gcc”,“arm-linux-gnueabihf-gcc”的含义如下:

1、arm表示这是编译arm架构代码的编译器。

2、linux表示运行在linux环境下。

3、gnueabihf表示嵌入式二进制接口。

4、gcc表示是gcc工具。

最好的验证验证方法就是直接编译一个例程,我们就编译第一个裸机例程“1_leds”试试,裸机例程在开发板光盘中的路径为:1、程序源码->1、裸机例程-> 1_leds。在前面创建的linux文件夹下创建driver/board_driver文件夹,用来存放裸机例程,如图4.3.3.2所示:

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


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

file led.o

结果如图4.3.3.4所示:

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

4.4 Source Insight软件安装和使用

4.4.1 Source Insight安装

Source Inisght是一款功能强大的代码编辑、阅读工具,工作在Windows下,我们可以用Source Insight来进行代码编写和阅读,编写完成以后将代码拷贝到Ubuntu中去编译即可。Source Insight下载地址为:https://www.sourceinsight.com/download/,如图4.4.1.1所示:

我们已经下载好并放到了开发板光盘中,路径为:3、软件->Source Insight 4.0->sourceinsight4096-setup.exe,双击“sourceinsight4096-setup.exe”即可开始安装,首先是图4.4.1.2所示欢迎界面:

点击图4.4.1.2中的“Next”按钮进入下一步,如图4.4.1.3所示:

选择图4.4.1.3中的“I accept the terms in the license adreement”,然后点击“Next”按钮,进入安装目录选择界面,根据自己的实际情况选择合适的安装目录,如图4.4.1.4所示:

选择好安装目录以后点击“Next”按钮,进入图4.4.1.5所示的准备安装界面:

点击图4.4.1.5中的“Install”按钮开始安装,等待安装完成,安装完成以后如图4.4.1.6所示:

点击图4.4.1.6中的“Finish”按钮退出安装,安装成功以后会在桌面上出现Source Insight 4.0的图标,如图4.4.1.7所示:

双击图标打开Source Inisght4.0,第一次打开的话会有Licese提示,如图4.4.1.8所示:

因为Source Insight4.0是个收费软件,所以是需要购买License的,如果没有购买的话可以免费体验30天,点击图4.4.1.9中的“确定”按钮,进入图4.4.1.10所示界面:

在图4.4.1.10中,如果你已经购买了licese那么就选择第一个,如果没有购买licese的话就选择第二个免费体验30天,选择好以后点击“Next”按钮,进入图4.4.1.11所示界面:

填写图4.4.1.11中的信息,然后点击“Next”,填写好以后一路“Next”下去就可以了,打开以后的默认界面如图4.4.1.12所示:

至此Source Insight安装完成。

4.4.2 Source Insight新建工程

1、新建工程

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

注意!Source Insight的工程不能有中文路径!!!!!!

注意!Source Insight的工程不能有中文路径!!!!!!

注意!Source Insight的工程不能有中文路径!!!!!!

在刚刚创建的test文件夹中新建一个SI文件夹,用来存放Source Insight的所有工程文件,完成以后如图4.4.2.1所示:

工程文件夹准备好以后就可以创建工程了,点击Source Insight的:Project->New Project,如图4.4.2.2所示:

点击“New Project”后进入图4.4.2.3所示界面:

在图4.4.2.3中设置好工程名字和路径以后点击“OK”按钮,会进入另外一个设置界面,如图4.4.2.4所示:

在图4.4.2.4中我们一般不需要做任何修改,主要是检查一下路径是否正确,如果没问题的话就点击“OK”按钮即可,进入向工程添加文件界面,如图4.4.2.5所示:

如果你的工程文件夹已经有源文件了,那么就可以按照图4.4.2.5所示方法将所有的源文件添加到工程中,添加完成以后点击“Close”按钮关闭即可。新建工程完成以后Source Insight如图4.4.2.6所示:

我们发现图4.4.2.6好像和没有新建工程的界面没有区别?那是因为我们新建的工程是个空的工程,没有任何的源文件,所以看起来没啥变化。

2、新建源文件

我们在刚刚新建的工程里面新建两个文件:main.c和main.h,先新建main.c文件,点击:File->new,如图4.4.2.7所示:

设置c文件的名字为main.c,如图4.4.2.8所示:

文件命名完成以后点击“OK”按钮,文件创建完成,main.c只是创建了但是还没有保存,更没有添加到我们的工程中,所以我们点击:File->Save,或者直接按下键盘上的“Ctrl+S”键来保存,保存界面如图4.4.2.9所示:

设置好图4.4.2.9中的保存路径以后点击“保存”按钮即可,保存以后会弹出一个对话框,询问你是否要将刚刚保存的C文件添加到工程中,如图4.4.2.10所示:

我们肯定要选择“是”了,要将main.c添加到工程中的,添加完成以后的Source Insight界面如图4.4.2.11所示:

在图4.4.2.11中可以看到我们正在操作main.c这个文件,当前工程只有main.c这一个文件,中间部分就是我们的代码编辑区,我们可以在里面写代码。同样的方法我们在新建一个main.h头文件,

3、编写代码

我们在工程中创建了main.c和main.h两个源文件,接下来在这两个文件中编写代码,在main.c和main.h中分别写入如下代码:

示例代码4.4.2.1 main.c文件代码

1 #include "main.h"

2 #include "stdio.h"

3

4void main(int argc,char*argv[])

5{

6 printf("this is a test file");

7}

8

示例代码4.4.2.2 main.h文件代码

9 #ifndef _MAIN_H

10 #define _MAIN_H

11

12

13 #endif

编写完成以后Source Insight界面如图4.4.2.12所示:

4、工程同步

代码编写完成以后需要对Source Insight做一次同步操作,同步的目的是为了可以进行函数跟踪,比如MDK中直接跳转到某个函数的定义处查看函数源码。同步的方法很简单,点击Project->Synchronize Files,如图4.4.2.13所示:

点击“Synchronize Files”以后打开同步对话框,如图4.4.2.14所示:

按照图4.4.2.14所示设置同步,设置好以后点击“Start”开始同步,等待同步完成,如果工程很小的话同步速度会很快!可能看不到同步的过程,如果工程比较大的话同步就会多花一点时间。

关于Source Insight的安装以及使用就讲解到这里,大家自行多练习几遍Source Insight创建工程和新建文件操作。

4.4.3 Source Insight解决中文乱码

第一次装好Source Insight,如果打开有中文的文件,可能中文显示会乱码,如图4.4.3.1所示:

这是因为编码方式没有选对,点击Options->Preferences…,如图4.4.3.2所示:

打开以后按照图4.4.3.3所示设置:

将文件编码改为GB2312以后中文显示就正常了,如果中文还是显示乱码的话那就试着将图4.4.3.3中的“Default line ending”改为“Unix(LF)”,将“Defaultencoding”改为“UTF8”,如图4.4.3.4所示:

这是因为Linux下是UTF-8编码的,如果你的工程是从Linux下拷贝出来的,那么肯定就要使用UTF8编码才能正常显示。中文正常显示如图4.4.3.5所示:


相关推荐

RHEL8和CentOS8怎么重启网络

本文主要讲解如何重启RHEL8或者CentOS8网络以及如何解决RHEL8和CentOS8系统的网络管理服务报错,当我们安装好RHEL8或者CentOS8,重启启动网络时,会出现以下报错:...

Linux 内、外网双网卡路由配置

1.路由信息的影响Linux系统中如果有多张网卡的情况下,如果路由信息配置不正确,...

Linux——centos7修改网卡名

修改网卡名这个操作可能平时用不太上,可作为了解。修改网卡默认名从ens33改成eth01.首先修改网卡配置文件名(建议将原配置文件进行备份)...

CentOS7下修改网卡名称为ethX的操作方法

?Linux操作系统的网卡设备的传统命名方式是eth0、eth1、eth2等,而CentOS7提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名全自动的、可预知的...

Linux 网卡名称enss33修改为eth0

一、CentOS修改/etc/sysconfig/grub文件(修改前先备份)为GRUB_CMDLINE_LINUX变量增加2个参数(net.ifnames=0biosdevname=0),修改完成...

CentOS下双网卡绑定,实现带宽飞速

方式一1.新建/etc/sysconfig/network-scripts/ifcfg-bond0文件DEVICE=bond0IPADDR=191.3.60.1NETMASK=255.255.2...

linux 双网卡双网段设置路由转发

背景网络情况linux双网卡:网卡A(ens3)和网卡B(...

Linux-VMware设置网卡保持激活

Linux系统只有在激活网卡的状态下才能去连接网络,进行网络通讯。修改配置文件(永久激活网卡)...

VMware虚拟机三种网络模式

01.VMware虚拟机三种网络模式由于linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有v...

Rocky Linux 9/CentOS Stream 9修改网卡配置/自动修改主机名(实操)

推荐...

2023年最新版 linux克隆虚拟机 解决网卡uuid重复问题

问题描述1、克隆了虚拟机,两台虚拟机里面的ip以及网卡的uuid都是一样的2、ip好改,但是uuid如何改呢?解决问题1、每台主机应该保证网卡的UUID是唯一的,避免后面网络通信有问题...

Linux网卡的Vlan配置,你可能不了解的玩法

如果服务器上连的交换机端口已经预先设置了TRUNK,并允许特定的VLAN可以通过,那么服务器的网卡在配置时就必须指定所属的VLAN,否则就不通了,这种情形在虚拟化部署时较常见。例如在一个办公环境中,办...

Centos7 网卡绑定

1、切换到指定目录#备份网卡数据cd/etc/sysconfig/network-scriptscpifcfg-enp5s0f0ifcfg-enp5s0f0.bak...

Linux搭建nginx+keepalived 高可用(主备+双主模式)

一:keepalived简介反向代理及负载均衡参考:...

Linux下Route 路由指令使用详解

linuxroute命令用于显示和操作IP路由表。要实现两个不同子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该...

取消回复欢迎 发表评论: