平台总线-probe函数 的了解和使用
文章目录
前言
-
驱动-平台总线-platform设备注册platform驱动注册篇 的文章中,我们理解了platform 总线,了解了platform driver和platform device 的注册,配对 知识。
-
匹配成功之后会进入在注册 platform 驱动程序中编写的 probe 函数,在上个章节只是为了验证是否匹配成功,所以只是在 probe 中加入了一句相关打印,而驱动是要控制硬件的,但是平台总线模型对硬件的描述写在了 platform_device.c 中,platform 设备和 platform 驱动匹配成功之后,那我们如何在驱动platform_driver.c 的 probe 函数中,得到 platform_device.c 中编写的硬件资源呢?
也就是 平台总线体系中,device 负责描述设备相关,但是驱动需要把设备用起来,那就需要再驱动里面初始化设备、控制设备、获取设备相关信息的。 这里就是probe 方法里面要做的。
- 我们这里简单看看再probe 函数里面如何获取设备资源、描述信息等。
一、参考资料
驱动-平台总线-platform设备注册platform驱动注册篇
平台总线-probe函数编写
手把手教Linux驱动-platform总线详解
platform总线设备驱动模型
二、程序测试
总线设备编码
驱动-平台总线-platform设备注册platform驱动注册篇 里面的程序我们直接拿来用,编码如下:
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/ioport.h>
#define MEM_START_ADDR 0xFDD60000
#define MEM_END_ADDR 0xFDD60004
#define IRQ_NUMBER 101
static struct resource my_resources[] = {
{
.start = MEM_START_ADDR, // 内存资源起始地址
.end = MEM_END_ADDR, // 内存资源结束地址
.flags = IORESOURCE_MEM, // 标记为内存资源
},
{
.start = IRQ_NUMBER, // 中断资源号
.end = IRQ_NUMBER, // 中断资源号
.flags = IORESOURCE_IRQ, // 标记为中断资源
},
};
static void my_platform_device_release(struct device *dev)
{
// 释放资源的回调函数
}
static struct platform_device my_platform_device = {
.name = "my_platform_device", // 设备名称
.id = -1, // 设备ID 可以用于区分同一种设备的不同实例。这个参数是可选的,如果不需要使用 ID 进行区分,可以将其设置为-1,
.num_resources = ARRAY_SIZE(my_resources), // 资源数量
.resource = my_resources, // 资源数组
.dev.release = my_platform_device_release, // 释放资源的回调函数
};
static int __init my_platform_device_init(void)
{
int ret;
ret = platform_device_register(&my_platform_device)

最低0.47元/天 解锁文章
1006

被折叠的 条评论
为什么被折叠?



