Android为Tiny4412设备驱动在proc目录下添加一个可读版本信息的文件

发布时间:2019-08-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android为Tiny4412设备驱动在proc目录下添加一个可读版本信息的文件脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

https://www.jb51.net/article/152879.htm上节,我们明白了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 20 char 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 20 char 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");

总结

android教程
脚本网站
android studio

脚本宝典总结

以上是脚本宝典为你收集整理的Android为Tiny4412设备驱动在proc目录下添加一个可读版本信息的文件全部内容,希望文章能够帮你解决Android为Tiny4412设备驱动在proc目录下添加一个可读版本信息的文件所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。