搜索
bottom↓
回复: 37

linux新手在开发板上加载模块的时候出现如下问题

[复制链接]

出0入0汤圆

发表于 2014-11-20 16:29:12 | 显示全部楼层 |阅读模式

请问要怎么解决啊,内核版本和模块版本是一样的吧 ?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2014-11-20 16:33:06 | 显示全部楼层
应该是你编译内核的编译器和你编译module的编译器不一致,即使版本一样好像也不行。我是通过重新编译内核搞定的。

出0入0汤圆

发表于 2014-11-20 17:07:50 | 显示全部楼层
楼上正解,使用编译内核的编译器重新编译一下这个模块即可

出0入0汤圆

 楼主| 发表于 2014-11-21 09:23:33 | 显示全部楼层
bruce_helen 发表于 2014-11-20 17:07
楼上正解,使用编译内核的编译器重新编译一下这个模块即可

没道理啊,我都是用的同一个编译器编译的 编译的模块和内核啊

我已经在/etc/profile 声明了编译工具了 编译模块用的应该就是这个工具吧??
这个是模块的 MakeFile
  1. ifneq ($(KERNELRELEASE),)

  2. obj-m := mylist.o
  3. else
  4.        
  5. KDIR := /lib/modules/3.0.1/build
  6. all:
  7.         make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
  8. clean:
  9.         rm -f *.ko *.o *.mod.o *.mod.c *.symvers

  10. endif
复制代码







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-11-21 09:24:34 | 显示全部楼层
tangkuan660 发表于 2014-11-20 16:33
应该是你编译内核的编译器和你编译module的编译器不一致,即使版本一样好像也不行。我是通过重新编译内核搞 ...

你看下4l 我还是没解决啊

出0入0汤圆

发表于 2014-11-21 09:33:57 | 显示全部楼层
你用make ARCH=arm CROSS_COMPILE=arm-linux- uImage重新编译内核,重新烧写内核,再insmod模块试试。

出0入0汤圆

 楼主| 发表于 2014-11-21 09:43:30 | 显示全部楼层
wangcjishu 发表于 2014-11-21 09:33
你用make ARCH=arm CROSS_COMPILE=arm-linux- uImage重新编译内核,重新烧写内核,再insmod模块试试。 ...

刚试了还是和4l一样的问题啊

出0入0汤圆

发表于 2014-11-21 10:14:31 | 显示全部楼层
xiaoaf 发表于 2014-11-21 09:43
刚试了还是和4l一样的问题啊

你编译内核和内核模块时加绝对路径make ARCH=arm CROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux- uImage,make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux-
照理说都是一个工具链编译的不应该有问题。

出0入0汤圆

发表于 2014-11-21 10:20:37 | 显示全部楼层
wangcjishu 发表于 2014-11-21 10:14
你编译内核和内核模块时加绝对路径make ARCH=arm CROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux- uI ...

你的KDIR和当前板子上的内核是同一版本吗

出0入0汤圆

 楼主| 发表于 2014-11-21 10:30:58 | 显示全部楼层
Gallen.Zhang 发表于 2014-11-21 10:20
你的KDIR和当前板子上的内核是同一版本吗

是统一版本的

出0入0汤圆

 楼主| 发表于 2014-11-21 10:32:10 | 显示全部楼层
wangcjishu 发表于 2014-11-21 10:14
你编译内核和内核模块时加绝对路径make ARCH=arm CROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux- uI ...

我也不清楚啊, 你这样写 和我在 /etc/profile  声明过的编译器应该是一样的效果吧 还是不行啊

出0入0汤圆

发表于 2014-11-21 10:38:04 | 显示全部楼层
xiaoaf 发表于 2014-11-21 10:32
我也不清楚啊, 你这样写 和我在 /etc/profile  声明过的编译器应该是一样的效果吧 还是不行啊 ...

你在编译模块时要指定你刚才编译完的那个内核路径作为KDIR,你Makefile中KDIR := /lib/modules/3.0.1/build是你刚才编译的内核路径吗?

出0入0汤圆

 楼主| 发表于 2014-11-21 11:08:19 | 显示全部楼层
wangcjishu 发表于 2014-11-21 10:38
你在编译模块时要指定你刚才编译完的那个内核路径作为KDIR,你Makefile中KDIR := /lib/modules/3.0.1/bui ...

这个目录是我在我的内核目录内 使用make module 然后在 用 make modules_install  安装到我虚拟机Ubuntu 那个目录下的 我把KDIR 的路径直接改到我根文件系统 的/lib/modules/3.0.1/build/ 也是这样呢

出0入0汤圆

 楼主| 发表于 2014-11-21 11:10:48 | 显示全部楼层
xiaoaf 发表于 2014-11-21 10:32
我也不清楚啊, 你这样写 和我在 /etc/profile  声明过的编译器应该是一样的效果吧 还是不行啊 ...


我看贴吧上有人是这样 说的

"你的内核配置和你编译这个模块的内核源码的配置不一样。把内核源码配置中的CONFIG_MODVERSIONS去掉"  

然后 我找到了 内核源码 /include/generated/autoconf.h 里面有个宏定义
CONFIG_MODVERSIONS 1
我把它置 0了 重新编译了一次内核 那么问题又来了



还在装不上

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-11-21 11:15:22 | 显示全部楼层
xiaoaf 发表于 2014-11-21 11:08
这个目录是我在我的内核目录内 使用make module 然后在 用 make modules_install  安装到我虚拟机Ubuntu  ...

这么和你说吧,你的这个问题肯定是编译内核的编译模块不一致造成的,原因有很多,例如内核和模块不是用同一个编译器,还有,编译模块时使用的内核目录不是你之前编译的内核的那个,也许还有其他原因,需要你自己去做实验排查。

出0入0汤圆

 楼主| 发表于 2014-11-21 11:18:23 | 显示全部楼层
wangcjishu 发表于 2014-11-21 11:15
这么和你说吧,你的这个问题肯定是编译内核的编译模块不一致造成的,原因有很多,例如内核和模块不是用同 ...

我在试试,重新整理一下内核文件盒 编译器看看情况如何

出0入0汤圆

 楼主| 发表于 2014-11-22 15:41:37 | 显示全部楼层
wangcjishu 发表于 2014-11-21 11:15
这么和你说吧,你的这个问题肯定是编译内核的编译模块不一致造成的,原因有很多,例如内核和模块不是用同 ...

我有捣鼓了一天了,还是一样的问题啊,会不是是我根文件系统的动态库没做好啊??可是我不知道要怎么弄动态库,要怎么把模块编译成静态链接的你造么?

出0入0汤圆

发表于 2014-11-24 09:11:18 | 显示全部楼层
xiaoaf 发表于 2014-11-22 15:41
我有捣鼓了一天了,还是一样的问题啊,会不是是我根文件系统的动态库没做好啊??可是我不知道要怎么弄动态库 ...

我觉得不像是文件系统的问题,如果你怀疑有问题,可以用光盘自带的试试。

出0入0汤圆

 楼主| 发表于 2014-11-24 11:27:18 | 显示全部楼层
wangcjishu 发表于 2014-11-24 09:11
我觉得不像是文件系统的问题,如果你怀疑有问题,可以用光盘自带的试试。 ...

我又试了,根文件系统确实没问题,我自己写的c程序考到板上一样可以运行就是模块都安装不上去!!!

出0入0汤圆

发表于 2014-11-24 13:41:43 | 显示全部楼层
明显内核符号不一致。你确定你的内核和驱动是同一个源码弄的

出0入0汤圆

 楼主| 发表于 2014-11-24 16:37:32 | 显示全部楼层
90soso 发表于 2014-11-24 13:41
明显内核符号不一致。你确定你的内核和驱动是同一个源码弄的

是同一个原码弄的呀,这是模块代码
  1. #include <linux/module.h>
  2. #include <linux/init.h>
  3. MODULE_LICENSE("GPL");
  4. MODULE_AUTHOR("DAVID");
  5. MODULE_DESCRIPTION("Hello world module");
  6. //extern int add(int a, int b );
  7. static int __init hello_init(void)
  8. {
  9.         int a=1;
  10.         //a=add(5,40);
  11. //        printk(" hello %d world!\n ",a);
  12.         return 0;
  13. }
  14. static void __exit hello_exit(void)
  15. {
  16. //        printk("hello exit!\n");
  17. }

  18. module_init(hello_init);
  19. module_exit(hello_exit);
复制代码


这是Makefile
  1. ifneq ($(KERNELRELEASE),)

  2. obj-m := hello.o
  3. #test-objs := add.o hello.o

  4. else
  5.        
  6. KDIR := /home/xiaoaf/forlinux/rootfs/lib/modules/3.0.1/build
  7. # KDIR := /lib/modules/2.6.31-14-generic/build
  8. all:
  9.         make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
  10. clean:
  11.         rm -f *.ko *.o *.mod.o *.mod.c *.symvers

  12. endif
复制代码


我的根文件系统目录 /home/xiaoaf/forlinux/rootfs/

如上我把 printk() 这个函数屏蔽了模块就能够安装上去了


但是把printk() 这个函数打开就出现如下错误



这个问题困扰了我好多天了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-11-24 16:42:32 | 显示全部楼层
本帖最后由 xiaoaf 于 2014-11-24 16:45 编辑
wangcjishu 发表于 2014-11-24 09:11
我觉得不像是文件系统的问题,如果你怀疑有问题,可以用光盘自带的试试。 ...


我试着安装开发板内 /lib/modules/3.0.1/kernel/lib
有个模块 libcrc32c.ko



\这个是内核自带的吧也装不上啊?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-11-24 16:53:34 | 显示全部楼层
xiaoaf 发表于 2014-11-24 16:42
我试着安装开发板内 /lib/modules/3.0.1/kernel/lib
有个模块 libcrc32c.ko

你把你从编译内核,到编译模块,再到烧写,一步一步的操作的截图发上来,不要怕麻烦,要不解决不了问题

出0入0汤圆

 楼主| 发表于 2014-11-25 08:46:29 | 显示全部楼层
本帖最后由 xiaoaf 于 2014-11-25 09:14 编辑
wangcjishu 发表于 2014-11-24 16:53
你把你从编译内核,到编译模块,再到烧写,一步一步的操作的截图发上来,不要怕麻烦,要不解决不了问题 ...


好的,首先十分感谢你的热心帮助,我现在就从头把我所做的工作一步步发上来,麻烦你有空再帮我看看

这个是我的交叉编译工具版本
Thread model: posix
gcc version 4.5.1 (ctng-1.8.1-FA)

这个是事先做好的根文件

现在lib目录下只有一些库文件

接下来我去内核源代码目录重新编译
root@ubuntu:/home/xiaoaf/forlinux/linux-3.0.1# cp .config conifgbk //先备份配置
root@ubuntu:/home/xiaoaf/forlinux/linux-3.0.1# make distclean //清除原来编译结果

root@ubuntu:/home/xiaoaf/forlinux/linux-3.0.1# cp configbk .config //恢复配置
root@ubuntu:/home/xiaoaf/forlinux/linux-3.0.1# make menuconfig ARCH=arm
这是主要的两个内核配置 选用randisk 和模块支持



开始编译模块root@ubuntu:/home/xiaoaf/forlinux/linux-3.0.1# make modules ARCH=arm CROSS_COMPILE=arm-linux-
模块编译完成没有错误
安装模块到根文件
root@ubuntu:/home/xiaoaf/forlinux/linux-3.0.1# make modules_install ARCH=arm INSTALL_MOD_PATH=/home/xiaoaf/forlinux/rootfs

完成没有错误可以看到已经在根文件lib目录生成modules 和firmware两个文件
接下来就是编译内核
root@ubuntu:/home/xiaoaf/forlinux/linux-3.0.1# make uImage ARCH=arm CROSS_COMPILE=arm-linux-

内核编译完成并把uImage复制到tftp服务器
下载到开发板
启动完成并挂载nfs
往下开始制作模块 2个文件 hello.c  Makefile 代码详见21楼
制作完成并拷贝到nfs服务器

在板上加载,然后问题来了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-11-25 08:49:33 | 显示全部楼层
关注一下!楼主将来如果解决麻烦告诉一下结果!

出0入0汤圆

 楼主| 发表于 2014-11-25 08:51:45 | 显示全部楼层
embeddev_1 发表于 2014-11-25 08:49
关注一下!楼主将来如果解决麻烦告诉一下结果!

哈哈好的,已经被这个问题困扰好几天了

出0入0汤圆

发表于 2014-11-25 09:04:03 | 显示全部楼层
xiaoaf 发表于 2014-11-25 08:46
好的,首先十分感谢你的热心帮助,我现在就从头把我所做的工作一步步发上来,麻烦你有空再帮我看看

这个是 ...

应该先编译内核 make uImage ARCH=arm CROSS_COMPILE=arm-linux-,烧写这个内核,再编译你自己写的内核模块,指定内核目录为/home/xiaoaf/forlinux/linux-3.0.1,将ko文件拷贝到文件系统里再试。make module和make module install 先不用做。

出0入0汤圆

发表于 2014-11-25 09:04:36 | 显示全部楼层
路过!

出0入0汤圆

 楼主| 发表于 2014-11-25 09:19:45 | 显示全部楼层
本帖最后由 xiaoaf 于 2014-11-25 09:21 编辑
wangcjishu 发表于 2014-11-25 09:04
应该先编译内核 make uImage ARCH=arm CROSS_COMPILE=arm-linux-,烧写这个内核,再编译你自己写的内核模 ...


我试了下还是这样的结果呢 我直接把Makefile      里的     KDIR :=/home/xiaoaf/forlinux/linux-3.0.1
然后make 生成的 hello.ko 复制到刚才做的内核开发板上一样的错误

出0入0汤圆

发表于 2014-11-25 09:25:20 | 显示全部楼层
xiaoaf 发表于 2014-11-25 08:51
哈哈好的,已经被这个问题困扰好几天了

上解决方法啊。。。

出0入0汤圆

 楼主| 发表于 2014-11-25 09:26:17 | 显示全部楼层
nome 发表于 2014-11-25 09:25
上解决方法啊。。。

还没解决啊

出0入0汤圆

发表于 2014-11-25 09:55:27 | 显示全部楼层
xiaoaf 发表于 2014-11-25 09:19
我试了下还是这样的结果呢 我直接把Makefile      里的     KDIR :=/home/xiaoaf/forlinux/linux-3.0.1
...

我觉得是内核版本和编译模块使用的内核不是同一个内核源码的问题,如果你的操作没错,还是一样的结果,我也不知道该怎么做了。

出0入0汤圆

 楼主| 发表于 2014-11-25 10:24:55 | 显示全部楼层
wangcjishu 发表于 2014-11-25 09:55
我觉得是内核版本和编译模块使用的内核不是同一个内核源码的问题,如果你的操作没错,还是一样的结果,我 ...

不知道是不是我的这个3.0.1的内核是被修改过的 我去下个官网的源码来试试

出0入0汤圆

 楼主| 发表于 2014-11-25 15:09:06 | 显示全部楼层
wangcjishu 发表于 2014-11-25 09:55
我觉得是内核版本和编译模块使用的内核不是同一个内核源码的问题,如果你的操作没错,还是一样的结果,我 ...

问题解决了,就是因为飞凌给的3.0.1内核修改太多了,安装不上去,我去自己下载了个3.3.5的内核源码自己参考
http://www.cnblogs.com/zuobaozhu ... .html#_Toc324535486
http://www.cnblogs.com/plinx/archive/2013/03/10/2953129.html
这2个帖子完成了移植模块也成功的安装了.

出0入0汤圆

 楼主| 发表于 2014-11-25 15:09:40 | 显示全部楼层
nome 发表于 2014-11-25 09:25
上解决方法啊。。。

解决方法34楼

出0入0汤圆

 楼主| 发表于 2014-11-25 15:09:55 | 显示全部楼层
embeddev_1 发表于 2014-11-25 08:49
关注一下!楼主将来如果解决麻烦告诉一下结果!

解决方法34楼

出0入0汤圆

发表于 2014-11-25 15:33:57 | 显示全部楼层
xiaoaf 发表于 2014-11-25 15:09
问题解决了,就是因为飞凌给的3.0.1内核修改太多了,安装不上去,我去自己下载了个3.3.5的内核源码自己参考
...

飞凌的内核难道不支持insmod新模块,不太可能吧。

出0入0汤圆

 楼主| 发表于 2014-11-25 15:44:16 | 显示全部楼层
wangcjishu 发表于 2014-11-25 15:33
飞凌的内核难道不支持insmod新模块,不太可能吧。

确实用他官网上下载的3.0.1内核就是不行啊 我被这个问题困扰了N天了 早上自己去下载3.3.5的内核源码 自己按照教程来移植就可以安装模块了..
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 17:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表