天嵌 ARM开发社区

 找回密码
 注册
查看: 5574|回复: 7

新手求助!内核模块加载的时候出错!

[复制链接]
guozhenzhen260 发表于 2012-1-4 22:20:06 | 显示全部楼层 |阅读模式
(1)编译出Linux镜像文件,下载到开发板中     
(2)
编译出来刚刚以模块形式配置的文件系统的驱动模块
cd /opt/EmbedSky/opt/EmbedSky/Linux-2.6.25.8/
make modules SUBDIRS=drivers/usb/gadget/
在内核源码生成drivers/usb/gadget/g_file_storage.ko驱动模块,复制到
/opt/EmbedSky/opt/EmbedSky/root_2.6.25.8/lib/目录下面  
编译出文件系统镜像文件,下载到开发板中

运行系统后,输入
[root@Fantasy /]#
[root@Fantasy /]# insmod /lib/g_file_storage.ko file=/dev/mtdblock2 removable=1
g_file_storage: unknown relocation: 40
insmod: can't insert '/lib/g_file_storage.ko': invalid module format
[root@Fantasy /]#
想把开发板当存储器使用,配置Linux2.6.25.8内核自带的USB驱动,所以调用的应该是2.6.25.8内核的源码树
编译环境:ubuntu+EABI4.3.3
目标系统:Linux2.6.25.8
这个是什么问题?
TQ-lkp 发表于 2012-1-5 10:40:52 | 显示全部楼层
本帖最后由 TQ-lkp 于 2012-1-5 10:41 编辑

看情况应该是你的编绎器不是交叉编绎器,或者你编绎ko时候的编绎器不是我们提供的4.3.3的
你可以file g_file_storage.ko 看下是不是用交叉编绎器的,我们一在强调这个交叉编绎器正确配置的重要性。
很多朋友就是没明白交叉编绎器和非交叉编绎器的区别。
凡是板子上用到的文件(库和可执行文件),都一定记得要用交叉编绎器,出问题时首先要排除自己没有用正确的编绎器再考虑其他的问题。
 楼主| guozhenzhen260 发表于 2012-1-5 22:38:08 | 显示全部楼层
编译器应该没有错,
file g_file_storage.ko

g_file_storage.ko:ELF 32-bit LSB relocatable,  ARM,  version 1(SYSV),  not stripped


arm-linux-gcc -v

....
gcc version 4.3.3(Sourcery G++ Lite 2009q1-176)


从网上查的资料上来看,是因为
EABI-4.3.3的编译器比2.6.25.8新,在编译连接程序时两者的有些参数不兼容导致的问题。
http://jasperzhang.blog.sohu.com/162926832.html

我现在已经按照这个方法调了,但是会出现新的问题
输入:
insmod /lib/g_file_storage.ko file=/dev/mtdblock2 removable=1
出现故障:
insmod:cannot insert '/lib/g_file_storage.ko': No Such device

只能继续查找问题点了


本帖子中包含更多资源

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

x
 楼主| guozhenzhen260 发表于 2012-1-6 00:04:49 | 显示全部楼层
哈哈!成功了:lol。。
问题点在这里
make menuconfig中
USB Peripheral Controller-->
           注意,这个要进入,里面选择S3C2410 USB Device Controller项目

同时,这一项需要选择
<*> S3C2410 udc debug messages   添加对UDC的支持


感谢超级版主 大大的帮助

521nemo 发表于 2012-1-6 19:30:18 | 显示全部楼层
学习一下!不错不错
424602394dzr 发表于 2012-2-8 23:11:56 | 显示全部楼层
guozhenzhen260 发表于 2012-1-6 00:04
哈哈!成功了。。
问题点在这里
make menuconfig中

:) LZ你好,我也遇到这个问题,但我USB Peripheral Controller-->
          里面选择S3C2410 USB Device Controller
<*> S3C2410 udc debug messages   这个也弄了,但那个问题还没解决啊,你在网上找资料那步你还要吗?我也添加那步后出现了这些情况

[root@(none) /]# insmod /lib/g_file_storage.ko file=/dev/mtdblock2 removable=1
Unable to handle kernel paging request at virtual address bf3c841c
pgd = c3e58000
[bf3c841c] *pgd=00000000
Internal error: Oops: 0 [#1]
Modules linked in: g_file_storage(+)
CPU: 0    Not tainted  (2.6.25-EmbedSky #18)
PC is at 0xbf3c841c
LR is at fsg_bind+0x40c/0x700 [g_file_storage]
pc : [<bf3c841c>]    lr : [<bf00840c>]    psr: a0000013
sp : c3eede38  ip : 00000004  fp : c3eede7c
r10: bf006008  r9 : c3dee400  r8 : 00000000
r7 : bf005ef8  r6 : 00000050  r5 : 00000002  r4 : c3dee440
r3 : c01ff060  r2 : c02fbf10  r1 : 00000001  r0 : c03aba60
Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
Control: c000717f  Table: 33e58000  DAC: 00000015
Process insmod (pid: 925, stack limit = 0xc3eec268)
Stack: (0xc3eede38 to 0xc3eee000)
de20:                                                       00000000 c3eede48
de40: c03aba60 c03aba80 c03abb0c c3dee410 c4866000 bf005fe8 00000000 c03ab940
de60: c03aba80 00000001 c48918b0 c0081300 c3eede9c c3eede80 c020116c bf008010
de80: bf006200 c3dee400 c3dee410 c3ddcc80 c3eedebc c3eedea0 bf008760 c02010bc
dea0: bf0060a0 bf0060a0 c4891f90 c3ddcc80 c3eedfa4 c3eedec0 c0081cc8 bf008710
dec0: 00000000 00000000 0003d808 c02cf654 c02cf654 bf0060e8 bf0060ac c3eec000
dee0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
df00: 00000000 0000000c 00000000 00000000 00000000 0000000e c48a2ef8 c3ddcac0
df20: c489171f c4866000 c4891f40 c4891ba8 c00be1e0 0000010a 0000010a 00000002
df40: 00000002 c4891f68 00000000 0000002a 00000000 0000002c c3eedf84 c3eedf68
df60: c00a9784 c00acd1c 00000003 c3df5cc0 00000000 00000000 c3eedfa4 0003d7ea
df80: bef33e11 000002ec 00000080 c0045be8 c3eec000 00000000 00000000 c3eedfa8
dfa0: c0045a40 c0081bd4 0003d7ea bef33e11 40000008 0003d7ea 001e4fe8 bef33e11
dfc0: 0003d7ea bef33e11 000002ec 00000080 00000000 00000004 00000000 bef33d24
dfe0: bef33b48 bef33b38 0002cdbc 00009300 20000010 40000008 00000000 00000000
Backtrace:
[<bf008000>] (fsg_bind+0x0/0x700 [g_file_storage]) from [<c020116c>] (usb_gadget_register_driver+0xc0/0x11c)
[<c02010ac>] (usb_gadget_register_driver+0x0/0x11c) from [<bf008760>] (fsg_init+0x60/0x98 [g_file_storage])
r7:c3ddcc80 r6:c3dee410 r5:c3dee400 r4:bf006200
[<bf008700>] (fsg_init+0x0/0x98 [g_file_storage]) from [<c0081cc8>] (sys_init_module+0x104/0x17dc)
r7:c3ddcc80 r6:c4891f90 r5:bf0060a0 r4:bf0060a0
[<c0081bc4>] (sys_init_module+0x0/0x17dc) from [<c0045a40>] (ret_fast_syscall+0x0/0x2c)
Code: bad PC value.
---[ end trace 2947d3ae47b1d475 ]---
Segmentation fault
[root@(none) /]#
LZ好心人知道这是什么回事吗?我那移植手册是V4.5版的,LZ的是第几?
 楼主| guozhenzhen260 发表于 2012-2-9 09:28:00 | 显示全部楼层
424602394dzr 发表于 2012-2-8 23:11
LZ你好,我也遇到这个问题,但我USB Peripheral Controller-->
          里面选择S3C2410 USB Devic ...

你好:)
在网上找资料那步,我当初是有按照他的要求一步步做下来的。
但是,楼上遇到的这个问题与我遇到的问题是不一样的,不是单纯的因为把开发板挂载成u盘而出现的问题。
我刚才网上查了一下,个人觉得有可能是因为挂载设备时,分配的虚拟地址产生冲突而引起的这个Oops异常报警。
具体的解决方法我找了几个,只能请楼上自己拿着开发板调试和分析了,虽然这个过程可能比较痛苦一点:)。问题解决之后,
也请楼上同仁将解决方法告诉我一下,不胜感激

解决方法一
问题:
我在移植linux-2.6.14 到s3c2410时也出现了类似错误,先移植好网卡后,在移植LCD,出错
s3c2410_bwscon value 22111910
s3c2410_bankcon2 value 7ffc
ax88796 extIRQ = 12, IRQtype= 4
Unable to handle kernel paging request at virtual address d1000200
...
pgd = c0004000
[d1000200] *pgd=00000000
Internal error: Oops: 5 [#1]
Modules linked in:
CPU: 0
PC is at ne_probe1+0x44/0x434
LR is at 0xc028ff98
pc : [<c001b9fc>] lr : [<c028ff98>] Not tainted
sp : c03cfef8 ip : c028ff80 fp : c03cff74
r10: c0300130 r9 : 00000000 r8 : 00000000
r7 : c3dfc800 r6 : d1000200 r5 : d1000200 r4 : f0100000
r3 : ffffffff r2 : d1000200 r1 : c3cc0ac0 r0 : c3cc0ac0
Flags: NzCv IRQs on FIQs on Mode SVC_32 Segment kernel
Control: C000717F Table: 30004000 DAC: 00000017
Process swapper (pid: 1, stack limit = 0xc03ce194)
Stack: (0xc03cfef8 to 0xc03d0000)
fee0: ffffffff 00000002  
ff00: c3dfc800 ffffffff c03cff58 c03cff18 c013c9bc c013c1a4 0000000a ffffffff  
ff20: ffffffff 00000002 3c203800 f0100000 00007ffc 00000000 c3dfc800 00000000  
ff40: 00000000 c0300130 c03cff64 c03cff58 f0100000 00007ffc d1000200 c3dfc800  
ff60: 00000000 c0300130 c03cffa0 c03cff78 c001bf30 c001b9c8 c0025008 00000001  
ff80: 00000000 c0020d48 00000000 00000000 00000000 c03cffbc c03cffa4 c001b854  
ffa0: c001bdfc 00000001 00000000 00000000 c03cffd4 c03cffc0 c001b920 c001b820  
ffc0: c0020cb8 c03ce000 c03cfff4 c03cffd8 c00260e8 c001b898 00000000 00000000  
ffe0: 00000000 00000000 00000000 c03cfff8 c00400fc c0026068 20646c25 25206c66  
Backtrace:  
[<c001b9b8>] (ne_probe1+0x0/0x434) from [<c001bf30>] (ne_probe+0x144/0x18c)
[<c001bdec>] (ne_probe+0x0/0x18c) from [<c001b854>] (probe_list2+0x44/0x78)
[<c001b810>] (probe_list2+0x0/0x78) from [<c001b920>] (net_olddevs_init+0x98/0xdc)
r6 = 00000000 r5 = 00000000 r4 = 00000001  
[<c001b888>] (net_olddevs_init+0x0/0xdc) from [<c00260e8>] (init+0x90/0x214)
r5 = C03CE000 r4 = C0020CB8  
[<c0026058>] (init+0x0/0x214) from [<c00400fc>] (do_exit+0x0/0xa70)
r7 = 00000000 r6 = 00000000 r5 = 00000000 r4 = 00000000
Code: 0a0000e3 e3550201 e1a02005 328224f3 (e5d23000)  
<0>Kernel panic - not syncing: Attempted to kill init!

分析:
分配虚拟地址时,出现了问题,仔细分析一下include/asm-arm/arch-s3c2410/map.h这个文件,就知道这个文件定义了许多硬件的物理地址和虚拟地址,如果虚拟地址分配时重复,则会导致硬件请求虚拟地址不成功
Unable to handle kernel paging request at virtual address d1000200,

解决:
#define pAX88796_BASE (0x10000000) //physical base address
#define vAX88796_BASE S3C2410_ADDR(0x01400000) //virtual base address
#define AX88796_BASE (vAX88796_BASE + 0x200) //bank2 base address
(使用的是AX88796网卡,与NC2000兼容)


解决方法二:
http://blog.csdn.net/tobeabetterman_he/article/details/1544240
解决方法三:
http://pczou.bokee.com/3915699.html



最后一点,我原先开发板附带的移植手册也是V4.5,但是后来发现,这个移植手册与Linux2.6.25.8不大相同,而且有很多
讲的不详细,经常看的云里雾里的:P。后来我在网上找到了原版的移植手册,对照着看,收获很大,这个楼上可以下载下来
看一下,下载地址:
http://www.embedsky.net/db_picture/info4/Linux2.6.25rebuild.rar

424602394dzr 发表于 2012-2-9 11:42:58 | 显示全部楼层
guozhenzhen260 发表于 2012-2-9 09:28
你好
在网上找资料那步,我当初是有按照他的要求一步步做下来的。
但是,楼上遇到的这个问题与我遇到 ...

哈哈,成功了....
[root@(none) /]# insmod /lib/g_file_storage.ko file=/dev/mtdblock2 removable=1
g_file_storage gadget: File-backed Storage Gadget, version: 7 August 2007
g_file_storage gadget: Number of LUNs=1
g_file_storage gadget-lun0: ro=0, file: /dev/mtdblock2
[root@(none) /]#
只可惜电脑还是检不到这个U盘设备......延时我也加了,(延时值也改了很多种还是不行)

这还得感谢LZ 看到你说的虚拟地址,然后我一个一个字的检查那些地址,果然是有一个地址写错了,在
Module.c里面自己加的 *(u32 *)loc |=0x01a0f000;这里多加了一个0,去掉0就好了, 
对于前面的问题
g_file_storage: unknown relocation: 40
insmod: can't insert '/lib/g_file_storage.ko': invalid module format
这个确实像LZ说的那样加上那两个就可以了,只是我这里不知为何我配置U盘这段全部没成功,后来重新检查进才发现,重新配置下就行了
对于LZ上面这个问题我就不懂什么原因了,估计也是地址问题吧,偶是新手,想照手册移植成功有点成就感再仔细了解各是什么意思,所以对LZ这问题我没办法看懂.......不好意思了LZ,偶帮不了你
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-20 00:25 , Processed in 1.031250 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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