当前位置: 首页 > news >正文

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$ 

http://www.dtcms.com/a/31555.html

相关文章:

  • 【ORB-SLAM3】鲁棒核函数的阈值设置
  • docker-rss:容器更新的RSS订阅源
  • 卷积与动态特征选择:重塑YOLOv8的多尺度目标检测能力
  • 商汤绝影发布全新端到端自动驾驶技术路线R-UniAD
  • 【Python爬虫(49)】分布式爬虫:在新兴技术浪潮下的蜕变与展望
  • 从0开始:OpenCV入门教程【图像处理基础】
  • 【网络】高级IO
  • sklearn中的决策树
  • Java子类调用父类构造器的应用场景
  • STM32-有关内存堆栈、map文件
  • ROS2 应用:按键控制 MoveIt2 中 Panda 机械臂关节位置
  • golang内存泄漏
  • 下载CentOS 10
  • 探索未知:alpha测试的神秘序章【量化理论】
  • 模块化设计的力量:从「乐高积木」看组合式开发如何降低软件工程风险
  • SpringCloud系列教程:微服务的未来(二十五)-基于注解的声明队列交换机、消息转换器、业务改造
  • Ubuntu 查看mysql用户和数据库
  • 使用postman测试api接口基本步骤
  • 【Python】Python顺序语句经典题合集
  • RT_Thread 内核启动分析
  • 家用路由器的WAN口和LAN口有什么区别
  • 【WebGL】attribute方式实例化绘制
  • 线代[8]|北大丘维声教授《怎样学习线性代数?》(红色字体为博主注释)
  • 计算机考研复试上机07
  • ES6箭头函数:基础与进阶指南
  • 红队内网攻防渗透:内网渗透之内网对抗:实战项目VPC1打靶PHP-RCE三层代理路由防火墙上线密码喷射域控提权
  • 请求go构建缓存,go clean -cache
  • 使用西门子 PLC(以 S7 - 1200 为例)编写梯形图程序来根据转速计算瞬时流量和累计流量的详细步骤
  • 0基础学Linux系统(准备1)
  • 沉浸式翻译插件深度评测:打破语言壁垒的黑科技利器