Embedded Linux Platform device driver (device driven model) development of the device in the Linux kernel __linux
Source: Internet
Author: User
devices in the Linux kernelFor the connection on the specific bus external devices have a struct device corresponding, such as platform equipment has platform_device corresponding to it, which platform_device structure is as follows: struct Platform_device {
const char * name; Device name to match the name of the driver and, if successful, into the driven probe function
int id;
struct device dev;
U32 num_resources;
struct resource* resource; Private resources for Devices
const struct Platform_device_id*id_entry;
* Arch Specific Additions * *
struct Pdev_archdataarchdata;
};
For USB devices on the USB bus, the struct usb_device is used to represent the specific USB device or to record the specific USB information, in which the usb_device structure is as follows: struct Usb_device {
Char Path[sysfs_path_max];
Char Busid[sysfs_bus_id_size];
The structure variables of the external devices represented in the Linux system are dynamically registered to the corresponding bus at the startup stage of the system. and registering to the device to the corresponding bus is achieved by calling the Device_add function. The so-called registered device bus is to load the device into the bus representing the device's linked list in central. struct Device {struct Klist_node knode_bus; struct Klist_node knode_driver; struct Bus_type *bus; struct Device_driver *driver; };
struct Klist_node Knode_bus; The Linux kernel uses the member device to load the list of his linked list devices, which is to load the device onto the klist_devices list.
struct Klist_node knode_driver; Which is to load the driver into the klist_drivers.
struct Bus_type *bus; Represents the bus struct device_driver *driver on which the device is mounted; Indicates the device driver for the device
Add platform device to platform bus correlation function and peripheral function extern int Platform_device_register (struct platform_device *);
extern void Platform_device_unregister (struct platform_device *);
extern struct resource *platform_get_resource (struct platform_device *, unsigned int, unsigned int);
extern int Platform_get_irq (struct platform_device *, unsigned int);
extern struct resource *platform_get_resource_byname (struct platform_device *, unsigned int, const char *);
extern int Platform_get_irq_byname (struct platform_device *, const char *);
extern int platform_add_devices (struct platform_device * *, int);
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.