#include #include #include #include #include #include #include #include #include #include #define jt_gpio_magic ('k')
#define jt_gpio_read _io(jt_gpio_magic, 1)
#define jt_gpio_write _io(jt_gpio_magic, 2)
#define wakeup_pin gpio_pb(28)
module_author("bing ");
module_description("jt wakeup gpio pin driver");
module_license("gpl");
static int major;
static struct class *jt_gpio_class;
static struct device *jt_gpio_device;
static int jt_gpio_open(struct inode *inode, struct file *file)
static int jt_gpio_release(struct inode *inode, struct file *file)
static long jt_gpio_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
return 0;
}const struct file_operations jt_gpio_fops = ;
static int __init jt_gpio_init(void)
ret = gpio_direction_output(wakeup_pin, 0);
if (ret)
major = register_chrdev(0, "jt_gpio", &jt_gpio_fops);
jt_gpio_class = class_create(this_module, "jt_gpio_class");
if (!jt_gpio_class)
jt_gpio_device = device_create(jt_gpio_class, null, mkdev(major, 0), null, "jt_gpio");
if (!jt_gpio_device)
return 0;
}static void __exit jt_gpio_exit(void)
module_init(jt_gpio_init);
module_exit(jt_gpio_exit);
核心關於gpio驅動有標準介面,一般是申請gpio,設定gpio是輸入還是輸出,接著設定gpio的值,使用結束撤銷申請
本例將gpio註冊為乙個字元裝置,並將其資訊匯出到sys檔案系統,這樣當系統啟動udev後會自動建立裝置節點,
從而省去手動建立的麻煩.
下面是應用測試程式:
#include #include #include #include #include #include #define hello_magic 'k'
#define gpio_read _io (hello_magic, 1)
#define gpio_write _io (hello_magic, 2)
int main(int argc, char** argv)
value = atoi(argv[1]);
fd = open("/dev/jt_gpio",o_rdwr);
if (fd < 0)
ret = ioctl (fd, gpio_write,&value);
if (ret < 0)
close (fd);
return 0;
}
Linux GPIO驅動 驅動框架概述
gpio是嵌入式開發中最常見的介面,之前自己就有寫過小的gpio驅動,提供ioctl介面給使用者空間操作。但直到最近才發現linux自身就有完善的gpio驅動框架,並且通過sysfs向使用者空間提供操作介面。linux的gpio驅動框架層次及資料結構如下 最上層是用來向向使用者空間提供介面,使用者可...
linux gpio字元裝置驅動
在linux下編寫led驅動,控制相應的gpio管腳。在這裡有兩種方式 1 直接操作相應的暫存器 2 通過核心提供的gpio操作庫函式 第一種方式就省略了,只講第二種方式。這裡板卡上有兩個led燈,在使用者空間採用兩種方式控制led 1.dev led0 dev led1 fd0 open dev ...
Linux GPIO驅動 GPIO通用層
如果在核心配置的時候有開啟config gpio sysfs標誌,核心就會在 sys目錄下匯出gpio的使用者空間操作介面。gpiolib sysfs init drivers gpio gpiolib.c 是gpio lib的初始化函式,該函式首先在 sys class 目錄下面建立乙個gpio的...