1. u-boot에서는
CONFIG_OVERWRITE_ETHADDR_ONCE
를 지정해 주면 ethernet address가 한번 overwrite가 됩니다. 당연히 ethernet은 쓴다고 되어 있어야 하고요.
2. kernel의 driver에서는 이렇게 처리해주면 됩니다.
static unsigned char my_ethaddr[MAX_ADDR_LEN];
/* need to get the ether addr from armboot */
static int __init ethaddr_setup(char *line)
{
char *ep;
int i;
printk("ethaddr_setup()n");
memset(my_ethaddr, 0, MAX_ADDR_LEN);
/* there should really be routines to do this stuff */
for (i = 0; i < 6; i++)
{
my_ethaddr[i] = line ? simple_strtoul(line, &ep, 16) : 0;
if (line)
line = (*ep) ? ep+1 : ep;
printk("mac[%d] = 0x%02Xn", i, my_ethaddr[i]);
}
return 0;
}
__setup("ethaddr=", ethaddr_setup);
이 부분을 커널의 cs89x0.c에 삽입해 주신 후,
부트로더에서 넘겨주는 kernel command line argument를 이렇게 지정해 주면 됩니다.
setenv bootargs root=/dev/nfs rw
nfsroot=172.16.1.253:/korea-dokdo/nfsmount/rootfs-aesop
ip=172.16.1.100:172.16.1.253:172.16.1.1:255.255.255.0::eth0:off
console=ttyS0 ethaddr=08:00:3e:26:0a:5b
여기의 맨 뒤에 있는 ethaddr=08:00:3e:26:0a:5b
이 cs8900에서 자동 해석하게 코드를 작성하면 됩니당....^^
그럼...
위의 방법대로 구성된 my_ethaddr[i] 를 실제 device driver의 mac address가 세팅되는 부분에서 6바이트를 실제 디바이스의 mac으로 사용되는 배열에 넣어주시면 됩니다.