转载请指明出处。

参考《关于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 ==========\n");
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

(原创)AP6212移植到AM335X自主开发板上的更多相关文章

  1. 物联网操作系统HelloX已成功移植到MinnowBoard MAX开发板上

    在HelloX开发团队的努力下,以及Winzent Tech公司(总部在瑞典斯德哥尔摩)的支持下,HelloX最新版本V1.78已成功移植到MinnowBoard MAX开发板上.相关源代码已经发布到 ...

  2. minigui移植到arm linux开发板上无法执行

    要保证目录下有该文件 /etc/MiniGUI.cfg 复制过程使用cp –af 强制复制

  3. live555 交叉编译移植到海思开发板

    本文章参考了.http://blog.csdn.net/lawishere/article/details/8182952,写了hi3518的配置说明.特此感谢 https://blog.csdn.n ...

  4. 【开发实录】在鸿蒙开发板上使用websocket(移植自librws库)

    librws: Tiny, cross platform websocket client C library 相关代码可在下面下载,也可进入librws: 将librws移植到鸿蒙Hi_3861开发 ...

  5. FS210开发板上Qt4.7.0移植过程

    作者:冯老师,华清远见嵌入式学院讲师. 1. 搭建Qt开发环境平台 1.开发环境:ubuntu 12.04 2.交叉编译链:arm-cortex_a8-linux-gnueabi 3.开发板:FS21 ...

  6. 移植Mplayer到OK6410开发板

    移植Mplayer到OK6410开发板 作者:vasage 项目需要,需要将Mplayer移植到开发板上,所以今天花了一下下午成功移植,其中参考很多文档,后发现许多文档陈旧,些许文档有少量错误,所以这 ...

  7. 在秉火STM32F429挑战者开发板上移植Huawei LiteOS指南

    昨天在B站上突然看到了一个短视频,是在正点原子的战舰V3开发板上移植华为的Huawei LiteOS操作系统,就是这个视频:看完鸿蒙OS发布会,试用华为的物联网操作系统Lite OS(B站),于是呢, ...

  8. easycwmp在开发板上的配置

    原创作品,转载请注明出处 copyright:weishusheng   2015.3.18 email:642613208@qq.com 平台: Linux version 2.6.32-279.e ...

  9. 运行在TQ2440开发板上以及X86平台上的linux内核编译

    一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...

随机推荐

  1. Vue学习笔记之Vue的箭头函数

    0x00 箭头函数 基本语法: ES6允许使用“箭头”(=>)定义函数 var f = a = > a //等同于 var f = function(a){ return a; } 如果箭 ...

  2. 前端学习笔记之CSS网页布局

    CSS网页布局   阅读目录 一 网页布局方式 二 标准流 三 浮动流 四 定位流 一 网页布局方式 #1.什么是网页布局方式 布局可以理解为排版,我们所熟知的文本编辑类工具都有自己的排版方式,比如w ...

  3. maven和gradle中,dependency和plugin的区别

    dependency引入的东西 作用:代码编译/运行时所需要的东西 打包:项目打包后这些东西基本都在(一般都在). 例如:JSON工具包GSON(com.google.code.gson),不仅开发时 ...

  4. JAVA实验一20145315

    JAVA实验一实验报告 实验名称 Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用IDEA 编辑.编译.运行.调试Java程序. 实验知识点 JVM.JRE.J ...

  5. tomcat的安装和启动

    下载apache-tomcat-8.5.5-src,我将其放在了/usr/local/tomcat目录下 要启动需要运行: /usr/local/tomcat/apache-tomcat-8.5.5- ...

  6. IDEA类和方法注释模板设置

    在开发中使用idea的注释总结:由于IDEA自带的注释模板不是太好用,所以整理一下适用于自己的模板: 一.首先我们来设置IDEA中类的模板:(IDEA中在创建类时会自动给添加注释) 1.File--& ...

  7. [bug report] 当springboot报错 找不到类 javax.xml.bind.JAXBException

    <!--以下四个依赖均是javax.xml.bind.JAXBException的依赖 在java6/7/8默认支持,java9不再支持--> <dependency> < ...

  8. jvm 内存调整

    top查看java占用的内存比较多 top - :: up days, :, user, load average: 0.03, 0.05, 0.05 Tasks: total, running, s ...

  9. mongodb的安装与增删改查

    mongodb是一款分布式的文件存储的数据库,注意这两个词,分布式和文件存储.mongodb支持复制和分片,可以合理的运用空间的大小,也可以达到容灾的目的.另外文件存储也是一个特点,抛弃了传统的表的概 ...

  10. php 数值数组

    <?php $cars=array("Volvo","BMW","Toyota"); echo ] . ] . ] . ". ...