快捷搜索:  汽车  科技

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)编写驱动对应的makefile:驱动2驱动程序:新建linux_ko文件夹,编写驱动程序xtw_soc_driver.c:驱动1

linux底层编写驱动,上层用户编写应用层代码,调用底层驱动。这里体现了linux的一切皆文件的思想。

调用流程如下:

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)(1)

驱动与应用层调用关系

本例,介绍编写驱动程序,加载(含加载信息调试),上层应用程序编写调用的流程,以便熟悉驱动和应用的大致工作流程。

驱动程序:

新建linux_ko文件夹,编写驱动程序xtw_soc_driver.c:

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)(2)

驱动1

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)(3)

驱动2

编写驱动对应的makefile:

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)(4)

驱动编译

此时,对应驱动程序与编译脚本完毕,执行make all进行编译生存ko文件。

执行make all编译生成xtw_soc_driver.ko文件。

Root权限,加载insmod xtw_soc_driver.ko(卸载使用: rmmod xtw_soc_driver.ko)

同时,打开终端,输入 dmesg -wH 用于观察内核log:

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)(5)

驱动的log打印

使用insmod和rmmod加载/卸载驱动后,dmesg查看log如下:

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)(6)

加载和卸载驱动的log

驱动加载完后,可以使用cat /proc/devices

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)(7)

驱动加载内核

此时,还需要使用创建节点到dev下,使用命令:

mknod /dev/xtw_soc_driverdev c 236 0

使用ls/ dev查看:

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)(8)

PS:注意proc/devices和/dev下面的关系,为何需要mknode?

@@@ 此时驱动程序已经编译并且加载完,后续只要完成应用层程序编写与调用即可:

通过C库的文件操作open/read等接口,调用底层驱动的接口:

创建xtw_soc_test.c文件:

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)(9)

应用层程序

对应编写makefile

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)(10)

应用层makefile

编译生存

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)(11)

编译结果

xtw_soc_test

su权限运行结果日志:

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)(12)

运行log

通过应用层编写代码,调用驱动100次。

至此,编译驱动程序ko,和应用层程序调用驱动的操作步骤完成。

在驱动程序中,我们定义了MAJOR,

Linux驱动开发如何入门(Linux入门驱动及应用层调用示例流程)(13)

主设备号

在Linux中,MAJOR和MINOR分别表示主设备号和次设备号。主设备号可以表示一类设备,次设备号可以表示为这类设备的一个子类的设备。

insmod是将驱动加入到内核中(重启失效,需要生效的话需要编译进内核,或者在开机的时候调用脚本)。

mknod,可以理解为系统与设备通信的时候,创建的设备,通过调用open等操作完成调用。

小结:驱动与应用的关系,驱动的头文件的作用。insmode,mknod的使用。

点个关注,谢谢。

猜您喜欢: