zoukankan      html  css  js  c++  java
  • (原创)AP6212移植到AM335X自主开发板上

    转载请指明出处。

    参考《关于AM335X移植SDIO WIFI的简易教程》

    http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/127565.aspx

    经过一周的摸索,基本上实现了wifi的功能。以下记录下移植的步骤

    系统环境为:linux3.2.0 ,内核 2.6.32

    1、第一步当然是确认PIN MUX了。一般来说,如下几个PIN(采用4线SDIO)是不能少的。
    wlan_en(这个也可以没有,默认拉高就可以)
    mmcX_cmd
    mmcX_clk
    mmcX_data0
    mmcX_data1
    mmcX_data2
    mmcX_data3
    注:上面的X是你选用的MMC总线,对335来说可能是0,1,2

    2、确认了以上管脚和对应的pin mux后,就可以进入代码修改环节:
    AM335在内核中对应的BSP代码位于:
    arch/arm/mach-omap2/board-am335xevm.c
    先在其中修改或增加一个节点:

    /* Module pin mux for wlan and bluetooth */ // mxh 20170606
    static struct pinmux_config mmc2_ap6212_pin_mux[] = {
    {"gpmc_a7.gpio1_23", OMAP_MUX_MODE7 | AM33XX_PIN_OUTPUT}, //电源
    {"gpmc_a6.gpio1_22", OMAP_MUX_MODE7 | AM33XX_PIN_INPUT}, //WAKE_HoST
    {"gpmc_clk.mmc2_clk", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT},
    {"gpmc_csn3.mmc2_cmd", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT},
    {"gpmc_a1.mmc2_dat0", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT},
    {"gpmc_a2.mmc2_dat1", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT},
    {"gpmc_a3.mmc2_dat2", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT},
    {"gpmc_ad15.mmc2_dat3", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT},
    {NULL, 0},
    };

    ***************** 注意:配置完必须检查这里的管脚有没有在其它的地方进行配置,如果有把它们都屏蔽掉。

    3、在内核中添加对应的init函数。

    // mxh add 20170606
    static void mmc2_ap6212_init(int evm_id, int profile)
    {
    printk(KERN_ERR"=============init AP6212 ========== ");
    setup_pin_mux(mmc2_ap6212_pin_mux);

    /* 已加到 am335x_mmc数组定义中
    am335x_mmc[1].mmc = 3;
    am335x_mmc[1].name = "bcmsdh_sdmmc";
    am335x_mmc[1].caps = MMC_CAP_4_BIT_DATA | MMC_CAP_NONREMOVABLE | MMC_CAP_SD_HIGHSPEED;
    am335x_mmc[1].nonremovable = true;
    am335x_mmc[1].gpio_cd = -EINVAL;
    am335x_mmc[1].gpio_wp = -EINVAL;
    am335x_mmc[1].ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34;
    */
    /* mmc will be initialized when mmc0_init is called */
    /*
    gpio_request(GPIO_TO_PIN(1, 23), "AP6212_VC");
    gpio_direction_output(GPIO_TO_PIN(1, 23), 1);
    gpio_export(GPIO_TO_PIN(1, 23), 0);
    */
    /*
    gpio_request(GPIO_TO_PIN(1, 22), "AP6212_WL_WAKE");
    gpio_direction_output(GPIO_TO_PIN(1, 22), 0);
    gpio_export(GPIO_TO_PIN(1, 22), 0);
    */
    return;
    }

    **************** 注:这里有一个非常容易犯错的地方,这个项目中我们用的mmc总线为2,众所周知AM335x共有三组SDIO,分别是mmc0,mmc1,mmc2
    **************** 你们会很惊奇地发现,我们在这里用了am335x_mmc[1],明明是mmc2为什么[]中是1呢?答案是我们在实际应用中没有配置mmc1,所以这里要用1;
    **************** 至于"am335x_mmc[1].mmc = 3"中的3代表是的物理的总线位置(mmc0对应1,mmc1对应2,mmc2对应3)

    因为在am335x数据定义中已定义了 mmc[1],所有在此函数中只保留了一个管脚设置调用。

    4、到这里对bsp的修改就差不多了,把初始化函数内核加载。

    static struct evm_dev_cfg myd_am335x_dev_cfg[] = {
    {evm_nand_init, DEV_ON_BASEBOARD, PROFILE_ALL},
    {mmc0_init, DEV_ON_BASEBOARD, PROFILE_ALL},

    。。。
    {mmc2_ap6212_init, DEV_ON_BASEBOARD, PROFILE_ALL}, //mxh add 20170606

    5、把模块驱动加入内核中,我们放在drivers/net/wireless/bcmdhd
    把bcmdhd.1.201.59.x.cn.tgz解压在这里。

    修改
    drivers/net/wireless/Makefile
    obj-$(CONFIG_BCMDHD) += bcmdhd/

    drivers/net/wireless/Kconfig
    source "drivers/net/wireless/bcmdhd/Kconfig"

    6、配置对应的内核选项:
    在内核目录运行make menuconfig(先确认对应的ARCH是否是arm)
    确认如下配置:
    Networking support->Wireless->cfg80211 - wireless configuration API 配置为<*>
    Device Drivers->Network device support->Wireless LAN-> <*>   Broadcom FullMAC wireless cards support 配置

    设置固件路径

    (/opt/firmware/ap6212/fw_bcm43438a0.bin) Firmware path 
    (/opt/firmware/ap6212/nvram_ap6212.txt) NVRAM path

    中断设置选择Interrupt type (In-Band Interrupt) 

    配置保存后,确认.config中包含以下几项

    CONFIG_BCMDHD=y
    CONFIG_BCMDHD_FW_PATH="/opt/firmware/ap6212/fw_bcm43438a0.bin"
    CONFIG_BCMDHD_NVRAM_PATH="/opt/firmware/ap6212/nvram_ap6212.txt"
    CONFIG_BCMDHD_SDIO=y
    # CONFIG_BCMDHD_OOB is not set
    CONFIG_BCMDHD_SDIO_IRQ=y

    2017/10/16增加:

    编译系统时出现如下错误的解决方法:

     (1)8875:变量WIPHY_FLAG_HAVE_AP_SME 没有定义,直接把此句注释;

        (2)1354:sdio_reset_comm 没有定义,修改为if(1==0)

     7、烧写系统后并重启后

    在/opt/firmware/ap6212中拷入固件

    参考相关文档使用wpa_supplicant配置网络。(目前dhcp命名无效,所以采用ifconfig 分配地址的方式并使wlan0 up)

    ping 192.168.1.1 OK

  • 相关阅读:
    U盘支持启动windows和Linux
    emacs安装
    npm 安装指定的第三方包
    npm安装第三方包
    npm 安装淘宝镜像
    ssm 环境搭建
    gitBook安装简介
    git 博客搭建
    git 多人开发
    git ssh提交
  • 原文地址:https://www.cnblogs.com/xihong2014/p/6971216.html
Copyright © 2011-2022 走看看