a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統 > Android > 正文

Android為Tiny4412設備驅動在proc目錄下添加一個可讀版本信息的文件

2019-10-21 21:32:57
字體:
來源:轉載
供稿:網友

上節,我們明白了proc文件系統的作用,接下來我們在已經寫好的led驅動的基礎上,在proc目錄下創建一個文件夾,然后加入led驅動的版本信息讀取。

我們在init函數的最后加入:

//定義proc文件系統節點struct proc_dir_entry *dev_dir , *dev_version;//創建一個目錄dev_dir = proc_mkdir("Tiny4412_leds", NULL); //創建一個文件dev_version = create_proc_entry("version", S_IRUGO, dev_dir); //調用讀版本的函數dev_version->read_proc = proc_read_version ;

然后編寫獲取版本信息的讀函數:

#define VERSION_LEN 20char Tiny4412_LED_version[VERSION_LEN] = "20170908/n";int proc_read_version(char *page, char **start, off_t off, int count, int *eof,         void *data){ int len ;  len = sprintf(page,Tiny4412_LED_version); //將字符串寫入page,相當于copy到用戶層 return len ;}

大功告成!!

接下來編譯完成,將kenel刷入開發板后卡機,用adb shell進入可以看到如下:

Android,Tiny4412,設備驅動,proc

修改的源碼:

#include <linux/kernel.h>#include <linux/module.h>#include <linux/miscdevice.h>#include <linux/fs.h>#include <linux/types.h>#include <linux/moduleparam.h>#include <linux/slab.h>#include <linux/ioctl.h>#include <linux/cdev.h>#include <linux/delay.h>#include <linux/gpio.h>#include <mach/gpio.h>#include <plat/gpio-cfg.h>//添加必要的頭文件#include <linux/proc_fs.h>#include <linux/uaccess.h>#define DEVICE_NAME "leds"static int led_gpios[] = { EXYNOS4212_GPM4(0), EXYNOS4212_GPM4(1), EXYNOS4212_GPM4(2), EXYNOS4212_GPM4(3),};#define LED_NUM ARRAY_SIZE(led_gpios)static long tiny4412_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg){ switch(cmd) { case 0: case 1:  if (arg > LED_NUM) {  return -EINVAL;  }  gpio_set_value(led_gpios[arg], !cmd);  //printk(DEVICE_NAME": %d %d/n", arg, cmd);  break; default:  return -EINVAL; } return 0;}static struct file_operations tiny4412_led_dev_fops = { .owner  = THIS_MODULE, .unlocked_ioctl = tiny4412_leds_ioctl,};static struct miscdevice tiny4412_led_dev = { .minor  = MISC_DYNAMIC_MINOR, .name  = DEVICE_NAME, .fops  = &tiny4412_led_dev_fops,};#define VERSION_LEN 20char Tiny4412_LED_version[VERSION_LEN] = "20170908/n";int proc_read_version(char *page, char **start, off_t off, int count, int *eof, void *data){ int len ;  len = sprintf(page,Tiny4412_LED_version); return len ;}static int __init tiny4412_led_dev_init(void) { int ret; int i; for (i = 0; i < LED_NUM; i++) { ret = gpio_request(led_gpios[i], "LED"); if (ret) {  printk("%s: request GPIO %d for LED failed, ret = %d/n", DEVICE_NAME,   led_gpios[i], ret);  return ret; } s3c_gpio_cfgpin(led_gpios[i], S3C_GPIO_OUTPUT); gpio_set_value(led_gpios[i], 1); } //雜類設備 ret = misc_register(&tiny4412_led_dev); //定義proc文件系統節點 struct proc_dir_entry *dev_dir , *dev_version; //創建一個目錄 dev_dir = proc_mkdir("Tiny4412_leds", NULL);  //創建一個文件 dev_version = create_proc_entry("version", S_IRUGO, dev_dir);  //調用讀版本的函數 dev_version->read_proc = proc_read_version ; printk(DEVICE_NAME"/tinitialized/n"); return ret;}static void __exit tiny4412_led_dev_exit(void) { int i; for (i = 0; i < LED_NUM; i++) { gpio_free(led_gpios[i]); } misc_deregister(&tiny4412_led_dev);}module_init(tiny4412_led_dev_init);module_exit(tiny4412_led_dev_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("FriendlyARM Inc & Y.X.YANG modify");

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品原创巨作av色鲁 | 高清国产视频 | 色噜噜狠狠狠综合曰曰曰88av | 国产日韩精品视频 | 精品视频在线免费观看 | 黄色av网站在线免费观看 | 午夜小视频在线观看 | 夜本色| 色婷婷综合久久久久中文一区二区 | 国产精品国产三级国产aⅴ无密码 | 97在线视频免费 | 最近免费中文字幕在线视频2 | 日本不卡一区二区三区在线观看 | 色.com| 国产目拍亚洲精品99久久精品 | 狠狠躁夜夜躁人人爽天天高潮 | 亚洲精品乱码久久观看网 | 亚洲欧美一区二区三区 | 久久婷婷色 | 精品视频久久 | 国产欧美精品区一区二区三区 | 欧美激情一区二区三区四区 | 蜜桃视频日韩 | 最近免费中文字幕大全免费版视频 | 日韩一二三区视频 | www.色综合| 欧美日本在线观看 | 羞羞的视频在线观看 | 亚洲天堂久久 | h肉动漫无修一区二区无遮av | 日本午夜在线 | 日韩精品亚洲一区 | 色鲁97精品国产亚洲 | 黄色毛片网站在线观看 | 午夜成人免费影院 | 伊人天堂在线 | 四虎在线视频 | 九九色九九 | 国产精品福利免费 | 日本一区二区三区四区 | 国产精品毛片一区二区 |