z3j6w9 发表于 2017-5-6 13:07:52

firefly-rk3288 第一个LED程序学习心得

本帖最后由 z3j6w9 于 2017-5-6 13:13 编辑

1.模块初始化和退出
sbusys_initcall(hello_init);
module_exit(hello_exit);
2.platform
首先要定义一个platform结构体
static struct platform_driver firefly_hello_driver = {
      .probe                = firefly_hello_probe,
      .remove                = firefly_hello_remove,
      .driver                = {
                .name      = "firefly_hello",
                .owner      = THIS_MODULE,
#ifdef CONFIG_OF
                .of_match_table      = of_firefly_hello_match,
#endif
      },

};
.probe :platform的入口函数
.remove:platform的退出函数
.of_match_table:用来match设备树的信息
static const struct of_device_id of_firefly_hello_match[] = {
      { .compatible = "firefly,hello_led" },
      { },
};
#endif

结构体中的compatible和dts中的compatible是对应的,驱动中通过函数of_get_named_gpio可以获得对应的gpio,使用方式如下
      gpio = of_get_named_gpio_flags(hello_node,"led", 0,&flag);
然后就可以对gpio进行设置
      gpio_direction_output(gpio, GPIO_HIGH);
3.dts配置
    firefly_hello{
      compatible = "firefly,hello_led";
      led = <&gpio8 GPIO_A2 GPIO_ACTIVE_LOW>;
      status = "okay";
    };
备注:
'status'属性用来表示节点的状态的,其实就是硬件的状态,用字符串表示。'okay'表示硬件正常工作,“disabled”表示硬件当前不可用,“fail”表示因为出错不可用,“fail-sss”表示因为某种原因出错不可用,sss表示具体的出错原因。实际中,基本只用'okay'和'disabled'。

暴走的阿Sai 发表于 2017-5-8 11:35:41

支持发帖分享

wuzongqiang193 发表于 2017-9-22 23:45:33

Xiexie分享
页: [1]
查看完整版本: firefly-rk3288 第一个LED程序学习心得