在这样做的内核驱动程序的开发时间。可以使用/proc下档。获取相应的信息。对于调试。

大多数/proc下的文件是仅仅读的。但为了演示样例的完整性。都提供了写方法。

方法一使用create_proc_entry创建proc文件(简单,但写操作有缓冲区溢出的危急)

方法二使用proc_create和seq_file创建proc文件(较方法三简洁)

方法三使用proc_create_data和seq_file创建proc文件(较麻烦,但比較完整)

演示样例四在proc文件里使用内核链表的一个演示样例(用的方法三)

--------------------------------------------------------------------------------------------------------------------

二、

proc_test02.c 源代码

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h> #include <linux/fs.h> // for basic filesystem
#include <linux/proc_fs.h> // for the proc filesystem
#include <linux/seq_file.h> // for sequence files
#include <linux/jiffies.h> // for jiffies
#include <linux/slab.h> // for kzalloc, kfree
#include <linux/uaccess.h> // for copy_from_user // global var
static char *str = NULL; // seq_operations -> show
static int jif_show(struct seq_file *m, void *v)
{
seq_printf(m, "current kernel time is %llu\n", (unsigned long long) get_jiffies_64());
seq_printf(m, "str is %s\n", str); return 0; //!! must be 0, or will show nothing T.T
} // file_operations -> write
static ssize_t jif_write(struct file *file, const char __user *buffer, size_t count, loff_t *f_pos)
{
//分配暂时缓冲区
char *tmp = kzalloc((count+1), GFP_KERNEL);
if (!tmp)
return -ENOMEM; //将用户态write的字符串复制到内核空间
//copy_to|from_user(to,from,cnt)
if (copy_from_user(tmp, buffer, count)) {
kfree(tmp);
return -EFAULT;
} //将str的旧空间释放,然后将tmp赋值给str
kfree(str);
str = tmp; return count;
} // seq_operations -> open
static int jif_open(struct inode *inode, struct file *file)
{
return single_open(file, jif_show, NULL);
} static const struct file_operations jif_fops =
{
.owner = THIS_MODULE,
.open = jif_open,
.read = seq_read,
.write = jif_write,
.llseek = seq_lseek,
.release = single_release,
}; // module init
static int __init jif_init(void)
{
struct proc_dir_entry* jif_file; jif_file = proc_create("jif", 0, NULL, &jif_fops);
if (NULL == jif_file)
{
return -ENOMEM;
} return 0;
} // module exit
static void __exit jif_exit(void)
{
remove_proc_entry("jif", NULL);
kfree(str);
} module_init(jif_init);
module_exit(jif_exit); MODULE_AUTHOR("aran");
MODULE_LICENSE("GPL");

Makefile文件:

obj-m	:= proc_test02.o
KERNEL := /lib/modules/`uname -r`/build #for mint/ubuntu
#KERNEL := /lib/modules/`uname -r`/source #for redhat all:
make -C $(KERNEL) M=`pwd` modules install:
make -C $(KERNEL) M=`pwd` modules_install
depmod -A clean:
make -C $(KERNEL) M=`pwd` clean

測试结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYV9yYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

版权声明:本文博客原创文章,博客,未经同意,不得转载。

ubuntu/linux mint 创建proc文件的三种方法(两)的更多相关文章

  1. ubuntu/linux mint 创建proc文件的三种方法(四)

    在做内核驱动开发的时候,能够使用/proc下的文件,获取对应的信息,以便调试. 大多数/proc下的文件是仅仅读的,但为了演示样例的完整性,都提供了写方法. 方法一:使用create_proc_ent ...

  2. Linux中创建Daemon进程的三种方法

    什么是daemon进程? Unix/Linux中的daemon进程类似于Windows中的后台服务进程,一直在后台运行运行,例如http服务进程nginx,ssh服务进程sshd等.注意,其英文拼写为 ...

  3. Linux下查看磁盘挂载的三种方法

    Linux下查看磁盘挂载的三种方法 2009-06-05 23:17 好久没有更新日志了,呵呵.不是没有要写的东东.实在抽不出时间来写,要准备公司的考试呢,C++考试.已经有七个月没有写C++代码了, ...

  4. linux 环境变量PATH路径的三种方法

    转:http://www.jb51.net/LINUXjishu/150167.html 总结:修改1.#PATH=$PATH:/etc/apache/bin  或者#vi /etc/profile ...

  5. Linux 添加开机启动项的三种方法

    linux 添加开机启动项的三种方法. (1)编辑文件 /etc/rc.local 输入命令:vim /etc/rc.local 将出现类似如下的文本片段: #!/bin/sh## This scri ...

  6. VC中加载LIB库文件的三种方法

    VC中加载LIB库文件的三种方法 在VC中加载LIB文件的三种方法如下: 方法1:LIB文件直接加入到工程文件列表中   在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中&quo ...

  7. 两台Linux系统之间传输文件的几种方法

    两台Linux系统之间传输文件的几种方法:参考https://www.cnblogs.com/bignode/articles/9241333.html

  8. Linux CentOS7 VMware 安装软件包的三种方法、rpm包介绍、rpm工具用法、yum工具用法、yum搭建本地仓库

    一.安装软件包的三种方法 Linux下游三种安装方法,rpm工具.yum工具.源码包.rpm按装一个程序包时,有可能因为该程序包依赖另一个程序包而无法安装:yum工具,可以连同依赖的程序包一起安装. ...

  9. Windows下自由创建.htaccess文件的N种方法

    .htaccess是apache的访问控制文件,apache中httpd.conf的选项配合此文件,完美实现了目录.站点的访问控 制,当然最多的还是rewrite功能,即URL重写,PHP中实现伪静态 ...

随机推荐

  1. HttpWebRequest 基础连接已经关闭: 接收时发生错误

    HttpWebRequest request = null; Stream webStream = null; HttpWebResponse response = null; StreamReade ...

  2. perl post 请求带参数

    my $url='https://wenjinbao.winfae.com/business/dispatch_post.do?action=submitAdminLogin';    my $res ...

  3. Dropbox + Farbox高速创建免费博客小站

    创建自己的Dropbox账号(已有账号的略过) 注冊地址:Dropbox 点击链接注冊就好了,so easy: 账号注冊成功后,能够选择下载同步client(windows.Mac.ios.andro ...

  4. Servlet的学习之ServletContext(1)

    本篇来介绍Servlet中非常重要的对象,如ServletConfig类和ServletContext类,尤其是ServletContext类中的一些方法,本篇先讲述一部分,在下一篇中继续补充. 在对 ...

  5. Mac 10.10 下安装jdk 1.7 以上

    mac 会默认的给用户安装1.6,1.6 以上的版本安装的时候就总是会提示错误问题 根据网上的安装方法,这里也总结下 首先确定挂载在mac上了 然后输入命令 (目前使用的jdk1.7Update67) ...

  6. 3篇OAuth的文章

    http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html http://blog.unvs.cn/archives/oauth-qq1.0-devel ...

  7. WindowsPhone8中实现圆形图片的生成显示

    原文 WindowsPhone8中实现圆形图片的生成显示 很多软件中(比如QQ)用到了许多圆形图片,作为用户头像等等,原始图片往往是方形的,那么怎么样将方形的图片显示成圆形呢? 一种方法是当背景为固定 ...

  8. asp.net mvc 导出表格

    适合使用的场合: .net 中从前台中的table导出成excel文件,兼容各种浏览器. 使用工具: org.in2bits.MyXls.dll 从前台获取表格的thead和表格的tbody,将其转化 ...

  9. leetcode Sum Root to Leaf Numbers(所有路径之和)

    转载请注明来自souldak,微博:@evagle 观察题目给的返回值类型是int,可以断定这棵树的高度不会超过10,所以数据量其实是非常小的.那就直接dfs遍历这棵树,然后到叶子节点的时候将值加到最 ...

  10. swift_将UIDatePicker到达的传播之间的时间差在数小时出现页面的事

    今天,写swift demo当它来到了一个非常精彩的问题,我再次 present 使用页面出来 UIDatePicker 选择时间,然后再回到原来的主界面的时间,结果出现的问题:B页面的正常时间,传回 ...