uboot生成随机的MAC地址

R.wen

由于设备量产需要每台机器的MAC地址都不一样,所以我们给Uboot增加一个环境变量sysready,用来表示如果系统没有ready,就做一些额外的初始化工作,如生成一个随机的MAC地址,并保存到环境变量中。

一、 在s2410中找一个随机源也不容易,它不像x86一样有个硬件计数器可以作为随机源。这里我们使用了s2410的timer,经过测试也可以得到很好的随机数。

Timer部分的代码在cpu/arm920t/s24x0/interrupt.c中,首先要在lib_arm/board.c的初始化函数中加入初始化定时器的函数:

interrupt_init ();

接着就可以通过

Ret = get_ticks();

得到中断计数和。

由于系统总有一些不确定因素的影响,所以总会得到不同的计数和。

二、得到随机数

上面得到的随机数值差别非常小,但是经过下面的计算,就可以得到看起来很随机的数。

static unsigned char random(void)

{

unsigned long long rand = get_ticks() * 100000;

unsigned char a;

//   See "Numerical Recipes in C", second edition, p. 284

rand = rand * + ;

a = rand >> 24; //不是最低8位

//为了得到 ‘0~9, a ~ f, A ~ F’ 的值

if (a < 'A')

a = a % 10 + 48;

else if (a < 'F')

a = a % 6 + 65;

else if (a < 'a' || a > 'f')

a = a % 6 + 97;

return a;

}

三、设置随机MAC地址:

s = getenv("sysready");

sysready = s ? (int)simple_strtol(s, NULL, 10) : CONFIG_BOOTDELAY;

if (sysready == 0) /* system not ready */

{

/*set mac addr */

char mac[18]={'0','0',};

int i;

for (i=3; i<17; i++)

{

udelay(10);

mac= random();

}

mac[2] = mac[5] = mac[8] = mac[11] = mac[14] = ':';

mac[17] = '\0';

setenv("ethaddr", mac);

setenv("sysready", "1");

saveenv();

}

四、应用

完成了上面的设置之后, 在系统第一次加载的时候,由于sysready为0,所以会重新生成一个随机的MAC地址,随后uboot会将sysready置为1。

如果需要重新生成一个MAC地址,则只需要将sysready重置为0,然后保存环境变量即可,即执行:

setenv sysready 0; saveenv

android uboot获取mac地址,uboot生成随机的MAC地址相关推荐

  1. android下获取无线wif信号、ssid、MAC等操作类

    一个android下获取无线wif信号.ssid.MAC等操作的类. WifiAdmin.java package com.afu; import java.util.List; import and ...

  2. python随机生成一个地区地址_利用Python生成随机的IP地址

    需求 在某应用中,需要根据一定的规则生成随机的IP地址,规则类似于192.168.11.0/24这样的CIDR形式给出. 实现 经过艰苦卓绝的调试,下面的代码是可以用的: RANDOM_IP_POOL ...

  3. python随机生成一个地区地址_Python生成随机MAC地址

    利用python代码生成一个随机的MAC地址,使用python网络编程时或可用上,如果使用scapy模块则可直接利用RandMAC()函数来生成MAC. python 复制代码 代码如下: impor ...

  4. c语言怎么生成随机的mac,使用C语言生成随机MAC地址

    最近,项目中使用了LM3S8962这个芯片,来让投影机具有网络控制功能,这个模块主要就是内部有一个简单的WEB服务器,可以进行SSI和CGI的编程,其还有串口,通过和DDP内部的UART口相连,两者可 ...

  5. android 中获取所有有效网卡和对应的IP地址

    在开发应用时,经常要获取网络的所有网卡的IP地址,这样可以选择绑定哪个网卡. 代码如下: 获取所有有效的网卡: import java.net.Inet6Address; import java.ne ...

  6. 2003服务器修改网卡mac,网卡MAC地址修改神器 修改MAC地址、一键更换网卡MAC地址信...

    网卡MAC地址修改神器支持Win XP,Win7,Win200,Win2003等并自动读取本机网卡所有列表信息,可自动生成随机网卡MAC地址,软件全自动禁启用网卡,可以全自动扫描网卡地址,修改多处网卡 ...

  7. 用python随机生成5000个网址_使用Python脚本生成随机IP的简单方法

    需求 在某应用中,需要根据一定的规则生成随机的IP地址,规则类似于192.168.11.0/24这样的CIDR形式给出. 实现 经过艰苦卓绝的调试,下面的代码是可以用的: RANDOM_IP_POOL ...

  8. python生成随机个人信息——python批量生成随机信息

    实验:python批量生成随机信息 这个实验很简单,直接上代码了~~ 一.常用汉字的Unicode编码   在unicode码中,汉字的范围是(0x4e00,0x9fbf),但是其中包含了很多生僻字或 ...

  9. android程序获取WIFI的IP地址和MAC地址

    转自:http://my.oschina.net/chenj/blog/68680 近日在鼓捣这玩意,拿出来大家分享一下,代码比较简单,如果有不懂的再问 <Button android:id=& ...

最新文章

  1. 233网校java_java辅导:使用java模拟登陆考试大
  2. 以太坊智能合约生命周期(Ethereum smart contracts lifecycle)
  3. OpenCV学习笔记九-Canny边缘检测
  4. 链表 - 约瑟夫问题
  5. java 数字组合_java解决数字组合问题
  6. 全微分推导: 全微分感性理解: 全微分几何意义举例: 偏导与全微分的意义 通过物理性质理解。偏导与全微分的意义
  7. 【算法】极小极大值搜索算法MinimaxSearch————井字棋的应用
  8. 秒懂!什么是BI商业智能!
  9. 只有程序猿才知道的12个人艰不拆的真相
  10. 10--Django-ORM操作-choices参数、多对多的三种创建方式
  11. 【用Python对全职高手小说分析分词词频词性,小说人物出场次数排序,小说中食物排序,小说人物关系等等】
  12. 单元测试的必要性?一文聊聊单元测试
  13. C++学习笔记——播放音乐
  14. 百度数据实习生面试经历—2019.4.15
  15. 设计模式-备忘录模式(快照模式)
  16. Vue的生命周期详解,一文带你弄懂Vue的生命周期
  17. 探寻C/C++中更快的大数(自然数集)模板
  18. 设计一个中国象棋游戏,ChessPiece为抽象类,提供代表一个棋子位置的属性和方法,和isMoveLegal();设计ChessPiece的具体实现类(如车,马,帅等)
  19. 【Pytorch项目实战】之对抗攻击:无目标对抗攻击(FGSM)、有目标对抗攻击(FGSM)
  20. 如何从ST官网下载STM32标准外设库

热门文章

  1. python 窗口最小化_有没有办法通过Python 3最小化Windows 7中的窗口?
  2. vue 检测ie版本_Vue2+Webpack+ES6 兼容低版本浏览器(IE9)解决方案
  3. python删除特定的几行数据_Python:分成几行,并根据搜索删除特定行 - python
  4. 计算机学院学生会宣传稿,计算机与信息工程学院学生会
  5. java document to xml_Java Document.asXML方法代碼示例
  6. 计算机系统应用的书,基于领域本体与上下文感知计算的智能图书-计算机系统应用.PDF...
  7. linux中代码挂上n,Linux系统常用命令nl详解(示例代码)
  8. linux部署python web项目 详细_linux下nginx+python+uwsgi部署总结(django+web.py)
  9. 验证码_12306验证码很难吗?2020年最新的Python验证码模块开源
  10. php时间日期函数转字符串,php自定义时间转换函数示例