在前面写的驱动中,我们发现编写驱动有个固定的模式只有往里面套代码就可以了,它们之间的大致流程可以总结如下:
-
实现入口函数xxx_init()和卸载函数xxx_exit()
-
申请设备号 register_chrdev_region()
-
初始化字符设备,cdev_init函数、cdev_add函数
-
硬件初始化,如时钟寄存器配置使能,GPIO设置为输入输出模式等。
-
构建file_operation结构体内容,实现硬件各个相关的操作
-
在终端上使用mknod根据设备号来进行创建设备文件(节点) (也可以在驱动使用class_create创建设备类、在类的下面device_create创建设备节点)
因此,在Linux开发驱动,只要能够掌握了这些“套路”,开发一个驱动便不是难事。在内核源码的drivers中存放了大量的设备驱动代码, 在我们写驱动之前先查看这里的内容,说不定可以在这些目录找到想要的驱动代码。如图所示:
只要这样根据步骤来编写我们的驱动代码简单粗暴,但是这存在