像我这样很多学习驱动的同学都会想一个问题:学了这个能干嘛?学了那个能干嘛?
姑且找找网络上开源的项目,找找,看看,还是一脸懵。因为开源只提供源码和大致介绍下做什么和有什么。而面对于基础开发者的博客还是很少的。甚至有的博主只是放一些定义,丢几个结构体的注释就完结。我曾经就是通过查缺补漏才形成了一个完整的项目框架。
借此,我打算撰写一套驱动的开发流程,从硬件调试到驱动框架搭建,到系统调用验证。
因为AI的盛行,自动驾驶,人脸识别等应用都成了市场的领航者。而他们用到的最多的基础配件都是SOC和摄像头模块等,所以我后面将针对摄像头的开发流程撰写一整套系列教程。希望可以供小白参考学习,也期待大佬进行点评。
不说废话了,接下来请看我的展示。
在开始之前有必要说明下硬件环境:
市面大多数摄像头都是使用I2C进行配置和初始化的,这里的I2C有时也叫SCCB,不过基本时序差不多的,一般不做区分。
第一种
i2cdetect -y 1 //“1”代表I2C编号,一般一个SOC有很多I2C,如果接的是I2C0,这里就写0
得到如下结果,3c则是当前摄像头的i2c设备地址,这里先说明一下,如果3C这个地址被驱动使用,则显示UU
i2cdump -f -y 1 0x3c
将得到如下结果
有这两个基本够用了,如果想了解更多,则可以看看如下文章
第二种
查看数据手册
看到这里就有人有疑问了,为啥这里的设备地址是78,而第一种方法得到的是3C。这个疑问我有个文章写过 ( I2C简单实验之LT6911UXC读取ChipID),大家可以看下,我也贴在这
然后咱们就可以使用i2c-tool进行调试了。
我曾在 I2C简单实验之LT6911UXC读取ChipID搭建过一个基本框架,这里再给大家分享一个比较简单的框架
代码阅读顺序
按照以上的阅读顺序,有一点基础的同学肯定一目了然。这里就不做过多说明。
设备树插件的原理和基本运用我在早期的文章已经写过:设备树插件_configfs学习笔记
这里贴一下使用方式,毕竟原理大致了解了就行了。使用之前先下载好驱动
链接: https://pan.baidu.com/s/1uuwqCwlZNkSLorEWTmkFrQ 提取码: 5dbv
加载方式跟普通驱动加载方式一样,俩个命令加载insmod和卸载rmmod
1.编写dts文件
2. 编译
sdk/kernel/scripts/dtc/dtc -I dts -O dtb overlay.dts -o overlay.dtbo
sdk/kernel/scripts/dtc/dtc -I dtb -O dts overlay.dtbo -o overlay.dts
3. 使用
cd /sys/kernel/config/device-tree/overlays
mkdir test
cat /overlay.dtbo > /test/dtbo
echo 1>/test/status
ls /proc/device-tree/i2c@ff510000/
如图所示
编译命令 make
insmod <驱动的C文件名>.KO
正确执行了probe函数,证明我们的驱动和设备树插件都使用的完全正确。
作者: 二月半, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-1862109.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
开发工匠 2024-4-24 10:03