立即学习:https://edu.csdn.net/course/play/9511/201534?utm_source=blogtoedu
- 设备树:在DTS文件中构造节点,节点含有资源(管脚),dts>dtb传给内核,内核处理解析dtb文件得到一个一个的device.node结构体,由变为platform_device结构体,里面含有资源(资源来自DTS文件).platform_device与内核当中的platform_drive匹配,一旦匹配成功,platform_drive里的probe就会被调用,分配》设置》注册
- led节点有两个属性:我们使用compatible在内核里面找到能够支持这个节点的驱动程序;reg(本意为寄存器的地址)可以用来指定引脚
- reg = <S3C2410_GPF(5) 1>;S3C2410_GPF(5)为起始地址; 1为这个寄存器的大小
- platform_driver led_drv中.of_match_table = of_match_leds, /* 能支持哪些来自于dts的platform_device */
- "来自dts的platform_device结构体" 与 "我们写的platform_driver" 的匹配过程:
"来自dts的platform_device结构体"里面有成员".dev.of_node", 它里面含有各种属性, 比如 compatible, reg, pin
"我们写的platform_driver"里面有成员".driver.of_match_table", 它表示能支持哪些来自于dts的platform_device 如果"of_node中的compatible" 跟 "of_match_table中的compatible" 一致, 就表示匹配成功, 则调用 platform_driver中的probe函数; - 在probe函数中, 可以继续从of_node中获得各种属性来确定硬件资源
- 如果想要修改所使用的灯,修改一下设备树,上传编译,从新启动内核,使用新的设备树,使用新的dtb文件来启动内核就可以了