打印

在uClinux中挂载驱动程序的问题,急求解!

在uClinux中挂载驱动程序的问题,急求解!

我使用的是lumit的4510b开发板
先用tftp将uclinux上传到开发板ram中运行,然后在uclinux挂载宿主机上的NFS文件系统,在nfs目录下有一个test.o的驱动程序,只是实现了module_init 和 module_exit 通过printk输出。

内核配置应该没有问题,insmod insmod(kernel) lsmod rmmod , loadmodule enable 等相关都编入内核,然而在insmod test.o的时候出现以下的信息:

Unhandled fault: external abort on linefetch (F4) at 0x00000001
fault-common.c(97): start_code=0x380040, start_stack=0x3bff80

实在被折磨的不行了,我所知道能用的方法都已经用过了,可惜还是没有效果。因此想在这里请教大家,给我点指点吧!

TOP

uclinux中好像直接用insmod不行
建议你把驱动编译到uclinux里面,那样肯定没有问题,你也可以通过控制LED灯的亮灭来指示驱动的加载和卸载!!

TOP

如你所说,我把modules编译到内核里后,加载确实可用,可是每次都需要对内核进行编译,耽误了不少时间(我的机器也不是特别快),并且调试也有些困难。这些天来我分析了一下出错的问题:

我用make modules >mod,在mod中找到了一个合适的模块编译选项,通过两种方式编译:
1.不通过uclinux 编译,在外部用make使用同uclinux一样的编译选项,编译后的.o格式的module通过nfs访问到后insmod出现以上的失败的信息,但用lsmod可见模块已经挂载上了只是后边有个(未初始化)。
2.通过uclinux编译,编译到镜像里,所有选项都一致,没有任何问题,可以直接装载。
3.通过nfs把可用module copy到nfs文件夹(r/w)中,再次insmod也仍然可用。
4.把不可用的module copy到uclinux的temp文件夹,之后insmod仍然不可用。

究竟可能是什么样的问题?
是编译选项问题,还是nfs的访问问题?

TOP

突然发现在rmofs下的文件和直接编译出来的文件大小相差了几十倍之多!
一定是有编译过程中的问题
看make 文件中的 make modules_install突然发现有一句,在实际中应该为
arm-elf-strip -g *.o用来去处 debug信息!
实验后,文件缩小了几十倍!再次通过nfs insmod成功!

虽然问题解决了,但出错的原理仍然不太懂.........

TOP

回复 4# tgsigma 的帖子

楼长能说具体说下是怎么解决的么?我也遇到一样的问题,还没就解决。谢啦!

TOP