@[TOC嵌入式Linux
刚做完一个嵌入式LINUX软件,在搭建开发环境的过程中,折腾了好久,现总结一下,分享这些基础的知识给初学者。嵌入式LINUX的开发环境可以说五花八门,具有完全不同的风格,主要就是三部分:1)代码编辑。2)代码编译。3)代码调试。
最理想的开发环境-Visual Studio 2017
之前在.NET平台开发C#软件,一直在用免费的VS2017社区版,用微软VS2017/VS2019来写代码是最好的选择。采用VS2017/VS2019作为嵌入式LINUX开发环境,意味着:
1)在WINDOWS操作系统上编写代码。
2)在目标机器上编译代码。
现在的处理器性能都非常强了,直接在目标机器上编译代码完全是可行的。搭建VS2017/VS2019嵌入式LINUX开发环境,步骤如下:
1)评估目标机器硬件是否合适,如果不合适则搭建结束,异常退出。
首先是目标机器要有网络功能(有网口或WIFI)。(闲扯一下:BeagleBone Black开发板通过USB连接可以虚拟出网络,这个目前还没有搞明白,以后再折腾)。
最好目标机器的LINUX系统有包管理,如dpkg或apt包管理,因为VS2017是通过将源代码全部上传到目标机器上,然后执行远程编译和调试。目标机器要有SSH,GCC,GDB等软件才行。如果有包管理就可以直接在线安装,否则要先移植相关软件到目标机器。
最后就是看目标机器的性能了,主要是内存和主频。硬件方面目前市场上的很多处理器都符合要求的。
2)安装VS2017的C++ FOR LINUX工作负载,VS2017采用模块化安装,根据工作需要安装相关的工作负载或组件。确认开发机上是否安装有C++ FOR LINUX工作负载,没有的话安装下就好了。
3)打开VS2017,新建项目/解决方案,在弹出的新建项目/解决方案对话框依次选择Visual c++ =>> 跨平台=>>Linux。第一次使用,建议项目模板选择“闪烁(Raspberry)”
。然后点击确定就可以了。“闪烁(Raspberry)”这个项目模板的目标机器是树莓派,新建的项目有简单的几行代码,控制树莓派的GPIO,让LED灯闪烁。新建项目完成后,默认打开的是一个HTML帮助页面,有详细的指导。我买了块树莓派3B+和带LED的扩展板,按这个帮助页面的指导测试过,一切正常。
vs2017还可以通过微软的azure云平台,采用虚拟的树莓派作为目标机器来开发,这个没有试过。如果用汽车来比喻的话,VS2017嵌入式开发就像是辆跑车,不是什么路都能走(只适合LINUX应用开发,不适合驱动开发和内核裁剪),费油(对开发机硬盘占用大,内存,CPU等资源占用大),动力强劲(功能多),速度快(开发效率高)。
注意事项:
采用VS2017和下面介绍的其他方法中,如果需要通过SSH远程操作,需要注意,较新的SSH版本中默认不允许ROOT用户远程操作,需要修改SSHD的配置文件,(是SSHD而不是SSH的配置文件),允许ROOT远程登陆。如果ROOT的密码为空,要设置ROOT密码或允许ROOT空密码。
开发机和目标机通过网络连接,IP地址可以通过路由器的MAC与IP绑定的方式指定。
最简单的开发环境-在目标机器上开发
对于带HDMI接口的开发板,比如上面说到的树莓派,事情就变得非常简单了,连接上显示屏,键盘鼠标,安装上编译器,编辑器,调试器就可以了。这种方式也是树莓派推荐使用的,对于没有HDMI等显示器接口的目标机器,也可以通过VNC服务等远程桌面连接的方式来开发。很多较旧的资料在讲交叉编译环境时,都用类似“不可能在目标机上编写编译代码”来否决这种方式,随着硬件性能的提升,直接在目标机上开发,是更好的选择。对于像树莓派这样带有apt包管理器的开发板,执行命令sudo apt-get install gcc gdb qtcreator就可以开发C/C++软件了。在TI的处理器上,TI提供的SDK也带有dpkg包管理器,也能够很方便的安装开发软件。其他品牌处理器没有硬件就没有尝试,估计也是支持的。
最方便的开发环境-AWS Cloud9
前面介绍的二种嵌入式开发环境和现在要介绍的AWS Cloud9云IDE都是本机编译的,并不涉及交叉编译的内容。在买了SeeedStudio BeagleBone Green回来折腾后,接触到亚马逊的AWS Cloud9-云IDE在嵌入式开发中的应用。SeeedStudio BeagleBone Green的系统搭建好了AWS Cloud9集成开发环境,通过WEB浏览器(手机端,WINDOWS/LINUX/MacOS)访问开发板,就可以开发了。我是通过路由器设置SeeedStudio BeagleBone Green开发板的IP地址为192.168.2.21。然后浏览器输入192.168.2.21打开开发板主页,就可以开始写代码,编译,调试了。AWS Cloud9的官方介绍如下:
AWS Cloud9 是一种基于云的集成开发环境 (IDE),您只需要一个浏览器,即可编写、运行和调试代码。它包括一个代码编辑器、调试程序和终端。Cloud9 预封装了适用于 JavaScript、Python、PHP 等常见编程语言的基本工具,您无需安装文件或配置开发计算机,即可开始新的项目。Cloud9 IDE 基于云,因此您可以从办公室、家中或任何地方使用已连接互联网的计算机完成项目。Cloud9 还可以为开发无服务器应用程序提供无缝体验,使您能够轻松定义资源、进行调试,并在本地和远程执行无服务器应用程序之间来回切换。借助 Cloud9,您可以与团队快速共享开发环境,从而能够将程序配对,并实时跟踪彼此的输入。
最灵活的开发环境 - Qt creator
可以不负责的向您推荐上面三种风格不同的本机编译嵌入式开发环境,也可以拿一块最近发布的树莓派4代向您担保,上面三种方法我都测试过点亮LED,灯,然后关掉LED灯。但是作为科技以复制粘贴为本的初学者,比如我目前的状态。我强烈推荐的是安装在ubuntu(Linux)操作系统上的QT开发环境,我的项目最终也是在这种开发环境下完成的。
一 准备开发主机并安装ubuntu操作系统
有多种方式,下面介绍其中的5种。
1)VMware Workstation 虚拟机:在WINDOWS机器上,安装VMware Workstation Pro软件,然后新建一个虚拟机并安装ubuntu操作系统。有的厂商的开发板也提供配置好了的VMware Workstation虚拟机文件。我并不推荐采用虚拟机作为开发主机。
2)WINDOWS 子系统(WLS):对于WIN10操作系统,更新到最新版本后。微软宣称其LINUX子系统支持全功能的LINUX。只要打开WIN10的开发模式,然后在WIN10应用商店查找LINUX,在结果中选择ubuntu18.04 LTS安装就可以。安装完成只占用800M的空间,不带桌面系统。需要另外安装桌面系统。我并不推荐用虚拟机作为开发主机,更不推荐这种方式。
3)用一台单独的电脑,安装ubuntu操作系统。首先从官网下载ubuntu18.04 LTS 桌面版。ubuntu有几个版本,有桌面版,服务器版。要下载桌面amd64版本的。官网上有教程指导如何将下载的ISO镜像写到U盘上制作安装盘。操作都很简单。
4)在一台电脑的一个或多个硬盘上安装双系统。最好是有二块硬盘。一块装WINDOWS。一块装LINUX。在一块硬盘上也可以。按上面第3条的方法安装。这种方法没有下面介绍的第5种方法好。(个人观点)。
5)将ubuntu安装在U盘上,就像WIN PE系统一样,买一个迷你U盘,用上面制作的ubuntu启动盘启动电脑,进入ubuntu系统后,在桌面有一个安装操作,双击运行,安装时选择另一个U盘(要有二个U盘,一个是上面说的启动盘,另外一个是用来装系统的)。按提示操作安装。
Linux有非常多的桌面发行版,我按照网上推荐的排行在VMware Workstation上装了其中的10个,就我个人的观点,我比较推荐ubuntu桌面发行版。在安装的过程中,如果选择的是中文,区域设置为中国,ubuntu的更新源就设置为国内的服务器了。也有图形界面的软件可以测试下载速度最快的源,安装完系统后最好更新下系统,将软件更新到最新版本。
二 安装交叉编译工具链
目前处理器厂商都提供制作好的交叉编译工具链,开发板厂商在处理器厂商提供的SDK的基础上加上自己的名称和LOGO,再做些增减提供给最终用户。一般都是有现成的了,只需要下载到开发主机上使用就可以了。
通常得到的交叉编译工具是个压缩包,下载后解压。解压后会有个安装脚本或设置脚本,执行脚本就可以了。这里只有一点要注意,LINUX上任何新文件(新建或刚复制/解压)都没有可执行权限。需要通过chmod a+x filename命令设置可执行权限。
三 下载并安装QT
QT的含义比较模糊,有时指QT库(一组C++11标准的库),有时指QT库及一组相关软件(QT库,QT设计师,QT助手,QT语言家,qtcreator等)的合称。QT目前主要的版本是QT4和QT5二个版本,基本以QT5为主,QT3基本退休了。QT4和QT5并不兼容,目前最新的是QT5.12.4。QT还分商业版和开源版,这里说的是开源版。
1)只安装qtcreator:如果只需要一个集成开发环境(IDE)。安装qtcreator就可以了,qtcreator可以做为一个C/C++集成开发环境使用,在ubuntu终端执行命令:sudo apt-get install qtcreator就能安装,通常安装的不是最新版本。
2)完整QT的安装,QT提供三大主流桌面操作系统的预编译二进制,国内也有非常多的开源镜像提供下载。下载离线安装包安装。按提示注册账号,选择安装组件和安装路径就可以,操作也很简单。
3)安装完成后,在安装目录下,有个维护软件,可以更新,增删组件。默认情况下,该软件没有设置更新服务器的地址,并不能正常更新。网上查找关键词”QT更新存储库“有很多教程,按教程指导设置一个国内镜像就可以了。
QT也提供在线安装,暂时没有发现可以设置国内镜像的在线安装,在线安装的速度非常慢,还经常断线。装了二三天也没有装好。用国内镜像离线安装包一二小时就可以下载安装完成。
四 配置QT
qtcreator集成开发工具,是一个非常优秀的跨平台IDE。在不同的平台上的界面和操作基本上是相同的。打开qtcreator的配置界面,就能体会到她的灵活。依次点击菜单栏的【工具】=> 【选项】就能打开qtcreator的选项界面进行配置。
在正确操作上面的【二 安装交叉编译工具链】后,如果幸运的话,qtcreator并不需要配置就可以直接开发了。因为qtcreator 会自己检测系统内正确安装的QT版本,编译器,调试器,开发套件(kit)。对于嵌入式LINUX开发,一般都需要手动设置。要设置的内容如下:
1)C/C++编译器,主要是设置厂商提供的SDK中编译器的绝对路径和给编译器命名。
2)调试器,主要是设置厂商提供的SDK中调试器的绝对路径和给调试器命名。
3)QT版本,主要是设置厂商提供的SDK中qmake的绝对路径,名称会自动生成也可根据需要修改。
4)设备,主要是设置目标机器的设备类型,IP地址和用户名密码,以及给设备命名。
5)开发套件,新增一个开发套件并取个名称,然后将上面设置的4项选上。
上面的每项设置完成后,要点击【应用】按钮保存,然后再切换到下一项,如果设置不正确,会有红色的感叹号提示错误,或者黄色的感叹号提示警告。并且有错误/警告信息告知原因。
在开发过程中,点击qtcreator的运行或调试按钮,会将编译好的二进制文件上传到目标机器上并执行。在上面第4条中配置设备时,要填写ROOT用户的信息,要有足够的权限。
和开发环境相关的软硬件
1)路由器
在上面介绍的几种嵌入式LINUX开发环境中,开发主机和目标机器都是通过网络连接,有时为了测试会给目标机器更换不同的操作系统,通过设置目标机器的IP地址比较麻烦,在路由器设置MAC绑定IP地址,可以方便很多。
2)NAS服务器
在嵌入式LINUX开发中,经常会通过NFS服务器挂载网络文件系统,或在开发主机和目标机器之间拷贝文件等操作,虽然开发主机也能搭建NFS服务器,有台NAS服务器绝对可以将工作效率提高几倍。将NFS服务器,GIT版本控制这些功能都放在NAS服务器上,非常的方便。
3)CAN协议分析仪
这个就看项目开发有没有用到CAN总线通信了,在我的项目中,需要实现CANopen主站,通过CAN总线控制四台Maxon Motor EPOS4定位控制器。支持CAN总线的开发板,一般都可以通过candump can0这样的命令来监视CAN总线的数据,配备一台CAN协议分析仪还是能提高效率。
4)USB转串口或串口服务器
在嵌入式LINUX开发中,串口终端依然是无法取代的。