簡介:裝置驅動程式中,匯流排驅動模型和裝置樹的差別在於平台裝置的構建不同,在傳統平台裝置驅動程式寫在c檔案中,使用裝置樹時,平台裝置之前不存在,在dts檔案中構造節點,節點裡面含有資源,裝置樹詳細的內容我會在以後的部落格中詳細介紹。
cpu : jz2440
u-boot: u-boot-1.1.6
kernel: linux-4.19-rc3
root :fs_mini_mdev_new
/* platform_device結構體定義 */
struct platform_device ;
/* platform_device示例 */
struct platform_driver led_drv =
};/* platform_driver結構體定義 */
struct platform_driver ;
/* platform_driver結構體示例 */
struct platform_driver led_drv =
};
由於本文件的目的是簡單介紹傳統的匯流排驅動模型和裝置樹的區別,匯流排驅動模型的詳細就不再介紹,詳細介紹可以參考linux裝置驅動模型之匯流排、裝置、驅動三者的關係
下面簡單分析裝置樹的匹配
根據上面的函式可以看出,從裝置樹得到的platform_device中的節點和platform_driver中的of_device_id是否匹配,匹配成功之後,就會呼叫platform_driver中的probe函式。
裝置樹檔案
/dts-v1/;
/ ;/*
cpus ;
};*/
chosen ;
led ;
};
平台驅動檔案
#include #include #include #include #include #include #include #include #include #include #include #include static int led_pin;
static volatile unsigned int *gpio_con;
static volatile unsigned int *gpio_dat;
/* 123. 分配/設定/註冊file_operations
* 4. 入口
* 5. 出口
*/static int major;
static struct class *led_class;
static unsigned int gpio_base = ;
static int led_open (struct inode *node, struct file *filp)
else
gpio_dat = gpio_con + 1;
*gpio_con &= ~(3<
*gpio_con |= (1<
return 0;
}static ssize_t led_write (struct file *filp, const char __user *buf, size_t size, loff_t *off)
else
if (!led_pin)
major = register_chrdev(0, "myled", &myled_oprs);
led_class = class_create(this_module, "myled");
device_create(led_class, null, mkdev(major, 0), null, "led"); /* /dev/led */
return 0;
}static int led_remove(struct platform_device *pdev)
static const struct of_device_id of_match_leds = , };
struct platform_driver led_drv =
};static int myled_init(void)
static void myled_exit(void)
module_init(myled_init);
module_exit(myled_exit);
module_license("gpl");
裸機開發之點亮LED
基於x210開發板的led燈點亮。查閱底板原理圖可以得到,四個led引腳分別為 其中pwmtout1引腳與核心板的gpd0 1引腳相連,所以可以通過操作gpd0 1引腳來操作d25。gpio,general purpose input output的簡稱,屬於晶元上的一部分引腳,這部分引腳可以被程式...
ARM裸機之點亮LED
實驗開發版 s5pv210 1 什麼是gpio?general purpose input output 通用輸入 輸出 簡稱為gpio,屬於晶元引腳的一部分。嵌入式系統中常常有數量眾多,但是結構卻比較簡單的外部裝置 電路,對這些裝置 電路有的需要cpu為之提供控制手段,有的則需要被cpu用作輸入訊...
一步步點亮LED之彙編點亮LED
gpj0con埠一共有8個埠,分別記住 gpj0 0 gpj0 7 相關暫存器為gpj0con gpj0dat gpj0con暫存器中設定8個引腳的工作模式 32 8 4,每個引腳分到4位,譬如gpj0 0位bit0 bit3,我們就給 它寫入0001得到輸出模式 1 需要控制的引腳 gpj0 3 ...