嵌入式linux平台裝置驅動(裝置驅動模型)開發之linux核心中的裝置__linux

來源:互聯網
上載者:User
linux核心中的裝置   對於掛接在具體匯流排上外部裝置都有一個struct device與之對應,比如平台裝置有platform_device與之對應,其中platform_device結構體如下: struct platform_device {
const char * name; //裝置名稱,要與driver的名字進行匹配,如果成功則進入驅動的探測函數
int id;
struct device dev;
u32 num_resources;
struct resource* resource; //裝置的私人資源
const struct platform_device_id*id_entry;

/* MFD cell pointer */
struct mfd_cell *mfd_cell;


/* arch specific additions */
struct pdev_archdataarchdata;
};

對於usb匯流排上的usb裝置用struct usb_device 來代表具體的usb裝置或則是記錄具體usb的相關資訊,其中usb_device的結構體如下: struct usb_device {
char path[SYSFS_PATH_MAX];
char busid[SYSFS_BUS_ID_SIZE];


uint32_t busnum;
uint32_t devnum;
uint32_t speed;


uint16_t idVendor;
uint16_t idProduct;
uint16_t bcdDevice;


uint8_t bDeviceClass;
uint8_t bDeviceSubClass;
uint8_t bDeviceProtocol;
uint8_t bConfigurationValue;
uint8_t bNumConfigurations;
uint8_t bNumInterfaces;
} __attribute__((packed));

linux系統中所代表的外部裝置的結構體變數時在系統的啟動階段或則動態註冊到相應的匯流排上去。並且註冊到裝置到相應的匯流排是通過調用device_add函數來實現的。所謂的註冊裝置匯流排是將裝置載入匯流排代表裝置的鏈表中區。 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; linux 核心通過該成員device載入他所在的鏈表裝置的鏈表成,即是把device 載入到klist_devices鏈表上去。
        struct klist_node knode_driver; 即是把driver載入到klist_drivers中去
        struct  bus_type *bus; 表示裝置所掛載 的匯流排         struct device_driver *driver; 表示裝置所對應的裝置驅動
添加平台裝置到平台匯流排的相關函數以及周邊函數  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);


      

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.