farewell 发表于 2017-3-7 15:28:56

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

本人按照飞凌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] *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 : efd07d44ip : 0000001cfp : efd07d6c
[    2.681837] r10: 00004108r9 : 00004044r8 : efe7c800
[    2.687036] r7 : 00000000r6 : efe7c800r5 : efea1800r4 : f08b9000
[    2.693536] r3 : f08bc07br2 : ffffffe6r1 : f08bc0b4r0 : 00000000
[    2.700036] Flags: nzcvIRQs onFIQs onMode SVC_32ISA ARMSegment kernel
[    2.707315] Control: 10c5387dTable: 20004019DAC: 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(sbcnesr4, 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                   )
93 2:      PLD(    subs    r2, r2, #96             )
94         PLD(    pld                  )
95         PLD(    blt   4f                      )
96         PLD(    pld                  )
97         PLD(    pld                  )
98
99 3:      PLD(    pld               )
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       
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       
c01f2210:        e2522060         subs        r2, r2, #96        ; 0x60
c01f2214:        f5d1f01c         pld       
c01f2218:        ba000002         blt        c01f2228 <memcpy+0x48>
c01f221c:        f5d1f03c         pld                ; 0x3c
c01f2220:        f5d1f05c         pld                ; 0x5c
c01f2224:        f5d1f07c         pld                ; 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, , #4
c01f2258:        e4914004         ldr        r4, , #4
c01f225c:        e4915004         ldr        r5, , #4
c01f2260:        e4916004         ldr        r6, , #4
c01f2264:        e4917004         ldr        r7, , #4
c01f2268:        e4918004         ldr        r8, , #4
c01f226c:        e491e004         ldr        lr, , #4
c01f2270:        e08ff00c         add        pc, pc, ip
c01f2274:        e320f000         nop        {0}
c01f2278:        e320f000         nop        {0}
c01f227c:        e4803004         str        r3, , #4
c01f2280:        e4804004         str        r4, , #4
c01f2284:        e4805004         str        r5, , #4
c01f2288:        e4806004         str        r6, , #4
c01f228c:        e4807004         str        r7, , #4
c01f2290:        e4808004         str        r8, , #4
c01f2294:e480e004         str        lr, , #4
c01f2298:        e8bd01e0         pop        {r5, r6, r7, r8}
c01f229c:        e1b02f82         lsls        r2, r2, #31
c01f22a0:        14d13001         ldrbne        r3, , #1
c01f22a4:        24d14001         ldrbcs        r4, , #1
c01f22a8:        24d1c001         ldrbcs        ip, , #1
c01f22ac:        14c03001         strbne        r3, , #1
c01f22b0:        24c04001         strbcs        r4, , #1
c01f22b4:        24c0c001         strbcs        ip, , #1
c01f22b8:        e8bd8011         pop        {r0, r4, pc}
c01f22bc:        e26cc004         rsb        ip, ip, #4
c01f22c0:        e35c0002         cmp        ip, #2
c01f22c4:        c4d13001         ldrbgt        r3, , #1
c01f22c8:        a4d14001         ldrbge        r4, , #1
c01f22cc:        e4d1e001         ldrb        lr, , #1
c01f22d0:        c4c03001         strbgt        r3, , #1
c01f22d4:        a4c04001         strbge        r4, , #1
c01f22d8:        e052200c         subs        r2, r2, ip
c01f22dc:        e4c0e001         strb        lr, , #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

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

飞凌-chongzi 发表于 2017-3-8 09:12:58

您好:
          将static inline int s3c_gpio_do_setpull函数修改为以下内容:        
   static inline int s3c_gpio_do_setpull(struct s3c_gpio_chip *chip, unsigned int off, s3c_gpio_pull_t pull)           
                  {               if(NULL != chip->config->set_pull)                
                        return (chip->config->set_pull)(chip, off, pull);              
                            else                  
                          return EINVAL;          
                }
参考网址:http://blog.csdn.net/ExclusivePig/archive/2010/10/24/5961869.aspx

farewell 发表于 2017-3-8 20:12:37

飞凌-chongzi 发表于 2017-3-8 09:12
您好:
          将static inline int s3c_gpio_do_setpull函数修改为以下内容:    &#160 ...

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

farewell 发表于 2017-3-8 20:21:27

不加sdio wifi模块的时候,系统是可以正常启动运行的,但是加上无线模块再上电就会出现Unable to handle kernel NULL pointer dereference at virtual address 00000000这个问题,所以问题应该出现在WiFi模块部分

farewell 发表于 2017-3-8 22:42:26

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

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

farewell 发表于 2017-3-8 22:44:53

本帖最后由 farewell 于 2017-3-8 22:46 编辑

make menuconfig的内核配置中sdio wifi(rtl8189es)的驱动选项是哪个,能不能重新编译一下驱动?

飞凌-chongzi 发表于 2017-3-9 09:48:28

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

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

farewell 发表于 2017-3-9 14:57:07

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

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

farewell 发表于 2017-3-9 14:58:45

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

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

farewell 发表于 2017-3-14 09:38:22

有没有遇到相似问题能给点建议的

farewell 发表于 2017-3-30 21:29:06

飞凌的工作人员呢,能不能解决问题?售后技术支持就这么随意吗?
页: [1]
查看完整版本: 自己编译了一遍内核,插入sdio wifi 模块后出现问题