当前位置:  技术问答>linux和unix

想各位说明一下这个简单的内核模块里面各个函数的含义

    来源: 互联网  发布时间:2016-09-09

    本文导语:  Makefile文件: obj-m +=pscmd.o all:         make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean:         make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 主文件: #include     //for init_module()   #include   ...

Makefile文件:
obj-m +=pscmd.o
all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean


主文件:
#include     //for init_module()  
#include    //for create_proc_info_entry()  
#include      //for 'struct task_struct'  
#include   
#include    
  
static struct proc_dir_entry *e;   
int list_process(char *page,char **start, off_t off,int count,int *eof,void *data)   
{   
        int len=0;   
        struct task_struct *p = &init_task;   //get init tasks pcb point   
        struct list_head *q=&p->tasks,*head=&p->tasks;   
        len+=sprintf(page+len,"Process messagesn");   
        for(q=q->next;q!=head;q=q->next)   
        {   
                p=list_entry(q->next,struct task_struct,tasks);   
                len+=sprintf(page+len,"PID=%d         NAME=%sn",p->pid,p->comm);   
        }   
        return len;   
}   
static int __init ps_init(void)   
{   
    printk(KERN_INFO"ps load  succeed");   
        e=create_proc_info_entry("pscmd",0,NULL,list_process);   
        e->read_proc=list_process;   
        return 0;   
}   
  
static void __exit ps_exit(void)   
{   
        remove_proc_entry("pscmd",NULL);   
        printk(KERN_INFO"ps leave");   


刚开始看内核 里面有许多不懂 请各位帮帮忙说明一下这道程序

|

Makefile文件:
obj-m +=pscmd.o 
all:
  make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
  make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean


主文件:
#include  //for init_module()  
#include  //for create_proc_info_entry()  
#include  //for 'struct task_struct'  
#include   
#include   
  
static struct proc_dir_entry *e; 
int list_process(char *page,char **start, off_t off,int count,int *eof,void *data)  /* 列出所有进程, pid, process name */
{  
  int len=0;  
  struct task_struct *p = &init_task; //get init tasks pcb point  
  struct list_head *q=&p->tasks,*head=&p->tasks;  
  len+=sprintf(page+len,"Process messagesn");  
  for(q=q->next;q!=head;q=q->next)  
  {  
  p=list_entry(q->next,struct task_struct,tasks);  
  len+=sprintf(page+len,"PID=%d NAME=%sn",p->pid,p->comm);  
  }  
  return len;  
}  
static int __init ps_init(void)  /* 有 __init修饰的一般是初始化函数,gcc编译链接成机器码会放到相应的区 */
{  
  printk(KERN_INFO"ps load succeed");  
  e=create_proc_info_entry("pscmd",0,NULL,list_process);   /* 在/proc文件系统下创建 pscmd目录, */
  e->read_proc=list_process;  
  return 0;  
}  
  
static void __exit ps_exit(void)  
{  
  remove_proc_entry("pscmd",NULL);  /* 移除/proc文件系统下创建 pscmd目录, */
  printk(KERN_INFO"ps leave");  
}  

|
简单说下吧.
ps_init() 模块初始化函数
ps_exit()   模块退出调用函数
list_process() 读取虚拟文件函数

|
这应该是一个procfs module
e=create_proc_info_entry("pscmd",0,NULL,list_process);  //创建一个proc entry
e->read_proc=list_process;    //将list_process 作为e的一个redd_proc
-----------------------------------------------
proc entry有两个成员函数,赋值可以这样:
struct proc_dir_entry* entry;
entry->read_proc = read_proc_foo;
entry->write_proc = write_proc_foo;
——————————————————————————————
关于procfs的详情可以看DocBook:Linux Kernel Procfs Guide


    
 
 

您可能感兴趣的文章:

  • 有哪个文档详细说明linux内核的每个版本的变化?
  • 哪位结合原码说明下Linux内核开发人员是如何处心积虑的提高效率的
  • 求LINUX内核程序注释,并从功能的角度说明其用途(1)
  • 求LINUX内核程序注释,并从功能的角度说明其用途(2)
  • 关于rhel-server-5.4-i386升级为rhel-server-5.5-i386的内核的问题,疑问已详细说明,希不惜赐教
  • 基于内核线程的创建、使用和退出以及延时宏的补充说明介绍
  • 请问linux编译内核有哪些步骤,帮忙简单说明一下
  • PHP内核探索:变量存储与类型使用说明
  • C++ STL库中priority_queue介绍,成员函数说明及priority_queue具体用法举例
  • 如何让man查看到自己想要的函数说明
  • 请问哪儿有Motif的函数说明,比如像VC下的MSDN?
  • 谁有linux下网络开发函数的说明?要再window下也可以看的!
  • 求:openssl函数库中文使用说明
  • 哪位大侠有python的win32com的api函数说明?
  • man查看函数说明
  • php setcookie函数的参数说明及其用法
  • mysql截取函数常用方法使用说明
  • 谁有unix下c的编程接口资料,如fork函数和killppid的说明
  • 谁有linux下c函数说明,最好是中文版。
  • PHP函数microtime()用法与说明
  • 高分求java.sql类库的类说明,函数及方法!
  • 请问哪里有linux的指令函数说明
  • ****请问谁有linux下c 语言函数的使用说明呀??要中文的!!!****
  • php正则之函数 preg_replace()参数说明
  • 如何在linux中查到编程函数的说明,如同在windows中使用MSDN一样方便的手册?
  • 请问那里有linux下的c语言的库函数说明下载? 感激不尽
  • 谁知道这个函数session.setAttribute("pwd",javabean.getpwd()) 及它的参数的作用 ,并说明一下
  • 急需一份关于字符操作的函数说明!(在线等候)
  • 提权函数之RtlAdjustPrivilege()使用说明
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • PYTHON正则表达式 re模块使用说明
  • linux下top命令详解包括top命令参数使用及结果(virt,res,shr)排序举例说明 iis7站长之家
  • 请问哪里能得到at&t的汇编说明书?比如各个语句的功能说明 。
  • META-INF/MANIFEST.MF格式说明及示例
  • 谁有xml和libxml2的说明文档,分享一下吧
  • elasticsearch RESTful项目举例说明: java jest
  • 关于LINUX下的各种配置,正式的说明文档一般在什么地方?
  • nginx Windows版相关问题及使用说明
  • 如何知道用户自定义的纸张的长宽(厘米为单位),请举例说明
  • Mysql索引类型:Hash索引介绍及举例说明
  • 求详细linux(redhed9)上安装oracle9i的说明书?
  • HTML5 <blockquote> 标签(定义引用)详细介绍及举例说明
  • sendto() 返回>0,说明数据已经被发到网络上了嘛?
  • linux下top命令详解包括top命令参数使用及结果(virt,res,shr)排序举例说明
  • 请问各路高手哪里能当到DOS6.22和其详细说明??
  • linux top命令详解以及top命令的各项使用技巧详细说明
  • mysql中的“money”类型说明
  • wireshark抓包后查看数据报时的过滤规则/过滤语法及举例说明
  • 谁能详细说明怎样得到Weblogic server 的license,马上给分
  • linux下find查找文件命令详细介绍及find文件用法举例说明
  • java 2 基础类,哪里有完整的说明?
  • Docker详细的应用与实践架构举例说明
  • 哪里可以下载到JAVA类库呀,最后有中文说明?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3