设为首页 加入收藏

TOP

Linux驱动编译与加载
2014-11-24 02:45:47 来源: 作者: 【 】 浏览:0
Tags:Linux 驱动 编译 加载

  Linux编译驱动源码,modpost老是出错,于是进入/usr/src/`uname -r`目录下


  #make scripts


  接着再编译源码,之前的错误消失了。出现了新的错误:


  **1.c:1052:error:void value not ignored as it ought to be


  **1.c源代码中的1052行是:


  ret = unregister_chrdev(MAJOR, DEVICE_NAME);


  当注销此行时可以编译通过,找到linux/fs.h头文件,里面定义了unregister_chrdev()函数:


  extern void unregister_chrdev(unsigned int,const char *);


  此处定义的为void类型函数,而在程序中将其赋值给了ret,这就造成了编译错误。


  于是注释了相应的代码,用unregister_chrdev(MAJOR, DEVICE_NAME);代替即可。这样就能通过编译了。又出现了新的问题:


  **2.c:474:’SA_INTERRUPT’undeclared(first use in this function)//{ 原来头文件里没有SA_INTERRUPT了,一般使用IRQF_SHARED 了。}


  头文件为/usr/src/linux-2.6.26.8RedHawk5.2.4/include/linux下的interrupte.h


  **2.c:474:’SA_SHIRQ’undeclared(first use in this function)//{ SA_SHIRQ 已经不支持了,用 IRQF_SHARED }


  于是修改了这行,通过编译。


  新的问题又出现了:


  **3.c:57:error:’POLL_IN’undeclared(first use in this function)


  考虑肯定是由于头文件的问题,直接注销此行,先编译通过再说,编译成功!


  终于生成了**.ko的模块!


  但是,新的问题又出现了,始终加载不了该模块


  在/lib/modules/2.6.26.8-RedHawk-5.2.4-Moxa/kernel中新建文件夹extra


  将生成的**.ko文件复制到该文件下


  # depmod


  #modprobe **.ko


  FATAL:Module **.ko not found.


  再用insmod命令试试


  #insmod **.ko


  Insmod:error inserting ‘**.ko’: -1 Wrong medium type


  使用命令#dmesg:


  最后两行显示:


  [PCI-**]:Error in find_device: no card


  [PCI-**]:Error in find_device: no card


  因为没有插入板卡所致!


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java堆和栈的区别 下一篇Java5泛型 T.class的获取和为擦拭..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: