nuc972添加xr819驱动

  • 驱动移植
    • Kconfig及Makefile修改
    • xradio源码修改
    • 内核配置修改
    • 修改SDIO驱动
    • 编译内核,上机调试
      • 结束

驱动移植

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.

结束

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

NUC972平台XR819驱动及内核更改相关推荐

  1. Linux内核平台设备驱动模型platform_device和platform_driver框架

    关于Linux平台设备驱动模型,并不是创建新的设备分类,是在原有的字符设备基础上使用,将设备和驱动分开,生成两个.ko文件.         Linux内核维护一个全局设备链表,对应的总线会将驱动和设 ...

  2. MTK平台TP驱动框架解析

    一,TP驱动代码的组成 MTK平台TP驱动主要包括两处文件: 1,kernel-3.18\drivers\input\touchscreen\mediatek\mtk_tpd.c 平台设备驱动,主要为 ...

  3. linux设备驱动——andriod平台wlan驱动

    转自 :http://blog.chinaunix.net/space.php?uid=22278460&do=blog&cuid=2186191 linux设备驱动--andriod ...

  4. 设备驱动,字符设备驱动、(总线)设备驱动模型、sysfs文件系统、平台设备驱动

    以下内容转载于微信公众号:嵌入式企鹅圈.如有侵权,请告知删除. 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动.平台设备驱动.设备驱动模型和sysfs等相关概念和技术. 对于初学者来说会非常 ...

  5. Platform平台设备驱动框架

    Platform 平台设备驱动框架 platform平台设备驱动是基于设备驱动模型的,它将总线结构体struct bus_type封装为struct bus_type platform_bus_typ ...

  6. MTK平台闪光灯驱动分析

    MTK平台闪光灯驱动分析   以前没写过博客,总想写着来着,把之前学到的做过的东西都记录下来,但是一直没有时间也没那么大的决心.这次趁着刚换工作,正在学习熟悉平台不是太忙的机会,把自己总结的文档写下来 ...

  7. Linux驱动学习-平台设备驱动probe函数-20220410

    1.最简单的杂项设备 /* * @Descripttion: 最简单的杂项设备驱动 * @version: * @Author: topeet */ #include <linux/init.h ...

  8. MTK平台LCD驱动框架详解(一)

    许多学习嵌入式的进入MTK开发平台,很多东西都会感到很陌生.在MTK平台上你可以简简单单几分钟就点亮一块屏.加上MTK快速开发的节奏,也很少有时间自己整理学习.如果不思进取,不加班加点学习.很容易就慢 ...

  9. 嵌入式Linux设备驱动程序开发指南9(平台设备驱动)——读书笔记

    平台设备驱动 九.平台设备驱动 9.1 平台设备驱动概述 9.2 GPIO驱动 9.2.1 简介 9.2.2 硬件名称 9.2.3 引脚控制器 9.2.4 引脚控制子系统 9.2.5 GPIO控制器驱 ...

最新文章

  1. pcu tps_Mac版Microsoft Office 2011重新定义您的TPS报告体验
  2. oracle同一个示例两个用户的数据同步_分享两个shell脚本--一键统计Oracle数据库用户信息...
  3. b700a怎么连蓝牙_小身材有大功能,小米蓝牙耳机AirDots青春版初体验
  4. 关于事件委托的整理 ,另附bind,live,delegate,on区别
  5. 玩转SpringBoot 2 快速搭建 | Spring Initializr 篇
  6. So easy!10 行代码写个“让你惊叹”的文章生成器 | 原力计划
  7. HTK语音识别示例(Ubuntu)
  8. python xml转字典_python xml转成dict
  9. Python开发工具PyCharm的web开发教程:创建并运行 Python 项目
  10. 阻抗测试仪软件,特性阻抗测试仪 阻抗测试仪 Tektronix 泰克 TDR DSA8300
  11. #网络流24# 餐巾计划问题
  12. 天蓝色在ps中的色值_天蓝色事件网格集成测试
  13. 有没有集工作记录、项目时间线于一身的便签软件?
  14. proximal Algorithm
  15. 多目标跟踪(MOT,Multiple Object Tracking)评价指标
  16. 使用eNSP搭建两个交换机通过trunk实现相同vlan互联
  17. 【李佳辉_周报_2022.10.2】
  18. 全国专业技术人员计算机应用能力考试题库word,全国专业技术人员计算机应用能力考试题库ExcelWordXP.docx...
  19. apicloud (第五篇 bmap百度地图一键回到当前位置)
  20. Vue自定义表单生成器,通过Json生成表单

热门文章

  1. 荒谬!高校院长在Nature论文一作位置P上自己名字,还写到简历里...
  2. 《了不起的盖茨比》于是我们奋力前进,却如同逆水行舟,注定要不停地退回过去
  3. 【C/C++基础】11_用户自定义数据类型
  4. LUT是如何实现千万种逻辑结构的
  5. 云服务器中安装mysql(2022版)
  6. c语言的前置课程,专业课前置课程一览表.pdf
  7. 企业应收账款管理存在的问题及对策
  8. Eclipse:出现The selection cannot be launched,and there are no recent launches的解决方法
  9. IDEA汉化后怎么setting打不开了?
  10. 3D slicer编译漫漫之路