如何在proc目录下增加设备文件

原创 2006年05月28日 22:21:00

如何在proc目录下增加设备文件


原文网址:
http://www.linuxforum.net/forum/gshowflat.php?Cat=&Board=linuxK&Number=335192&page=7&view=expanded&sb=5&o=all&vc=1

         因为原来的代码编译时存在错误,因此我作了改动,并在redhat 9.0(内核版本是2.4.20-8)上测试通过。分为三个文件:myproc.c,test.c,Makefile,测试流程很简单,在当前目录中输入"./test",首先将在/proc目录下创建一个"myproc"设备文件,然后向此文件写入一个字符串,接着读出来,在输出中应该看到前后字符串是一样的。代码如下:


/* myproc.c - create a "myproc" file in /proc
*
* Copyright (C) 2005 by linfeng12
*/

#ifndef __KERNEL__
#define __KERNEL__
#endif
 
#ifndef MODULE
#define MODULE
#endif
 
#ifndef __KERNEL_SYSCALLS__
#define __KERNEL_SYSCALLS__
#endif

#include <linux/autoconf.h>
#include <linux/version.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/poll.h>
#include <linux/fs.h>
#include <linux/sched.h>
#include <linux/file.h>
#include <asm/uaccess.h>

static char msg[512];
static struct proc_dir_entry *myproc_DevEntry;

static int
myproc_DevOpen(struct inode *inode, // IN: Inode of the proc file
            struct file *file)   // IN: File for this process' proc file access
{
    printk("myproc_DevOpen()/n");
 return 0;
}

static int
myproc_DevRelease(struct inode *inode, // IN: Inode of released file
               struct file *file)   // IN: Released file
{
    printk("myproc_DevRelease()/n");
 return 0;
}

static ssize_t
myproc_DevRead(struct file *file, // IN:  File pointer of file user is reading
            char *buf,         // OUT: User buffer to copy to
            size_t count,      // IN:  Number of bytes to copy to user
            loff_t *offset)    // IN:  Offset to read from. ignored.
{
 printk("myproc_DevRead(): count=%d/n", count);

    int i=0;
    /* Copy bytes out to the user from a kernel buffer -- msg */
    for (i=0; i<count && i<512; i++)
    {     
  put_user(msg[i], buf+i);
    }

    return count;
}


static ssize_t
myproc_DevWrite(struct file *file, // IN: File pointer of file user is writing to
             const char *buf,   // IN: User buffer to copy from
             size_t count,      // IN: Number of bytes to copy
             loff_t *offset)    // IN: Offset in the file to write to. ignored.
{
 printk("myproc_DevWrite(): count=%d/n", count);

    int i=0;
    memset(msg, 0, sizeof(msg));
    /* Copy bytes in from a user buffer to a kernel buffer -- msg */
    for (i=0; i<count && i<512; i++)
    {
  get_user(msg[i], buf+i);
    }

    return count;
}


struct file_operations fop = {
    owner: THIS_MODULE,
    open: myproc_DevOpen,
    read:  myproc_DevRead,
    write:  myproc_DevWrite,
    release: myproc_DevRelease,
};

int init_module(void)
{
    printk("myproc: init_module()/n");
   
    myproc_DevEntry = create_proc_entry("myproc", S_IRUSR | S_IWUSR, NULL);
   
    myproc_DevEntry->owner = THIS_MODULE;
    myproc_DevEntry->proc_fops = &fop;
   
    return 0;
}

void cleanup_module(void)
{
    printk("myproc: cleanup_module()/n");
   
    remove_proc_entry("myproc", myproc_DevEntry);
}

 

/* test.c - test the "myproc" file in /proc
*
* Copyright (C) 2005 by linfeng12
*/
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>

int main(void)
{
    int fd, len;
    char buf[16] = "test myproc";
 
    fd = open("/proc/myproc", O_RDWR);
    if (fd < 0)
    {
        printf("open proc file err!/n");
        return -1;
    }
 
    len = write(fd, buf, strlen(buf));
    printf("write the buf : %s, len: %d/n", buf, len);
   
    memset(buf, 0, sizeof(buf));
    len = read(fd, buf, sizeof(buf));
    printf("read the buf : %s, len: %d/n", buf, len);
   
    close(fd);
    return 0;
}


# Makefile for a multifile kernel module

CC=gcc
MODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUX -I/usr/src/linux/include

all: test myproc.o
    
myproc.o: myproc.c
 $(CC) -O2 $(MODCFLAGS) -c myproc.c -o myproc.o
 insmod myproc.o

test:
 $(CC) -O2 $(MODCFLAGS) test.c -o test

clean:
 rm -f test *.o
 rmmod myproc

linux /proc目录下的文件详解

事情是这样的:一个朋友问为什么/proc目录下的/proc/sys/net/ipv4/conf/lo/arp_ignore只能用echo修改,却无法用vi编辑后进行保存,即使是强制保存都不行...而且...
  • dtwangquan
  • dtwangquan
  • 2014年08月24日 10:32
  • 1536

Linux下/proc目录下文件分析

转载地址:http://blog.csdn.net/zdwzzu2006/article/details/7747977 1. /proc目录 Linux 内核提供了一种通过 ...
  • tallercc
  • tallercc
  • 2016年08月21日 22:33
  • 958

Linux 中/proc目录下文件详解

转载自:http://blog.csdn.net/kevinx_xu/article/details/8178746/proc 文件系统下的多种文件提供的系统信息不是针对某个特定进程的, 而是能够在整...
  • u011003120
  • u011003120
  • 2016年10月28日 20:46
  • 2152

/proc/$PID目录下信息

这个目录也基本上记录所有系统运行时和内核的一些信息。 cd /proc/之后,你会发现很多的目录和文件,每当你创建一个进程时,里面就会动态更新多出一个名称为pid的目录,然后你ls -l /proc...
  • shenwansan_gz
  • shenwansan_gz
  • 2015年10月19日 11:01
  • 823

/proc/sys目录下各文件参数说明

一、前言 本文档针对OOP8生产环境,具体优化策略需要根据实际情况进行调整;本文档将在以下几个方面来阐述如何针对RedHat Enterprise Linux进行性能优化。 1)      Lin...
  • yin_pengpeng
  • yin_pengpeng
  • 2017年03月16日 20:54
  • 142

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

比较详细的介绍文档下载: http://pan.baidu.com/s/1i3C55lj 目录 ----------------- 0 序言 0.1 简介 0.2 责任 1 收集...
  • skdkjxy
  • skdkjxy
  • 2014年02月20日 18:44
  • 1827

/proc/sys目录下各文件参数说明

一、前言 本文档针对OOP8生产环境,具体优化策略需要根据实际情况进行调整;本文档将在以下几个方面来阐述如何针对RedHat Enterprise Linux进行性能优化。 1)      Lin...
  • lanbingkafei
  • lanbingkafei
  • 2013年08月30日 18:34
  • 899

Linux驱动开发二:自动获得设备节点在/dev/目录下

first_drv.c
  • long123bin
  • long123bin
  • 2014年10月13日 23:11
  • 561

LINUX小结一【进入目录,创建文件,显示文件】【Access time、Modified time、Create time】

首先我们先讲一个东西,下面这行数据中第一列 “d”~“.”    范围中间是rwxrwxrwx,3个一组,分别代表user,group,other的可读,可写,可执行权限 一、LINUX系统下 1...
  • nogizaka46ikutaerika
  • nogizaka46ikutaerika
  • 2017年03月18日 10:50
  • 439

删除一个目录下的所有文件,但保留一个指定文

http://oldboy.blog.51cto.com/2561410/1650380 此题问题虽小,但是初学者还是很难给出合理的答案的!本文来自老男孩21期网络班学员 1 2 3 4 5...
  • wuxiaobingandbob
  • wuxiaobingandbob
  • 2015年06月05日 10:05
  • 937
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何在proc目录下增加设备文件
举报原因:
原因补充:

(最多只允许输入30个字)