3518e uboot自动设置mac地址

由于产品的需要,需要在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地址,大致思路就是这样,新手一枚,若有错误或者更好的方法,敬请指教。

你可能感兴趣的:(mac,u-boot)