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 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 service dhcpcd /system/bin/dhcpcd -f /system/etc/dhcpcd/dhcpcd.conf -dmlan0 setprop wifi.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时,运行到下面的代码时,出现错误 目前这种解决方式只是针对错误提示,也有可能根本原因在于编译参数等设置的存在问题,后续再分析。 目前状态:可以成功连接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,需修改为我们使用的 ... } 目前,WIFI已经可以正常的连接不加密类型的AP热点,并成功获取IP地址,打开网页,正常开关。 |
S3c6410 平台 Android系统的Wi-Fi调试记录的更多相关文章
- 【转】 Android BCM4330 蓝牙BT驱动调试记录
原文网址:http://blog.csdn.net/dwyane_zhang/article/details/7180779 网上关于BT的驱动很少,所以我在开发过程中把其中的步骤记录下来.供大家相互 ...
- Android系统移植与调试之------->build.prop生成过程分析
本文简要分析一下build.prop是如何生成的.Android的build.prop文件是在Android编译时刻收集的各种property(LCD density/语言/编译时间, etc.),编 ...
- Android FrameWork学习(二)Android系统源码调试
通过上一篇 Android FrameWork学习(一)Android 7.0系统源码下载\编译 我们了解了如何进行系统源码的下载和编译工作. 为了更进一步地学习跟研究 Android 系统源码,今天 ...
- 深入浅出 - Android系统移植与平台开发(五)- 编译Android源码(转)
2.3编译Android源码 Android源码体积非常庞大,由Dalvik虚拟机.Linux内核.编译系统.框架代码.Android定制C库.测试套件.系统应用程序等部分组成,在编译Android源 ...
- 深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境
作者:唐老师,华清远见嵌入式学院讲师. 编译Android源码 关于android系统的编译,Android的官方网站上也给出了详细的说明.http://source.android.com/sour ...
- android系统平台显示驱动开发简要:LCD基本原理篇『一』
平台信息:内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博客 ...
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
分类: Android 系统开发(5) 作者同类文章X 版权声明:本文为博主原创文章 ...
- 深入浅出-Android系统移植与平台开发(一)- Android4.0系统的下载与编译
作者:唐老师,华清远见嵌入式学院讲师. 一.Android4.0系统的下载与编译 Android系统的下载与编译,Google的官方网站上已经给出了详细的说明,请参照Android的官方网址: htt ...
- 理解WebKit和Chromium: 调试Android系统上的Chromium
转载请注明原文地址:http://blog.csdn.net/milado_nju 1. Android上的调试技术 在Android系统上,开发人员能够使用两种不同的语言来开发应用程序,一种是Jav ...
随机推荐
- Spring boot中使用springfox来生成Swagger Specification小结
Rest接口对应Swagger Specification路径获取办法: 根据location的值获取api json描述文件 也许有同学会问,为什么搞的这么麻烦,api json描述文件不就是h ...
- ARC 没有自动释放内存
http://www.cnblogs.com/qingche/p/4569833.html 定位了好几天,才发现是打印日志没有即时释放内存,使用intrustment
- ios理解 -- Pro Mutlithreading and Memory Management for iOS and OS X with ARC, Grand Central Dispatch, and Blocks
Capturing automatic variables Next, you need to learn what the “together with automatic (local) vari ...
- 比较Date时间先后
if ([firstDetailSelect compare:secondDetailSelect] == NSOrderedDescending) { [MBProgressHUD showErro ...
- Python学习总结17:exec和eval执行求值字符串
有些时候可能会需要动态地创造Python代码,然后将其作为语句执行或作为表达式计算. 1. exec >>>exec "print 'Hello, world!'" ...
- 数据库 SQL基础
数据库是用来存取数据的. 数据库类型: ACESS(比较小,存储少) SQL SERVER (.net) MySQL Oracle(java) 数据库:服务.界面 服务是可以操作的后台的程序. 界面是 ...
- 数据库中is null(is not null)与=null(!=null)的区别
在标准SQL语言(ANIS SQL)SQL-92规定的Null值的比较取值结果都为False,既Null=Null取值也是False.NULL在这里是一种未知值,千变万化的变量,不是“空”这一个定值! ...
- jni
http://www.cnblogs.com/likwo/archive/2012/05/21/2512400.html
- c# 获取路径的几种方法
1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径方法2.AppDomain.CurrentDomain.Bas ...
- scrum站立会议------10.20
小组名称:nice! 小组成员:李权 于淼 杨柳 刘芳芳 项目内容:约跑app(约吧--暂定) 1.任务进度 2.燃尽图