驱动加载到proc文件下

kernel的调试方法一般常用的有jtag  ,printk,proc,sys ,debugfile..   关于这些的对比准备专门写一个,这里就主要介绍proc的调试方法。

/proc文件系统是一种特殊的,由软件创建的文件系统,内核使用它向外界导出信息。 /proc下面的每个文件都绑定一个内核函数,用户读取其中的文件时,该函数动态的生成文件的“内容”。

这样其实是给了我们一个函数的接口,在这个接口我们可以调用底层我们自己写的驱动函数,可以在其中加入自己想的打印什么的。有了这个接口我们就可以将驱动运行产生的中间值,局部变量输出出来供debug实用。他的缺点也很明显 已存在大量文件,不能调用太大的文件打印 函数必须已经写入到要调试的驱动中去。对比与产生的哈出这些缺点他的调试方法还是又存在的价值的。毕竟提供了一个上下层联系的接口。

proc 自己定义了读写函数,定义了注册函数,这些都是全局的。

int (*read_proc)(char *page, char **start, off_t offset, int count,

int *eof, void *data);

参数说明:

page : 用来写入数据的缓冲区;也就是说从/proc文件中读到的数据都写入到page指向的缓冲区中.

start: 用于指定实际的数据写入到page指向的内存页的具体的那个位置.

offset : 和read参数中的相同

count  : 和read函数中的参数意义相同

eof  : 当没有数据返回时,必须设置该参数为一个整数,例如: *eof = 1;

data : 该参数是内核提供给驱动程序的专用指针,可以用于内部记录

*创建只读/proc文件的函数

struct proc_dir_entry *create_proc_read_entry(const char *name,

mode_t mode, struct proc_dir_entry *base,

read_proc_t *read_proc, void * data)

参数说明:

name : 要创建的/proc下的文件名

mode : 创建的文件权限的掩码,若为0,则使用系统默认的权限

base : 该文件所在的父目录,若该参数为null,则该文件将会被创建在/proc的根目录下

read_proc : 读取/proc下的文件时调用的函数,也就是前面讲解的那个函数

data : 内核会忽略data,但会把该参数传递给read_proc函数

删除/proc系统文件的函数

void remove_proc_entry(const char *name, struct proc_dir_entry *parent)

参数说明:

name : 在/proc文件系统中创建的文件名

parent : 父目录名

参照上面的介绍我们就可以看是我们创造自己的proc/proc_test了

// test proc

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/proc_fs.h>

int proc_read_memory_drv(char *page, char **start, off_t off, int count,

int *eof, void *data);

void memory_drv_exit(void);

int memory_drv_init(void);

module_init(memory_drv_init);

module_exit(memory_drv_exit);

struct proc_dir_entry *memory_drv_file;

int proc_read_memory_drv(char *page, char **start, off_t off, int count,

int *eof, void *data)

{

int len;

len = sprintf(page, "test ok");

return len;

}

int memory_drv_init(void)

{

memory_drv_file = create_proc_entry("proc_test", S_IRUGO, NULL);

memory_drv_file->read_proc = proc_read_memory_drv;

return 0;

}

void memory_drv_exit(void)

{

remove_proc_entry("proc_test", NULL);

}

这样我们就完成了proc/proc_test 文件的建立

这样我们就可以把它加在我们想调试的驱动文件里面了

然后进入rootfs

进入proc

cd proc

列出文件

ll

可以看到proc_test

cat proc_test

就可以显示出来了我们打印的内容

test ok

时间: 2024-10-29 19:08:33

驱动加载到proc文件下的相关文章

【ESXI6.0】 ESXI6.0安装时无法安装网卡驱动的解决方法及将网卡驱动加载进ISO

若安装时提示如下图所示 之后安装无法完成,会提示没有检测到网络适配器,如下图. 这时候需要将网卡驱动加载进ISO中才能在安装时候识别网卡驱动. 网卡驱动从这里下载: https://vibsdepot.v-front.de/wiki/index.php/List_of_currently_available_ESXi_packages 找到对应的型号.点击进入下一页下载. 需要使用如下工具: ESXi-Customizer-v2.7.2 http://pan.baidu.com/s/1eQ2f8

另类阻止驱动加载

标 题: [分享][原创]另类阻止驱动加载 作 者: czcqq 时 间: 2010-05-04,22:27:47 链 接: http://bbs.pediy.com/showthread.php?t=112338 关于驱动的加载大概有几种方法 1 在WINDOWS下动态加载 2 在WINDOWS启动的时候加载 3 感染系统文件 对于 在WINDOWS启动的时候加载 和 感染系统文件 我们暂时不讨论,玩么只讨论动态加载 一般的加载流程,是这样的:打开服务管理器->创建服务->启动服务->

sn9c291 驱动加载成功,mpayer无法播放

先目前将一个sn9c291+ov9712的模块驱动在fedora上加载成功,可是在使用mplayer却无法播放,不知道为何? 前后对比发现dev目录下多了video0,video1 设备节点已经出来,video1 是H264的节点 [[email protected] mplayer]# mplayer tv:// -tv driver=v4l2:width=1280:height=720:device=/dev/video1:outfmt=0x34363248 -fps 24 MPlayer

ThinkPHP 3.2.3 自动加载公共函数文件的方法

方法一.加载默认的公共函数文件 在 ThinkPHP 3.2.3 中,默认的公共函数文件位于公共模块 ./Application/Common 下,访问所有的模块之前都会首先加载公共模块下面的配置文件(Conf/config.php)和公共函数文件(Common/function.php),即默认的公共函数文件为 ./Application/Common/Common/function.php. 例如,在 ./Application/Common/Common 下新建 function.php,

PHP加载另一个文件类的方法

加载另一个文件类的方法 当前文件下有a.php 和b.php,想要在class b中引入class a <?php    class a    {        public $name = 'zhouqi';        public function say()        {            echo 'hello '.$this->name;        }    } <?php    class b    {        //require('a.php'); 错

pygame加载中文名mp3文件出现error

好一阵子没有写东西了,最近几天在做一个基于Python pygame的音乐播放器,本来想做完了,再来发篇文章的,可越做越深,框架大致出来了,考虑周期比较长,也可能是我个人问题,做得比较慢.下面来谈谈pygame.mixer.music.load()加载中文名的mp3文件问题. (发表时间2017-03-30 22:45:58 原创链接http://www.cnblogs.com/dearvee/p/6649055.html) #前言: 今天刚刚做了个音乐列表,但笔者发现在指定目录mp3文件名为中

老调重弹:JDBC系列 之 &lt;驱动加载原理全面解析&gt;

前言 最近在研究Mybatis框架,由于该框架基于JDBC,想要很好地理解和学习Mybatis,必须要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来,好好总结一番,作为自己的笔记,也是给读者一个参考---以下是本文的组织结构,读者可以点击上面的目录查看: 概述 一般情况下,在应用程序中进行数据库连接,调用JDBC接口,首先要将特定厂商的JDBC驱动实现加载到系统内存中,然后供系统使用.基本结构图如下: 驱动加载入内存的过程 这里所谓的驱动,其实就是实现了java.sql.Driver

JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件

http://www.tuicool.com/articles/M7ZR3y 原文 http://blog.csdn.net/kylinsoong/article/details/12623997 主题 WildFlyXMLJBoss AS 内容概述 JBoss7/WildFly设底层框架一大亮点的Module class loading,及每一个相对独立的模块看作一个Module,每个Module都有自己的class loader,Module之间可以相互依赖,如下图: 当JBoss7安装完成

webpack入坑之旅(五)加载vue单文件组件

这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不是开始的开始 webpack入坑之旅(二)loader入门 webpack入坑之旅(三)webpack.config入门 webpack入坑之旅(四)扬帆起航 webpack入坑之旅(五)加载vue单文件组件 webpack入坑之旅(六)配合vue-router实现SPA 需要什么? 在经过前面的四