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

news/2025/2/23 6:34:59

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.niftyadmin.cn/n/5863129.html

相关文章

edge浏览器将书签栏顶部显示

追求效果&#xff0c;感觉有点丑&#xff0c;但总归方便多了 操作路径&#xff1a;设置-外观-显示收藏夹栏-始终

uniapp 中使用天地图,安卓端、h5

背景&#xff1a;项目需要将高德地图换成天地图&#xff0c;pc端已经更换&#xff0c;但app端用uniapp写的&#xff0c;就有点茫然了&#xff0c;毕竟uniapp官方给出的地图组件也不支持啊&#xff0c;网上找吧&#xff0c;也没什么例子&#xff0c;算了&#xff0c;自己写吧。 …

图论 之 弗洛伊德算法求解全源最短路径

文章目录 题目1334.阈值距离内邻居最少的城市 Floyd算法适合用于求解多源的最短路径的问题&#xff0c;相比之下&#xff0c;Dijkstra算法适合用于求解单源的最短路径的问题&#xff0c;并且&#xff0c;当边的权值只有1的时候&#xff0c;我们还能使用BFS求解最短路径的问题 …

Uniapp 开发中遇到的坑与注意事项:全面指南

文章目录 1. 引言Uniapp 简介开发中的常见问题本文的目标与结构 2. 环境配置与项目初始化环境配置问题解决方案 项目初始化注意事项解决方案 常见错误与解决方案 3. 页面与组件开发页面生命周期注意事项示例代码 组件通信与复用注意事项示例代码 样式与布局问题注意事项示例代码…

tcpdump 用法示例

server.py 源码&#xff1a; import socket import sys# 这里创建了一个UDP套接字。socket.AF_INET指定了IPv4地址族&#xff0c;socket.SOCK_DGRAM指定了这个套接字是UDP协议的。 sock socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 这里定义了服务器将要监听的地址和…

Docker下的Elastic search

一、安装 &#xff08;一&#xff09;Elastic search 1.创建配置文件 &#xff1a;我是在win系统中&#xff0c;创建文件【G:\dockermount\es\elasticsearch.yml】 添加【http.host: 0.0.0.0】 2. 拉取镜像&#xff1a;docker pull elasticsearch 3. 创建容器(注意我挂载的…

游戏引擎学习第118天

仓库:https://gitee.com/mrxiao_com/2d_game_3 优化工作概述 这次我们正在进行一些非常有趣的工作&#xff0c;主要是对游戏进行优化。这是首次进行优化&#xff0c;我们正在将一个常规的标量C代码例程转换为内建指令&#xff0c;以便利用AIX 64位处理器的SIMD指令集进行加速…

《DAMA数据管理知识体系指南》第十章 参考数据和主数据管理读书笔记

《DAMA数据管理知识体系指南》第十章 参考数据和主数据管理读书笔记 1. 引言 主数据和参考数据是组织跨系统共享的核心资源,其一致性直接影响业务决策和数据质量。主数据(如客户、产品)描述核心业务实体,参考数据(如国家代码、行业分类)提供分类和标准化支持。管理目标…