有关驱动模块

Ubuntu内核源码:
在synaptic里面搜索linux-source,找到和你内核版本相同的source,然后安装。
gcc对数据长度的不匹配相当敏感,它会针对可能的问题发出警告。
  insmod         module.o    插入模块  需要超级用户权限
  syslogd   /etc/syslog.conf
  dmesg  | tail
  lsmod          
  rmmod   module.o
内核模块初始化过程中的错误处理
   错误处理有时使用goto语句比较 有效。通常情况下我们很少使用goto,但在处理错误时(可能是唯一的情况)它却非常有用 。错误情况下的goto仔细使用可避免大量复杂的高度缩进的结构化逻辑。因此,内核经常使用goto来处理错误。
   不管初始化过程在什么时刻失败,下面的例子(使用了虚构的注册和撤销注册函数)都能正常工作:

  int __init my_init_function(void)
{
                int err;
               err = register_this(ptr1,"skull");
               if(err)   goto   fail_this;
               err = register_that(ptr2,"skull");
               if(err)   goto   fail_that;
                err = register_those(ptr3,"skull");
               if(err)   goto   fail_those;
              
              return 0;
           fail_those:   unregister_that(ptr2,"skull");
            fail_that:         unregister_this(ptr1,"skull");
           fail_this:           return err;
} 

    想想看,假如没用goto,需要多少if .. else... 语句才能利用标志来确定这复杂的逻辑,更何况实际情况往往比这更复杂,goto 语句提供了一个优雅的解决方案,使得我们的代码简洁高效。在追求效率的代码中使用goto语句仍然是最好的处理错误的机制。
file 与FILE的区别:
struct file  是一个内核结构,它不会出现在用户程序中
FILE 在C库中定义且不会出现在内核代码中。
在GNU  C中允许使用冒号:为特定的结构体成员定义初始值,其他成员值为0,
在Linux 2.6内核中,建议使用C99标准初始化结构体
static struct file_operations s3c2410_fops={
  .owner  = THIS_MODULE,
  .open   =  s3c2410_DbLed_open.
  .write  =  s3c2410_DbLed_write,
   .release  =  s3c2410_DbLed_release,
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值