(原创)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 ...
随机推荐
- TED #07# How to inspire every child to be a lifelong reader
Alvin Irby: How to inspire every child to be a lifelong reader Prepare elementarykitchen tableforced ...
- MP3的采样率和比特率
我们听mp3,看电影都会注意到两个参数,常见的有采样率44.1KHz,比特率192Kbps,那么什么是采样率,什么是比特率?他们是什么关系呢?下面就我们就来简单做个解释: 把模拟音频信号转成数字音频信 ...
- linux第四章读书笔记
第四章 进程调度 一.多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵塞或者睡眠状态,实际不被投入执行,这些任务尽管位于内存,但是并不处于可运行状态.多 ...
- Cooperation.GTST团队第三周项目总结
项目进展 这周我们仍然在学习使用博客园的相关接口,页面的一个基本模块已经搭建出来了,但是页面整体效果还没有完全做出来.另外,我们在使用其他的APP时留意到许多APP都使用上拉加载和下拉刷新的效果,所以 ...
- 「翻译」一篇redis文章引发的翻译——JVM能支持多少线程?
昨天看了一篇关于redis 的文章https://www.cnblogs.com/fanwencong/p/5782860.html 作者说他模拟了100万线程的并发,我对这个有一些怀疑,看了评论也有 ...
- 【各类MQ比较】消息队列MQ
目前业界有很多MQ产品,我们作如下对比: RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量 ...
- HTML 入门1
HTML 入门1 一,什么是HTML 超文本标记语言 二,如何写一个HTML文件? 1 通过sublime的文件->新建->保存 "文件名.html"格式 2,在 ...
- 2-10~2-11 配置iptables防火墙增强服务 selinux简单讲解
学习一个服务的过程: 1.此服务器的概述:名字,功能,特点,端口号 2.安装 3.配置文件的位置 4.服务启动关闭脚本,查看端口 5.此服务的使用方法 6.修改配置文件,实战举例 7.排错(从下到上, ...
- Dlib——C++机器学习库,有传统机器学习的,也有深度学习的
Dlib的目标用户并没有Hyperopt-sklearn细分,它是一个基于C++语言的通用的机器学习和数据分析库.值得一提的是,虽然Dlib的确是由C++实现的,但它却提供了针对Python语言的AP ...
- RGB2YCbCr RGB2Gray
Y = 0.2990R+0.5870G+0.1140B; Cb=-0.1687R-0.3313G+0.5000B+128; ...