Jetson Orin NX的内核构建环境(支持TC358743芯片)
目前打算用Jetson Orin NX套件,接线如下,但想把自带摄像头换成索尼相机,由于相机的输出是HDMI,套件自带的是CSI口的输入,所有准备了一个TC358743转接模块,接下来将抒写完整的TC358743 驱动程序并且将其集成到 Jetson Orin NX 的 Linux 内核中。


一、编写驱动程序
首先准备好tc358743的驱动程序,包括:
- tc358743.c - 驱动程序实现
- tc358743.h - 头文件,包含常量和结构体定义
- tc358743.dtsi - 设备树配置文件
- Makefile - 编译配置文件
然后梳理好他们的结构、和功能,接下来开始编辑驱动程序元源码,这里我直接将驱动程序放到最后,有需要的可以直接下载
通过网盘分享的文件:驱动
链接: https://pan.baidu.com/s/1UChvICYBPJnzCmYOgn5BhQ?pwd=4560 提取码: 4560
--来自百度网盘超级会员v4的分享
驱动程序文件结构
1、tc358743.c - 主驱动程序文件,包含:
- 芯片初始化和寄存器配置
- I2C 通信接口
- V4L2 子设备操作
- 媒体控制器集成
- 视频流捕获功能
2、tc358743.h 头文件包含了以下内容:
1. I2C 地址定义 :TC358743 的 I2C 地址为 0x0f
2. 寄存器定义 :包括芯片 ID、系统控制、复位、HDMI 控制、MIPI 控制等寄存器地址
3. 芯片 ID :TC358743 的芯片 ID 为 0x358743
4. 控制掩码和常量 :包括复位掩码、HDMI 使能、MIPI 使能、通道数和数据速率等
5. 驱动结构体 :定义了 tc358743_dev 结构体,包含设备的所有必要信息
6. 函数原型 :声明了所有内部函数的原型
3、tc358743.dtsi - 设备树配置文件,包含:
- I2C 设备配置
- GPIO 复位引脚配置
- MIPI CSI-2 连接配置
- 时钟和数据通道配置
4、Makefile - 编译配置文件,用于编译和加载驱动程序
驱动程序的功能
1、芯片检测和初始化 :
- 读取芯片 ID 进行识别
- 硬件复位和初始化
- 寄存器配置和状态检查
2、HDMI 接收配置 :
- 启用 HDMI 输入
- 检测 HDMI 信号状态
3、MIPI CSI-2 传输配置 :
- 配置数据通道(2 lanes)
- 设置时钟频率(1.5GHz)
- 启用 MIPI 传输
4、视频流控制 :
- 支持 V4L2 子设备接口
- 实现流开启/关闭操作
- 集成媒体控制器框架
# 编译驱动程序
make
# 加载驱动程序
sudo insmod tc358743.ko
# 检查驱动程序
modinfo tc358743.ko
# 卸载驱动程序
sudo rmmod tc358743
二、设备树集成
步骤 1、找到 Jetson Orin NX 的设备树文件
位于/boot 目录下
步骤 2、创建设备树覆盖文件
创建一个名为 tc358743-overlay.dts 的文件,内容基于之前的 tc358743.dtsi 文件。
步骤 3:编译设备树覆盖文件
使用 dtc 工具编译设备树覆盖文件:
dtc -I dts -O dtb -o tc358743-overlay.dtbo tc358743-overlay.dts
步骤 4:安装设备树覆盖文件
将编译好的设备树覆盖文件复制到 Jetson 的设备树目录:
sudo cp tc358743-overlay.dtbo /boot/extlinux/
步骤 5:配置设备树覆盖
编辑 /boot/extlinux/extlinux.conf 文件,在 APPEND 行添加设备树覆盖配置:
# 尝试使用不同的设备树加载方式
sudo vim /boot/extlinux/extlinux.conf
#修改 APPEND 行,确保设备树覆盖路径正确:
of_overlay=/boot/extlinux/tc358743-overlay.dtbo
三、驱动程序安装
步骤 1:编译驱动程序
sudo depmod -a
make
步骤 2:安装驱动程序
sudo cp tc358743.ko /lib/modules/$(uname -r)/kernel/drivers/media/i2c/
步骤 3:更新模块依赖
sudo depmod -a
步骤4:配置驱动程序自动加载
创建一个名为 /etc/modules-load.d/tc358743.conf 的文件,添加以下内容:
tc358743
步骤 5:重启系统
sudo reboot
步骤 6:检查驱动程序加载状态
# 检查驱动是否加载
lsmod | grep tc358743
# 查看详细的驱动加载日志
dmesg | grep -A 30 -B 5 tc358743
# 尝试重新加载驱动
sudo rmmod tc358743 2>/dev/null
sudo insmod tc358743.ko
dmesg | tail -40
步骤 7:检查 I2C 通信
使用 i2cdetect 命令检查 TC358743 是否在 I2C 总线上被检测到:
sudo i2cdetect -y 2
步骤 8:检查 V4L2 设备
# 安装 V4L2 工具包
sudo apt update
sudo apt install v4l-utils
# 检查设备信息
v4l2-ctl --list-devices
#查是否创建了 V4L2 设备节点
ls -la /dev/video*
步骤9:测试视频捕获
#使用 v4l2-ctl 命令测试视频捕获功能:
v4l2-ctl --list-devices
v4l2-ctl -d /dev/video0 --list-formats-ext
v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=10
结果:
我们需要看到:
1. 驱动成功加载并初始化 TC358743 芯片
2. 识别到 HDMI 信号
3. 生成 /dev/video0 设备
4. 能够通过 V4L2 接口捕获视频
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)