[ BBB - yocto (3) ] u-boot
u-boot는 하드웨어를 초기화 해주고, 부트로더, 커널 이미지, 디바이스 트리, 오버레이를 로드하여주는 역할을 함
u-boot에 진입하면 '=>' 이렇게 생긴 기호가 보임
부트로더에 진입하여 보자
진입하는 방법
이미 켜진 경우는 비글본 터미널에서
reboot
재부팅 명령어를 치면 재부팅 되면서 부트로더를 진입할 수 있게 됨
u-boot에서는 많은걸 할 수 있는데
ls 로 파일을 본다던가
gpio, i2c, spi 등 인터페이스 제어를 써본다던가
tftp, nfs 서버에서 파일을 다운 받는다던가, ping을 날려본다던가 할 수 있지
여기서는 부팅 인자, 부트 커맨드만 설명할게
1. 부팅 인자
bootargs는 u-boot가 커널에 전달하는 명령어야
저번 강좌에서는 bootargs를 setenv라는 명령어로
=> setenv bootargs console=ttyS0,115200n8 rootwait rw root=/dev/mmcblk0p2
=> saveenv
이렇게 설정했지?
setenv : 우리가 적어줬던 console=ttyS0,115200n8 rootwait rw root=/dev/mmcblk0p2를 bootargs에 저장해주는 역할을 해.
즉 bootargs라는 환경변수(잔역변수라 생각해주면 됨)에 'console=ttyS0,115200n8 rootwait rw root=/dev/mmcblk0p2'라는 문자열을 저장해주는 거야
saveenv : u-boot.env에 환경변수를 저장해주는 명령어야
문자열 'console=ttyS0,115200n8 rootwait rw root=/dev/mmcblk0p2'에 대해서 살펴보면
console : 리눅스의 콘솔 메세지를 띄울 공간
rootwait : 파일시스템이 로드될 때 까지 대기
rw : read write 허용
root : 루트 파일시스템의 위치
이정도로만 이해하자.
root=/dev/mmcblk0p2
인데 mmcblk0p2 : 인식된 sd카드 0번의 파티션 2번을 루트 파일시스템의 위치로 설정하는 거야
이렇게 커널에 넘겨줄 부팅 인자를 설정했어
2. 부트 커맨드에
=> setenv bootcmd 'fatload mmc 0:1 0x80000000 zImage; fatload mmc 0:1 0x8f000000 am335x-boneblack.dtb; bootz 0x80000000 - 0x8f000000'
=> saveenv
이렇게 되어 있는데 bootcmd는 u-boot가 처음 시작될 때
부트 커맨드가 이때 u-boot에서 auto부트 시 실행되는 명령어야. bootcmd라고 해
이게 지정이 안되있으면 커널과 디바이스트리, 오버레이가 로드되지 않겠지? 
그럼 리눅스가 부팅에 실패할거야
따라서 bootcmd를 지정해주어서 자동으로 커널이 부팅이 되게 만들어줄거야
fatload 명령어는 fat형식의 파일시스템에서의 파일을 메모리로 불러오는 명령어야
사용법은 이래
fatload [하드웨어 스토리지] [스토리지 번호:파티션] [저장할 메모리 주소] [불러올 파일]
fatload mmc 0:1 0x80000000 zImage; 라는 명령어는
mmc(sd카드) 0번 스토리지의 파티션 1번에 0x80000000 메모리 주소로 zImage를 로드하라는 명령이 되는거야
fatload mmc 0:1 0x8f000000 am335x-boneblack.dtb; 이 명령어도
mmc(sd카드) 0번 스토리지의 파티션 1번에 0x8f000000 메모리 주소로 am335x-boneblack.dtb를 로드하라는 명령이 되지
bootz는 메모리에 저장된 커널이미지, 디바이스트리, initramfs을 바탕으로 부팅 하세요라는 명령이야
사용법은 아래와 같아
bootz [커널이미지] [initramfs] [디바이스 트리 주소]
bootz 0x80000000 - 0x8f000000;
운영체제에서 공부했던 부분이 보이지 않니?
부트로더는 커널이미지를 메모리에 로드한다는 부분이 이 부분인거지
환경변수를 설정한 전체 과정을 아래 적어둘게
=> setenv bootargs console=ttyS0,115200n8 rootwait rw root=/dev/mmcblk0p2 => saveenv => setenv bootcmd 'fatload mmc 0:1 0x80000000 zImage; fatload mmc 0:1 0x8f000000 am335x-boneblack.dtb; bootz 0x80000000 - 0x8f000000' => saveenv => boot
댓글
댓글 쓰기