Linux上位机开发实践(积极使用SoC厂家的SDK)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
有不少同学认为如果不涉及232/485/can/usb这些外设的话,linux开发就是把ubuntu linux的软件port到嵌入式开发板子上。这种想法其实有很大的片面性。如果是纯业务开发,嵌入式linux开发确实和一般的x86 ubuntu linux开发差异不大。但是回到嵌入式linux上面,除了外设硬件接口之外,还有很多加速ip可以使用、很多计算资源可以使用,甚至是一个soc里面再跑一个mcu rtos做运动控制都是可以的。所以说,简单把嵌入式linux开发看成是x86版本的移植,还是不妥的。
通常,我们一个soc厂家的SDK开发包,里面有很多的内容值得我们来学习和分析。不同的soc厂家都会有一些自己的特色,比如说有的camera isp做的很好,例如海思;有的npu做的好,例如rk;有的价格低,例如全志;有的结合了arm和fpga,例如zynq;还有的生态比较好,复用了soc和mcu,比如stm32。总之,一个sdk里面的内容,要远比大家想要的多得多。
1、编译工具链
不同厂家使用的编译器是不一样。哪怕都是arm cpu,也会有版本之分。比如有的cpu是32位的,有的是64位的;有的使用了glibc,有的使用了uclibc;有的版本比较老,有的则版本比较新。所以,我们开发的时候一定要听劝,按照厂家给的编译器进行开发,不要自己发挥。
2、基本的软件系统镜像
SDK里面除了编译器,对于如何构建完整的soc镜像,厂家一般都会给出基本的软件系统。比如uboot、kernel、dts、busybox、rootfs,这些都是标配。也就是说,我们自己不需要从uboot开始,自己去看手册、写驱动、移植代码。从厂家的角度来说,他们希望的就是,客户可以拿到芯片之后,短时间之内迅速用起来,而不是在这些底层软件上面耗费太多的时间。
3、参考电路图和第三方芯片支持列表
SDK里面通常包含了具体的参考电路,比如电源设计、晶振、ddr、nor/nand/emmc、camera、mipi屏幕、网口、wifi、tf、usb等等,这些都是标配。常见的外部芯片选型,比如说ddr、flash、支持的camera sensor、外置屏幕,他们也会给出自己推荐的品牌。一般来说,客户拿到demo板子之后,稍微改一下,就会让公版原理图为自己所用。
4、soc芯片手册
很多厂家的soc芯片手册是不会公开发布的。只有自己购买了开发板,或者有明确的芯片需求并且下单之后,才会从厂家,或者是代理商那里拿到soc芯片手册。soc芯片手册,除了讲解电气特性,大部分都是关于各个ip模块的寄存器描述。
5、部分闭源的外设驱动
很多的soc外设,厂家是不会写在soc芯片手册上的,但是客户又要使用这些外设,比如gpu、isp、视频编解码、音频编解码等等。这种情况下,厂家就会以闭源驱动的形式来进行发布,用户只需要在板子启动的时候,insmod这些ko文件就可以了。等到板子启动后,确认一下对应的设备节点有没有生成即可。
6、上层API开发包
有了闭源驱动,下面还需要闭源的API开发包与之配合,才能进一步使用芯片里面的这些ip。有些程序,虽然纯软件也可以做,比如视频输入、输出,视频编、解码,音频输入、输出,音频编、解码,isp,gpu,npu等等,但是如果可以通过硬件加速来实现这些功能,要比纯软件实现要好很多。这些上层API开发包,基本上也就是对闭源驱动做一个封装,本质上还是打开设备节点、关闭设备节点、读写数据、设置设备属性那一套,只不过对外使用的时候换了一个名字而已。
上层API开发包,除了特定设备节点的封装,有的时候还有很多的开源软件,比如boost、opencv、ffmpeg、qt,这些开发包出现在SDK里面也是常有的事情。
7、上层调试工具
上层的调试工具很多,比如说烧录软件、camera sensor调试软件、npu模型转换软件、算法标定软件等等。甚至有些细心的soc厂家,会把常用的编辑软件、串口软件、ssh软件、ftp软件也给客户准备上,基本上服务到家的姿态。
所以说,现在的芯片SDK早已经不是大家所理解的那种纯软件包,而是包含了电路、文档、代码和工具的复杂综合体。大家如果拿到了这样的芯片SDK,一定要好好学习,肯定会有很大的收获。学习的时候,要重点学习不同芯片之间的差别,学习软硬结合,而不是学习泛泛的linux和arm知识,开发板并不仅仅是学习ubuntu和debian。那样就失去了学习soc本身的意义。