转载请指明出处。

参考《关于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. [UI基础][QQ登陆界面]

    [目标] 1.QQ号码文本框要有“请输入QQ号码”的提示(用户输入时会自动消失) 2.QQ密码文本框要有“请输入QQ密码”的提示(用户输入文字会自动消失) 3.QQ号码文本框只能输入数字 4.QQ密码 ...

  2. 5700刀打造3卡1080Ti深度学习机器【转】

    本文转载自:https://www.jianshu.com/p/ca2e003bf77e   5700美刀,打造3x1080Ti实验室GPU深度学习机器 最近为公司搭建了一台实验用的深度学习主机,在网 ...

  3. [SpringBoot] - 配置文件的多种形式及优先级

              学习两个注解: @PropertySource   @ImportResource  ↓   @ConfigurationProperties  与 @Bean 结合为属性赋值 与 ...

  4. pix2pix-tensorflow搭建及其使用

    目录 pix2pix-tensorflow搭建过程 1. 环境搭建 2. 环境说明 3. 开始搭建 4. 训练结果说明 5. 数据集 5.1 图片格式说明 5.3 从先用图片创建图像对 5.4 如何进 ...

  5. CCNA学习指南 -开放最短路径优先OSPF(单区域)

    在上个世纪九十年代撰写的<TCP/IP协议详解 卷一:协议>的动态选路中,内容大部分还是介绍 RIP路由选择信息协议,在互联网络如此发达的今天,RIP因为它的局限性逐步被OSPF取代. 在 ...

  6. 【转载】解决telnet无法连接 Connection refused

    原文:解决telnet无法连接 Connection refused telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户提供了在本地计算机上完成 ...

  7. Python的hasattr() getattr() setattr() 函数使用方法详解--转载

    hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 ...

  8. BooStrap4文档摘录 2 Content, Component

    Content Reboot:从新写了主要元素的排列. 本章讲了各种元素及其相关的类. ⚠️ 文档左上角有搜索栏. Components Alert✅ Badge✅ Button✅和Button gr ...

  9. Aizu-2200-floyd+dp

    Mr. Rito Post Office 你是一个为远程邮局邮局工作的程序员.你住的地区由几个岛屿组成.每个岛屿都有一个或多个港口城镇.除此之外,还有其他城镇和村庄.为了从一个岛到另一个岛,你必须使用 ...

  10. python socket 编程(TCP与UDP)

    实验环境:python2 一.TCP编程 1.建立TCP服务器 ①创建TCPServer.py文件 ②编写服务器代码 1)创建socket对象,调用socket构造函数 2)绑定ip端口(IP号和端口 ...