[General Questions and Answers] hybiepoo:
Hi folks,

I'm hoping someone can help me get my head around loading drivers in android.

I'm very familiar with Linux, so I understand drivers compiled into the kernel vs loading modular drivers. I also understand module versions in that they should match the installed kernel.

I have a cyanogenmod ROM that was built for a device similar to mine except that the wifi/bt drivers do not work. I have a ROM where these DO work.

I have extracted the boot.img from each ROM and I'm trying to combine the kernel that works with the cyanogenmod boot.img to get a working device. But the drivers have me a bit stumped.

On the device that works, here is what I see during boot in dmesg:

<6>[ 2.273829] Bluetooth: HCI UART driver ver 2.2
<6>[ 2.278272] Bluetooth: HCI H4 protocol initialized
<6>[ 2.283084] Bluetooth: HCI BCSP protocol initialized
<6>[ 2.288045] Bluetooth: HCILL protocol initialized
<7>[ 2.292983] [wifi]: Select sdio wifi: bcm40183 !!
<7>[ 2.297878] [mmc_pm]: SDIO card gpio init is OK !!
<7>[ 2.302753] [mmc]: sunximmc_init
<7>[ 2.306208] [mmc]: sunxi mmc controller using config : 0xb
<7>[ 2.311762] [mmc]: sunxi-mmc.0: pdev->name: sunxi-mmc, pdev->id: 0
<7>[ 2.318190] [mmc]: mmc 0 power off !!
<7>[ 2.321978] [mmc]: mmc0 Probe: base:0xe8916000 irq:32 dma:0 pdes:0xe704c000, ret 0.
<7>[ 2.329650] [mmc]: sunxi-mmc.1: pdev->name: sunxi-mmc, pdev->id: 1
<7>[ 2.336069] [mmc]: mmc 1 power off !!
<7>[ 2.339801] [mmc]: mmc1 Probe: base:0xe8918000 irq:33 dma:0 pdes:0xe7050000, ret 0.
<7>[ 2.347496] [mmc]: sunxi-mmc.3: pdev->name: sunxi-mmc, pdev->id: 3
<7>[ 2.353876] [mmc]: mmc 3 power off !!
<7>[ 2.357601] [mmc]: mmc3 Probe: base:0xe891a000 irq:35 dma:0 pdes:0xe7054000, ret 0.

This is below the line that says

<7>[ 2.081010] insmod_device_driver

So I'm assuming this is a module that is being loaded. I have however compared the init.sun4i.rc on both and made sure I'm loading the same drivers. I'm also loading the kernel from the working ROM.

This is what I see in the broken setup:

<6>[ 2.261673] Bluetooth: HCI UART driver ver 2.2
<6>[ 2.266116] Bluetooth: HCI H4 protocol initialized
<6>[ 2.270928] Bluetooth: HCI BCSP protocol initialized
<6>[ 2.275891] Bluetooth: HCILL protocol initialized
<7>[ 2.280811] [mmc_pm]: no sdio card used in configuration
<7>[ 2.286118] [mmc]: sunximmc_init
<7>[ 2.289602] [mmc]: sunxi mmc controller using config : 0xb
<7>[ 2.295210] [mmc]: sunxi-mmc.0: pdev->name: sunxi-mmc, pdev->id: 0
<7>[ 2.301688] [mmc]: mmc 0 power off !!
<7>[ 2.305451] [mmc]: mmc0 Probe: base:0xe8916000 irq:32 dma:0 pdes:0xe704c000, ret 0.
<7>[ 2.313150] [mmc]: sunxi-mmc.1: pdev->name: sunxi-mmc, pdev->id: 1
<7>[ 2.319533] [mmc]: mmc 1 power off !!
<7>[ 2.323293] [mmc]: mmc1 Probe: base:0xe8918000 irq:33 dma:0 pdes:0xe7050000, ret 0.
<7>[ 2.330984] [mmc]: sunxi-mmc.3: pdev->name: sunxi-mmc, pdev->id: 3
<7>[ 2.337351] [mmc]: mmc 3 power off !!
<7>[ 2.341106] [mmc]: mmc3 Probe: base:0xe891a000 irq:35 dma:0 pdes:0xe7054000, ret 0.

So this seems to be complaining about no SD card being available - is this a correct assumption?

I also assume this is a card used for storage, and wifi/bt using the SDIO standard.

Would the wifi driver be being loaded from the SD card? If so, where? It may just be something else I need to add to the zip file for the new ROM.

When I compare dmesg between the two, I don't see anything obvious that loads differently, so it's got me stumped as to what's happening.

Can anyone shed some light on how the working ROM might be loading the bcm40183 driver?