Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)
Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)编写驱动对应的makefile:驱动2驱动程序:新建linux_ko文件夹,编写驱动程序xtw_soc_driver.c:驱动1
linux底层编写驱动,上层用户编写应用层代码,调用底层驱动。这里体现了linux的一切皆文件的思想。
调用流程如下:
驱动与应用层调用关系
本例,介绍编写驱动程序,加载(含加载信息调试),上层应用程序编写调用的流程,以便熟悉驱动和应用的大致工作流程。
驱动程序:
新建linux_ko文件夹,编写驱动程序xtw_soc_driver.c:
驱动1
驱动2
编写驱动对应的makefile:
驱动编译
此时,对应驱动程序与编译脚本完毕,执行make all进行编译生存ko文件。
执行make all编译生成xtw_soc_driver.ko文件。
Root权限,加载insmod xtw_soc_driver.ko(卸载使用: rmmod xtw_soc_driver.ko)
同时,打开终端,输入 dmesg -wH 用于观察内核log:
驱动的log打印
使用insmod和rmmod加载/卸载驱动后,dmesg查看log如下:
加载和卸载驱动的log
驱动加载完后,可以使用cat /proc/devices
驱动加载内核
此时,还需要使用创建节点到dev下,使用命令:
mknod /dev/xtw_soc_driverdev c 236 0
使用ls/ dev查看:
PS:注意proc/devices和/dev下面的关系,为何需要mknode?
@@@ 此时驱动程序已经编译并且加载完,后续只要完成应用层程序编写与调用即可:
通过C库的文件操作open/read等接口,调用底层驱动的接口:
创建xtw_soc_test.c文件:
应用层程序
对应编写makefile
应用层makefile
编译生存
编译结果
xtw_soc_test
su权限运行结果日志:
运行log
通过应用层编写代码,调用驱动100次。
至此,编译驱动程序ko,和应用层程序调用驱动的操作步骤完成。
在驱动程序中,我们定义了MAJOR,
主设备号
在Linux中,MAJOR和MINOR分别表示主设备号和次设备号。主设备号可以表示一类设备,次设备号可以表示为这类设备的一个子类的设备。
insmod是将驱动加入到内核中(重启失效,需要生效的话需要编译进内核,或者在开机的时候调用脚本)。
mknod,可以理解为系统与设备通信的时候,创建的设备,通过调用open等操作完成调用。
小结:驱动与应用的关系,驱动的头文件的作用。insmode,mknod的使用。
点个关注,谢谢。