read/write proc例程

本文档介绍了如何创建一个Proc入口,通过一个简单的'Hello World'程序展示读写Proc的实现过程。提供了一段Proc内核模块的源代码,并解释了如何编译、加载和卸载该模块,以及执行读写操作的测试程序。

Proc做为用户态进程和内核进行通信的工具,可以用Proc访问内核的数据,本文例程创建一个Proc,然后通过一个Hello world例程进行Proc的读写操作。

Proc的源代码:(此代码转自:http://tuxthink.blogspot.com/2011/02/creating-readwrite-proc-entry.html)

/*************************************************************************
	> File Name: proc_write_read.c
	> Author: 
	> Mail: 
	> Created Time: Mon 20 Apr 2015 01:57:22 PM CST
 ************************************************************************/

#include <linux/module.h>
#include <linux/kernel.h>
#include <asm/uaccess.h>
#include <linux/cdev.h>
#include <linux/proc_fs.h>
#define MAX_PROC_SIZE 100
static char proc_data[MAX_PROC_SIZE];

static struct proc_dir_entry *proc_write_entry;

int read_proc(char *buf,char **start,off_t offset,int count,int *eof,void *data )
{
    int len=0;
     len = sprintf(buf,"%s",proc_data);

    return len;

}

int write_proc(struct file *file,const char *buf,int count,void *data )
{
Linux驱动程序开发核心知识体系 第一章:Linux驱动程序概述 驱动程序的作用和特点 操作系统与硬件之间的桥梁 控制硬件设备并提供统一接口 驱动程序的开发基础 开发环境搭建 内核模块编写、编译与加载流程 Linux内核重要头文件目录 <linux/module.h>:模块初始化与退出 <linux/fs.h>:文件系统接口定义 其他常用头文件支持驱动功能实现 Linux内核设备类型 字符设备:逐字节访问,如串口、蜂鸣器 块设备:以块为单位读写,如硬盘 网络设备:处理网络数据包收发 Linux内存管理机制 kmalloc:分配小块物理连续内存 vmalloc:分配虚拟连续大内存 内存释放函数:kfree、vfree 字符设备驱动实例:BEEP驱动 蜂鸣器控制原理 完整开发流程演示:注册、操作结构体实现、设备访问 第二章:字符设备驱动程序 字符设备驱动基本结构 设备号申请(静态/动态) cdev结构体初始化与注册 file_operations结构体实现常见操作接口 gfree、page相关函数 get_zeroed_page:获取清零的内存页 __get_free_pages / __free_pages:多页内存管理 页大小与内存对齐概念 vmalloc及其辅助函数 分配非连续物理但连续虚拟内存 应用于大内存缓冲区场景 vfree释放vmalloc分配的内存 虚拟地址与物理地址关系 地址映射机制:页表管理 ioremap用于I/O内存映射 内核空间中的地址转换函数 第三章:并发和竞态控制 并发与竞态问题 多任务环境下共享资源冲突 数据不一致风险 原子操作 整数原子操作:atomic_t类型 位原子操作:set_bit、clear_bit等 不可中断的单一指令操作 自旋锁(Spinlock) 忙等待机制,适用于短临界区 中断上下文可用 注意避免死锁和长时间持有 信号量与互斥体 信号量(semaphore):允许多个并发访问 互斥体(mutex):仅允许一个持有者 用户态与内核态同步机制差异 完成量(completion) 实现线程间事件通知 wait_for_completion 与 complete 配对使用 适用于主线程等待工作完成场景 第四章:阻塞和非阻塞 I/O 阻塞方式 read/write调用挂起直到条件满足 使用等待队列实现睡眠唤醒机制 非阻塞方式 即时返回错误码 -EAGAIN 或 -EWOULDBLOCK 用户程序轮询处理 Poll、Select机制 支持多文件描述符监听 驱动需实现poll函数指针 返回POLLIN/POLLOUT等事件状态 第五章:中断和时钟 中断处理程序结构 request_irq注册中断处理函数 中断服务例程(ISR)快速响应 中断顶半部和底半部 顶半部:禁中断执行,响应快 底半部机制: tasklet:软中断基础上的延迟处理 工作队列(workqueue):可在进程上下文运行 中断共享 多设备共用同一IRQ线 中断处理函数中通过硬件状态判断来源 注册时需提供设备标识 内核定时器 struct timer_list定义定时任务 mod_timer设置超时时间 回调函数在软中断上下文中执行 第六章:内存与 I/O I/O端口和I/O内存 I/O端口:x86架构专用IO空间(in/out指令) I/O内存:内存映射型寄存器(MMIO) I/O操作函数 端口读写:inb/outb, inw/outw, inl/outl 内存映射寄存器读写:ioread32/iowrite32 访问具有屏障语义的操作函数 申请与释放设备I/O资源 request_region / release_region:申请IO端口区间 request_mem_region / release_mem_region:申请内存映射区域 防止资源冲突,提升系统稳定性 生成思维导图
最新发布
11-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值