嵌入式Linux开发环境搭建
工欲善其事,必先利其器。嵌入式Linux开发之路的开端,就是搭建开发环境。有了完善的开发环境,后面的学习之路就会方便很多。
开发环境也是一个很浪费时间的过程,环境的搭建也非常多坑,希望大家能够快速搭建好环境,能够专心进入学习状态,不要把精力浪费在开发环境的折腾上面。
环境工具的深入学习,在大家正式走上自主开发之路后,会慢慢接触到。至于现在,最正确的就是对着网上的教程,按部就班,快速搭建好环境。下面正式进入:
1、windows下VMware安装
此为Windows下的虚拟机软件,我们可以将Linux操作系统安装在VMware里,这样我们就可以在一台电脑上同时使用Windows和Linux了。
嵌入式Linux开发的过程需要我们在Windows,Linux,开发板直接来回切换。所有VMware给我们提供了非常方便的工具。
因为是Windows下的工具安装,不会有什么坑,这里就不详述。
2、Linux操作性同安装
转换VMware后,就该安装Linux操作系统了,我选择的是ubuntu系统,去官网下载一个iso映像文件,参照网上的教程安装就好,这里不会有什么错误和坑,这里不详述。
3、VIM安装
安装好Linux后,这里就正式进入开发环境搭建了。
VIM是Linux环境下一个非常重要的文本编辑工具,刚开始使用肯定不习惯。用熟了会觉得非常好用。
后面的安装均在使用Terminal命令行的情况下安装。
安装命令如下
sudo apt install vim
4、安装SSH服务
SSH是 Secure Shell 的意思。是我们在远程操作Linux系统的重要通道工具。
安装命令如下
sudo apt install openssh-server
查看SSH服务器是否启动
ps -ef | grep ssh
安装好后,我们就可以不再切换回WMware的操作界面来操作Linux,而是使用SSH客户端使用命令行在任何地方远程操作Linux了,只需要将WMware中的Linux系统保持运行状态就可以了。
我在Windows下使用SecureRT软件,此软件可以同时链接开发板的串口打印,链接Linux的SSH服务器等,是软件开发人员的重要工具。
5、搭建TFTP服务器
FTP是用来下载远程文件的最简单网络协议,在嵌入式开发中,由于嵌入式开发板资源有限,不能进行文件编译,因此我们都是将写好都代码在宿主机(Linux虚拟机)上进行调试编译好后生成二进制文件,然后通过ftp或NFS来进行传输到开发板上运行。也就是, 使用虚拟机 Ubuntu来当做服务器,ARM开发板当做客户端,通过get,put等命令操作文件传输。
同时,u-boot支持通过TFTP的方式加载内核,ubuntu上运行TFTP服务器,u-boot向服务器请求其参数指定的文件,主机收到请求后将TFTP传输目录下的相应文件通过网络传输给u-boot。这需要主机具有TFTP环境。
安装命令如下:
sudo apt install tftp-hpa tftpd-hpa
安装好后,我们可以在服务器上专门建立一个名为tftpboot文件夹来给uboot请求内核,以及传输文件。
首先,我们在/home/user/下建立一个名为work的文件夹,作为今后开发工作专用的文件夹。
注意,这里的user是你自己在ubuntu系统下的用户名,也就是登录用的用户名。后面都这样替代。
cd /home/user #进入自己的用户目录
mkdir work #创建名为work的文件夹
cd work #进入work文件夹
mkdir tftpboot #创建名为tftpboot的文件夹
文件夹准备好后,就可以对tftp服务器做配置,将服务器的默认传输目录指向tftpboot文件夹。
chmod a=rwx tftpboot #因为该文件夹需要被开发板操作,因此需要将其授权给所有用户对其操作
sudo vim /etc/default/tftpd-hpa #通过VIM工具修改tftp服务器的配置文件,需要使用root权限,所以用sudo
文件内容改成如下:
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="home/user/work/tftpboot" #注意,这里一定指向正确的完全路径,否则后面启动服务会出错
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s --secure"
其中TFTP_DIRECTORY=“home/user/work/tftpboot”,一定要指向正确的完全路径,否则后面启动服务会出错
编辑好后,使用wq保存退出,然后使用下面命令重启服务器:
service tftpd-hpa restart
如果重启失败,会报错,可根据提示命令查看具体错误原因。
重启后,测试服务
cd /work/tftpboot #进入到/work/tftpboot文件夹
vim b.txt #在/work/tftpboot文件夹中创建一个名为b.txt的文件,内容随便填,然后退出
cd ../ #退回到/work文件夹下
vim a.txt #在/work文件夹中创建一个名为a.txt的文件,内容随便填,然后退出
tftp localhost #使用tftp服务,因为是本地服务,所以服务名为localhost
进入tftp服务后,命令行会变成如下形式,输入操作:
tftp> get b.txt #此时在/work目录下,获取tftpboot下的b.txt文件
tftp> put a.txt #此时在/work目录下,将a.txt推送到tftpboot下
tftp> q #退出tftp服务
完成操作后,我们分别在/work文件夹和/work/tftpboot文件夹下使用ls命令,查看,是否都有a.txt文件和b.txt文件,如果有,说明tftp服务器正常工作。
6、搭建NFS服务器
NFS 就是 Network FileSystem 的缩写。NFS可以让你的开发板将NFS 服务器共享出来的文件mount到自己的系统中,使用NFS的远端文件就象是在使用本地文件一样。
使用NFS可以使应用程序的开发变得十分方便, 客户端不需要大容量的存储器,更不需要进行映像文件的烧录和下载,只要mount到服务器端的特定目录下,然后运行该目录下的程序即可观察到结果。
嵌入式项目中常用nfs来挂载文件系统。
sudo apt install nfs-kernel-server rpcbind
安装好后,配置NFS服务器
sudo vim /etc/exports
打开后文件中只有注释,没有任何实际内容,添加内容如下:
/home/user/work/nfs_root *(rw,sync,no_root_squash)
意思是NFS的共享文件夹为==/home/user/work/nfs_root,注意,请填写完整路径==访问者将获得的权限如下
配置好后退出,重启服务:
sudo /etc/init.d/nfs-kernel-server restart
对搭建好的NFS进行测试:
cd /home/user/work/nfs_root #进入前面建好的共享文件夹
vim test.txt #创建一个文件
cd /mnt #进入根文件目录下的mnt文件夹
sudo mkdir rootfs #创建一个文件夹,作为挂载点
sudo mount -t nfs localhost:/home/user/work/nfs_root /mnt/rootfs #把nfs_root挂在到rootfs上
cd /mnt/rootfs #进入/mnt/rootfs文件夹
ls #查看/mnt/rootfs文件夹下的内容,会发现刚才创建的test.txt出现在该文件夹下,说明挂载成功
测试如果成功,可以取消挂载:
cd ../ #退出/mnt/rootfs文件夹,回到/mnt文件夹
sudo umount /mnt/rootfs #取消挂载
sudo rm -r rootfs #删除刚才创建的rootfs文件夹
7、搭载samba服务器
因为我们是在windows上开发,然后用Ubuntu编译。因此windwows之间的文件共享是非常重要的。通常有两种方式:samba服务器或者共享文件夹。
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。它可以实现windows和Unix-Like两个平台之间互相分享文档和数据。 Samba服务器的工作原理是:客户端向Samba服务器发起请求,请求访问共享目录,Samba服务器接收请求,查询smb.conf文件,查看共享目录是否存在,以及来访者的访问权限,如果来访者具有相应的权限,则允许客户端访问,最后将访问过程中系统的信息以及采集的用户访问行为信息存放在日志文件中。
安装samba服务器命令:
sudo apt install samba
安装完成后,配置samba服务器:
cd /work #进入/home/user/work文件夹
mkdir sambashare #创建一个sambashare文件夹,作为我们以后共享的文件夹
cd /etc/samba/ #进入/etc/samba文件夹
sudo cp smb.conf smb.cong.bkp #备份samba配置文件
sudo vim smb.conf #编辑samba配置文件
在smb.conf文件的最后添加如下内容:
[share]
comment=samba
path=home/user/work/sambashare #注意这里填写完整路径
public=yes
create mask=0777
directory mask=0777
writable=yes
available=yes
forceuser=root
forcegroup=root
== path=home/user/work/sambashare #注意这里填写完整路径==
配置好后,重启samba服务器
sudo /etc/init.d/smbd restart
如果成功,你在Windows的资源管理器中输入你的Linux系统的IP\:xx.xx.xx.xx,就会看到里面有个share文件夹,点进去,就能看到/home/user/work/sambashare里面的内容。
从windows往里面放文件,在/home/user/work/sambashare中也能看到。
8、交叉编译工具链
因为我们在X86的Windows平台上开发,然后在X86的Linux内编译,最后在ARM的芯片上运行。编译平台和运行平台不同,所以叫交叉编译。
安装build-essential软件包,build-essential作用是提供编译程序必须软件包的列表信息:
sudo apt install build-essential
安装bison、flex,它们分别是语法、词法分析器:
sudo apt install bison flex
安装C函数库的man手册,这样就可以通过类似"man read"命令查看函数的作用:
sudo apt install manpages-dev
安装交叉编译环境arm-linux-gcc
sudo apt install gcc-arm-linux-gnueabihf #安装ARM GCC,针对嵌入式LINUX的版本,gnueabihf中hf表示支持硬浮点运算的平台使用
sudo apt install g++-arm-linux-gnueabihf #安装ARM G++,针对嵌入式LINUX的版本,gnueabihf中hf表示支持硬浮点运算的平台使用
9、安装调试工具gdb
sudo apt install gdb