MT7628基于原厂的SDK包, 修改ra1网卡的MAC方法。

1、在/etc/config/wireless文件添加多个WIFI网卡的方法。
2、修改WIFI驱动,在src/embedded/ap/ap.c文件里面,从系统文件信息来修改ra1网卡的MAC内容,添加红色部分源代码。

RTMP_IO_WRITE32(pAd, RMAC_RMACDR, Value);

if (idx > 0)

{

struct file *file;
file = filp_open("/etc/mac.bin", O_RDONLY, 0);
if (IS_ERR(file))
{

/* MT7603, bit1 in byte0 shall always be b'1 for Multiple BSSID */

wdev->if_addr[0] |= 0x2;

switch (MacByte) {

case 0x1: /* choose bit[23:20]*/

wdev->if_addr[2] = wdev->if_addr[2] & MacMask;//clear high 4 bits,

wdev->if_addr[2] = (wdev->if_addr[2] | (idx << 4));

break;

case 0x2: /* choose bit[31:28]*/

wdev->if_addr[3] = wdev->if_addr[3] & MacMask;//clear high 4 bits,

wdev->if_addr[3] = (wdev->if_addr[3] | (idx << 4));

break;

case 0x3: /* choose bit[39:36]*/

wdev->if_addr[4] = wdev->if_addr[4] & MacMask;//clear high 4 bits,

wdev->if_addr[4] = (wdev->if_addr[4] | (idx << 4));

break;

case 0x4: /* choose bit [47:44]*/

wdev->if_addr[5] = wdev->if_addr[5] & MacMask;//clear high 4 bits,

wdev->if_addr[5] = (wdev->if_addr[5] | (idx << 4));

break;

default: /* choose bit[15:12]*/

wdev->if_addr[1] = wdev->if_addr[1] & MacMask;//clear high 4 bits,

wdev->if_addr[1] = (wdev->if_addr[1] | (idx << 4));

break;

}

}
else
{
unsigned char buf[8]={0};
if (kernel_read(file, 0, buf, 8) > 0)
{
wdev->if_addr[0] =buf[0] ;
wdev->if_addr[1] =buf[1];
wdev->if_addr[2] =buf[2];
wdev->if_addr[3] =buf[3];
wdev->if_addr[4] =buf[4] ;
wdev->if_addr[5] =buf[5];
printk("%d.mac-addr=%x:%x:%x:%x:%x:%x\n",idx,buf[0],buf[1],buf[2],buf[3],buf[4],buf[5]);
}

}

}

}

3、开发应用程序,用于写MAC信息到文件里面。

libra@SVN:~/openwrt_mtk_4G/ra1_MAC$ cat Write_MAC.c
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <arpa/inet.h>

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

#define MAC_ADDR_DATA "/etc/mac.bin"

int main()
{
unsigned char mac_addr[8]={0};
FILE *outfile=NULL;
int rc=0;
printf("Please enter the MAC data(0x20 0x15 0x12 0x07 0x00 0x00):\n");
scanf("%x%x%x%x%x%x",&mac_addr[0],&mac_addr[1],&mac_addr[2],&mac_addr[3],&mac_addr[4],&mac_addr[5]);
outfile = fopen(MAC_ADDR_DATA, "wb" );
if( outfile == NULL)
{
printf("fopen %s, %s\n",MAC_ADDR_DATA,"not exit/n");
return -1;
}
fseek(outfile,0x0,SEEK_SET);
rc=fwrite(mac_addr, 1, 6, outfile );
fclose(outfile);
printf("The starting position of MAC is:%x:%x:%x:%x:%x:%x\n",mac_addr[0],mac_addr[1],mac_addr[2],mac_addr[3],mac_addr[4],mac_addr[5]);
return rc;
}

libra@SVN:~/openwrt_mtk_4G/ra1_MAC$ cat make.sh
rm -rf Write_MAC
/home/libra/openwrt_mtk_4G/openwrt-sdk/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc Write_MAC.c -o Write_MAC
libra@SVN:~/openwrt_mtk_4G/ra1_MAC$

相关推荐
chenbin52018 分钟前
Jenkins 自动构建Job
运维·jenkins
java 凯20 分钟前
Jenkins插件管理切换国内源地址
运维·jenkins
AI服务老曹23 分钟前
运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了
运维·人工智能·安全·开源·音视频
风静如云1 小时前
OpenBMC:BmcWeb定义service
linux
sszdzq2 小时前
Docker
运维·docker·容器
book01212 小时前
MySql数据库运维学习笔记
运维·数据库·mysql
leoufung2 小时前
VIM FZF 安裝和使用
linux·编辑器·vim
bugtraq20213 小时前
XiaoMi Mi5(gemini) 刷入Ubuntu Touch 16.04——安卓手机刷入Linux
linux·运维·ubuntu
xmweisi3 小时前
【华为】报文统计的技术NetStream
运维·服务器·网络·华为认证
VVVVWeiYee3 小时前
BGP配置华为——路径优选验证
运维·网络·华为·信息与通信