리눅스에서 uboot 환경변수를 어떻게하면 읽을 수 있을까요?
어떤 환경(CPU 종류, 타겟 보드 종류)에서 u-boot를 돌리느냐에 따라 방법이 달라집니다.
imx28 evk 보드에서 진행하고있습니다.
- uboot 환경 변수가 따로 파티션화 되어 있을텐데 kernel 에서 block device 로 접근 가능 하니 직접 파싱 (uboot env_import 함수 참고)
- 필요한 몇몇 정보만 uboot 에서 kernel parameter 에 추가하여, 부팅 이후 /proc/cmdline 에서 파싱
답변 감사드립니다. 제가 이용하려는것은 제품 양산시에 uboot에서 제조번호 같은 특정 값을 입력하여 Linux로 넘겨주고 싶은것 입니다. 말씀해주신 답변중에 uboot에서 특정 변수를 kernel parameter로 넘겨주는 방식을 이용하고 싶은데.. 검색을 해도 잘 모르겠네요 혹시 괜찮은 자료나 간단한 설명 부탁드려도 될까요?
char *bootargs = getenv("bootargs"); char *serial = getenv("product_serial"); sprintf(tmpbuf,"%s product_serial=%s", bootargs, serial); setenv("bootargs", tmpbuf);
이렇게 하셔서 부팅 이후에 cat /proc/cmdline 해보세요..
근데 일일이 기입하실려구요? serial 있는 eeprom ic 를 차라리 추가하시는게.....
좋은 답변 감사합니다.
tera term에서 매크로를 써서 넣을려고 하고있습니다.
말씀해주신 코드를
Uboot소스인 lib_sh/bootm.c 에 char *bootarts = getenv("bootargs");소스가 있길래 그 밑에 추가로
char *test 변수를 만들어 컴파일 후 해보았지만 /proc/cmdline에는 기존에 추가하기 전부터 있던 내용들만 있더라구요 ㅠㅠ 소스 위치가 틀린걸까요? 해야할까요?
추가로 한가지 더 물어볼것이 있습니다
u-boot 프롬프트에서
setenv test 1234 후에 saveenv 하고 boot 이렇게하면, 재부팅 후에 uboot 프롬프트에서 printenv 했을 때 test=1234 가 나오면 제대로 값이 저장된거죠?
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
어떤 환경(CPU 종류, 타겟 보드 종류)에서 u
어떤 환경(CPU 종류, 타겟 보드 종류)에서 u-boot를 돌리느냐에 따라 방법이 달라집니다.
imx28 evk 보드에서 진행하고있습니다.
imx28 evk 보드에서 진행하고있습니다.
2가지 방식이 있을 것 같습니다.
- uboot 환경 변수가 따로 파티션화 되어 있을텐데 kernel 에서 block device 로 접근 가능 하니 직접 파싱
(uboot env_import 함수 참고)
- 필요한 몇몇 정보만 uboot 에서 kernel parameter 에 추가하여, 부팅 이후 /proc/cmdline 에서 파싱
답변 감사드립니다.
답변 감사드립니다.
제가 이용하려는것은 제품 양산시에 uboot에서 제조번호 같은 특정 값을 입력하여 Linux로 넘겨주고 싶은것 입니다.
말씀해주신 답변중에 uboot에서 특정 변수를 kernel parameter로 넘겨주는 방식을 이용하고 싶은데..
검색을 해도 잘 모르겠네요
혹시 괜찮은 자료나 간단한 설명 부탁드려도 될까요?
간단하게 c 코드 안에서..
char *bootargs = getenv("bootargs");
char *serial = getenv("product_serial");
sprintf(tmpbuf,"%s product_serial=%s", bootargs, serial);
setenv("bootargs", tmpbuf);
이렇게 하셔서
부팅 이후에
cat /proc/cmdline
해보세요..
근데 일일이 기입하실려구요?
serial 있는 eeprom ic 를 차라리 추가하시는게.....
좋은 답변 감사합니다.
좋은 답변 감사합니다.
tera term에서 매크로를 써서 넣을려고 하고있습니다.
말씀해주신 코드를
Uboot소스인 lib_sh/bootm.c 에 char *bootarts = getenv("bootargs");소스가 있길래
그 밑에 추가로
char *test 변수를 만들어 컴파일 후 해보았지만 /proc/cmdline에는 기존에 추가하기 전부터 있던 내용들만 있더라구요 ㅠㅠ
소스 위치가 틀린걸까요? 해야할까요?
추가로 한가지 더 물어볼것이 있습니다
추가로 한가지 더 물어볼것이 있습니다
u-boot 프롬프트에서
setenv test 1234 후에
saveenv 하고
boot 이렇게하면, 재부팅 후에 uboot 프롬프트에서 printenv 했을 때
test=1234 가 나오면
제대로 값이 저장된거죠?
댓글 달기