S3c6410 平台 Android系统的Wi-Fi调试记录


硬件平台:S3c6410

操作系统:Android

网卡芯片:GH381(SDIO接口 sdio8688)

1、SDIO驱动

因为是SDIO接口,所以请先保证mmc驱动(代码在“kernel\drivers\mmc”)部分能够正常工作,这个一般调试flash的时候会涉及到,问题不大,因为S3c6410平台的HSMMC有3个,要根据硬件原理图确认网卡的SDIO接口接在哪个上面了,我调试的时候是HSMMC1,针对HSMMC1涉及到的修改有

① "kernel\arch\arm\configs\smdk6410_android_deconfig":

CONFIG_S3C_DEV_HSMMC1=y

CONFIG_S3C6410_SD_CH1=y

②"kernel\arch\arm\mach-s3c6410\Kcofnig":

select S3C_DEV_HSMMC1

③“kernel\arch\arm\mach-s3c6410\mach-smdk6410.c":

#ifdef CONFIG_S3C6410_SD_CH1

&s3c_device_hsmmc1,

#endif

注:目前暂时把网卡的上电部分放到了mmc初始化管脚的时候,以后再挪到其他地方

2、网卡驱动

网卡驱动一般由芯片厂商提供,如果能拿到源代码首先要保证能够编译通过,GH381的驱动编译出来名为sd8xxx.ko。

驱动能够编译通过后,就是加载了,两个步骤:

1)把驱动和firmware放到系统中去.

一般是在”eclair\vendor\sec_proprietary\"目录下建一个目录,放上驱动和firmware文件。

然后在Android.mk中将文件拷贝到设备对应目录即可,如:

PRODUCT_COPY_FILES += $(LOCAL_PATH)/helper_sd.bin:system/etc/firmware/mrvl/helper_sd.bin (firmware文件)

PRODUCT_COPY_FILES += $(LOCAL_PATH)/sd8688.bin:system/etc/firmware/mrvl/sd8688.bin (firmware文件)

PRODUCT_COPY_FILES += $(LOCAL_PATH)/sd8xxx.ko:system/lib/modules/sd8xxx.ko (驱动文件)

2)系统调用驱动,驱动download firmware

因为网卡驱动对上层的接口是通过wpa_supplicant中间层实现的,因此也要保证wpa层能能够正确的识别网卡。

涉及到的代码修改有:

①”eclair\hardware\libhardware_legacy\wifi\wifi.c“

#define WIFI_DRIVER_MODULE_PATH         "/system/lib/modules/sd8xxx.ko"//驱动文件的全路径

#define WIFI_DRIVER_MODULE_NAME         "sd8xxx" //这个名字是模块名字,用于关闭WIFI时调用,一般和ko文件的名字相同

#define WIFI_TEST_INTERFACE "mlan0"//"sta"(这个名字是根据网卡名字写的,但是个人感觉应该用sta才对)

注:这部分修改,保证在启动wifi的时候可以找到对应的驱动

②“eclair\vendor\sec\smdk6410\AndroidBoard.mk”

BOARD_WPA_SUPPLICANT_DRIVER := WEXT

注:这部分修改,保证wpa_supplicnat能够正常编译到系统中(见“external\wpa_supplicant\Android.mk”开始部分的编译条件)

③“eclair\vendor\sec\smdk6410\init.rc”

# give system access to wpa_supplicant.conf for backup and restore
                mkdir /system/etc/wifi 0770 wifi wifi
                chmod 0770 /system/etc/wifi
                chmod 0660 /system/etc/wifi/wpa_supplicant.conf
                chown wifi wifi /system/etc/wifi/wpa_supplicant.conf
    
                #wpa_supplicant control socket for android wifi.c (android private socket)
                mkdir /data/misc/wifi 0777 wifi wifi
                mkdir /data/misc/wifi/sockets 0777 wifi wifi
                mkdir /data/system/wpa_supplicant 0777 wifi wifi
                chmod 0777 /data/misc/wifi
                chmod 0777 /data/misc/wifi/wpa_supplicant.conf
                chown wifi wifi /data/misc/wifi
                chown wifi wifi /data/misc/wifi/wpa_supplicant.conf
    
                mkdir /data/misc/dhcp 0777 dhcp dhcp
                chmod 0777 /data/misc/dhcp
                chmod 0777 /system/etc/dhcpcd
                chmod 0777 /system/etc/dhcpcd/dhcpcd-run-hooks # dhcpcd-run-hooks的权限一定要设置,不然DHCP服务无法正常工作
                chown dhcp dhcp /data/misc/dhcp
                chown dhcp dhcp /system/etc/dhcpcd
                chown dhcp dhcp /system/etc/dhcpcd/dhcpcd-run-hooks

             on boot#注意这里,创建目录,设置权限的部分一定要放在on boot 之前,而启动服务设置接口的在放在之后。不然会出现没有/data/misc/dhcp目录的问题,之后dhcp服务更无法工作。

service wpa_supplicant /system/bin/wpa_supplicant -dd -Dwext -imlan0-c /system/etc/wifi/wpa_supplicant.conf
                #socket wpa_mlan0dgram 660 wifi wifi
               #group system wifi inet
                disabled
                oneshot

service dhcpcd /system/bin/dhcpcd -f /system/etc/dhcpcd/dhcpcd.conf -dmlan0
                #group system dhcp wifi
                disabled
                oneshot

setprop wifi.interface "mlan0"
                setprop wlan.driver.status "ok"
                setprop wlan.interface "mlan0"

注:红色的部分mlan0是网卡驱动设置的网卡名字,这部分代码可以在驱动代码的wlan_add_card()函数中找到:

if (dev_alloc_name(dev, "mlan%d") < 0) {

PRINTM(ERROR, "Could not allocate device name!\n");

goto err_kmalloc;

}

③"eclair\external\wpa_supplicant\wpa_supplicant.conf"

update_config=1

//ctrl_interface=mlan0 这部分应该是Android的特殊定义,不过用起来貌似会有错误,就使用下面通用的unix设置了

ctrl_interface=DIR=/data/misc/wifi/wpa_supplicant GROUP=wifi

ap_scan=1 #这里最好设置为1,不然可能会出现搜索不到AP的现象。

目前的状态:WIFI可以成功打开,搜索到周围的AP,连接部分还存在问题,继续调试。2011.2.11 16:30

-------------------------------------------------------------------------------------------------------

碰到问题及解决方式:

1、连接AP时,运行到下面的代码时,出现错误
     Wlan_wmm.c wmm_process_app_iface_tx{
     ...
     atomic_inc(&Adapter->wmm.packetsQueued);//此处有错误
     ...
     }
     错误如下:
     Alignment trap: not handling instruction e1930f9f at [<bf027b90>]
     Unhandled fault: alignment exception (0x001) at 0xc98ac0b2 //校准错误
        
     解决办法:
     在wmm的结构体中增加变量,使整个结构体,在packetsQueued的前面是4个字节的整数倍
     typedef struct
      {
            u8 required;
            u8 enabled;
            u16 tmp;//此处为额外增加,保证packetsQueued前面有4个字节
            atomic_t packetsQueued;
            ...
       }__ATTRIB_PACK__ WMM_DESC;

目前这种解决方式只是针对错误提示,也有可能根本原因在于编译参数等设置的存在问题,后续再分析。

目前状态:可以成功连接AP,但是之后获取AP地址的时候失败,应该是DHCP服务器的设置还存在问题。

-------------------------------------------------------------------------------------------------------------------------

获取IP地址失败,可能的原因如下:

1、DHCP服务没有启动,或者启动后工作不正常,请参考前面“eclair\vendor\sec\smdk6410\init.rc”中增加的内容。

2、DHCP代码中的网卡接口错误,请查看文件“eclair\frameworks\base\wifi\jafa\android\net\wifi\WifiStateTracker.java”中的函数:

public WifiStateTracker()

{

...

mSettingsObserver = new SettingsObserver(new Handler());

mInterfaceName = SystemProperties.get("wifi.interface", "mlan0" ); //"tiwlan0");此处默认的网卡名称为tiwlan0,需修改为我们使用的
        sDnsPropNames = new String[] {
            "dhcp." + mInterfaceName + ".dns1",
            "dhcp." + mInterfaceName + ".dns2"
        };

...

}

目前,WIFI已经可以正常的连接不加密类型的AP热点,并成功获取IP地址,打开网页,正常开关。

时间: 2024-10-11 23:20:10

S3c6410 平台 Android系统的Wi-Fi调试记录的相关文章

RK3128平台android系统修改添加遥控器键值码值

最近帮客户定制RK3128平台的固件,涉及到定制新的遥控器,需要添加或修改遥控码值.RK3128平台android系统修改遥控器码值比全志A20.A31s稍微麻烦一些,其实本质是一样的.具体的修改方法如下: 1,先弄清楚遥控器的状况,包括遥控器用户码.键值对应的码值.方法:adb shell,输入echo1 >/sys/module/rockchip_pwm_remotectl/parameters/code_print, 再输入,cat /proc/ksmg,也可以通过串口搞. 遥控器对着灯板

嵌入式4412开发平台Android系统开发环境搭建以及编译

本文介绍 uboot.Linux3.0.15 和 linux-3.5 内核.Android4.0.3 和Android4.2.2 编译环境的搭建以及编译. 详情了解:http://topeetboard.com更多了解:https://arm-board.taobao.com Uboot.Kernel 以及 Android 的编译环境看似复杂,用户只要抓住以下几个要点就可以 了: 第一:Uboot.Kernel 编译器.编译器在光盘中都有提供,在需要使用的步骤中,会说 明编译器在光盘中的位置.

【转】 Android BCM4330 蓝牙BT驱动调试记录

原文网址:http://blog.csdn.net/dwyane_zhang/article/details/7180779 网上关于BT的驱动很少,所以我在开发过程中把其中的步骤记录下来.供大家相互学习讨论. 一.关于BT driver的移植: 1. Enablebluetootch in BoadConfig.mk BOARD_HAVE_BLUETOOTH := true 2.实现BT电源管理rfkill驱动. Kernel/driver/bluetooth/bluetooth-power.

【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/51592930 手机的两种模式 : 在下面有详细的图片示例; -- Recovery 模式 : 音量键增加 + 电源键, 长按上述组合键, 看到 "MI" 的 LOGO 后即进入 Recovery 模式; -- Fastboot 模式 : 音量键减小 + 电源键, 长按上述组合键, 看到 "FASTBOOT" 后, 即 进入 FA

android系统平台显示驱动开发简要:LCD基本原理篇『一』

平台信息:内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博客:http://weibo.com/cpjphone 从在校时玩单片机的点阵屏,到工作后android系统下的LCD,他们像一条流水线,顺应,简单的原理构成了复杂的结构: 我们来梳理一下: 玩51用的点阵 玩51用的lcd1602 玩51.32用的TFT彩屏 对于点阵的原理相比大多数朋友都非常熟悉,

深入浅出 - Android系统移植与平台开发(十二)- Android JNI机制

第五章.JNI机制 4.1 JNI概述 由前面基础知识可知,Android的应用层由Java语言编写,Framework框架层则是由Java代码与C/C++语言实现,之所以由两种不同的语言组合开发框架层,是由于Java代码是与硬件环境彻底"隔离"的跨平台语言,Java代码无法直接操作硬件. 比方:Android系统支持大量传感器.Java运行在虚拟机中,无法直接得到传感器数据.而Android系统基于Linux操作系统.在Linux操作系统中C/C++通过Linux提供的系统调用接口能

深入浅出 - Android系统移植与平台开发(一)

深入浅出 - Android系统移植与平台开发(一) 分类: Android移植2012-09-05 14:16 16173人阅读 评论(12) 收藏 举报 androidgitgooglejdkubuntu 目录(?)[+] +-------------------------------------------------+ +      本系列为连载,不定期会更新       + +-------------------------------------------------+ 一.A

深入浅出 - Android系统移植与平台开发(十一)- Android系统的定制【转】

本文转载自: 4.3定制Android平台系统 通常产品厂商在拿到Android源码后会在android源码基础上进行定制修改,以匹配适应自己的产品,从本节开始,我们从最原始的Android源码系统里一步一步定制出自己的Android系统.本节主要内容包含:根据Android源码,添加新产品编译项,定制系统启动界面和文字,定制系统启动动画和声音,定制系统桌面. 4.3.1 添加新产品编译项 Android系统的源代码是一个逻辑结构非常独立工程,在一套Android源码中可以编译出多个产品映像,在

android系统平台显示驱动开发简要:LCD常用接口篇『二』

平台信息:内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博客:http://weibo.com/cpjphone TFT-lCD常用的接口,TTL(RGB).LVDS.EDP.MIPI,这篇我们大致说一下这些接口的信号组成已经基本原理. 一.TTL1.TTL接口概述 TTL(Transistor Transistor Logic)即晶体管-晶体管逻辑,TTL