打造自研系统(嵌入式Linux)的一些心得体会

背景:

对于一家从事技术开发的公司来说,产品不一定100%都是自己开发出来的,也有来自供应商的部分。

目前公司有些项目的主SOC系统固件是供应商提供的,他们提供的是img格式的镜像文件,并不提供镜像所对应的软件源代码,只提供必要的应用开发所需编译工具链。

看到经手的一台台设备出货,而里面的核心技术是别人的,心中不免愤慨,别人能做到的,我也能做到。但如何做呢?我想到的方法就是对照学习,从别人的成熟系统那提取经验,慢慢地转化为自己的能力。供应商如此,同理,友商亦是如此。

在这里说明一下破译对方系统的意义,比起从0开始的纯自研,对方系统提供的既是凭空难以琢磨出来的问题的答案,比如不了解视频解码相关的设备树的配置方法,可以参照对方;又是遇到久攻不下的问题的解决之道,比如挂载i2c的接口芯片一直detect不到,通过对比发现原来是接口芯片的使能引脚没置高。这件事情的意义相当于是给了你一本作业题的标准答案,所以我们要告诫自己不要在没有经过思考的情况下急于照抄对方的配置而失去了独立思考的能力,这点切记!

第一步 了解对方的硬件/软件

可以通过肉眼看出SOC的型号,型号一般都印在SOC芯片封装上,根据它我们可以找到对应的芯片手册。

如何了解对方的软件?通过debug串口可以做到,一般板子上都会留有debug串口,3个引脚分别是(TX/RX/GND),用万用表打到连通档,表笔的一端触击机壳,另一端逐个触击这3个引脚,一旦有鸣叫,说明GND找到了,TX和RX先任意接。通过USB-TTL转换器连接PC和板子,PC上打开串口工具软件,设置波特率(一般为115200),打开设备电源,TX/RX接对了的话,串口软件上会有打印信息,如果没有打印信息则交换TX/RX。进入到debug串口控制台后,整个文件系统就在你手里了,其中很有使用价值的是/sys/firmware/fdt这个文件,即对应的设备树dtb文件,我们通过lsz /sys/firmware/fdt命令即可导出该文件,后面会告诉大家如何解析它。

如果串口控制台需要登录用户名和密码,怎么办?还有一招:进入uboot控制台。先按住键盘的ctrl+c然后上电即可进入uboot控制台,输入fdt print即打印系统固件的设备树信息,把这些信息保存下来。

第二步 搭建自研系统开发环境

根据芯片型号,联系芯片原厂的代理商获取sdk

找到sdk/kernel/scripts/dtc/dtc,这是设备树的编译工具,可以用它对上面提到的/sys/firmware/fdt进行反编译:在sdk根目录下执行kernel/scripts/dtc/dtc fdt > dts.txt,这也是一种获取系统固件设备树内容的方法。

第三步 开发设备驱动

关于设备驱动的开发,我给大家举个我调tp2855的例子。

接触陌生的东西时,人往往会由于未知而有一种畏惧感,会觉得这很难。带着这种心态开发tp2855的驱动,一时半会肯定是调不好的,因为项目进度要求你不能拖延,而我又有些着急,就拿着“标准答案”出来走捷径了。

我照着对方的设备树依样画葫芦,好不容易画完了,编出来运行,打印信息显示设备读到的是错误的设备ID,即0xFF,0xFF(正确的应该是0x28,0x55),于是我就纳闷了,这是为啥?我便立刻怀疑是驱动的问题,结果查来查去依旧无果,当我束手无策的时候,翻了翻板子的硬件原理图,发现tp2855芯片有一个供电信号使能脚。。。我了个去,抱头痛哭。其实从imx6ull到rv1126,这一路我吃了不少对硬件原理图不熟悉的亏,所以在这里要劝大家,一定要高度重视硬件,把对板子硬件的掌握放在第一位,譬如牢记各种信号的使能脚、时钟信号是SOC还是晶振给的等等,tp2855驱动挂载成功后,为了验证AHD输入处理功能是否完备,采用v4l2-ctl抓帧,这个工具我是下载的开源代码编译生成的,可不知为啥,命令一执行就卡在半路不动了,因为网上根本搜不到类似的出错情况,我被这个莫名的问题震慑到了,于是“病急乱投医”,用v4l2-ctl瞎比对起供应商系统和自研系统的区别来,当我发现rkcif的版本不一样后,便武断地认定就是这个原因造成的,在sdk上更换rkcif的版本,于是我通过各种渠道找了各种版本的sdk来试,中间花了不少时间和精力,最后得出了一个结论:不要轻易质疑sdk里原有的东西,更不要去乱动,这会是一场徒劳。是的,最后证明不是别的原因,是我的v4l2-ctl本身有问题!把供应商系统的v4l2-ctl拷过来就能正常运行并完成抓帧操作!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值