(原创)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 ==========\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自主开发板上的更多相关文章
- 物联网操作系统HelloX已成功移植到MinnowBoard MAX开发板上
在HelloX开发团队的努力下,以及Winzent Tech公司(总部在瑞典斯德哥尔摩)的支持下,HelloX最新版本V1.78已成功移植到MinnowBoard MAX开发板上.相关源代码已经发布到 ...
- minigui移植到arm linux开发板上无法执行
要保证目录下有该文件 /etc/MiniGUI.cfg 复制过程使用cp –af 强制复制
- live555 交叉编译移植到海思开发板
本文章参考了.http://blog.csdn.net/lawishere/article/details/8182952,写了hi3518的配置说明.特此感谢 https://blog.csdn.n ...
- 【开发实录】在鸿蒙开发板上使用websocket(移植自librws库)
librws: Tiny, cross platform websocket client C library 相关代码可在下面下载,也可进入librws: 将librws移植到鸿蒙Hi_3861开发 ...
- FS210开发板上Qt4.7.0移植过程
作者:冯老师,华清远见嵌入式学院讲师. 1. 搭建Qt开发环境平台 1.开发环境:ubuntu 12.04 2.交叉编译链:arm-cortex_a8-linux-gnueabi 3.开发板:FS21 ...
- 移植Mplayer到OK6410开发板
移植Mplayer到OK6410开发板 作者:vasage 项目需要,需要将Mplayer移植到开发板上,所以今天花了一下下午成功移植,其中参考很多文档,后发现许多文档陈旧,些许文档有少量错误,所以这 ...
- 在秉火STM32F429挑战者开发板上移植Huawei LiteOS指南
昨天在B站上突然看到了一个短视频,是在正点原子的战舰V3开发板上移植华为的Huawei LiteOS操作系统,就是这个视频:看完鸿蒙OS发布会,试用华为的物联网操作系统Lite OS(B站),于是呢, ...
- easycwmp在开发板上的配置
原创作品,转载请注明出处 copyright:weishusheng 2015.3.18 email:642613208@qq.com 平台: Linux version 2.6.32-279.e ...
- 运行在TQ2440开发板上以及X86平台上的linux内核编译
一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...
随机推荐
- Sybase数据库第三方软件安装
Sybase数据库第三方软件安装 1,安装软件:IQNC160011P_1-20011253.ZIP
- zabbix监控路由器
在路由器上添加团体名: snmp-server enable traps snmp-server community XXXX rw 1.使用Getif查看路由器端口信息 getif-2.31
- 20145204 《Java程序设计》第四周学习总结
20145204 <Java程序设计>第四周学习总结 教材学习内容总结 继承 什么时候使用继承? 当多个类中出现重复定义的行为(即多个类中出现重复的代码)时,就把相同的程序代码提成为父类. ...
- linux中readl()和writel()函数---用于读写寄存器
writel() 往内存映射的 I/O 空间上写数据,wirtel() I/O 上写入 32 位数据 (4字节). 原型: #include <asm/io.h> void writel ...
- Anchor、Dock
转:http://blog.sina.com.cn/s/blog_7f7cd96601013trt.html 在设计可供用户调整大小的窗体时,如何实现该窗体上的控件也应能正确地随窗体的改变而自动调整大 ...
- MVC webapi,Action的分别拦截器
继承Controller,ApiController的拦截继承的接口不一样 webapi的拦截器:(继承System.Web.Http) using System; using System.Coll ...
- Redis之Set 集合
Redis Set 集合 Set 就是一个集合,集合的概念就是一堆不重复值的组合.利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据. 比如在 微博应用中,可以将一个用户所有的关注人 ...
- UVa 12549 机器人警卫(最小点覆盖)
https://vjudge.net/problem/UVA-12549 题意: 在一个Y行X列的网格里有空地(.),重要位置(*)和障碍物(#),用最少的机器人看守所有重要位置,每个机器人要放在一个 ...
- HTML5-canvas实例:2D折线数据图与2D扇形图
基础知识: <canvas id="demo" width="400" height="400"></canvas> ...
- java日志体系的思考(转)
Java 日志缓存机制的实现 Java 日志管理最佳实践 混乱的 Java 日志体系 log日志远程统一记录 浅谈后端日志系统 Java异常处理和接口约定 用SLF4j/Logback打印日志-1 用 ...