免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4413 | 回复: 13

[硬件及驱动] 实在受不了内核的装B,一个小小的helloworld模块都搞不定 [复制链接]

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2013-04-21 08:47 |显示全部楼层
本帖最后由 mordorwww 于 2013-04-21 09:02 编辑

没看出哪里不对啊,死活不让人插入
但是可能还是我错了,google了中文的,没有找到有用的方法,英文的也许能找到,但是实在没有耐性继续尝试鸟
人类不可能花很多的时间去研究,去学会内核是需要检查内核模块的哪些哪些兼容性事项的
如果确实需要花很多时间和成本去研究,去学会,那说明linux内核的易用性有问题了

modinfo hello.ko
filename:       hello.ko
license:        GPL
srcversion:     3FC920AF271594552D8FEE5
depends:        
vermagic:       2.6.32-21-generic SMP mod_unload modversions 586


insmod -f hello.ko
insmod: error inserting 'hello.ko': -1 Invalid module format

dmesg:
hello: disagrees about version of symbol module_layout

内核已加载模块信息
modinfo ieee1394
filename:       /lib/modules/2.6.32-21-generic/kernel/drivers/ieee1394/ieee1394.ko
license:        GPL
srcversion:     358FFCB6613AF4EEFA19E23
depends:        
vermagic:       2.6.32-21-generic SMP mod_unload modversions 586
parm:           ignore_driversisable automatic probing for drivers. (int)
parm:           fcp:Map FCP registers (default = 1, disable = 0). (int)
parm:           disable_nodemgrisable nodemgr functionality. (int)
parm:           disable_irmisable Isochronous Resource Manager functionality. (bool)
root@:~/linux-2.6.32.21#

内核版本信息
root@laptop:/usr/src# uname -r
2.6.32-21-generic
root@mordor-laptop:/usr/src# uname -a
Linux  2.6.32-21-generic #32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010 i686 GNU/Linux
root@:/usr/src#

src:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("GPL";
static int hello_init(void)
{
    printk("hello, linux, wyf baby\r\n";
    return 0;
}

static void hello_exit(void)
{
    printk("bye, linux, wyf baby\r\n";
}

module_init(hello_init);
module_exit(hello_exit);

论坛徽章:
0
发表于 2013-04-21 11:22 |显示全部楼层
本帖最后由 noudle 于 2013-04-21 11:23 编辑

模块的Makefile怎么写的?

论坛徽章:
27
水瓶座
日期:2014-08-22 21:06:34程序设计版块每日发帖之星
日期:2015-11-25 06:20:0015-16赛季CBA联赛之新疆
日期:2015-12-19 19:05:48IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:3315-16赛季CBA联赛之上海
日期:2016-04-15 19:51:31程序设计版块每日发帖之星
日期:2016-04-17 06:23:29程序设计版块每日发帖之星
日期:2016-04-23 06:20:00程序设计版块每日发帖之星
日期:2016-05-26 06:20:00每日论坛发贴之星
日期:2016-05-26 06:20:0015-16赛季CBA联赛之辽宁
日期:2017-02-16 23:59:47
发表于 2013-04-21 12:05 |显示全部楼层
本帖最后由 shijiang1130 于 2013-04-21 12:05 编辑

帖一个我的。

  1. #include <linux/module.h>
  2. #include <linux/kernel.h>

  3. int init_module(void)
  4. {
  5.         printk(KERN_INFO "Hello world \n");
  6.         return 0;
  7. }

  8. void cleanup_module(void)
  9. {
  10.         printk(KERN_INFO "Goodbye world\n");
  11. }
复制代码
Makefile
  1. obj-m += hello.o

  2. all:
  3.         make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

  4. clean:
  5.         make -C /lib/modules/$(shell uname 0r)/build M=$(PWD) clean
复制代码

论坛徽章:
0
发表于 2013-04-22 15:58 |显示全部楼层
static int __init miralcd_init(void)
{
        int ret;
        ret = platform_driver_register(&。。。。);
        return ret;
}

static void __init miralcd_exit(void)
{
        platform_driver_unregister(&。。。);
}

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("。。。。");
MODULE_AUTHOR("。。。");


module_init(。。。);
module_exit(。。。);


亲  你的module貌似不符合规范哦,你的format不对的,这个是我写的我们公司的实际的产品驱动你可以按这个来,哈哈你加上__init 和 __exit看看再说,别老骂内核,linux内核是很不错的!因为是还未发布的项目我把名字都抹去请见谅!但不影响你解决问题

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2013-04-22 20:24 |显示全部楼层
uliux 发表于 2013-04-22 15:58
static int __init miralcd_init(void)
{
        int ret;



用你的方法实验了,还是同样的错误

//#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("GPL");
static int __init hello_init(void)
{
    printk(KERN_INFO "KERN_INFO hello, linux, wyf baby\r\n");
    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_INFO "bye, linux, wyf baby\r\n");
}

module_init(hello_init);
module_exit(hello_exit);
MODULE_DESCRIPTION("cnm");
MODULE_AUTHOR("wq");

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-04-22 20:44 |显示全部楼层
回复 1# mordorwww

是否先编一遍kernel啊~


   

论坛徽章:
0
发表于 2013-04-23 09:27 |显示全部楼层
回复 5# mordorwww

这样看来必然不是你的代码有错误了,看看是不是你用的版本没有将module的一些必须的函数symbol出来!   

论坛徽章:
0
发表于 2013-04-23 12:12 |显示全部楼层
没指定license

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
发表于 2013-04-23 12:51 |显示全部楼层
dmesg:
hello: disagrees about version of symbol module_layout


LZ的问题其实这里已经显示清楚了。。。

你编译内核模块使用的内核源码与你运行的内核不一致,哪怕是版本相同,不同的配置也会杯具

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00数据库技术版块每日发帖之星
日期:2016-06-15 06:20:00数据库技术版块每日发帖之星
日期:2016-06-16 06:20:00数据库技术版块每日发帖之星
日期:2016-06-18 06:20:00程序设计版块每日发帖之星
日期:2016-06-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-09 06:20:00IT运维版块每日发帖之星
日期:2016-07-15 06:20:00IT运维版块每日发帖之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-08-18 06:20:00
发表于 2013-04-23 14:03 |显示全部楼层
asuka2001 发表于 2013-04-23 12:51
LZ的问题其实这里已经显示清楚了。。。

你编译内核模块使用的内核源码与你运行的内核不一致,哪怕是 ...



那么这样,linux设备上装了新设备后,安装驱动是一定需要gcc, 驱动源码,编译驱动了


难道就没有直接使用二进制安装新驱动的方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP