fw_printenv는 uboot에 포함된 tool이다
uboot/tool/env 에 존재하는 녀석인데
ethaddr을 값을 변경하려고 하니 에러가 발생하였다.
fw_setenv()의 리턴값은 30인데 아마도 EROFS가 30인듯 하다(errno.h에서는 발견하지 못한 변수이다.)
눈에 들어온 부분은 아래의 strcmp() 이다.
아무튼, uboot에서 기본적으로 ethaddr과 serial#을 지원하고
이값들은, 한번만 write되고 수정되서는 안되기 때문에 제약사항으로 묶어놓은 듯 하다.
uboot/tool/env 에 존재하는 녀석인데
ethaddr을 값을 변경하려고 하니 에러가 발생하였다.
fw_setenv()의 리턴값은 30인데 아마도 EROFS가 30인듯 하다(errno.h에서는 발견하지 못한 변수이다.)
눈에 들어온 부분은 아래의 strcmp() 이다.
/* * Delete any existing definition */ if (oldval) { /* * Ethernet Address and serial# can be set only once */ if ((strcmp (name, "ethaddr") == 0) || (strcmp (name, "serial#") == 0)) { fprintf (stderr, "Can't overwrite \"%s\"\n", name); return (EROFS); } if (*++nxt == '\0') { *env = '\0'; } else { for (;;) { *env = *nxt++; if ((*env == '\0') && (*nxt == '\0')) break; ++env; } } *++env = '\0'; }
아무튼, uboot에서 기본적으로 ethaddr과 serial#을 지원하고
이값들은, 한번만 write되고 수정되서는 안되기 때문에 제약사항으로 묶어놓은 듯 하다.
'프로그램 사용 > u-boot' 카테고리의 다른 글
uboot tftp 부팅시 decompress 에러 (0) | 2010.01.22 |
---|---|
uboot bootargs 에 kernel argument 넘기기 (0) | 2009.12.30 |
uboot - fw_printenv / fw_setenv / fw_getenv ethaddr 제약사항 (17) | 2009.08.19 |
ifup / ifdown + busybox (0) | 2009.08.17 |
U-Boot 환경변수 읽어오기 (u-boot environment variable) (0) | 2009.07.18 |
u-boot의 환경변수 읽어 오기 (0) | 2009.03.25 |
댓글을 달아 주세요
Hmm. Syntax Highligher was upgraded to 2.0.320.
2009.08.19 23:36 [ ADDR : EDIT/ DEL : REPLY ]http://alexgorbatchev.com/wiki/SyntaxHighlighter
In Germany, I cannot type Korean!!!
영어로 된 글을 스팸으로 처리 고고싱! ㅋㅋ
2009.08.20 09:21 [ ADDR : EDIT/ DEL ]독일에서 수고가 많으세요 ㅠ.ㅠ
안녕하세요~ 구차니님~~~~^^
2011.09.22 12:45 [ ADDR : EDIT/ DEL : REPLY ]임베리눅스 하면서 구차니님 참 많이 찾아 오고 있습니다..ㅠ ㅠ
여기 저기 막 알아 보다가 질문이 하나 있어서..ㅠ ㅠ
tftp 를 위하여 mac 을 그떄 그때 생성하려고 하는데...
srand rand 이 녀석들은 쓸 수 없는 건가요..ㅠ ㅠ
ㅎㅎㅎ 막연히 구글 세상 돌아다니다가...
오늘은 여쭈어 보려고 왔습니다 ^^
MAC은 48비트로 이루어져서 6번만 256 으로 % 연산해서 값을 만들면 충분히 가능은 하지만 음.. 매번 맥을 생성하시려는 의도를 모르니 적용을 해도 될지는 잘 모르겠네요 ^^;
2011.09.22 12:52 신고 [ ADDR : EDIT/ DEL ]아.. 여기로 계속 여쭈어도 될런지요 ^^;;;
2011.09.22 13:12 [ ADDR : EDIT/ DEL : REPLY ]기본 xx:xx:xx:00:00:01 로 ethaddr 은 code 로 설정을 하였습니다...
kernel 부팅 후 어플에서는 MAC 을 eeprom 에 저장을 하고 쓰고 있죠...
단지 복구용으로 tftp 를 사용하여고 하는데..
eeprom 접근은 일이 커질 것 같고...
하여 간단하게 mac 뒷자리 00:00:00 부분에 필요 할떄 생성을 하려고 합니다..
그런데 mac 과 ip 가 같으면 tftp 접근이 안되어서...
ip gate 등은 고정을 하고 mac 만 고때고때 접속을 시키려고 합니다..
2대 이상의 board 가 tftp 접속을 위해서요..ㅠ ㅠ
하여 난수를 발생 시키려고 하는데...
srand rand 등 표준 함수?? 는 사용이 안되는 것 같아서 ㅎㅎㅎ
tools/gen_eth_addr.c 이녀석을 찾아서 사용해 보려고 하였으나...
이녀석은 단지 pc 용 프로그램인가요? ㅠ ㅠ
uboot 소스 main.c 에서 srand 는 쓸수가 없기에..ㅠ ㅠ
구글 찾아보니 표준 라이브러리 사용을 안한다고 ㅠ ㅠ
잘 몰라서 막 돌아 다니다 결국은 구차니님 구찮게 해드리네요 ^^;;;
그런데 댓글이 이렇게 길어도 되나요.. 죄송합니다..ㅠ ㅠ
일반적으로 rand()나 srand()는 표준라이브러리(stdlib) 사용하는데 u-boot나 busybox의 경우 용량을 줄이는게 목적이다 보니 표준라이브러리를 사용하지 않고 이런 이유로 인해 발생하는 것으로 알고 있습니다. 실제로 MAC이 부여된 녀석이라면 정식으로 EEPROM을 읽어 오는게 정석이죠 ^^:
2011.09.22 13:48 신고 [ ADDR : EDIT/ DEL ]tools 의 녀석들은 말그대로 유틸리티이기 때문에
부팅이 된후 u-boot의 저장역영을 함께 건드리는 프로그램들입니다.
아.. 두서가 없었는데요...ㅠㅠ
2011.09.22 13:20 [ ADDR : EDIT/ DEL : REPLY ]결론적 요지는 ㅎㅎㅎ
srand 와 rand 를 uboot source 의 어딘가에서 쓸수가 있을까...
아니면 다른 난수를 만들 수 있는 방법이 있는가... 해서 여쭈어 봅니다 ^^*
일반적인 알고리즘이 시간정보를 받아와서 그걸 기준으로 랜덤값을 생성하는데 이러한 경우 대부분 동일한 값을 만들어 내는 문제가 있습니다. 그래서 입력전압을 시드값을 준다거나 하지만 만약 유일하게 들어가는 값이 uboot 상에 있다면(시리얼) 그 값을 사용하여 랜덤생성 알고리즘을 구해서 u-boot에 같이 넣고 컴파일 후 사용하시면 될것으로 생각됩니다.
2011.09.22 13:50 신고 [ ADDR : EDIT/ DEL ]http://www.daniweb.com/software-development/c/code/216329 이런 c code가 보이는데 도움이 되실진 잘 모르겠네요 ^^;
2011.09.22 13:52 신고 [ ADDR : EDIT/ DEL ]아...
2011.09.22 13:53 [ ADDR : EDIT/ DEL : REPLY ]두서 없는 질문에 답해 주셔서 감사 합니다 ^^
역시 삽질과 구글링은 진리 군요 ~
앞으로도 열심히 찾아보고 질문도 드릴께요~*
저의 경우에는 USB 바코드 리더로 u-boot에 박아버렸기 때문에 ^^;
2011.09.22 13:54 신고 [ ADDR : EDIT/ DEL ]이런 고생을 하진 않아서 잘 모르겠습니다 ㅠ.ㅠ
오홋...
2011.09.22 14:00 [ ADDR : EDIT/ DEL : REPLY ]uboot 에서 USB 바코드를 이용하여서 환경변수 설정 하신건가요? ^^
아.. 제가 진행하고 있는 플젝은 그게 안되네요 어흑...
위에 링크 완젼 감사 합니다~
매번 표준 함수를 편하게 가져다 쓰다보니...
직접 구현하려니 머리가 둥~ 하네요 ^^;;
u-boot에서 바로 한건 아니고 PC 에서 시리얼 번호에 맞추어서
2011.09.22 14:08 신고 [ ADDR : EDIT/ DEL ]MAC을 생성하고 그걸 부팅이 완료된 셋트로 전송하여
fw_setenv 를 통해 macaddr을 넣어 준거랍니다.
물론 uboot에서 macaddr은 변수를 수정할수 없게 되어 있어서 그걸 풀어주어야 했구요 ^^
헛...
2011.09.22 16:59 [ ADDR : EDIT/ DEL : REPLY ]fw_setenv...
이녀석 make 하고 어디에 생성되는 녀석인가요? ^^
제가 생각하는 것에서 가장 이상적으로 해결되는 것인것 같내요...
너무 많은걸 여쭈어서 죄송합니다.
그런데 진작 여쭈어 볼껄 그럴껄 하는 생각도 마구 듭니다..ㅠ ㅠ
uboot/tool/env 에 있었는데 uboot 한게 작년이니.. 어디에 짱박혔을수도 있고...
2011.09.22 17:06 신고 [ ADDR : EDIT/ DEL ]아무튼 예전에는 make가 잘안되서 억지로 gcc로 링크걸고 해서 컴파일을 했던 기억이 나는군요 ^^;
ㅎㅎㅎ 감사합니다^^
2011.09.22 17:16 [ ADDR : EDIT/ DEL : REPLY ]어플에서 mac 넣을때...
uboot 환경 변수 flash 에서 읽어다가 때려 박아야 겠네요 ㅋㅋ
진즉 이런 아이디어가 왜 안떠올랐을까요 ㅎㅎ
쉬워보이기 때문에 오히려 생각을 못하는 함정에 빠지는거죠 ^^
2011.09.22 17:18 신고 [ ADDR : EDIT/ DEL ]