/sys/bus/XXX/devices/ vs /sys/bus/XXX/drivers/
1.1 在runtime的/sys/bus/platform/drivers里面找到了4g-modem-platdata
1.2 在代码里/kernel/drivers/net/lte/lte_rm310.c找到了
static const struct of_device_id modem_platdata_of_match[] = {
{ .compatible = "4g-modem-platdata" },
{ }
};
在rk3399-evb-ind.dtsi里面找到了
4G-Modem {
compatible="4g-modem-platdata";
pinctrl-names = "default";
pinctrl-0 = <<e_vbat <e_power_en <e_reset>;
4G,vbat-gpio = <&gpio4 RK_PD0 GPIO_ACTIVE_HIGH>;
4G,power-gpio = <&gpio4 RK_PC6 GPIO_ACTIVE_LOW>;
4G,reset-gpio = <&gpio4 RK_PD4 GPIO_ACTIVE_LOW>;
status = "okay";
};
1.3 但是在/sys/bus/platform/devices里面没找到4g-modem-platdata
因为起作用的是/kernel/arch/arm64/boot/dts/rockchip/rk3399-quantum-lp4.dts
2. alarmtimer
同时存在于/sys/bus/XXX/devices/ vs /sys/bus/XXX/drivers/的,并没有在代码中找到相应的compatible
2.1 在"/kernel/kernel/time/alarmtimer.c"里面:
找到了platform_device_register_simple("alarmtimer", -1, NULL, 0); //看起来是这个函数将alarmtimer注册为了一个device
->platform_device_register_full
找到了platform_driver_register(&alarmtimer_driver); //看起来这个函数将alarmtimer注册为了一个driver
结论:
也就是说内部驱动,会不涉及dts,被强制添加的。
3. backlight
3.1 在/sys/bus/中
在/sys/bus/platform/drivers/中发现了
pwm-backlight
在/sys/bus/platform/devices/中发现了
backlight
backlight-aux-dp
backlight-aux-edp
backlight-dp
3.2
3.2.1 找到了错误的位置
在"/kernel/drivers/gpu/drm/rockchip/rockchip_drm_backlight.c"发现了
backlight_device_register,注册了
然后发现了驱动名"drm-backlight"
static struct platform_driver rockchip_drm_backlight_driver = { .probe = rockchip_drm_backlight_probe, .remove = rockchip_drm_backlight_remove, .driver = { .name = "drm-backlight", .of_match_table = of_match_ptr(rockchip_drm_backlight_dt_ids), }, };
但这些似乎都没有启用
3.2.2 从/sys/bus/platform/devices/倒推:
backlight
backlight-aux-dp
backlight-aux-edp
backlight-dp
panel
panel-dp
panel-for-dp-aux
panel-for-edp-aux
去dts中找backlight-aux-edp
backlight_aux_edp: backlight-aux-edp { compatible = "edp-aux-backlight"; power-supply = <&vcc3v3_sys>; brightness-levels = < 16 17 18 19 20 21 22 23
.................
248 249 250 251 252 253 254 255>; default-brightness-level = <200>; };
这个backlight_aux_edp是个属性名,是被引用到了前面的节点的
panel-for-edp-aux { status="okay"; compatible = "simple-panel"; power-supply = <&dummy>; backlight = <&backlight_aux_edp>; };
所以这里是device "panel-for-edp-aux"引用了device "backlight-aux-edp"
这里可以找到compatible name=edp-aux-backlight
找到了几个屏设备和背光设备的对应关系:
panel: panel { compatible = "simple-panel"; backlight = <&backlight>; panel_dp: panel-dp { compatible = "simple-panel"; backlight = <&backlight_dp>; panel-for-edp-aux { compatible = "simple-panel"; backlight = <&backlight_aux_edp>; panel-for-dp-aux { compatible = "simple-panel"; backlight = <&backlight_aux_dp>; backlight_dp: backlight-dp { compatible = "pwm-backlight"; backlight_aux_edp: backlight-aux-edp { compatible = "edp-aux-backlight"; backlight_aux_dp: backlight-aux-dp { compatible = "dp-aux-backlight";
结论:
设备名在/sys/bus/XXX/devices/ 在/sys/devices/platform/ 在dts中,都可以找到,然后可以找到他们兼容的驱动名,即compatible name.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架