프로그램 사용/u-boot2009. 8. 19. 17:20
fw_printenv는 uboot에 포함된 tool이다
uboot/tool/env 에 존재하는 녀석인데
ethaddr을 값을 변경하려고 하니 에러가 발생하였다.

fw_setenv()의 리턴값은 30인데 아마도 EROFS가 30인듯 하다(errno.h에서는 발견하지 못한 변수이다.)
눈에 들어온 부분은 아래의 strcmp() 이다.
01/*
02 * Delete any existing definition
03 */
04if (oldval) {
05    /*
06     * Ethernet Address and serial# can be set only once
07     */
08    if ((strcmp (name, "ethaddr") == 0) ||
09        (strcmp (name, "serial#") == 0)) {
10        fprintf (stderr, "Can't overwrite \"%s\"\n", name);
11        return (EROFS);
12    }
13 
14    if (*++nxt == '\0') {
15        *env = '\0';
16    } else {
17        for (;;) {
18            *env = *nxt++;
19            if ((*env == '\0') && (*nxt == '\0'))
20                break;
21            ++env;
22        }
23    }
24    *++env = '\0';
25}

아무튼, uboot에서 기본적으로 ethaddr과 serial#을 지원하고
이값들은, 한번만 write되고 수정되서는 안되기 때문에 제약사항으로 묶어놓은 듯 하다.
Posted by 구차니