2.6.33自带的sd8688的wifi驱动为神马不好使呢?(显示加载固件失败)

时间:2022-10-17 04:41:18
我用的村田封装的marvell 8688的模块,SDIO接口,启动信息中有关SDIO的如下所示(固件我已经放在了linux-2.6.33/firmware目录下,并指定了位置,USB的RT73曾今这样驱动成功):
s3c-sdi s3c2440-sdi: powered down.                                                        
s3c-sdi s3c2440-sdi: mmc0 - using pio, sw SDIO IRQ                                        
s3c-sdi s3c2440-sdi: running at 0kHz (requested: 0kHz). 
s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).
s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).                               
s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).                               
lib80211: common routines for IEEE802.11 drivers                                          
s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).                               
s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).                               
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)                                   
s3c-sdi s3c2440-sdi: running at 50000kHz (requested: 50000kHz).                           
s3c-sdi s3c2440-sdi: running at 50000kHz (requested: 50000kHz).                           
mmc0: new SDIO card at address 0001                                                       
libertas_sdio mmc0:0001:1: firmware: using built-in firmware sd8688_helper.bin  
libertas_sdio mmc0:0001:1: firmware: using built-in firmware sd8688.bin
libertas: failed to load firmware                                                         
libertas_sdio: probe of mmc0:0001:1 failed with error -110 
以上是全部有关启动信息,我在源代码中找,发现
static int if_sdio_prog_real(struct if_sdio_card *card)中的
timeout = jiffies + HZ;
while (1) {
u16 scratch;

scratch = if_sdio_read_scratch(card, &ret);
if (ret)
goto release;

if (scratch == IF_SDIO_FIRMWARE_OK)
break;

if (time_after(jiffies, timeout)) {
ret = -ETIMEDOUT;
goto release;
}

msleep(10);
}
中的scratch一直等于0,然后直接跳到了release,没有正常跳出函数,看下面的函数,我怎么觉得scratch必然会等于0呢,呵呵
*************************************************************************************************************
static u16 if_sdio_read_scratch(struct if_sdio_card *card, int *err)
{
int ret;
u16 scratch;

scratch = sdio_readb(card->func, card->scratch_reg, &ret);
if (!ret)
scratch |= sdio_readb(card->func, card->scratch_reg + 1,
&ret) << 8;

if (err)
*err = ret;

if (ret)
return 0xffff;

return scratch;
}

*************************************************************************************************************
u8 sdio_readb(struct sdio_func *func, unsigned int addr, int *err_ret)
{
int ret;
u8 val;

BUG_ON(!func);

if (err_ret)
*err_ret = 0;

ret = mmc_io_rw_direct(func->card, 0, func->num, addr, 0, &val);
if (ret) {
if (err_ret)
*err_ret = ret;
return 0xFF;
}

return val;
}
*************************************************************************************************************
int mmc_io_rw_direct(struct mmc_card *card, int write, unsigned fn,
unsigned addr, u8 in, u8* out)
{
struct mmc_command cmd;
int err;

BUG_ON(!card);
BUG_ON(fn > 7);

/* sanity check */
if (addr & ~0x1FFFF)
return -EINVAL;

memset(&cmd, 0, sizeof(struct mmc_command));

cmd.opcode = SD_IO_RW_DIRECT;
cmd.arg = write ? 0x80000000 : 0x00000000;
cmd.arg |= fn << 28;
cmd.arg |= (write && out) ? 0x08000000 : 0x00000000;
cmd.arg |= addr << 9;
cmd.arg |= in;
cmd.flags = MMC_RSP_SPI_R5 | MMC_RSP_R5 | MMC_CMD_AC;

err = mmc_wait_for_cmd(card->host, &cmd, 0);
if (err)
return err;

if (mmc_host_is_spi(card->host)) {
/* host driver already reported errors */
} else {
if (cmd.resp[0] & R5_ERROR)
return -EIO;
if (cmd.resp[0] & R5_FUNCTION_NUMBER)
return -EINVAL;
if (cmd.resp[0] & R5_OUT_OF_RANGE)
return -ERANGE;
}

if (out) {
if (mmc_host_is_spi(card->host))
*out = (cmd.resp[0] >> 8) & 0xFF;
else
*out = cmd.resp[0] & 0xFF;
}

return 0;
}
**************************************************************************************************************
有了解的大侠请给我答疑解惑,这究竟是什么问题呢???

14 个解决方案

#1


libertas_sdio mmc0:0001:1: firmware: using built-in firmware sd8688_helper.bin  
libertas_sdio mmc0:0001:1: firmware: using built-in firmware sd8688.bin
libertas: failed to load firmware   

===================================

首先, 对 Marvell 的 wifi 网卡以及驱动 表示无限鄙视。

其次,你的固件放的位置可能还是不对。所以,看源码,放对固件的位置应该就可以了。
至于固件要放在什么位置, 还得看源码。

#2


网上有人分享的文章说是8686的固件就是放在/firmware下的,8688的固件位置该放在什么地方呢?从源代码里没看出什么有用的东西。

#3


你方到 
/lib/firmware/
 

#4


放到linux2.6.33/lib/firmware目录下后,编译固件后生成的文件还是在linux2.6.33/firmware下,然后烧写后还是老样子,怎么让它被编译在linux2.6.33/lib/firmware下呢?

#5


我拷到了/lib/firmware下,出现的结果如下:
s3c-sdi s3c2440-sdi: powered down.                                              
s3c-sdi s3c2440-sdi: mmc0 - using pio, hw SDIO IRQ                              
s3c-sdi s3c2440-sdi: running at 0kHz (requested: 0kHz). 
s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).                     
lib80211: common routines for IEEE802.11 drivers                                
s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).                     
s3c-sdi s3c2440-sdi: CMD[ERR -110] #2 op:8 arg:0x000001aa flags:0x082f5 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #3 op:5 arg:0x00000000 flags:0x082e1 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #4 op:5 arg:0x00000000 flags:0x082e1 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #5 op:5 arg:0x00000000 flags:0x082e1 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #6 op:5 arg:0x00000000 flags:0x082e1 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #7 op:55 arg:0x00000000 flags:0x08f5 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #8 op:55 arg:0x00000000 flags:0x08f5 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #9 op:55 arg:0x00000000 flags:0x08f5 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #10 op:55 arg:0x00000000 flags:0x08f5 retriee
s3c-sdi s3c2440-sdi: CMD[ERR -110] #11 op:1 arg:0x00000000 flags:0x08e1 retriese
s3c-sdi s3c2440-sdi: powered down. 
还是扫不到无线网口。。。。。。

#6


s3c-sdi s3c2440-sdi: powered down.  
s3c-sdi s3c2440-sdi: mmc0 - using pio, hw SDIO IRQ  
s3c-sdi s3c2440-sdi: running at 0kHz (requested: 0kHz).  
s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).
lib80211: common routines for IEEE802.11 drivers
s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).
s3c-sdi s3c2440-sdi: CMD[ERR -110] #2 op:8 arg:0x000001aa flags:0x082f5 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #3 op:5 arg:0x00000000 flags:0x082e1 retries:3 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #4 op:5 arg:0x00000000 flags:0x082e1 retries:2 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #5 op:5 arg:0x00000000 flags:0x082e1 retries:1 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #6 op:5 arg:0x00000000 flags:0x082e1 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #7 op:55 arg:0x00000000 flags:0x08f5 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #8 op:55 arg:0x00000000 flags:0x08f5 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #9 op:55 arg:0x00000000 flags:0x08f5 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #10 op:55 arg:0x00000000 flags:0x08f5 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #11 op:1 arg:0x00000000 flags:0x08e1 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: powered down.

#7


做成模块加载试试

#8


ifconfig mlan0 up
iwconfig mlan0 

看看结果。

#9


# ifconfig mlan0 up                                                             
ifconfig: SIOCGIFFLAGS: No such device                                          
# iwconfig mlan0                                                                
mlan0     No such device 

#10


那你的网卡叫什么名字?

ifconfig -a  看看。

#11


我就是没找到网卡阿,ifconfig -a下只有eth0和lo.

#12


http://blog.chinaunix.net/space.php?uid=13889805&do=blog&id=120361
看起来还是没有配mdev啊

#13


网卡都识别不到。。。。
你还是去 marvell 的官网上找驱动去吧。。。。

#14


官网上都是基于pxa处理器的,移植起来也很麻烦,还是自己慢慢琢磨吧。。。。

#1


libertas_sdio mmc0:0001:1: firmware: using built-in firmware sd8688_helper.bin  
libertas_sdio mmc0:0001:1: firmware: using built-in firmware sd8688.bin
libertas: failed to load firmware   

===================================

首先, 对 Marvell 的 wifi 网卡以及驱动 表示无限鄙视。

其次,你的固件放的位置可能还是不对。所以,看源码,放对固件的位置应该就可以了。
至于固件要放在什么位置, 还得看源码。

#2


网上有人分享的文章说是8686的固件就是放在/firmware下的,8688的固件位置该放在什么地方呢?从源代码里没看出什么有用的东西。

#3


你方到 
/lib/firmware/
 

#4


放到linux2.6.33/lib/firmware目录下后,编译固件后生成的文件还是在linux2.6.33/firmware下,然后烧写后还是老样子,怎么让它被编译在linux2.6.33/lib/firmware下呢?

#5


我拷到了/lib/firmware下,出现的结果如下:
s3c-sdi s3c2440-sdi: powered down.                                              
s3c-sdi s3c2440-sdi: mmc0 - using pio, hw SDIO IRQ                              
s3c-sdi s3c2440-sdi: running at 0kHz (requested: 0kHz). 
s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).                     
lib80211: common routines for IEEE802.11 drivers                                
s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).                     
s3c-sdi s3c2440-sdi: CMD[ERR -110] #2 op:8 arg:0x000001aa flags:0x082f5 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #3 op:5 arg:0x00000000 flags:0x082e1 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #4 op:5 arg:0x00000000 flags:0x082e1 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #5 op:5 arg:0x00000000 flags:0x082e1 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #6 op:5 arg:0x00000000 flags:0x082e1 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #7 op:55 arg:0x00000000 flags:0x08f5 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #8 op:55 arg:0x00000000 flags:0x08f5 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #9 op:55 arg:0x00000000 flags:0x08f5 retriese
s3c-sdi s3c2440-sdi: CMD[ERR -110] #10 op:55 arg:0x00000000 flags:0x08f5 retriee
s3c-sdi s3c2440-sdi: CMD[ERR -110] #11 op:1 arg:0x00000000 flags:0x08e1 retriese
s3c-sdi s3c2440-sdi: powered down. 
还是扫不到无线网口。。。。。。

#6


s3c-sdi s3c2440-sdi: powered down.  
s3c-sdi s3c2440-sdi: mmc0 - using pio, hw SDIO IRQ  
s3c-sdi s3c2440-sdi: running at 0kHz (requested: 0kHz).  
s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).
lib80211: common routines for IEEE802.11 drivers
s3c-sdi s3c2440-sdi: running at 400kHz (requested: 400kHz).
s3c-sdi s3c2440-sdi: CMD[ERR -110] #2 op:8 arg:0x000001aa flags:0x082f5 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #3 op:5 arg:0x00000000 flags:0x082e1 retries:3 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #4 op:5 arg:0x00000000 flags:0x082e1 retries:2 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #5 op:5 arg:0x00000000 flags:0x082e1 retries:1 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #6 op:5 arg:0x00000000 flags:0x082e1 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #7 op:55 arg:0x00000000 flags:0x08f5 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #8 op:55 arg:0x00000000 flags:0x08f5 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #9 op:55 arg:0x00000000 flags:0x08f5 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #10 op:55 arg:0x00000000 flags:0x08f5 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: CMD[ERR -110] #11 op:1 arg:0x00000000 flags:0x08e1 retries:0 Status:nothing to complete
s3c-sdi s3c2440-sdi: powered down.

#7


做成模块加载试试

#8


ifconfig mlan0 up
iwconfig mlan0 

看看结果。

#9


# ifconfig mlan0 up                                                             
ifconfig: SIOCGIFFLAGS: No such device                                          
# iwconfig mlan0                                                                
mlan0     No such device 

#10


那你的网卡叫什么名字?

ifconfig -a  看看。

#11


我就是没找到网卡阿,ifconfig -a下只有eth0和lo.

#12


http://blog.chinaunix.net/space.php?uid=13889805&do=blog&id=120361
看起来还是没有配mdev啊

#13


网卡都识别不到。。。。
你还是去 marvell 的官网上找驱动去吧。。。。

#14


官网上都是基于pxa处理器的,移植起来也很麻烦,还是自己慢慢琢磨吧。。。。