platform機制:把硬體相關的**(固定的,如板子的網絡卡、中斷位址)和驅動(會根據程式作變動,如點哪乙個燈)分離開來,即要編寫兩個檔案:dev.c和drv.c(platform裝置和platform驅動)
platform會存在/sys/bus/裡面,如下圖所示, platform目錄下會有兩個檔案,分別就是platform裝置和platform驅動
驅動的分離,引出了匯流排(bus)、驅動(driver)和裝置(device)模型。
(一) 編寫裝置**需要用到的結構體和函式
platform_device結構體如下:
struct platform_device ;要用的函式如下,在dev裝置的入口出口函式中用到
int platform_device_register(struct platform_device * pdev); //註冊dev裝置(二) 編寫驅動**需要用到的結構體和函式int platform_device_register(struct platform_device * pdev); //登出dev裝置
struct platform_driver ;
int platform_driver_register(struct platform_driver *drv); //註冊驅動首先建立裝置**和驅動**:led_dev.c(platform裝置,指定燈的引腳)、led_drv.c(platform驅動,初始化燈和控制邏輯)platform_driver_unregister(struct platform_driver *drv); //解除安裝驅動
struct resource * platform_get_resource(struct platform_device *dev, unsigned int type,unsigned int num);//獲取裝置的某個資源,獲取成功,則返回乙個resource資源結構體
(一) 編寫led_dev.c
#include #include #include #include #include #include #include #include #include #include #include static struct resource led_resource =
};static void led_release(struct device * dev) //釋放函式
{}static struct platform_device led_dev = ,
};static int led_dev_init(void) //入口函式,註冊dev裝置
static void led_dev_exit(void) //出口函式,登出dev裝置
module_init(led_dev_init); //修飾入口函式
module_exit(led_dev_exit); //修飾出口函式
module_license("gpl"); //宣告函式
(二) 編寫led_drv.c
#include /*包含file_operation結構體*/
#include /* 包含module_init module_exit */
#include /* 包含license的巨集 */
#include /*包含miscdevice結構體*/
#include /*包含printk等操作函式*/
#include static int led_probe(struct platform_device *pdev)
static int led_remove(struct platform_device *pdev)
struct platform_driver led_drv =
};static int led_drv_init(void) //入口函式,註冊驅動
static void led_drv_exit(void) //出口函式,解除安裝驅動
module_init(led_drv_init);
module_exit(led_drv_exit);
module_license("gpl");
如下圖,「insmod led_dev.ko」載入裝置成功過後,在/sys/bus/platform/devices目錄下會生成對應的裝置名稱。
載入驅動時,當和裝置名字「myled」匹配成功過後,會進入對應的probe函式。
linux驅動之 led驅動
練手,第乙個字元驅動.用模組載入方法 華清遠見 嵌入式linux裝置驅動開發詳解 的 拿來改的.編譯過程發現很多錯誤.最後發現 這本書帶的驅動 都是基於linux2.4的.目前我用的linux2.6,部分需要做修改.我的板子是 友善之臂的 2410.vmware ubuntu nfs交叉編譯 首先 ...
linux驅動之塊裝置驅動
塊裝置驅動的系統架構 塊裝置註冊過程 1,註冊裝置塊驅動程式 register blkdev 2,初始化請求佇列 blk init queue 3,指明扇區的大小 blk queue logical block size dev queue,sect size 4,申請乙個gendisk結構,初始化...
Linux驅動開發之DRM驅動
qq群 852283276 b站 主頁 drm 驅動程式開發 開篇 drm 驅動程式開發 vkms 最簡單的drm應用程式 single buffer drm 驅動是如何建立 fb device 的 linux中的drm 介紹 linux graphic dri 顯示子系統 介紹1 xilinx d...