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

LKM 中一个例子的问题

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

    本文导语:  #include  /* We're doing kernel work */ #include  /* Specifically, a module */ #include  /* Necessary because we use proc fs */ #include  /* For putting processes to sleep and     waking them up */ #include  /* for get_user and put_user */ ...

#include  /* We're doing kernel work */
#include  /* Specifically, a module */
#include  /* Necessary because we use proc fs */
#include  /* For putting processes to sleep and 
   waking them up */
#include  /* for get_user and put_user */


#define MESSAGE_LENGTH 80
static char Message[MESSAGE_LENGTH];

static struct proc_dir_entry *Our_Proc_File;
#define PROC_ENTRY_FILENAME "sleep"


static ssize_t module_output(struct file *file, /* see include/linux/fs.h   */
     char *buf, /* The buffer to put data to 
   (in the user segment)    */
     size_t len, /* The length of the buffer */
     loff_t * offset)
{
static int finished = 0;
int i;
char message[MESSAGE_LENGTH + 30];


if (finished) {
finished = 0;
return 0;
}


sprintf(message, "Last input:%sn", Message);
for (i = 0; i owner = THIS_MODULE;
Our_Proc_File->proc_iops = &Inode_Ops_4_Our_Proc_File;
Our_Proc_File->proc_fops = &File_Ops_4_Our_Proc_File;
Our_Proc_File->mode = S_IFREG | S_IRUGO | S_IWUSR;
Our_Proc_File->uid = 0;
Our_Proc_File->gid = 0;
Our_Proc_File->size = 80;

if (Our_Proc_File == NULL) {
rv = -ENOMEM;
remove_proc_entry(PROC_ENTRY_FILENAME, &proc_root);
printk(KERN_INFO "Error: Could not initialize /proc/testn");
}

return rv;
}


void cleanup_module()
{
remove_proc_entry(PROC_ENTRY_FILENAME, &proc_root);
}


以上带颜色的部分有什么用呢,我把它注掉没发现有什么区别?


高手解答,谢谢了

|
每个进程中一旦有阻塞的信号(即blocked),进程就会把它挂到pending链上,
所以一旦当前进程被抢占,当前进程的pending.signal.sig[i] 位图就会与
blocked.sig[i]位图不一致
for (i = 0; i pending.signal.sig[i] & ~current->
    blocked.sig[i]; 
该句就是判断这两个位图是否一致,如果不一致is_sig就是1,
这时候说明当前进程被抢占。
进程一旦被抢占就不能保证能够再次执行,也就不能保证释放引用的模块
所以当is_sig为1时手工释放模块
if (is_sig) {

module_put(THIS_MODULE);
return -EINTR;[color=#FF0000]
}[/color]

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 编写lkm时的内存分配
  • 100分答谢:谁会Linux下的LKM的编程
  • 用LKM写一个文件系统 挂载到系统中方法
  • 我的lkm程序,insmod时提示内核版本不对,怎样才能成功升级内核?


  • 站内导航:


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

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

    浙ICP备11055608号-3