[u-boot] 랜덤 mac 주소와 dhcp - 061017
임베디드/7202 2006. 10. 17. 17:01
훗~ 드뎌, 랜덤 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()함수와 같다.
일단 첫번째 작업은 난수를 발생 시켜서, 리셋할 때 마다 새로운 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 |