看了正点原子的zynq系列的Linux开发指南(pdf和视频均有),因此从最简单的程序开始。
驱动程序开发:(第四期视频)
学习驱动程序编写之前,要先学习uboot,kernel等内容(操作系统):(第三期视频)
参考文章:
【Linux驱动】字符设备驱动模板(一)—— 驱动模块加载测试-CSDN博客
Linux驱动开发分为三种:
- 字符驱动:不定长的字符传输
- 块驱动:存储设备(定长字符传输)
- 网络驱动
一种设备可以是上述一种或多种类型。如USB的wifi模块,就不只是网络驱动。
比较难,且比较多的是第一种,字符驱动。
因此,跟着视频一起来学习吧。
- 字符驱动
- 新建.c文件,打开并编写程序。
驱动设备需要入口和出口函数:
module_init(); //驱动模块入口
module_exit(); //驱动模块出口
- 新建Makefile文件
KERN_DIR为kernel源码的目录。
运行make build
- Failed
可能的原因:没有交叉工具编译;前期环境配置没弄好(见正点原子第三期视频)
ARCH CROSSSOMPILE:arm_genueabihf_...
- 后来先设置了patalinux(每个终端都要配置) ,就成功了:
进入petalinux安装目录:source setting.sh
make编译成功了,生成了.ko可执行文件:
SSH连接开发板,把.ko放到开发板ubuntu中,modprobe命令加载驱动
不止是要把chrdevbase.ko放到/lib/modules/4.14.55-fmsh20230801/目录下,还要把linux内核源码目录下生成的modules.builtin和modules.order也放到该路径下。
其中,4.14.55-fmsh20230801是kernel版本,输入uname -r即可查看。
modprobe和rmmod不报错了,但是没有打印printk。
printk打印无输出是的解决方法_printk没有输出-CSDN博客
MobaXterm连接的话仍然没有printk输出,但是:
VMware下的ubuntu通过串口连接,则有printk。
P.S 我用的软件是VScode,安装方式如下:
安装插件: