gpt4 book ai didi

linux - 使用设备驱动程序连接设备

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:08 24 4
gpt4 key购买 nike

我正在尝试了解 Linux 平台驱动程序。我从以下教程中获取了一个驱动程序:

http://linuxseekernel.blogspot.com/2014/05/platform-device-driver-practical.html

它是一个基本的平台驱动程序。我已经编译它并加载了模块。它加载正常,但是,它的探测功能永远不会执行。有很多文档说只要设备 ID 和驱动程序 ID 匹配,就会调用探测函数。好吧,我有以下驱动程序:

#include <linux/module.h>
#include <linux/kernel.h>
//for platform drivers....
#include <linux/platform_device.h>
#define DRIVER_NAME "twl12xx"

MODULE_LICENSE("GPL");

/**************/
static int sample_drv_probe(struct platform_device *pdev){
printk(KERN_ALERT "twl12xx: Probed\n");
return 0;
}
static int sample_drv_remove(struct platform_device *pdev){
printk(KERN_ALERT "twl12xx: Removing twl12xx\n");
return 0;
}

static const struct platform_device_id twl12xx_id_table[] = {
{ "twl12xx", 0},
{}
};
MODULE_DEVICE_TABLE(platform, twl12xx_id_table);

static struct platform_driver sample_pldriver = {
.probe = sample_drv_probe,
.remove = sample_drv_remove,
.driver = {
.name = DRIVER_NAME,
},
};
/**************/

int ourinitmodule(void)
{
printk(KERN_ALERT "\n Welcome to twl12xx driver.... \n");

/* Registering with Kernel */
platform_driver_register(&sample_pldriver);

return 0;
}

void ourcleanupmodule(void)
{
printk(KERN_ALERT "\n Thanks....Exiting twl12xx driver... \n");

/* Unregistering from Kernel */
platform_driver_unregister(&sample_pldriver);

return;
}

module_init(ourinitmodule);
module_exit(ourcleanupmodule);

我的设备树中还有以下条目:

twl12xx: twl12xx@2 {
compatible = "twl12xx";
};

我觉得我一定是遗漏了什么或错误地定义了我的设备树。

最佳答案

无论你读到什么都是正确的;驱动程序和设备 ID 都应该匹配。

您刚刚创建了驱动程序的框架,并且正在使用设备树。所以看起来不错。但是您的代码中缺少 of_match_table 条目;这对于设备 ID 匹配(与您从设备树传递的字符串相同)和驱动程序探测调用非常重要。

因此添加以下更改您的代码:

#ifdef CONFIG_OF
static const struct of_device_id twl12xx_dt_ids[] = {
.compatible = "ti,twl12xx",
{}
};
MODULE_DEVICE_TABLE(of, twl12xx_dt_ids);
#endif

static struct platform_driver sample_pldriver = {
.probe = sample_drv_probe,
.remove = sample_drv_remove,
.driver = {
.name = DRIVER_NAME,
.of_match_table = of_match_ptr(twl12xx_dt_ids),
},
.id_table = twl12xx_id_table,
};

关于linux - 使用设备驱动程序连接设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42680869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com