【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
随着国产化芯片的推进,在soc领域,越来越多的项目使用国产soc芯片。这些soc芯片,通常来说运行的os不是linux,就是android。如果是android,自不必多少,一般厂家都有对应的demo board,开发商改动的不多。但是对于linux来说,我们每一个开发者需要了解下,厂家给的sdk和linux开发本身是什么关系?
1、soc烧录方式
不同的soc厂家,提供的烧录方式是不一样的。通常,都会提供一个pc上位机,这个时候可以借助这个上位机和板子进行通信。通信的方式可以是串口、usb otg、网络。如果不提供上位机,很多soc还支持tf卡启动,这种情况下,其实就无所谓上位机了。只需要把uboot、kernel、rootsfs通过tf读卡器烧录到特定的扇区,或者文件系统就好了。
2、部分驱动厂家不提供源代码
很多驱动,厂家是不提供源代码的,但是提供ko文件或者fw bin文件。这些驱动包括不限于isp驱动、视频编码、视频解码、音频编码、音频解码、gpu驱动、npu驱动等等。也就是说,如果我们想用这些驱动,只能通过api进行调用访问,但是想魔改代码是不行的。
3、硬件加速部分一定要使用厂家的sdk
很多功能,虽然纯软件也可以实现,但是在处理速度上面和硬件比起来还是差的比较远。以视频编码为例,我们用ffmpeg虽然也可以mp4、avi去编码,但是能不能做到实时处理,就要打一个问号了?这种情况下,一般处理的方式,是既保留ffmpeg的框架,还需要硬件加速的api,实现两者之间的融合,共同去满足客户的需求。
4、选择合适的soc芯片
芯片的性能越高,价格也会越高。而且,高性能的芯片,对于采购、原理图绘制、layout、工艺生产,都会增加不小的负担。所以,本着能省则省的原则,我们应该尽量使用低成本、高性价比的芯片,满足功能就好。换句话说,就是杀鸡不用牛刀。能用低速用低速,用内置ddr就内置ddr,能用flash就用flash,诸如此类。
5、linux开发是基础
只要跑的os是linux,就离不开linux编程基础。这里的基础包括很多的内容,比如说软件的配置、编译、调试。等系统运行起来之后,还有多线程、多进程、数据库、网络通信、配置文件、web访问、界面绘制等等,这些和具体的芯片没有关系。只要soc使用的是linux,就离不开这些内容。
除此之外,设备部分也是大同小异。处理camera,就要用到/dev/video0和v4l2;处理音频,就要用到alsa api;其他gpio、uart、485、iic、spi、can、panel设备的访问也差不多。这些低速设备的接口、api都是差不多的。我们学会了一种soc,其他的soc也会触类旁通,都会学会的。
对于linux生态的软件也是一样,除了软件版本的差异之外,理论上只要能在linux编译起来,就可以让所有的linux开源软件为自己所用。
6、多多使用厂家sdk里面的上位机
除了烧录上位机,有的soc厂家还会提供其他的上位机,比如图像的标定、camera的实时显示、产品性能的分析、npu model的翻译等等,这些工具大家都要灵活掌握。有些工具是通用的,有些工具则是厂家自己单独开发的,没有统一的标准。