http://blog.csdn.net/morixinguan/article/details/77808088

上节,我们明白了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进入可以看到如下:

修改的源码:

#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");

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

  1. Linux编写内核模块,实现在/proc目录下添加文件

    /proc是Linux上的一种虚拟文件系统,存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以更改其中某些文件来改变内核的运行状态. 现编 ...

  2. Unix/Linux操作系统分析实验四 设备驱动: Linux系统下的字符设备驱动程序编程

    Unix/Linux操作系统分析实验一 进程控制与进程互斥 Unix/Linux操作系统分析实验二 内存分配与回收:Linux系统下利用链表实现动态内存分配 Unix/Linux操作系统分析实验三 文 ...

  3. Linux中/proc目录下文件详解

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

  4. Linux中/proc目录下文件详解(二)

    Linux中/proc目录下文件详解(二) /proc/mdstat文件 这个文件包含了由md设备驱动程序控制的RAID设备信息. 示例: [root@localhost ~]# cat /proc/ ...

  5. 嵌入式 linux下proc目录下的文件详解

    http://blog.csdn.net/skdkjzz/article/details/19566717 目录 ----------------- 0 序言 0.1 简介 0.2 责任 1 收集系统 ...

  6. Linux中/proc目录下文件详解 /proc/devices文件 /proc/modules文件

    http://blog.chinaunix.net/uid-10449864-id-2956854.html 原来对linux系统中的/proc目录不是很了解,只知道可以查看cpu,内存等相关的信息, ...

  7. linux在当前目录下创建pic目录,Linux中/proc目录下文件详解

    文章转自: Linux中/proc目录下文件详解(一) ------------------------------------------------------------------------ ...

  8. Linux中/proc目录下文件详解(zt)

    Linux中/proc目录下文件详解(一) 声明:可以自由转载本文,但请务必保留本文的完整性. 作者:张子坚 email:zhangzijian@163.com 说明:本文所涉及示例均在fedora ...

  9. 9.proc目录下的文件和目录详解

    1./proc目录下的文件和目录详解 /proc:虚拟目录.是内存的映射,内核和进程的虚拟文件系统目录,每个进程会生成1个pid,而每个进程都有1个目录. /proc/Version:内核版本 /pr ...

最新文章

  1. SSL剥离工具sslstrip
  2. Pytorch的backward()相关理解
  3. python3最新稳定版本-python稳定版本
  4. 用几条shell命令快速去重10G数据
  5. [leetcode]207. Course Schedule课程表
  6. 页面库无法捕获到Added事件?
  7. java 数据挖掘 开源_5个开源数据挖掘工具,收下这波干货
  8. oracle11g远程命令执行漏洞,漏洞应急|Oracle Weblogic Server远程代码执行漏洞(CVE-2021-2109)...
  9. 滚动条禁止_平南人用了几十年的这种小东西,将全面禁止生产!你家还有某?...
  10. 虚幻4引擎开发的手游_怎么使用虚幻4开发游戏?
  11. 三极管开关电路_三极管在开关电路中的详细应用分析
  12. [ASP调试]小旋风Web服务器使用
  13. 如何在Python中使用Rest API
  14. Java实现生成并下载Excel文件
  15. 唯美的英文短文!!!
  16. Tesseract OCR简介(三)--安装及参数使用
  17. STM32学习笔记1:STM32ZET6配置蓝牙模块
  18. 2022 中小企业快成长之年,上云 选对平台是关键,这次我站华为云
  19. spark history server内存不足服务自动挂掉
  20. 邻接表/图/DFS/BFS

热门文章

  1. html评论置顶功能,微信公众号精选留言评论怎么置顶显示?功能在哪里设置?...
  2. 【caffe-matlab】目标检测R-FCN算法于Windows下配置
  3. Python 中的Pandas库
  4. Ubuntu 15.04 安装 boost-python
  5. Petrozavodsk Winter Camp, Warsaw U, 2014, A The Carpet
  6. 计算 1+2!+3!+4!+...20!=?
  7. django-restframework使用
  8. TCP为什么要三次握手和四次挥手
  9. 解决了界面上菜单项跑到其它AE控件后面的问题(java)
  10. vs code打开文件显示的中文乱码