Linux 设备驱动程序 proc seq

不能再简化


 1 #include<linux/module.h>
2 #include<linux/init.h>
3
4 #include<linux/seq_file.h>
5 #include<linux/fs.h>
6 #include <linux/proc_fs.h>
7 void * meng_seq_start(struct seq_file*s,loff_t*pos)
8 {
9 if(*pos>1)
10 return NULL;
11 return pos;
12 }
13
14 void * meng_seq_next(struct seq_file*s,void *v,loff_t*pos)
15 {
16 (*pos)++;
17 if(*pos>1)
18 return NULL;
19 return pos;
20 }
21
22 void meng_seq_stop(struct seq_file*s,void *v)
23 {
24 }
25 char *meng_seq_data[2]={"Hello.\n","This meng seq proc file.\n"};
26
27 int meng_seq_show(struct seq_file*s,void *v)
28 {
29 seq_printf(s,meng_seq_data[*((int*)v)]);
30 return 0;
31 }
32 struct seq_operations meng_seq_ops={
33 .start=meng_seq_start,
34 .next=meng_seq_next,
35 .stop=meng_seq_stop,
36 .show=meng_seq_show
37 };
38 int meng_seq_proc_seq_open(struct inode*inode,struct file*file)
39 {
40 return seq_open(file,&meng_seq_ops);
41 }
42
43 struct file_operations meng_seq_proc_ops=
44 {
45 .owner=THIS_MODULE,
46 .open=meng_seq_proc_seq_open,
47 .read=seq_read,
48 .llseek=seq_lseek,
49 .release=seq_release
50 };
51
52
53
54 int meng_seq_proc_init(void)
55 {
56 struct proc_dir_entry *entry=create_proc_entry("mengprocseq",0,NULL);
57 if(entry)
58 entry->proc_fops=&meng_seq_proc_ops;
59 return 0;
60 }
61
62
63 void meng_seq_proc_exit(void)
64 {
65 remove_proc_entry("mengprocseq",NULL);
66 }
67
68 module_init(meng_seq_proc_init);
69 module_exit(meng_seq_proc_exit);

时间: 2024-10-06 16:12:55

Linux 设备驱动程序 proc seq的相关文章

LINUX设备驱动程序笔记(三)字符设备驱动程序

      <一>.主设备号和次设备号        对字符设备的访问时通过文件系统内的设备名称进行的.那些设备名称简单称之为文件系统树的节点,它们通常位于/dev目录.字符设备驱动程序的设备文件可通过ls -l命令输出的第一列中的'c'来识别.块设备同样位于/dev下,由字符'b'标识 crw-rw----  1 root root    253,   0 2013-09-11 20:33 usbmon0 crw-rw----  1 root root    253,   1 2013-09

Linux 设备驱动程序 字符设备

已经无法再精简,适合入门. 1 #include<linux/module.h> 2 #include<linux/init.h> 3 4 #include<asm/uaccess.h> 5 #include <linux/types.h> 6 #include<linux/fs.h> 7 #include<linux/cdev.h> 8 struct mengc_dev{ 9 char data[64]; 10 struct cde

linux设备驱动程序中的阻塞、IO多路复用与异步通知机制

一.阻塞与非阻塞 阻塞与非阻塞是设备访问的两种方式.在写阻塞与非阻塞的驱动程序时,经常用到等待队列. 阻塞调用是指调用结果返回之前,当前线程会被挂起,函数只有在得到结果之后才会返回. 非阻塞指不能立刻得到结果之前,该函数不会阻塞当前进程,而会立刻返回. 函数是否处于阻塞模式和驱动对应函数中的实现机制是直接相关的,但并不是一一对应的,例如我们在应用层设置为阻塞模式,如果驱动中没有实现阻塞,函数仍然没有阻塞功能. 二.等待队列 在linux设备驱动程序中,阻塞进程可以使用等待队列来实现. 在内核中,

转:《Linux设备驱动程序3》源码目录结构和源码分析经典链接

转自:http://blog.csdn.net/geng823/article/details/37567557 [原创][专栏]<Linux设备驱动程序>--- LDD3源码目录结构和源码分析经典链接 [专栏]Linux设备驱动程序学习(总目录) [专栏]LDD3源码分析链接(总目录) 1. LDD3源码分析之hello.c与Makefile模板 2. LDD3源码分析之字符设备驱动程序 其他错误: 我的Linux内核为 3.2.0-65-generic-pae,在scull目录下make时

linux设备驱动程序该添加哪些头文件以及驱动常用头文件介绍(转)

原文链接:http://blog.chinaunix.net/uid-22609852-id-3506475.html 驱动常用头文件介绍 #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件.#include <asm/***.h> 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件.#include <mach/***.h> 是在linux-2.6.29/arch/ar

Linux设备驱动程序学习笔记(一)

1.设备驱动程序扮演的角色:       设备程序是一个独立的“黑盒子”,使其某个特定硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设备的工作细节.用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序.将这些调用映射到作用于实际硬件的设备特有操作上,则是设备驱动程序的任务.2.驱动程序的作用:        驱动程序应该处理如何使用硬件可用的问题,而将怎样使用硬件的问题留给上层应用.(提供机制,而不是策略)3.内核功能划分:        进程管理    内存管理    文

LINUX设备驱动程序笔记(一)设备驱动程序简介

<一>:设备驱动程序的作用 从一个角度看,设备驱动程序的作用在于提供机制,而不是策略.在编写驱动程序时,程序员应该特别注意下面这个基本概念:编写访问硬件的内核代码时,不要给用户强加任何特定策略.因为不同的用户有不同的需求,驱动程序应该处理如何使硬件可用的问题,而将怎样使用硬件的问题留给上层应用程序. 从另一个角度来看驱动程序,它还可以看作是应用程序和实际设备之间的一个软件层. 总的来说,驱动程序设计主要还是综合考虑下面三个方面的因素:提供给用户尽量多的选项.编写驱动程序要占用的时间以及尽量保持

LINUX设备驱动程序笔记(二)构造和运行模块

         <一>:设置测试系统 首先准备好一个内核源码树,构造一个新内核,然后安装到自己的系统中.           <二>:HelloWorld模块 #include <linux/init.h> //定义了驱动的初始化和退出相关的函数 #include <linux/module.h> //定义了内核模块相关的函数.变量及宏 MODULE_LICENSE("Dual BSD/GPL"); //该宏告诉内核,该模块采用自由许可

LINUX设备驱动程序笔记(四)并发和竞态

       <一>.并发及其管理 大部分竞态可通过使用内核的并发控制原语,并应用几个基本的原理来避免.第一个规则是,只要可能,就应该避免资源的共享,这种思想的明显应用就是避免使用全局变量.但硬件资源本质上就是共享的,软件资源经常需要对其他执行线程可用.全局变量并不是共享数据的唯一途径,只要我们的代码将一个指针传递给了内核的其他部分,一个新的共享就可能建立.在单个执行线程之外共享硬件或软件资源的任何时候,因为另外一个线程可能产生对该资源的不一致观察,因此必须显示地管理对该资源的访问.访问管理的