从 proc 模块内部读取设备信息

从 proc 模块内部读取设备信息

我想在 proc 模块中读取显卡信息。我创建了一个 proc 模块并将其加载到内核。我想要的是当我从终端调用 proc 时显示显卡信息。例如“cat /proc/myprocname”我知道下面的代码是错误的。但它会帮助您理解我想要什么。

#include <linux/init.h>        
#include <linux/module.h>  
#include <linux/proc_fs.h>       // proc filesystem

/* 
read proc function
*/
int read_proc(char *buf, char **start, off_t offset,
int count, int *eof, void *data){

   // !! **that's it.I want to read graphic card info in this function.**
   // !! this is wrong.but I want to do like this

   FILE *fd = popen("lspci | grep VGA", "r");
char buffer[16];
if (fread (buffer, 1, sizeof (buffer), fd) > 0) // if there is some result the     module must be loaded
printk (KERN_INFO buffer);
else
printf ("module is not loaded\n");
return 1;
}
/*
Module loading...
*/

static int baslat(void){

//  Registering..

create_proc_read_entry( "proc01",  // file name
              0,           //  (protection mode): default 
              NULL,        //  (parent dir): none
              read_proc,   // callback
              NULL);       //
 return 0;
}
/*
Module removing..
*  /

static void bitir(void){
// module register removing..
remove_proc_entry( "proc01",   // file name 
             NULL);        // (parent directory)
}
module_init(baslat);
module_exit(bitir);

答案1

你可以使用cat任何 proc 文件:

➜  ~  cat /proc/dri/0/vm
slot     offset       size type flags    address mtrr

➜  ~  cat /proc/dri/0/vma
vma use count: 0, high_memory = f79fe000, 0x379fe000
➜  ~  cat /proc/dri/0/gem_names 
  name     size handles refcount
     1  3145728       1        3
     2     4096       2        3
     3  3145728       2        3
     4  3145728       1        3
     5  3145728       2        3
     6  3035136       2        3
     7  1679360       2        3
     8  3035136       2        3
     9  1998848       2        3

你没有说你的显卡是什么,但这应该可以让你找到正确的方向。

相关内容