티스토리 뷰

목차

    반응형

    uboot 명령어, (부트로더) 임베디드 프로그래머 상식


    부트로더의 종류는 많습니다. 그중에서 uboot를 우리나라에선 많이 사용하고 있네요. 학교나 교육 기관에서도 uboot를 많이 쓰는데요. 그래서 임베디드 프로그래머들은 uboot 명령어에 익숙해지는 것이 좋아요.


    이 포스트에선 네 종류의 명령어를 소개합니다.


    uboot 명령어 - Information Commands


    uboot 명령어 임베디드[u-boot, 임베디드 프로그래머 상식]


    bdinfo - print Board Info structure (bdi)

    메모리 주소, 클럭주파수, 맥 주소 등, 주로 리눅스 커널에 전달되는 정보들을 출력.


    coninfo - print console devices and informations (conin)

    사용가능한 콘솔 입출력 장치들을 출력 (ex : 시리얼).


    flinfo - print FLASH memory information (fli)

    플래쉬 메모리의 정보를 표현.


    iminfo - print header information for application image (imi)

    주소로 지정한 특정 이미지의 정보(이미지 이름, 종류, 크기, 체크섬)를 출력.

    uboot 명령어 - Memory Commands


    base - print or set address offset (ba)

    uboot를 사용하는 데 있어서 Base 주소를 설정. 부트로더에서 다양한 메모리 작업(디버깅 같은)을 해야 하는 경우 오프셋만 지정하면 되므로 편리.


    crc32 - checksum calculation (crc)

    checksum 계산기라고 생각하면 됨. 시스템을 다룰 때, crc 처리는 필수적이므로 유용.


    cmp - memory compare 

    지정한 위치의 메모리를 비교하여, 서로 다른 값이 나오면 멈춤.


    cp - memory copy

    메모리를 지정한 만큼 복사(l.w .b를 사용).


    uboot 명령어 임베디드 프로그래머 명령[u-boot, 임베디드 프로그래머 상식]


    md - memory display 

    지정한 만큼의 메모리를 출력 (ㅣ.w .b를 사용할 수 있으며, 이에 따라 다르게 출력).


    mm - memory modify (auto-incrementing) 

    메모리를 순차적으로 수정 (.ㅣ.w .b를 사용). 'mm.b 10'이라고 했다면 10번지 1바이트를 입력받은 후 자동으로 11번지 입력을 대기.


    mtest - simple RAM test

    메모리를 읽고 쓰는데 이상이 없는지 테스트(flash나 ROM 영역에 사용하면 fail).


    mw - memory write / fill

    지정한 메모리 영역을 특정 값으로 채움(.ㅣ.w .b를 사용할 수 있다).


    nm - memory modify (constant address) 

    특정 번지의 메모리 내용을 지속해서 수정할 수 있도록 반복해서 입력을 받아들여 메모리에 씀.


    디바이스의 레지스터를 수정할 때 유용. (특정 값을 계속 바꾸어, 어떤 결과를 기대할 때) (.ㅣ.w .b를 사용).


    loop - infinite loop on address range 

    지정한 메모리 영역을 반복적으로 출력. 리셋하기 전까지 멈출 수 없다! (.ㅣ.w .b를 사용할 수 있다)

    uboot 명령어 - Flash Memory Commands


    cp - memory copy

    메모리를 지정한 만큼 복사. (l.w .b를 사용)


    flinfo - print FLASH memory information

    플래쉬 메모리의 정보를 표현.


    erase - erase FLASH memory

    지정한 Flash 메모리 영역을 0 값으로 리셋. 직접 주소를 지정하거나, 뱅크 또는 섹터 단위로 메모리 영역을 지정할 수 있는 특징 ('erase all '하면 전체를 지움!).


    uboot 명령어 임베디드 프로그래머[u-boot, 임베디드 프로그래머 상식]


    protect - enable or disable FLASH write protection

    (erase와 같은 방식으로) 지정한 Flash 메모리 영역의 protection 여부를 지정. fli명령어로 보면, protection 된 곳은 (RO)로 표현.


    그런데 이 명령어는 Flash 메모리 칩에 종속적입니다. Flash 메모리가 이러한 기능을 지원하지 않는다면 이 명령어는 무용지물이네요. uboot 자체에서 소프트웨어적 protection을 지원합니다. Uboot의 실행코드나 환경변수가 저장된 곳 등은 보호합니다. 하지만 이는 uboot에게 실행권한이 있을 때로 국한됩니다.


    즉, 운영체제나 다른 이미지에 실행 권한이 넘어가면 소프트웨어적인 protection 역시 무용지물이 되버립니다.


    uboot 명령어 - Execution Control Commands


    autoscr - run script from memory

    지정한 메모리에 저장된 쉘 명령어로 구성된 이미지를 uboot에서 실행할 수 있도록 하는 것으로, host에서 mkimage라는 툴을 사용하여 이미지를 만들어야 함. 이 툴을 사용함으로써 uboot에서 쉘의 실행이 가능한 듯.


    u-boot 임베디드 프로그래머 명령어[u-boot, 임베디드 프로그래머 상식]


    bootm - boot application image from memory

    지정한 메모리에 저장된 이미지를 실행.


     $(kernel_addr)같이 문자로 지정한 곳의 이미지를 실행시킨다 (BLOB와 비슷).


    이런 이미지는 헤더에 여러 정보를 포함하고 있다. 예를 들어, 운영체제의 종류나, 압축 여부, 압축의 종류 등이다.


    go - start application at address 'addr'

    지정한 메모리에 저장된 application을 실행. 여기서 application이란 운영체제의 복잡한 실행 환경이 필요치 않은 이른바, standalone applications이라 불리는 프로그램을 통칭. 이 명령어 하나로, RAM으로 로드하고 실행까지 가능.


    uboot 명령어, (부트로더) 임베디드 프로그래머 상식

    반응형