找回密码
 注册
搜索
查看: 2140|回复: 3

[讨论] android的wifi网卡移植详细过程

[复制链接]
发表于 2012-7-18 18:08:38 | 显示全部楼层 |阅读模式
由于在这个项目中,WIFI模块 是 采用SDIO总线 来 控制 的,Client Driver 的SDIO部分分为三层:SdioDrv、SdioAdapter、SdioBusDrv。其中SdioBusDrv是Client Driver中SDIO与WIFI模块的接口,SdioAdapter是SdioDrv和SdioBusDrv之间的适配层,SdioDrv是Client Driver中SDIO与LINUX KERNEL中的MMC SDIO的接口。这三部分只需要关注一下SdioDrv就可以了,另外两层都只是对它的封装。

      在SdioDrv中提供了这几个功能:

(1)static structsdio_driver tiwlan_sdio_drv = {
    .probe          = tiwlan_sdio_probe,
    .remove         = tiwlan_sdio_remove,
    .name           = "sdio_tiwlan",
    .id_table       = tiwl12xx_devices,
};

(2)int sdioDrv_EnableFunction(unsigned int uFunc)   

(3)int sdioDrv_EnableInterrupt(unsigned int uFunc)

(4)SDIO的读写,实际是调用了MMC\Core中的  static int mmc_io_rw_direct_host()功能。

SDIO功能部分简单了解下就可以,一般HOST部分芯片厂商都会做好。我们的主要任务还是WIFI模块。

       首先从WIFI模块的入口函数wlanDrvIf_ModuleInit()看起,这里调用了wlanDrvIf_Create()。


代码主体部分:
static int wlanDrvIf_Create (void)
{
    TWlanDrvIfObj *drv; //这个结构体为代表设备,包含LINUX网络设备结构体net_device

    pDrvStaticHandle = drv;  /* save for module destroy */

    drv->pWorkQueue = create_singlethread_workqueue (TIWLAN_DRV_NAME);//创建了工作队列

    /* Setup driver network interface. */
    rc = wlanDrvIf_SetupNetif (drv); //这个函数超级重要,后面详细的看

    drv->wl_sock = netlink_kernel_create( NETLINK_USERSOCK, 0, NULL, NULL, THIS_MODULE );

    // 创建了接受wpa_supplicant的SOCKET接口


    /* Create all driver modules and link their handles */
    rc = drvMain_Create (drv,
                    &drv->tCommon.hDrvMain,
                    &drv->tCommon.hCmdHndlr,
                    &drv->tCommon.hContext,
                    &drv->tCommon.hTxDataQ,
                    &drv->tCommon.hTxMgmtQ,
                    &drv->tCommon.hTxCtrl,
                    &drv->tCommon.hTWD,
                    &drv->tCommon.hEvHandler,
                    &drv->tCommon.hCmdDispatch,
                    &drv->tCommon.hReport,
                    &drv->tCommon.hPwrState);
   
    /*
     *  Initialize interrupts (or polling mode for debug):
     */

    /* Normal mode: Interrupts (the default mode) */
    rc = hPlatform_initInterrupt (drv, (void*)wlanDrvIf_HandleInterrupt);
   
   return 0;

}

      在调用完wlanDrvIf_Create()这个函数后,实际上WIFI模块的初始化就结束了,下面分析如何初始化的。先看wlanDrvIf_SetupNetif (drv)这个函数的主体,
 楼主| 发表于 2012-7-18 18:12:44 | 显示全部楼层
以下是引用huokedu2003在2012-7-18 18:11:06的发言:
http://blog.csdn.net/wh_19910525/article/details/7389890

这是那教程的详细地址
点评回复

使用道具 举报

 楼主| 发表于 2012-7-18 18:11:06 | 显示全部楼层
http://blog.csdn.net/wh_19910525/article/details/7389890
点评回复

使用道具 举报

 楼主| 发表于 2012-7-18 18:09:11 | 显示全部楼层
android的wifi网卡移植详细过程已经通用驱动的问题

这里有一篇详细的教程,看完还有一个问题

就是android的wifi驱动移植,如果有wifi网卡的驱动代码,是一定需要对android系统本身的代码修改重写编译吗?就是说,有无可能不改变android内核而做出可以插入的mod,而做出某款网卡的通用android 驱动不同采用不同cpu的android终端使用。
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-5-5 01:09 , Processed in 0.056379 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表