티스토리 뷰
목차
uboot 명령어, (부트로더) 임베디드 프로그래머 상식
부트로더의 종류는 많습니다. 그중에서 uboot를 우리나라에선 많이 사용하고 있네요. 학교나 교육 기관에서도 uboot를 많이 쓰는데요. 그래서 임베디드 프로그래머들은 uboot 명령어에 익숙해지는 것이 좋아요.
이 포스트에선 네 종류의 명령어를 소개합니다.
uboot 명령어 - Information Commands
[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를 사용).
[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 '하면 전체를 지움!).
[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, 임베디드 프로그래머 상식]
bootm - boot application image from memory
지정한 메모리에 저장된 이미지를 실행.
$(kernel_addr)같이 문자로 지정한 곳의 이미지를 실행시킨다 (BLOB와 비슷).
이런 이미지는 헤더에 여러 정보를 포함하고 있다. 예를 들어, 운영체제의 종류나, 압축 여부, 압축의 종류 등이다.
go - start application at address 'addr'
지정한 메모리에 저장된 application을 실행. 여기서 application이란 운영체제의 복잡한 실행 환경이 필요치 않은 이른바, standalone applications이라 불리는 프로그램을 통칭. 이 명령어 하나로, RAM으로 로드하고 실행까지 가능.
uboot 명령어, (부트로더) 임베디드 프로그래머 상식