NUC972平台XR819驱动及内核更改

驱动移植

NUC972原sdk不支持XR819,只能从别的平台移过来,
目录拷贝kernel\drivers\net\wireless\xradio

Kconfig及Makefile修改

kernel\drivers\net\wireless目录Kconfig增加:
source “drivers/net/wireless/xradio/Kconfig”

kernel\drivers\net\wireless目录Kconfig增加:
obj-$(CONFIG_XRADIO) += xradio/

xradio源码修改

跟平台相关的主要在drivers\net\wireless\xradio\wlan\platform.c文件
配置好中断脚和复位键,例如:

static u32 wlan_irq_gpio   = (0xE0 + 6);//NUC970_PH6;
static u32 wlan_reset_gpio  = (0xE0 + 12);//NUC970_PH12;

按自己的硬件接口调整代码。

如果想固定MAC地址,需更改:
drivers\net\wireless\xradio\wlan\xradio.h文件
#define WIFI_CONF_PATH “/tmp/xr_wifi.conf”
改到自己的可写分区目录
例如:#define WIFI_CONF_PATH “/data0/xr_wifi.conf”

内核配置修改

因为是SDIO接口,需打开SDIO配置,我这里用的是SD1_PI口:

CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_UNSAFE_RESUME=y
# CONFIG_MMC_CLKGATE is not set
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_SDIO_UART is not set
# CONFIG_MMC_TEST is not set
CONFIG_MMC_NUC970_SD=y
CONFIG_NUC970_SD0_EN=y
CONFIG_NUC970_SD1_EN=y
# CONFIG_NUC970_SD1_PE is not set
# CONFIG_NUC970_SD1_PH is not set
CONFIG_NUC970_SD1_PI=y

打开wifi的一些配置:

CONFIG_NVT_EXT_WIFI=y
CONFIG_WIRELESS_EXT=y
CONFIG_WEXT_CORE=y
CONFIG_WEXT_PROC=y
CONFIG_WEXT_SPY=y
CONFIG_WEXT_PRIV=y
CONFIG_NL80211_TESTMODE=y
CONFIG_CFG80211_DEVELOPER_WARNINGS=y
CONFIG_CFG80211_REG_DEBUG=y
CONFIG_CFG80211_DEBUGFS=y
CONFIG_CFG80211_WEXT=y
CONFIG_LIB80211=y
CONFIG_LIB80211_CRYPT_WEP=y
CONFIG_LIB80211_CRYPT_CCMP=y
CONFIG_LIB80211_CRYPT_TKIP=y

打开XRADIO的配置:

CONFIG_XR_WLAN=m
CONFIG_XRMAC=m
CONFIG_XRMAC_RC_DEFAULT="minstrel_ht"
# CONFIG_XRMAC_RC_PID is not set
CONFIG_XRMAC_RC_MINSTREL=y
CONFIG_XRMAC_RC_MINSTREL_HT=y
CONFIG_XRMAC_DEBUGFS=y
CONFIG_XRADIO=m
CONFIG_XRADIO_SDIO=y
CONFIG_XRADIO_NON_POWER_OF_TWO_BLOCKSIZES=y
CONFIG_XRADIO_USE_GPIO_IRQ=y
CONFIG_XRADIO_USE_EXTENSIONS=y
CONFIG_XRADIO_DEBUG=y
CONFIG_XRADIO_ETF=y
# CONFIG_XRADIO_DUMP_ON_ERROR is not set
CONFIG_XRADIO_DEBUGFS=y

修改SDIO驱动

drivers\mmc\host\nuc970_sd.c
增加mmc_rescan_card函数

 struct mmc_host *mmc=NULL, *mmc1=NULL;
void mmc_rescan_card(unsigned id)
{
	if (id == 0)
	{
		if (mmc == NULL){
			dev_err(mmc_dev(mmc),"%s:can't find the host\n",__FUNCTION__);
			return;
		}
		mmc_detect_change(mmc, 0);
	}
	else
	{
		if (mmc1 == NULL){
			dev_err(mmc_dev(mmc1),"%s:can't find the host\n",__FUNCTION__);
			return;
		}
		mmc_detect_change(mmc1, 0);
	}	
}
EXPORT_SYMBOL_GPL(mmc_rescan_card);

因为SD1的检测脚没接,在nuc970_sd_card_detect函数
ret = host->present ? 0 : 1;
下面增加:

	if (host->port == 1)
		ret = 1;

这样检测SD1设备时设备始终存在;

编译内核,上机调试

执行make ; make uImage
编译完将内核文件970uimage.bin,烧入设备;
编译生成的xradio_mac.ko/xradio_core.ko/xradio_wlan.ko 3个模块文件拷入设备可写分区目录;
sdd_xr819.bin/fw_xr819.bin/etf_xr819.bin/boot_xr819.bin 4个固件拷入/lib/firmware/目录;
创建wpa.conf配置文件,写入wifi帐号密码:

#ctrl_interface=/var/log/wpa_supplicant
update_config=1
network={
	ssid="xxxxx"
	psk="xxxxxxxx"
}

加载模块,连接WIFI,自动获取IP:

insmod xradio_mac.ko && insmod xradio_core.ko  && insmod xradio_wlan.ko
wpa_supplicant -B -i wlan0 -c /data0/wpa.conf  udhcpc -i wlan0 &
udhcpc -i wlan0 &

等待几秒后连接成功!

固件文件下载地址: link.
源码下载地址: link.

结束

因为移植完成也有段时间了,有些细节可能没记录下来,参考文章也没记录···
移植过程中也出现不少问题,通过看打印信息和源代码找到问题所在;
第一次写记录,凑合着看了···

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cylOoO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值