AM437x驱动移植篇4------小米随身wifi驱动移植(MT7601、AP模式)

0.说明: LINUX内核版本:4.14.79(不限内核版本,编译的时候如果有报错,根据报的错误简单修改源码即可)
平台:AM437x
1.下载源码: 源码下载地址在此
2.编译

sudo make LINUX_SRC=https://www.it610.com/linux-4.14.79+gitAUTOINC+bde58ab01e-gbde58ab01e ARCH=arm CROSS_COMPILE=/opt/linaro/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/bin/arm-linux-gnueabihf-

由于我使用的内核版本为4.14.76,在Linux4.14中将原来的vfs_read函数 替换成了 kernel_read函数。在编译过程中如果提示找不到vfs_read函数,则可将vfs_read函数替换成kernel_read。修改的目标文件是MT7601源码根目录下的./src/os/linux/rt_linux.c文件。
3.拷贝到arm板上并insmod 在源码目录下有一个etc/Wireless文件夹,将Wireless文件夹整个的拷贝到arm板上的/etc目录下。
/etc/Wireless/RT2870AP/RT2870AP.dat文件作为配置文件以文本的形式配置了wifi名、密码等参数。
源码编译成功后会生成三个.ko文件,分别是:
rtutil7601Uap.ko mt7601Uap.ko rtnet7601Uap.ko

按照先后顺序insmod:
insmod rtutil7601Uap.ko insmod mt7601Uap.ko insmod rtnet7601Uap.ko

注意,必须要按照列出的先后顺序进行insmod,因为它们有先后依赖关系。
【AM437x驱动移植篇4------小米随身wifi驱动移植(MT7601、AP模式)】在本人调试过程中,在insmod最后一个ko文件时遇到了dma申请内存空间失败的问题:
[61.812592] rtutil7601Uap: loading out-of-tree module taints kernel. [61.870811] mt7601Uap: module license 'unspecified' taints kernel. [61.877216] Disabling lock debugging due to kernel taint [61.908476] rtusb init rtusbAP ---> [61.913672] [61.913672] [61.913672] === pAd = f0c45000, size = 856120 === [61.913672] [61.923631] <-- ERROR in Alloc Bulk buffer for HTTxContext! [61.929238] ---> RTMPFreeTxRxRingMemory [61.933426] <--- RTMPFreeTxRxRingMemory [61.937386] ERROR!!! [61.937391] Failed to allocate memory - TxRxRing [61.944953] <-- RTMPAllocAdapterBlock, Status=3 [61.949549] rtusbAP: probe of 3-1:1.0 failed with error -1 [61.956462] usbcore: registered new interface driver rtusbAP ifconfig: SIOCSIFADDR: No such device

猜想可能是由于dma空间大小不够导致,解决方法:
在启动参数中加入:
coherent_pool=2Mbootargs设置如下:bootargs=console=ttyO0,115200n8 coherent_pool=2M root=/dev/mmcblk0p3 rw rootfstype=ext4 rootwait

此时再insmod完成后可通过ifconfig -a命令看到ra0
设置IP和子网掩码:
ifconfig ra0 192.168.2.1 netmask 255.255.255.0

ra0Link encap:EthernetHWaddr FC:3D:93:B4:E9:9D inet addr:192.168.2.1Bcast:192.168.2.255Mask:255.255.255.0 inet6 addr: fe80::fe3d:93ff:feb4:e99d/64 Scope:Link UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)TX bytes:0 (0.0 B)

此时已经可以搜索并连接上wifi了。
由于没有dhcp服务器,故连接的设备不能动态获取IP,此时便需要编译和配置dhcpd服务器。
4.交叉编译dhcpd服务器 源码下载:https://www.isc.org/downloads/
推荐下载4.1版本的
AM437x驱动移植篇4------小米随身wifi驱动移植(MT7601、AP模式)
文章图片

编译:
./configure CC=arm-linux-gnueabihf-gcc --host=arm-linux-gnueabi --with-randomdev=no ac_cv_file__dev_random=yes make "CC=arm-linux-gnueabihf-gcc -static"

编译成功后会在dhcp-4.1-ESV-R15-P1/server目录下生成一个dhcpd文件,并将此文件拷贝到arm板上。
在/etc下创建dhcpd.conf文件,并写入以下内容:
ddns-update-style interim; #配置使用过渡性 DHCP-DNS互动?新模式。 ignore client-updates; #忽略客户端?新subnet 192.168.2.0 netmask 255.255.255.0 {option routers192.168.2.1; #路由器地址 option subnet-mask255.255.255.0; #子网掩码选项option nis-domain"xfbaydhcp.com"; option domain-name"xfbaydhcp.com"; #域名 option domain-name-servers202.102.152.3; #DNS地址option time-offset-18000; # Eastern Standard Timerange dynamic-bootp 192.168.2.100 192.168.2.200; #租用IP地址的范? default-lease-time 21600; #缺省租约时间 max-lease-time 43200; #最大租约时间# we want the nameserver to appear at a fixed address host ns { next-server marvin.redhat.com; hardware ethernet 12:34:56:78:AB:CD; fixed-address 207.175.42.254; } }

运行:
./dhcpd

随后便可以接入WiFi并获取到IP了。
参考链接:https://blog.csdn.net/fish43237/article/details/78961481

    推荐阅读