linux gpio驅動示例

2021-07-10 21:26:43 字數 1964 閱讀 4599

#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的...