본문 바로가기
C++ 200제/코딩 IT 정보

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

by vicddory 2018. 2. 6.

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 명령어, (부트로더) 임베디드 프로그래머 상식

댓글