3518e uboot自动设置mac地址

来源:互联网 发布:淘宝宝贝手机拍摄技巧 编辑:程序博客网 时间:2024/06/04 18:54
由于产品的需要,需要在uboot中自动设置mac地址,因此查了网上的一些资料,再加上自己的修改,可以成功设置mac地址。以下是具体步骤:***1.获取随机数,代码是来自网上***
    static unsigned char random1(void){    unsigned long long rand = get_timer(0) * 100000;    unsigned char a;    rand = rand * 1664525L + 1013904223L;    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;}

2.设置mac地址
代码如下,来自于网上,做了一些修改

void autoset_mac_addr(void){    #define XMK_STR(x) #x    #define MK_STR(x) XMK_STR(x)    char *mac_add;    mac_add = getenv("ethaddr");  //默认mac地址00:00:23:34:45:66    if(strcmp(mac_add, MK_STR(CONFIG_ETHADDR)) == 0)//如果为默认值,则修改mac地址    {        /*set mac addr */        char mac[18]={'0','0'};        int i;        for (i=3; i<17; i++)        {            if((i%3) == 2)//不用给 2 5 8 11 14 即":"位获取随机数                continue;             udelay(10);             mac[i] = random1();//获取随机数        }        mac[2] = mac[5] = mac[8] = mac[11] = mac[14] = ':';        mac[17] = '\0';        setenv("ethaddr", mac);//设置mac        saveenv();//保存    }}   

3.调用
我主要是在u-boot-2010.06\common\main.c中调用的,具体是在main_loop函数中,每次启动uboot直接调用,如果和默认Mac地址一样,则修改,否则不修改。

经过测试,可以每次获得不同的Mac地址,大致思路就是这样,新手一枚,若有错误或者更好的方法,敬请指教。

0 0