字元設備註冊platform平臺驅動機制
怎麼利用平臺裝置驅動機制來寫驅動:
-------------------------------------------------------------------------
1.先實現裝置方向的:
1)看晶片手冊,和原理圖獲取資源
2)構建平臺裝置結構體,將平臺資源加入進來
3)把我們的裝置資源掛在到虛擬匯流排的裝置連表中去
2. 再實現裝置驅動:
1)構建平臺驅動結構體,不知道的時候可以看別人的
2)註冊,把我們的驅動加入到平臺裝置驅動連表中去
3)實現probe函式
4)實現操作硬體的方法
5)註冊字元裝置驅動
led_dev.c
#include <linux/fs.h> /* 參考arch/arm/plat-s3c24xx/devs.c */ /*1. 根據晶片手冊來獲取資源*/ void led_release(struct device *dev) } /*1.構建平臺裝置結構體,將平臺資源加入進來*/ /*2。把我們的裝置資源掛在到虛擬匯流排的裝置連表中去*/ void led_dev_exit(void) module_init(led_dev_init); MODULE_LICENSE("GPL"); |
led_drv.c
#include <linux/fs.h> static int major = 0; static volatile unsigned long *gpio_con; int led_open(struct inode *inode, struct file *file) *gpio_con &= ~(0x3 << (pin * 2));
if (size != 1) copy_from_user(ker_buf, buf, 1); if (ker_buf[0]) /*4實現操作硬體的方法*/ /*3。實現probe函式*/ /*獲取到資源以後再進行對映*/ r = platform_get_resource(dev, IORESOURCE_IRQ, 0); /* 註冊驅動向核心裡面註冊我們的字元裝置驅動 */ /* sysfs ==> 掛接到/sys */ // mdev會根據/sys下的這些內容建立/dev/led return 0; int led_remove(struct platform_device *dev) /*1。構建平臺驅動結構體,不知道的時候可以看別人的*/ /*2。註冊,把我們的驅動加入到平臺裝置驅動連表中去*/ static int led_drv_exit(void) module_init(led_drv_init); MODULE_LICENSE("GPL"); |