嵌入式爱好者

查看: 9682|回复: 10

自己编译了一遍内核,插入sdio wifi 模块后出现问题

[复制链接]

2

主题

17

帖子

55

积分

i.MX6UL通行证

扫一扫,手机访问本帖
发表于 2017-3-7 15:28:56 | 显示全部楼层 |阅读模式
本人按照飞凌ok210软件手册-v2.0-linux2.6-2015-08-20上写的步骤编译了资料里的uboot,内核以及文件系统,烧到开发板上后可以正常使用,但是当把sdio wifi(RTL8189ES)插到开发板上后再上电就出现如下错误:unable to handle kernel NULL pointer deference at virtual address 00000000;
[    2.603432] RTL871X: <==== ReadAdapterInfo8188ES in 359 ms
[    2.609037] RTL871X: init_channel_set ChannelPlan ID 20 Chan num:13  
[    2.616007] RTL871X: rtw_register_early_suspend
[    2.619829] RTL871X: rtw_macaddr_cfg MAC Address  = 34:c3:d2:0b:f5:5a
[    2.626255] RTL871X: bDriverStopped:1, bSurpriseRemoved:0, bup:0, hw_init_completed:0
[    2.634037] Unable to handle kernel NULL pointer dereference at virtual address 00000000
[    2.642096] pgd = c0004000
[    2.644842] [00000000] *pgd=00000000
[    2.648307] Internal error: Oops: 805 [#1] PREEMPT
[    2.653065] last sysfs file:
[    2.656012] Modules linked in:
[    2.659048] CPU: 0    Not tainted  (2.6.35.7 #1)
[    2.663649] PC is at memcpy+0xb4/0x330
[    2.667365] LR is at 0xbd2c334
[    2.670400] pc : [<c01f2294>]    lr : [<0bd2c334>]    psr: 00000013
[    2.670406] sp : efd07d44  ip : 0000001c  fp : efd07d6c
[    2.681837] r10: 00004108  r9 : 00004044  r8 : efe7c800
[    2.687036] r7 : 00000000  r6 : efe7c800  r5 : efea1800  r4 : f08b9000
[    2.693536] r3 : f08bc07b  r2 : ffffffe6  r1 : f08bc0b4  r0 : 00000000
[    2.700036] Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
[    2.707315] Control: 10c5387d  Table: 20004019  DAC: 00000017

以下是backtrace:
[    3.535238] Backtrace:
[    3.537681] [<c02e0854>] (_rtw_memcpy+0x0/0x14) from [<c02e2b64>] (rtw_drv_register_netdev+0xb8/0x178)
[    3.546946] [<c02e2aac>] (rtw_drv_register_netdev+0x0/0x178) from [<c02e3680>] (rtw_drv_init+0x9c/0xd4)
[    3.556304] [<c02e35e4>] (rtw_drv_init+0x0/0xd4) from [<c042cc34>] (sdio_bus_probe+0x64/0x70)
[    3.564789]  r7:00000000 r6:c05f6bc0 r5:c085b138 r4:efe57a00
[    3.570430] [<c042cbd0>] (sdio_bus_probe+0x0/0x70) from [<c0260148>] (driver_probe_device+0xb0/0x160)
[    3.579607]  r7:c085b138 r6:c0260284 r5:efe57a08 r4:c085b138
[    3.585246] [<c0260098>] (driver_probe_device+0x0/0x160) from [<c02602c8>] (__device_attach+0x44/0x48)
[    3.594512]  r7:efe57c00 r6:c0260284 r5:efe57a08 r4:c085b138
[    3.600151] [<c0260284>] (__device_attach+0x0/0x48) from [<c025f63c>] (bus_for_each_drv+0x50/0x90)
[    3.609070]  r5:00000000 r4:efe57a08
[    3.612629] [<c025f5ec>] (bus_for_each_drv+0x0/0x90) from [<c0260350>] (device_attach+0x58/0x70)
[    3.621376]  r6:00000000 r5:efe57a08 r4:efe57a3c
[    3.625975] [<c02602f8>] (device_attach+0x0/0x70) from [<c025f49c>] (bus_probe_device+0x2c/0x48)
[    3.634721]  r5:efe57a10 r4:efe57a08
[    3.638280] [<c025f470>] (bus_probe_device+0x0/0x48) from [<c025de40>] (device_add+0x32c/0x4a0)
[    3.646945] [<c025db14>] (device_add+0x0/0x4a0) from [<c042caa0>] (sdio_add_func+0x3c/0x54)
[    3.655270] [<c042ca64>] (sdio_add_func+0x0/0x54) from [<c042c460>] (mmc_attach_sdio+0x2d8/0x364)
[    3.664098]  r5:00000000 r4:efea0400
[    3.667658] [<c042c188>] (mmc_attach_sdio+0x0/0x364) from [<c04285f8>] (mmc_rescan+0x1cc/0x284)
[    3.676326] [<c042842c>] (mmc_rescan+0x0/0x284) from [<c006e398>] (worker_thread+0x164/0x1f4)
[    3.684809]  r8:efd2a7d0 r7:efd2a7d8 r6:c042842c r5:efd06000 r4:efd2a7c0
[    3.691491] [<c006e234>] (worker_thread+0x0/0x1f4) from [<c0071cb0>] (kthread+0x84/0x8c)
[    3.699553] [<c0071c2c>] (kthread+0x0/0x8c) from [<c005f0d4>] (do_exit+0x0/0x5f0)
[    3.706993]  r7:00000013 r6:c005f0d4 r5:c0071c2c r4:efc37ed8
[    3.712631] Code: e4805004 e4806004 e4807004 e4808004 (e480e004)
[    3.718829] ---[ end trace 69fd16961b625491 ]

最后就卡在这不动了
[   76.690667] FIMC0 registered successfully
[   76.694539] FIMC1 registered successfully
[   76.698524] FIMC2 registered successfully
[   76.701416] DBUG_PORT must not use AFC!

根据Unable to handle kernel NULL pointer dereference at virtual address 00000000这个问题我找到PC is at memcpy+0xb4/0x330所指位置pc : [<c01f2294>],地址为../arch/arm/lib/copy_template.S中第142行,代码如下:
80 1:              subs    r2, r2, #(28)
81                 stmfd   sp!, {r5 - r8}
82                 blt     5f
83
84         CALGN(  ands    ip, r0, #31             )
85         CALGN(  rsb     r3, ip, #32             )
86         CALGN(  sbcnes  r4, r3, r2              )  @ C is always set here
87         CALGN(  bcs     2f                      )
88         CALGN(  adr     r4, 6f                  )
89         CALGN(  subs    r2, r2, r3              )  @ C gets set
90         CALGN(  add     pc, r4, ip              )
91
92         PLD(    pld     [r1, #0]                )
93 2:      PLD(    subs    r2, r2, #96             )
94         PLD(    pld     [r1, #28]               )
95         PLD(    blt     4f                      )
96         PLD(    pld     [r1, #60]               )
97         PLD(    pld     [r1, #92]               )
98
99 3:      PLD(    pld     [r1, #124]              )
100 4:              ldr8w   r1, r3, r4, r5, r6, r7, r8, ip, lr, abort=20f
101                 subs    r2, r2, #32
102                 str8w   r0, r3, r4, r5, r6, r7, r8, ip, lr, abort=20f
103                 bge     3b
104         PLD(    cmn     r2, #96                 )
105         PLD(    bge     4b                      )
106
107 5:              ands    ip, r2, #28
108                 rsb     ip, ip, #32
109 #if LDR1W_SHIFT > 0
110                 lsl     ip, ip, #LDR1W_SHIFT
111 #endif
112                 addne   pc, pc, ip              @ C is always clear here
113                 b       7f
114 6:

115                 .rept   (1 << LDR1W_SHIFT)
116                 W(nop)
117                 .endr
118                 ldr1w   r1, r3, abort=20f
119                 ldr1w   r1, r4, abort=20f
120                 ldr1w   r1, r5, abort=20f
121                 ldr1w   r1, r6, abort=20f
122                 ldr1w   r1, r7, abort=20f
123                 ldr1w   r1, r8, abort=20f
124                 ldr1w   r1, lr, abort=20f
125
126 #if LDR1W_SHIFT < STR1W_SHIFT
127                 lsl     ip, ip, #STR1W_SHIFT - LDR1W_SHIFT
128 #elif LDR1W_SHIFT > STR1W_SHIFT
129                 lsr     ip, ip, #LDR1W_SHIFT - STR1W_SHIFT
130 #endif
131                 add     pc, pc, ip
132                 nop
133                 .rept   (1 << STR1W_SHIFT)
134                 W(nop)
135                 .endr
136                 str1w   r0, r3, abort=20f
137                 str1w   r0, r4, abort=20f
138                 str1w   r0, r5, abort=20f
139                 str1w   r0, r6, abort=20f
140                 str1w   r0, r7, abort=20f
141                 str1w   r0, r8, abort=20f
142                 str1w   r0, lr, abort=20f
143
144         CALGN(  bcs     2b                      )
145
146 7:              ldmfd   sp!, {r5 - r8}
147
148 8:              movs    r2, r2, lsl #31
149                 ldr1b   r1, r3, ne, abort=21f
150                 ldr1b   r1, r4, cs, abort=21f
151                 ldr1b   r1, ip, cs, abort=21f
152                 str1b   r0, r3, ne, abort=21f
153                 str1b   r0, r4, cs, abort=21f
154                 str1b   r0, ip, cs, abort=21f
相应的汇编代码如下:

c01f21e0 <memcpy>:
c01f21e0:        e92d4011         push        {r0, r4, lr}
c01f21e4:        e2522004         subs        r2, r2, #4
c01f21e8:        ba00002b         blt        c01f229c <memcpy+0xbc>
c01f21ec:        e210c003         ands        ip, r0, #3
c01f21f0:        f5d1f000         pld        [r1]
c01f21f4:        1a000030         bne        c01f22bc <memcpy+0xdc>
c01f21f8:        e211c003         ands        ip, r1, #3
c01f21fc:        1a00003a         bne        c01f22ec <memcpy+0x10c>
c01f2200:        e252201c         subs        r2, r2, #28
c01f2204:        e92d01e0         push        {r5, r6, r7, r8}
c01f2208:        ba00000c         blt        c01f2240 <memcpy+0x60>
c01f220c:        f5d1f000         pld        [r1]
c01f2210:        e2522060         subs        r2, r2, #96        ; 0x60
c01f2214:        f5d1f01c         pld        [r1, #28]
c01f2218:        ba000002         blt        c01f2228 <memcpy+0x48>
c01f221c:        f5d1f03c         pld        [r1, #60]        ; 0x3c
c01f2220:        f5d1f05c         pld        [r1, #92]        ; 0x5c
c01f2224:        f5d1f07c         pld        [r1, #124]        ; 0x7c
c01f2228:        e8b151f8         ldm        r1!, {r3, r4, r5, r6, r7, r8, ip, lr}
c01f222c:        e2522020         subs        r2, r2, #32
c01f2230:        e8a051f8         stmia        r0!, {r3, r4, r5, r6, r7, r8, ip, lr}
c01f2234:        aafffffa         bge        c01f2224 <memcpy+0x44>
c01f2238:        e3720060         cmn        r2, #96        ; 0x60
c01f223c:        aafffff9         bge        c01f2228 <memcpy+0x48>
c01f2240:        e212c01c         ands        ip, r2, #28
c01f2244:        e26cc020         rsb        ip, ip, #32
c01f2248:        108ff00c         addne        pc, pc, ip
c01f224c:        ea000011         b        c01f2298 <memcpy+0xb8>
c01f2250:        e320f000         nop        {0}
c01f2254:        e4913004         ldr        r3, [r1], #4
c01f2258:        e4914004         ldr        r4, [r1], #4
c01f225c:        e4915004         ldr        r5, [r1], #4
c01f2260:        e4916004         ldr        r6, [r1], #4
c01f2264:        e4917004         ldr        r7, [r1], #4
c01f2268:        e4918004         ldr        r8, [r1], #4
c01f226c:        e491e004         ldr        lr, [r1], #4
c01f2270:        e08ff00c         add        pc, pc, ip
c01f2274:        e320f000         nop        {0}
c01f2278:        e320f000         nop        {0}
c01f227c:        e4803004         str        r3, [r0], #4
c01f2280:        e4804004         str        r4, [r0], #4
c01f2284:        e4805004         str        r5, [r0], #4
c01f2288:        e4806004         str        r6, [r0], #4
c01f228c:        e4807004         str        r7, [r0], #4
c01f2290:        e4808004         str        r8, [r0], #4
c01f2294:e480e004         str        lr, [r0], #4
c01f2298:        e8bd01e0         pop        {r5, r6, r7, r8}
c01f229c:        e1b02f82         lsls        r2, r2, #31
c01f22a0:        14d13001         ldrbne        r3, [r1], #1
c01f22a4:        24d14001         ldrbcs        r4, [r1], #1
c01f22a8:        24d1c001         ldrbcs        ip, [r1], #1
c01f22ac:        14c03001         strbne        r3, [r0], #1
c01f22b0:        24c04001         strbcs        r4, [r0], #1
c01f22b4:        24c0c001         strbcs        ip, [r0], #1
c01f22b8:        e8bd8011         pop        {r0, r4, pc}
c01f22bc:        e26cc004         rsb        ip, ip, #4
c01f22c0:        e35c0002         cmp        ip, #2
c01f22c4:        c4d13001         ldrbgt        r3, [r1], #1
c01f22c8:        a4d14001         ldrbge        r4, [r1], #1
c01f22cc:        e4d1e001         ldrb        lr, [r1], #1
c01f22d0:        c4c03001         strbgt        r3, [r0], #1
c01f22d4:        a4c04001         strbge        r4, [r0], #1
c01f22d8:        e052200c         subs        r2, r2, ip
c01f22dc:        e4c0e001         strb        lr, [r0], #1
c01f22e0:        baffffed         blt        c01f229c <memcpy+0xbc>
c01f22e4:        e211c003         ands        ip, r1, #3
c01f22e8:        0affffc4         beq        c01f2200 <memcpy+0x20>
c01f22ec:        e3c11003         bic        r1, r1, #3

这个问题有没有能帮忙解决的,万分感谢!!!!

回复

使用道具 举报

1

主题

3669

帖子

3920

积分

发表于 2017-3-8 09:12:58 | 显示全部楼层
您好:
          将static inline int s3c_gpio_do_setpull函数修改为以下内容: &#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;&#160;static inline int s3c_gpio_do_setpull(struct s3c_gpio_chip *chip,&#160;unsigned int off, s3c_gpio_pull_t pull) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
                  { &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(NULL != chip->config->set_pull) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
&#160;&#160;                     &#160;return (chip->config->set_pull)(chip, off, pull); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
                           &#160;else &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
                         &#160;return EINVAL; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
                 &#160;}
参考网址:http://blog.csdn.net/ExclusivePig/archive/2010/10/24/5961869.aspx

点评

首先非常感谢!我修改了你说的部分,但是结果还和原来一样,这里PC is at memcpy+0xb4/0x330可能并不是gpio口的问题  详情 回复 发表于 2017-3-8 20:12
技术支持电话:0312-3119192
技术支持邮箱:Android@forlinx.com
点评回复 支持 反对

使用道具 举报

2

主题

17

帖子

55

积分

i.MX6UL通行证

 楼主| 发表于 2017-3-8 20:12:37 | 显示全部楼层
飞凌-chongzi 发表于 2017-3-8 09:12
您好:
          将static inline int s3c_gpio_do_setpull函数修改为以下内容: &#160;&#160;&#160;&#160 ...

首先非常感谢!我修改了你说的部分,但是结果还和原来一样,这里PC is at memcpy+0xb4/0x330可能并不是gpio口的问题

点评

会不会是新内核的虚拟地址空间有所变动,导致旧的无线网卡驱动中某些虚拟地址已经不再被映射到正确的地方,因此出现了这种错误。  详情 回复 发表于 2017-3-8 22:42
点评回复 支持 反对

使用道具 举报

2

主题

17

帖子

55

积分

i.MX6UL通行证

 楼主| 发表于 2017-3-8 20:21:27 | 显示全部楼层
不加sdio wifi模块的时候,系统是可以正常启动运行的,但是加上无线模块再上电就会出现Unable to handle kernel NULL pointer dereference at virtual address 00000000这个问题,所以问题应该出现在WiFi模块部分
点评回复 支持 反对

使用道具 举报

2

主题

17

帖子

55

积分

i.MX6UL通行证

 楼主| 发表于 2017-3-8 22:42:26 | 显示全部楼层
farewell 发表于 2017-3-8 20:12
首先非常感谢!我修改了你说的部分,但是结果还和原来一样,这里PC is at memcpy+0xb4/0x330可能并不是gp ...

会不会是新内核的虚拟地址空间有所变动,导致旧的无线网卡驱动中某些虚拟地址已经不再被映射到正确的地方,因此出现了这种错误。
点评回复 支持 反对

使用道具 举报

2

主题

17

帖子

55

积分

i.MX6UL通行证

 楼主| 发表于 2017-3-8 22:44:53 | 显示全部楼层
本帖最后由 farewell 于 2017-3-8 22:46 编辑

make menuconfig的内核配置中sdio wifi(rtl8189es)的驱动选项是哪个,能不能重新编译一下驱动?
点评回复 支持 反对

使用道具 举报

1

主题

3669

帖子

3920

积分

发表于 2017-3-9 09:48:28 | 显示全部楼层
farewell 发表于 2017-3-8 22:42
会不会是新内核的虚拟地址空间有所变动,导致旧的无线网卡驱动中某些虚拟地址已经不再被映射到正确的地方 ...

您好:
       您是不是在我们所提供的源码基础上做了改动?如做了改动,建议您先用我们的出厂源码,测试一下,先排除一下硬件问题。

点评

直接烧资料里面提供的内核文件,是可以正常使用WiFi模块的,所以可以排除硬件问题。  详情 回复 发表于 2017-3-9 14:58
我就是直接用的给的内核源码,什么都没改,编译生成zImage,烧写完后可以正常使用。 但是,插上sdio wifi 模块后就出问题了  详情 回复 发表于 2017-3-9 14:57
技术支持电话:0312-3119192
技术支持邮箱:Android@forlinx.com
点评回复 支持 反对

使用道具 举报

2

主题

17

帖子

55

积分

i.MX6UL通行证

 楼主| 发表于 2017-3-9 14:57:07 | 显示全部楼层
飞凌-chongzi 发表于 2017-3-9 09:48
您好:
       您是不是在我们所提供的源码基础上做了改动?如做了改动,建议您先用我们的出厂源码,测 ...

我就是直接用的给的内核源码,什么都没改,编译生成zImage,烧写完后可以正常使用。
但是,插上sdio wifi 模块后就出问题了
点评回复 支持 反对

使用道具 举报

2

主题

17

帖子

55

积分

i.MX6UL通行证

 楼主| 发表于 2017-3-9 14:58:45 | 显示全部楼层
飞凌-chongzi 发表于 2017-3-9 09:48
您好:
       您是不是在我们所提供的源码基础上做了改动?如做了改动,建议您先用我们的出厂源码,测 ...

直接烧资料里面提供的内核文件,是可以正常使用WiFi模块的,所以可以排除硬件问题。
点评回复 支持 反对

使用道具 举报

2

主题

17

帖子

55

积分

i.MX6UL通行证

 楼主| 发表于 2017-3-14 09:38:22 | 显示全部楼层
有没有遇到相似问题能给点建议的
点评回复 支持 反对

使用道具 举报

2

主题

17

帖子

55

积分

i.MX6UL通行证

 楼主| 发表于 2017-3-30 21:29:06 | 显示全部楼层
飞凌的工作人员呢,能不能解决问题?售后技术支持就这么随意吗?
点评回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-4-20 21:10

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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