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

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对应的值,匹配了就加载对应的驱动

 

你可能感兴趣的:(linux,device,tree(设备树),linux驱动)