添加内核驱动模块(6)(mydriver.c+ Konfig+Makefile )

本文详细介绍了嵌入式设备驱动的开发流程,从创建设备描述块到申请内核资源,再到通过SPI和GPIO进行硬件操作。文章深入探讨了PMOD流程,包括OFDRIVER框架的编写、PDEV描述块的创建与填充,以及资源注册到内核的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大多数函数和代码,是用来
创建数据结构,分配设备描述块,申请内核资源描述块。
填充这些描述块,
为这些设备描述块和内核资源描述块之间创建关联,赋值各个指针成员。
当SYSCALL调用驱动代码时,通过这些设备描述块,能够找到其他的需要的资源描述块。
最终发生硬件操作时,是由spi_write和gpio_set_value来完成的。
而发生文件系统操作时,是由fops里面的函数完成的。

PMOD流程梳理:
首先是编写修饰代码,定义整个驱动的名字,提示信息等。

然后是编写OFDRIVER的驱动框架。
包括PLATDRIVER的描述块,OFDEVICEID的描述块数组。以及把他们用注册宏注册到内核资源池中。
包括probe函数和remove函数的框架。

调用probe函数的caller,会把它的PDEV描述块传给probe。
PDEV内含的DEV成员,它又有一个OFNODE成员,这是一个指向DEVICENODE描述块的指针。DEVICENODE是内核资源。
probe里面,分配内存,
创建PMOD描述块,创建DISP_BUF缓冲区,然后填充PMOD描述块。
创建PDATA描述块,然后填充这个PDATA描述块,创建一个PDEV描述块,然后填充这个PDEV描述块。把刚才创建的PDATA的指针填充到PDEV中。PDEV描述块,有一个成员dev,dev成员有一个platdata成员,这是一个指针,指向PDATA描述块。
填充PMOD描述块的pdev成员,这是一个指针,指向一个PDEV描述块。我们把PMOD和刚才创建的PDEV描述块关联起来。
将刚才创建的PDEV描述块注册到内核资源池中。
填充PMOD的name成员,用传入的DEVICE_NODE的name成员填充。让他和系统中的关联的DEVICE_NODE同名。
将PMOD描述块所需要的资源注册到SPIBUS中。
填充DEVICE_NODE的data成员,把PMOD描述块的指针赋值给data成员。这样,DEVICE_NODE就关联到了创建的PMOD描述块。
分配一个CDEV的ID。
创建一个CLASS描述块。这是为本模块分配的内核资源。在模块中用静态变量保存这个资源指针。
将SPIDRIVER注册到内核中。这是一个模块中的静态变量,在本模块中使用。
创建一个SPIDEVICE,并关联到PMOD描述块中的spi成员。

当SPIDRIVER注册到内核中时,会调用对应的probe函数。
这个probe函数被内核调用时,内核传递一个SPI_DEVICE描述块给它。
配置了SPIDEVICE的参数。
创建了一个CDEV描述块。
初始化了GPIO。
初始化了显示缓冲区。

在创建CDEV的时候,把PMOD内含的cdev成员注册到了内核资源池中。fops用的是模块内的一个静态变量。
注册了CDEV后,为CDEV在系统中添加DEVICE_NODE。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值