您的位置:首页 > 运维架构 > Linux

Linux设备树设备节点compatible属性和驱动compatible(驱动加载)

2017-01-12 09:33 218 查看
Linux设备树设备节点compatible属性和驱动compatible(驱动加载)
 
比如按键驱动kernel\drivers\input\keyboard\gpio_keys.c下按键驱动的定义

static struct of_device_idgpio_keys_of_match[] = {
{.compatible = "gpio-keys", },
{},
};
static struct platform_drivergpio_keys_device_driver = {
.probe = gpio_keys_probe,
.remove = gpio_keys_remove,
.driver = {
.name ="gpio-keys",
.owner = THIS_MODULE,
.pm = &gpio_keys_pm_ops,
.of_match_table= of_match_ptr(gpio_keys_of_match),
}
};

static int __init gpio_keys_init(void)
{
returnplatform_driver_register(&gpio_keys_device_driver);
}

late_initcall(gpio_keys_init);

这里按驱动name为gpio-keys,设备树按键这个设备节点名字也要是一样的

&soc {
gpio_keys{
compatible = "gpio-keys";
input-name= "gpio-keys";
pinctrl-names= "tlmm_gpio_key_active","tlmm_gpio_key_suspend";
pinctrl-0= <&gpio_key_active>;
pinctrl-1= <&gpio_key_suspend>;

vol_up{
label= "volume_up";
gpios= <&msm_gpio 90 0x1>;
linux,input-type= <1>;
linux,code= <115>;
gpio-key,wakeup;
debounce-interval= <15>;
};
};
};

在linux内核启动过程中,这两个名字匹配了,就调用驱动的probe函数。

设备树中的每一个代表了一个设备的节点都要有一个compatible属性。compatible是系统用来决定绑定到设备的设备驱动的关键。compatible属性是用来查找节点的方法之一,另外还可以通过节点名或节点路径查找指定节点。

 

系统初始化时会初始化platform总线上的设备(按键驱动表现为Platform驱动),根据设备节点"compatible"属性和驱动中of_match_table对应的值,匹配了就加载对应的驱动

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: