您的位置:首页 > 运维架构 > Linux

7个月的Linux嵌入式开发心得

2017-01-04 21:25 190 查看
第零部分:说在开始的话

本人于2016年5月1号接过两位师兄手中的这个巨大的坑,巨大的坑,巨大的坑,重要的事情说三遍!纯小白一个,接过整个DM368的嵌入式部分开发。其实可以说根本没有从两位师兄那里得到任何有意义的能够延续的资料。(至于,为啥这么说,因为项目在今天,也就是2017年1月4日,慢慢接近尾声,基本全部重写,连架构什么的都换了。)这里也不是在怪师兄,只是客户需求一变再变,最后只能全部重写。好了,不抱怨了,开始讲讲自己的开发经历和感悟。

首先整体说一下,这是一个嵌入式系统开发。一般而言,嵌入式开发包括三个部分:开发主机Host,以及运行Target和调试控制上位机(串口工具,例如SecureCRT)。

其次我在具体说明我的开发平台,Host采用的是Ubuntu10.04;Target采用的是DM368芯片;上位机调试采用的是SecureCRT。或许大家疑问为啥我要选择已经停止更新Ubuntu10.04和停止技术支持的DM368来作为系统开发的?这是因为做视频处理这一块,达芬奇系列尽管在2011年退出了舞台,但是它的硬编码和解码是国内绝大多数厂家都难以达到的。既然选择了DM368,那么选择10.04也就是顺其自然了,因为5年前10.04正在大行其道。

最后,以上说了这么多没有营养的话。接下来就是我的在开发过程中遇到的实际技术问题。

第一部分:环境搭建必须是问题重重(本人是纯小白)

1、 对于Ubuntu10.04系统,在2016年我该如何得到?我又能如何安装?不过还好那个时候两位师兄还没有毕业,在他们的帮助之下,使用VMWare 12.0安装了Ubuntu10.04的虚拟机。后来我才发现,如果是搞Linux嵌入式开发,专门装一台实体机,其实不划算,也没有必要的。在这里我就不把安装步骤贴图了,一般的windows软件安装。但是对于虚拟机的安装,本人强烈建议磁盘大小20-25G。

具体步骤,给个网址你们自己看吧。

http://jingyan.baidu.com/article/0320e2c1ef9f6c1b87507bf6.html

http://www.linuxidc.com/Linux/2010-05/26023.htm

基本上所有安装都是大同小异的。

2、 安装好虚拟机以后,最重要也是最必须的事情就是把虚拟机连上互联网,否则Ubuntu10.04无法更新,也就不可能成功地安装好开发环境。对于新手而言,在网络适配器中选择NAT模式,然后重启虚拟机,打开浏览器,就可以上网了。

同样给一个网址让你们自己看。

http://www.gezila.com/tutorials/45698.html

3、 这个时候我发现了一个问题,那就是我的虚拟机永远都不能全屏显示,就是老在中央,并且四周有很大的黑边框。那就是我们需要安装VMware Tools。这里一定要注意一件事:必须在虚拟机开机状态下安装,否则安装一定失败。不信,自己去实践。不过有可能你连安装的地方都找不到。

还是给一个网址自己去看,一定会比我把东西直接贴在这里要好很多。

http://jingyan.baidu.com/article/f7ff0bfc13d02f2e26bb13af.html

4、 到现在为止,只算是把Host安装成功了,现在需要做的是更改软件更新源,因为官方已经通知更新了。我也没有找到一个可以一次性完全更新所有的源,只能根据你开发需要什么你就安装什么,手动,或者部分自动。这是一个体力活。

两条命令:sudo apt-get update(更新) sudo apt-get install(安装)

5、 嵌入式开发,没有交叉编译算个什么鬼?所以,现在就真正环境安装问题了。就拿我开发需要的arm-2009q1-203-arm-none-linux-gnueabi.bin而言。安装方式是:./arm-2009q1-203-arm-none-linux-gnueabi.bin然后一直下一步,但是一定要记住安装目录,以为以后的交叉编译都要用到安装目录下面的编译器。那我就用我自己的话解释一下什么叫交叉编译?交叉编译就是,我在host主机上编译生成的二进制文件,通过网络或者存储介质移动到Target上面运行的过程。由于开发调试阶段一般都是没有操作界面的,所以上位机就充当了控制台。先提前预告一下,基本上所有的嵌入式开发里面交叉编译器的目录变量名都叫CC,并且都在顶层目录的Makefile文件中。

比如我安装目录在:/opt/codesourcery/arm-2009q1

同时,我有一个C语言源码文件test.c。那么交叉编译如下:

/opt/codesourcery/arm-2009q1/bin/arm-none-linux-gnueabi-gcc –o test test.c

编译完成以后,就在host上使用./test运行是不会成功了。这就保证了最基本的交叉编译通过了。在Target上使用./test运行,是可以运行的。

第二部分:Linux嵌入式开发移植问题

1、 为了完成需要的功能,不得不得进行某些开源库的移植,那么问题就又来了。并且还是大问题。(纯小白,怎么能会移植)在这个移植上面翻了无数个跟头。主要完成了ffmpeg和libjepg两个库移植。

2、如何移植ffmpeg??

3、如何移植libjpeg??

第三部分:Linux嵌入开发必修课之串口通信

1、 在这些功能完成以后,使用控制台就已经不是我们需要了。因为操作界面使用QT完成以后,上位机被FPGA取代,DM368和FPGA之间通过串口通信。所以串口通信应该是嵌入开发的必修课。但是,DM368的两个串口是有UART0是默认打开的,UART1是需要修改复用寄存器已达到让他正常工作。我天啊,修改寄存器啊,重新编译内核啊,太难了啊。问题又来了。

2、如何找到配置寄存器源码文件??

3、如何修改需要修改的地方??

4、如何重新编译内核,以保证修改生效??

在接下俩的几篇文章中,我会一一解答。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息