Platform Devices and Device Tree Basics
Platform devices are a key concept in Linux device driver development, especially on embedded systems and SoCs. A platform device represents a device that is directly attached to the system board and is not discoverable by standard bus enumeration methods, such as PCI or USB. Instead, the kernel is informed about these devices through board-specific data, which can be provided statically in code or dynamically via the device tree. Platform devices are commonly used for on-chip peripherals, such as UARTs, timers, or GPIO controllers.
platform_device_example.c
1234567891011121314151617181920212223242526272829303132// platform_device_example.c #include <linux/module.h> #include <linux/platform_device.h> static struct platform_device my_platform_device = { .name = "my_simple_device", .id = -1, }; static int __init my_platform_device_init(void) { int ret; ret = platform_device_register(&my_platform_device); if (ret) pr_err("Failed to register platform device\n"); else pr_info("Platform device registered\n"); return ret; } static void __exit my_platform_device_exit(void) { platform_device_unregister(&my_platform_device); pr_info("Platform device unregistered\n"); } module_init(my_platform_device_init); module_exit(my_platform_device_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("Example Platform Device Registration");
While the previous code demonstrates registering a platform device directly in C, modern Linux systems—especially on ARM and embedded platforms—use a device tree to describe hardware. The device tree is a data structure for describing hardware layout to the kernel, decoupling hardware configuration from kernel code. This allows the same kernel binary to support multiple hardware variants without recompilation. Device drivers can then match their platform devices based on compatible strings or other properties defined in the device tree. In the context of the platform device code shown above, the device tree would provide the kernel with the information needed to instantiate a platform device for the driver, rather than requiring hardcoded registration in C.
my_simple_device.dts
123456// my_simple_device.dts snippet my_simple_device: my_simple_device@0x10000000 { compatible = "myvendor,my-simple-device"; reg = <0x10000000 0x1000>; status = "okay"; };
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Fantastico!
Completion tasso migliorato a 3.85
Platform Devices and Device Tree Basics
Scorri per mostrare il menu
Platform devices are a key concept in Linux device driver development, especially on embedded systems and SoCs. A platform device represents a device that is directly attached to the system board and is not discoverable by standard bus enumeration methods, such as PCI or USB. Instead, the kernel is informed about these devices through board-specific data, which can be provided statically in code or dynamically via the device tree. Platform devices are commonly used for on-chip peripherals, such as UARTs, timers, or GPIO controllers.
platform_device_example.c
1234567891011121314151617181920212223242526272829303132// platform_device_example.c #include <linux/module.h> #include <linux/platform_device.h> static struct platform_device my_platform_device = { .name = "my_simple_device", .id = -1, }; static int __init my_platform_device_init(void) { int ret; ret = platform_device_register(&my_platform_device); if (ret) pr_err("Failed to register platform device\n"); else pr_info("Platform device registered\n"); return ret; } static void __exit my_platform_device_exit(void) { platform_device_unregister(&my_platform_device); pr_info("Platform device unregistered\n"); } module_init(my_platform_device_init); module_exit(my_platform_device_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("Example Platform Device Registration");
While the previous code demonstrates registering a platform device directly in C, modern Linux systems—especially on ARM and embedded platforms—use a device tree to describe hardware. The device tree is a data structure for describing hardware layout to the kernel, decoupling hardware configuration from kernel code. This allows the same kernel binary to support multiple hardware variants without recompilation. Device drivers can then match their platform devices based on compatible strings or other properties defined in the device tree. In the context of the platform device code shown above, the device tree would provide the kernel with the information needed to instantiate a platform device for the driver, rather than requiring hardcoded registration in C.
my_simple_device.dts
123456// my_simple_device.dts snippet my_simple_device: my_simple_device@0x10000000 { compatible = "myvendor,my-simple-device"; reg = <0x10000000 0x1000>; status = "okay"; };
Grazie per i tuoi commenti!