在我们日常生活中,比较常见的就是关于嵌入式。因为嵌入式的范围真的很广发,它是一种软硬件可裁剪,对于以应用程序为中心的专用系统,硬件平台可以是单片机或ARM系列处理器。SCM通常运行裸程序,但是现在有许多基于SCM的系统中。比较流行的开源系统RT-Thread做得很好,因此大多数基于ARM体系结构的处理器都使用Linux系统作为软件平台,而某些设备则使用Android系统(内核也是linux)。那么到底嵌入式linux系统是什么呢?
嵌入式linux系统应用开发
一.简介
嵌入式系统开发包括内核、驱动、应用三大部分,今天主要说应用开发,内核与驱动就不多说了。嵌入式linux系统就是移植的linux内核,使用对应的编译器,把linux内核编译后下载到存储芯片,然后还需要做一个基本的根文件系统,这样系统就可以跑起来了,相对于PC上的系统,还是比较简单的。
二.应用开发环境
现在网上有好多视频教程,一般第一节课都会教你怎么搭建开发环境。我这里简单罗列一下:
1.安装一个linux系统的虚拟机,我用的是Ubuntu。
2.然后给虚拟机安装对应的交叉编译工具。
3.安装常用工具,并配置:nfs、tftp、ftp、ssh服务、samba服务、vi必要的配置。
4.在板子上面使用nfs,还需要给板子的linux内核配置上nfs-client和nfs文件系统支持。
5.我喜欢在板子上移植一些好用的工具,比如:ftp、ssh服务(终端登录和传文件用)、crontab等。
虚拟机登录:安装ssh服务, 后可以用一些终端软件通过ssh登录,这样不用在虚拟机的桌面里使用terminal了。
共享文件:我喜欢通过samba与windows共享目录, 在windows下把共享目录映射为网盘,使用起来也比较方便;我觉得这种共享很方便,比使用一些共享软件要方便。挂载为网盘后和操作本地磁盘一样,比较直观。
三.一般开发流程
在一些视频教程中,一般介绍的开发流程是这样的:在windows下编辑好代码,在虚拟机里使用交叉编译器对代码进行交叉编译,然后通过tftp/ftp下载到板子里,或者nfs挂载后运行测试; 入门时是这样,但是如果是在公司做实际的产品开发,这样效率就会很低的。
下面是我常用的流程:
1.在windows下或者虚拟机里编辑代码,代码编辑器一般用sourceInsight、VSCode、Eclipse等。
2.代码在写的时候,注意把与底层硬件交互的地方加编译选项,这样是通过编译开关控制硬件访问的代码是否启用。
3.第二步所做的工作,在这一步就起到了作用,在Makefile里,会写上根据不同的编译选项,选择不同的编译器,如果是使用Ubuntu里的编译器,那么就把硬件相关的交互屏蔽,这样编译出来的程序,可以直接在Ubuntu上运行了,这样一来,我们可以在Ubuntu上做代码单元测试、程序的逻辑验证、运行性能测试等。80%的问题可以在Ubuntu里解决。
4.在Ubuntu里测试没问题后,在交叉编译,通过nfs共享目录,在板子里运行调试。
这样其实是减少下载程序到板子上这个过程,把逻辑验证、代码单元功能验证放在Ubuntu里来验证测试,而且Ubuntu里使用GDB调试也比较板子上方便。
四.调试
最常用,也是最有效的方式就是加打印信息,记日志!基本上可以解决80%的问题。如果遇到程序异常挂掉(比如段错误等),程序挂掉一般没有任何提示信息,也不确定是在那里挂掉的,这种问题一般使用GDB跟踪,或者在代码里加入backtrace信息输出的代码。
嵌入式linux系统应用开发,相对于内核、驱动开发,入门可能是比较容易的,毕竟应用层的开发,没有那么多高深的东西。应用层与具体业务关联比较大,因此也就导致应用开发的工作量比较大,需求也会有经常变更风险,但是应用开发里会有好多技巧,可以大大提高工作效率;linux应用可以使用C++进行开发,利用C++的面向对象思想,以及现在C++11之后的新特性功能,提供了好多类似于Java里的一些好用的功能,可以大大提高应用的开发效率。
综上所述,嵌入式linux系统是什么相信大家已经知晓了吧,想了解更多关于linux的信息,请继续关注中培伟业。