1.资料参考
2.驱动移植流程
2.1 移植DTS
我们的主板是可以支持DTS的, 所以直接干DTS , 配置系统SPI设备信息,如下所示:
&spi0 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi0m0_cs0 &spi0m0_pins>; pinctrl-1 = <&spi0m0_cs0 &spi0m0_pins_hs>; ch943x_spi0@00 { status = "okay"; compatible = "ch943x_spi0"; reg = <0x00>; spi-max-frequency = <3000000>; }; };
2.2 移植代码
kernel/drivers/tty/serial/ch9434_spi0.c kernel/drivers/tty/serial/Makefile +obj-m += ch9434_spi0.o 然后把ch9434_spi0.c 新增2行宏定义 +#define DEBUG 1 +#define VERBOSE_DEBUG 1 然后把ch9434_spi0.c 里的宏,该脚是中断 ,直接改成对应系统的 +#define GPIO_NUMBER 139 +//#define USE_IRQ_FROM_DTS
然后编译kernel , 生成ko ,直接推进系统
adb root adb remount adb push "S:\rockchip\RK3568_11\kernel\drivers\tty\serial\ch9434.ko" /vendor/ adb shell cd vendor insmod ch9434.ko //加载驱动 rmmod ch9434.ko //移除驱动
然后打开调试打印
点一下 打开dbg打印 按钮 回车执行 , 这个是打开dbg打印的 看的更全
su && echo 8 4 1 7 > /proc/sys/kernel/printk
3.驱动验证流程
首先ko加载进去之后,正常情况下回出现 root@ubuntu:~# ls -ll /dev/ttyWCH0 crw-rw---- 1 root dialout 242, 0 Apr 1 17:23 /dev/ttyWCH0 crw-rw---- 1 root dialout 242, 1 Apr 1 17:23 /dev/ttyWCH1 crw-rw---- 1 root dialout 242, 2 Apr 1 17:23 /dev/ttyWCH2 crw-rw---- 1 root dialout 242, 3 Apr 1 17:23 /dev/ttyWCH3 其次,驱动的probe函数是一定要执行的,不执行就是dts的compatible或者dts没写对 我遇到过不同版本内核spi这块写法也不一样 请注意! 其次,需要确认中断脚,是否配置,收发数据的时候中断是否有反应。 cat /proc/interrupts //查看中断状态 cat /sys/kernel/debug/gpio //查看gpio状态 最基本的spi是需要通的 , 搞个spidev程序短接可以直接验证问题点 这些流程都简化了, 实际自己搞遇到了很多坑和需要学习的地方。
收发测试命令
dts配置差异
验证spi通讯,
验证中断脚是否配置正确
文章知识点与官方知识档案匹配,可进一步学习相关知识