linux新手在开发板上加载模块的时候出现如下问题
请问要怎么解决啊,内核版本和模块版本是一样的吧 ? 应该是你编译内核的编译器和你编译module的编译器不一致,即使版本一样好像也不行。我是通过重新编译内核搞定的。 楼上正解,使用编译内核的编译器重新编译一下这个模块即可 bruce_helen 发表于 2014-11-20 17:07
楼上正解,使用编译内核的编译器重新编译一下这个模块即可
没道理啊,我都是用的同一个编译器编译的 编译的模块和内核啊
我已经在/etc/profile 声明了编译工具了 编译模块用的应该就是这个工具吧??
这个是模块的 MakeFile
ifneq ($(KERNELRELEASE),)
obj-m := mylist.o
else
KDIR := /lib/modules/3.0.1/build
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
tangkuan660 发表于 2014-11-20 16:33
应该是你编译内核的编译器和你编译module的编译器不一致,即使版本一样好像也不行。我是通过重新编译内核搞 ...
你看下4l 我还是没解决啊 你用make ARCH=arm CROSS_COMPILE=arm-linux- uImage重新编译内核,重新烧写内核,再insmod模块试试。 wangcjishu 发表于 2014-11-21 09:33
你用make ARCH=arm CROSS_COMPILE=arm-linux- uImage重新编译内核,重新烧写内核,再insmod模块试试。 ...
刚试了还是和4l一样的问题啊 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-
照理说都是一个工具链编译的不应该有问题。 wangcjishu 发表于 2014-11-21 10:14
你编译内核和内核模块时加绝对路径make ARCH=arm CROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux- uI ...
你的KDIR和当前板子上的内核是同一版本吗 Gallen.Zhang 发表于 2014-11-21 10:20
你的KDIR和当前板子上的内核是同一版本吗
是统一版本的 wangcjishu 发表于 2014-11-21 10:14
你编译内核和内核模块时加绝对路径make ARCH=arm CROSS_COMPILE=/usr/local/arm/4.4.1/bin/arm-linux- uI ...
我也不清楚啊, 你这样写 和我在 /etc/profile声明过的编译器应该是一样的效果吧 还是不行啊 xiaoaf 发表于 2014-11-21 10:32
我也不清楚啊, 你这样写 和我在 /etc/profile声明过的编译器应该是一样的效果吧 还是不行啊 ...
你在编译模块时要指定你刚才编译完的那个内核路径作为KDIR,你Makefile中KDIR := /lib/modules/3.0.1/build是你刚才编译的内核路径吗? 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/ 也是这样呢 xiaoaf 发表于 2014-11-21 10:32
我也不清楚啊, 你这样写 和我在 /etc/profile声明过的编译器应该是一样的效果吧 还是不行啊 ...
我看贴吧上有人是这样 说的
"你的内核配置和你编译这个模块的内核源码的配置不一样。把内核源码配置中的CONFIG_MODVERSIONS去掉"
然后 我找到了 内核源码 /include/generated/autoconf.h 里面有个宏定义
CONFIG_MODVERSIONS 1
我把它置 0了 重新编译了一次内核 那么问题又来了
还在装不上 xiaoaf 发表于 2014-11-21 11:08
这个目录是我在我的内核目录内 使用make module 然后在 用 make modules_install安装到我虚拟机Ubuntu...
这么和你说吧,你的这个问题肯定是编译内核的编译模块不一致造成的,原因有很多,例如内核和模块不是用同一个编译器,还有,编译模块时使用的内核目录不是你之前编译的内核的那个,也许还有其他原因,需要你自己去做实验排查。 wangcjishu 发表于 2014-11-21 11:15
这么和你说吧,你的这个问题肯定是编译内核的编译模块不一致造成的,原因有很多,例如内核和模块不是用同 ...
我在试试,重新整理一下内核文件盒 编译器看看情况如何 wangcjishu 发表于 2014-11-21 11:15
这么和你说吧,你的这个问题肯定是编译内核的编译模块不一致造成的,原因有很多,例如内核和模块不是用同 ...
我有捣鼓了一天了,还是一样的问题啊,会不是是我根文件系统的动态库没做好啊??可是我不知道要怎么弄动态库,要怎么把模块编译成静态链接的你造么? xiaoaf 发表于 2014-11-22 15:41
我有捣鼓了一天了,还是一样的问题啊,会不是是我根文件系统的动态库没做好啊??可是我不知道要怎么弄动态库 ...
我觉得不像是文件系统的问题,如果你怀疑有问题,可以用光盘自带的试试。 wangcjishu 发表于 2014-11-24 09:11
我觉得不像是文件系统的问题,如果你怀疑有问题,可以用光盘自带的试试。 ...
我又试了,根文件系统确实没问题,我自己写的c程序考到板上一样可以运行就是模块都安装不上去!!!{:mad:} 明显内核符号不一致。你确定你的内核和驱动是同一个源码弄的 90soso 发表于 2014-11-24 13:41
明显内核符号不一致。你确定你的内核和驱动是同一个源码弄的
是同一个原码弄的呀,这是模块代码
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("DAVID");
MODULE_DESCRIPTION("Hello world module");
//extern int add(int a, int b );
static int __init hello_init(void)
{
int a=1;
//a=add(5,40);
// printk(" hello %d world!\n ",a);
return 0;
}
static void __exit hello_exit(void)
{
// printk("hello exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
这是Makefile
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
#test-objs := add.o hello.o
else
KDIR := /home/xiaoaf/forlinux/rootfs/lib/modules/3.0.1/build
# KDIR := /lib/modules/2.6.31-14-generic/build
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
我的根文件系统目录 /home/xiaoaf/forlinux/rootfs/
如上我把 printk() 这个函数屏蔽了模块就能够安装上去了
但是把printk() 这个函数打开就出现如下错误
这个问题困扰了我好多天了 本帖最后由 xiaoaf 于 2014-11-24 16:45 编辑
wangcjishu 发表于 2014-11-24 09:11
我觉得不像是文件系统的问题,如果你怀疑有问题,可以用光盘自带的试试。 ...
我试着安装开发板内 /lib/modules/3.0.1/kernel/lib
有个模块 libcrc32c.ko
\这个是内核自带的吧也装不上啊? xiaoaf 发表于 2014-11-24 16:42
我试着安装开发板内 /lib/modules/3.0.1/kernel/lib
有个模块 libcrc32c.ko
你把你从编译内核,到编译模块,再到烧写,一步一步的操作的截图发上来,不要怕麻烦,要不解决不了问题 本帖最后由 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.cMakefile 代码详见21楼
制作完成并拷贝到nfs服务器
在板上加载,然后问题来了
关注一下!楼主将来如果解决麻烦告诉一下结果!{:biggrin:} embeddev_1 发表于 2014-11-25 08:49
关注一下!楼主将来如果解决麻烦告诉一下结果!
哈哈好的,已经被这个问题困扰好几天了 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 先不用做。 路过!{:lol:} 本帖最后由 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 复制到刚才做的内核开发板上一样的错误 xiaoaf 发表于 2014-11-25 08:51
哈哈好的,已经被这个问题困扰好几天了
上解决方法啊。。。 nome 发表于 2014-11-25 09:25
上解决方法啊。。。
还没解决啊 xiaoaf 发表于 2014-11-25 09:19
我试了下还是这样的结果呢 我直接把Makefile 里的 KDIR :=/home/xiaoaf/forlinux/linux-3.0.1
...
我觉得是内核版本和编译模块使用的内核不是同一个内核源码的问题,如果你的操作没错,还是一样的结果,我也不知道该怎么做了。 wangcjishu 发表于 2014-11-25 09:55
我觉得是内核版本和编译模块使用的内核不是同一个内核源码的问题,如果你的操作没错,还是一样的结果,我 ...
不知道是不是我的这个3.0.1的内核是被修改过的 我去下个官网的源码来试试 wangcjishu 发表于 2014-11-25 09:55
我觉得是内核版本和编译模块使用的内核不是同一个内核源码的问题,如果你的操作没错,还是一样的结果,我 ...
问题解决了,就是因为飞凌给的3.0.1内核修改太多了,安装不上去,我去自己下载了个3.3.5的内核源码自己参考
http://www.cnblogs.com/zuobaozhu/articles/2498092.html#_Toc324535486
http://www.cnblogs.com/plinx/archive/2013/03/10/2953129.html
这2个帖子完成了移植模块也成功的安装了. nome 发表于 2014-11-25 09:25
上解决方法啊。。。
解决方法34楼 embeddev_1 发表于 2014-11-25 08:49
关注一下!楼主将来如果解决麻烦告诉一下结果!
解决方法34楼 xiaoaf 发表于 2014-11-25 15:09
问题解决了,就是因为飞凌给的3.0.1内核修改太多了,安装不上去,我去自己下载了个3.3.5的内核源码自己参考
...
飞凌的内核难道不支持insmod新模块,不太可能吧。 wangcjishu 发表于 2014-11-25 15:33
飞凌的内核难道不支持insmod新模块,不太可能吧。
确实用他官网上下载的3.0.1内核就是不行啊 我被这个问题困扰了N天了 早上自己去下载3.3.5的内核源码 自己按照教程来移植就可以安装模块了..
页:
[1]