代码路径:lichee\linux-3.4\drivers\net\ethernet\sunxi\emac\sunxi_emac.c   在此网口驱动中找到mac获取函数:wemac_get_macaddr()

更改后的代码为:

static void wemac_get_macaddr(wemac_board_info_t *db)
{
struct net_device *ndev = db->ndev;
int i,flag=1,result=0;
char *p = mac_str;
struct file *filp=NULL;
mm_segment_t old_fs;
old_fs = get_fs();
set_fs(KERNEL_DS);

set_fs(get_ds());
filp = filp_open("/data/existMacAddr",O_CREAT|O_RDWR,0666);//由于内核中此驱动挂起较早,多数文件系统还没挂载,因此如果将模块打到内核中,是实现不了目的的,我暂时选择将模块开机挂载,不打入内核,望大牛看到此文,能给出更好的文件路径方案,最好是能打入内核。
if(IS_ERR(filp)){
  printk("open /data/existMacAddr err,maybe it's exist!!"); 
goto err1;
}

for(i=0;i<6;i++,p++)
ndev->dev_addr[i] = simple_strtoul(p, &p, 16);

#ifdef DYNAMIC_MAC_SYSCONFIG
    
    script_item_u emac_mac;
    if(SCIRPT_ITEM_VALUE_TYPE_STR != script_get_item("dynameic", "MAC", &emac_mac)){
        printk(KERN_WARNING "In sysconfig.fex emac mac address is not valid!\n");
    } else if(!is_valid_ether_addr(ndev->dev_addr)){
        emac_mac.str[12] = '\0';
        for (i=0; i < 6; i++){ 
char emac_tmp[3]=":::";
memcpy(emac_tmp, (char *)(emac_mac.str+i*2), 2);
emac_tmp[2]=':';
ndev->dev_addr[i] = simple_strtoul(emac_tmp, NULL, 16);
        }
    }

#endif
if(!(filp->f_op)|| !(filp->f_op->read) || !(filp->f_op->write)){
printk("file /data/existMacAddr cann't readable or writable?\n");
goto err1;
}

char cmp_buf[6] = {0};
filp->f_op->llseek(filp, 0, 0);
int ret = filp->f_op->read(filp,ndev->dev_addr,6,&filp->f_pos);
if(ret<0) {
printk("read file error?\n");
goto err1;
}
printk("result of file [/data/existMacAddr] read=%d\n",ret);
if(0 != memcmp(ndev->dev_addr,cmp_buf,6))
{
flag = 0;
printk(" /data/existMacAddr is not empty!\n");
}
if (!is_valid_ether_addr(ndev->dev_addr) && flag){
eth_hw_addr_random(ndev);
if(filp->f_op->write(filp,ndev->dev_addr,strlen(ndev->dev_addr),&filp->f_pos)<0){
printk("write file error?\n");
goto err1;
}

}
if (!is_valid_ether_addr(ndev->dev_addr))
printk(KERN_ERR "Invalid MAC address. Please set it using ifconfig\n");
err1:
set_fs(old_fs);
if(filp_close(filp,NULL))
       printk("Config_FileOperation:close file fail\n");
};

全志平台动态mac地址解决办法记录相关推荐

  1. 修改mac地址导致计算机无法上网,win7系统更换MAC地址解决无法连接网络问题的解决方法...

    很多小伙伴都遇到过win7系统更换MAC地址解决无法连接网络问题的困惑吧,一些朋友看过网上零散的win7系统更换MAC地址解决无法连接网络问题的处理方法,并没有完完全全明白win7系统更换MAC地址解 ...

  2. 使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行

    使用echart的雷达图的时候,如果文字越界的解决办法记录,标签文字自动换行 前几天项目中有一个图表的是用echart生成的,遇到一个问题,就是在手机端显示的售时候,如果文字太长就会超出div,之前的 ...

  3. Microsoft Edge 和 Google Chrome更新后,出现错误代码:STATUS_STACK_BUFFER_OVERRUN,有效解决办法记录【已解决】

    Microsoft Edge 和 Google Chrome更新后,出现错误代码:STATUS_STACK_BUFFER_OVERRUN,有效解决办法记录[已解决] Google Chrome网页错误 ...

  4. centos ifconfig不显示IP地址解决办法之一(亲测有效)

    centos ifconfig不显示IP地址解决办法之一(亲测有效) 原因 解决: 虚拟机使用命令ifconfig不显示IP地址,情况如下(盗个图) 原因 我们的虚拟机网络服务没有设置为开机自启动 解 ...

  5. AirPods 无法连接到iPhone、iPad或Mac的解决办法

    macw小编带来 AirPods 无法连接到 iPhone.iPad或Mac的解决办法,希望对大家有所帮助. 无法连接到 iPhone.iPad 或 iPod touch 1.确保您的 iOS 或 i ...

  6. 以太网2出现两个ip地址-解决办法

    现象: 有线连接上后,出现两个ip地址,一个手动获取一个自动获取,在cmd命令行中输入ipconfig,显示自动获取的ip地址,导致不能连接内网 目标: cmd输入ipconfig,只显示 手动输入的 ...

  7. VMware检测不到vulnhub靶机IP地址解决办法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 vulnhub靶机检测不到IP地址解决办法 原因一:查看网络适配器是否为NAT模式 原因二:虚拟网络编辑器配置出错 原因三:靶机网卡配 ...

  8. ubuntu20.04耳机和外放同时有声音,解决办法记录。

    ubuntu20.04耳机和外放同时有声音,解决办法记录!!! 对耳机和外放同时有声音的解决办法,网上说了很多,但不是很具体,这里简单描述一下 1.首先在终端中输入: alsamixer 2.在进入后 ...

  9. ubuntu文件管理器打不开,出现假死现象的解决办法记录

    ubuntu文件管理器打不开,出现假死现象的解决办法记录 无论新建多少窗口,多少次双击一直出现这种文件管理器界面,一直进不去. 经了解, 一般是nautilus出错了,才出现假死现象,可以卸载之后重新 ...

  10. 遇到的Exception/error及解决办法记录汇总

    一.java.net.SocketException 1.java.net.SocketException:Connection reset 首先,如果一端的Socket被关闭(或主动关闭,或因为异常 ...

最新文章

  1. DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子
  2. Docker run 命令【转】
  3. [Google Guava] 3-缓存
  4. 现代密码学8.1--密码学所涉及的数论和群论
  5. ORACLE中关于外键缺少索引的探讨和总结
  6. 根据经纬度算出两个位置之间的距离
  7. eclipse启动web项目时,spring会初始化两次
  8. mysql 新增返回主键自增id_详解mysql插入数据后返回自增ID的七种方法
  9. vs2008上QT中增加智能提示功能
  10. python面试题No2
  11. 最近的一些感想(关于移动客户端开发android,ios)
  12. 动态为GridView控件创建列
  13. mysql大于等于怎么写_MySQL 对于千万级的大表要怎么优化?我写了6000字的深度解读...
  14. exception java doc_在javadoc中,標簽@throws和@exception之間有什么區別?
  15. Centos 7.X 安装 supervisord
  16. Jquery 网站保存信息提示消息实现,提示后自动消失
  17. SILVACO 学习笔记第一章
  18. 无损音频wav音乐格式怎么转换成mp3格式
  19. cmake未找到命令解决
  20. 支付宝(Alipay)支付,超详细使用教程讲解!

热门文章

  1. python选股软件编写
  2. c++一本通在线测评网站 1002:输出第二个整数
  3. 屡败屡战,攻克中项(系统集成项目管理师考试经历分享)
  4. linux麦克风增强软件,如何在Windows,Mac,Linux中消除背景麦克风噪音
  5. 图像处理之灰度化和二值化
  6. 异常点检测算法分析与选择
  7. 海思 Hi3559A Sample_vdec视频解码及编译
  8. 北京地区能收到的FM广播电台频率表(基于手机)
  9. 大数据驱动教育变革,产教融合呈现新高度——数据科学与大数据技术教育分论坛顺利召开...
  10. Web项目 引入Editormd