[u-boot] 랜덤 mac 주소와 dhcp - 061017

훗~ 드뎌, 랜덤 mac주소 설정과 설정값 flash & eeprom 저장을 끝냈다.
일단 첫번째 작업은 난수를 발생 시켜서, 리셋할 때 마다 새로운 mac주소를 생성하고, 저장할 수 있도록 해야한다
mac.c
***********************************************************************************

static unsigned long next = 1;

int s_rand(void)
{
    // 난수 생성 함수, 반환값 : 난수
    next = next * 1103515245 + 12345;
    return((unsigned)(next/65536) % 32768);
}

void s_srand(unsigned seed)
{
    // 난수 발생을 위한 seed값 설정
    next = seed;
}

int rand_mac(char *buf)
{
    // buf에 랜덤 mac주소를 복사한다.
   
    uchar mac1,mac2,mac3;       // mac random값 생성

    s_srand(get_timer(0));
    mac1 = (uchar)s_rand();
    mac2 = (uchar)s_rand();
    mac3 = (uchar)s_rand();

    sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", 00,05,169, mac1, mac2,mac3);

    // debug
    printf("Random Mac = %s\n",buf);
   
    return 1;
}

void save_mac(void)
{
    // mac값을 랜덤으로 할당해서, 이값을 ram & flash에 쓰고,
    // cs8900의 eeprom에도 쓴다.
    char ethaddr[20];

    rand_mac(ethaddr);
    setenv("ethaddr", ethaddr);

    do_saveenv(find_cmd("saveenv"),0,1,ethaddr);
   
    // save to cs8900 eeprom
    cs8900_e2prom_write("ethaddr", ethaddr);
}
***********************************************************************************

여기서 save_mac()함수를 board.c 에 main_loop()전에 보드 초기화 마지막에 하도록 해준다.
여기까지 랜덤 mac 작업이 끝났다.

* cs8900 eeprom에 mac값쓰기
driver/cs8900.c에 관련 함수들이 나와 있다.(cs8900_e2prom_write("ethaddr", ethaddr);

다음 dhcp설정은
#define CONFIG_COMMANDS 에 CFG_CMD_DHCP 설정을 추가하면 된다.
dhcp관련 함수들은 common/cmd_net.c & net/bootp.c 에 나와 있다.
dhcp()함수는 DhcpRequest()와 연결되어 있고, DhcpRequest()함수는 BootpRequest()함수와 같다.

'임베디드 > 7202' 카테고리의 다른 글

[커널] mtd 관련 sst  (0) 2006.10.26
[u-boot]아싸~ 성공 1.1.4 - 061013  (0) 2006.10.13
[U-Boot] 아~ 결국 1.1.4는 포기 - 061012  (0) 2006.10.12
[U-BOOT] 실패! flash 가 8bit.... - 061011  (0) 2006.10.11