일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- raspberrypi
- vscode
- Raspberry
- Visual Studio
- AVR
- nucleo
- STM32
- 디버깅
- Linux
- Debugging
- Visual Studio Code
- Debug
- avr-gcc
- bare metal
- BeagleBone
- AArch64
- GPIO
- yocto
- atmel
- 리눅스
- platformio
- USART
- 아두이노
- C++
- UART
- Arduino
- esp32
- 라즈베리파이
- buildroot
- QEMU
- Today
- Total
임베디드를 좋아하는 조금 특이한 개발자?
[RaspberryPI4] Bare metal에서 개발한 image 실행 본문
- 개발 환경
개발 보드 : Raspberrypi 4
WSL2 (Ubuntu 22.04 LTS)
SDcard 64Gb
1. 서론
리눅스가 아닌 Bare metal 환경에서 직접 개발한 image를 라즈베리파이에서 실행하기 위한 방법을 확인 할 것 입니다.
2. SD카드 파티션 설정
SD카드는 어떤 카드를 사용해도 상관 없을 것입니다. 저의 경우 삼성 SDCard 64Gb를 사용하였습니다. 이제 해당 SDCard를 라즈베리파이4에서 사용할 수 있도록 포멧하고 파티션을 구성할 것입니다. 먼저 컴퓨터에 SDCard를 연결하여 정상적으로 SDCard를 사용할 수 있는지 확인해보도록 합시다.
// 연결된 USB 리스트 확인
lsusb
// 사용가능한 Block device 리스트 확인
lsblk
저의 경우 USB Storage가 연결되어 있고 sdd 라는 Block device가 SDCard 라는 것을 확인 했습니다. 이제 해당 SDCard의 파티션을 재구성하고 포멧을 진행하도록 하겠습니다.
// "/dev/sdd"의 파티션을 재구성하기 위한 명령어
// 사용자 마다 Block device가 다르므로 lsblk로 확인 필요
sudo cfdisk /dev/sdd
저의 경우 평범하게 윈도우에서 사용하던 SDCard이기 때문에 파티션이 exFAT으로 59.6G로 설정되어 있는 것을 확인 했습니다.
이제 기존에 사용하던 모든 파티션을 삭제하고 새로 생성하도록 하겠습니다.
위와 같이 파티션을 삭제하여 모든 파티션을 삭제하도록 합니다.
모든 파티션이 삭제 되었다면 위 사진과 같이 Device에 Free space 밖에 남지 않았을 것입니다. 이제 새로운 파티션을 생성해 주도록 합니다.
이제 아래 그림과 같이 정상적으로 /dev/sdd1 이라는 새로운 파티션이 생성된 것을 확인 할 수 있습니다.
하지만, 라즈베리파이에서는 파티션의 Type이 "FAT32" 이여야 합니다. 그런데 현재 /dev/sdd1의 Type은 Linux로 설정되어 있습니다. 그러므로 Type를 FAT32 으로 변경 하도록 합니다.
마지막으로 "Write"를 통해 지금까지 설정한 파티션을 적용하도록 하겠습니다.
(★주의 : "Write"를 하는 순간 기존의 데이터가 삭제 될 수 있으므로 중요한 파일은 반드시 백업 해두시기 바랍니다.)
이제 "Quit"를 통해 프로그램을 종료합니다.
마지막으로 파티션이 정상적으로 적용되었는지 lsblk로 확인해보겠습니다.
3. SD카드 포멧
(★주의 : 해당 명령어는 파일을 지울 수 있기 때문에 반드시 올바른 Block device인지 확인 해주세요.)
// "/dev/sdd1" Block device를 FAT32로 포멧
sudo mkfs.fat -n "BOOT" /dev/sdd1
4. 부팅에 필요한 파일 적용
이제 FAT32로 포멧한 Block device을 마운트하고 필요한 파일을 넣어 주도록 하겠습니다.
// "/dev/sdd1"을 마운트할 디렉토리 생성
sudo mkdir /mnt/sdd1
// "/dev/sdd1"을 "/mnt/sdd1"에 마운트
sudo mount /dev/sdd1 /mnt/sdd1
위 4개의 파일을 Block device에 저장하도록 합니다.
sudo cp bcm2711-rpi-4-b.dtb fixup4.dat config.txt start4.elf /mnt/sdd1/
이제 bare metal로 build한 image 파일도 저장합니다.
저의 경우 아래의 포스트에서 생성한 image를 사용하였습니다.
https://littlebitodd-developer.tistory.com/60
[RaspberryPI4] Bare metal에서 Assembly 언어로 GPIO 제어
- 개발 환경개발 보드 : Raspberrypi 4WSL2 (Ubuntu 22.04 LTS)toolchain : aarch64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0- 참고 자료- 라즈베리파이 보드에 대한 설명 및 부팅 순서에 대한 소개https://www.raspberrypi.
littlebitodd-developer.tistory.com
// image 파일을 "/dev/sdd1"에 저장
sudo cp image /mnt/sdd1/
이제 /dev/sdd1를 마운트 해제하고 SDCard를 컴퓨터에서 뽑습니다.
// "/dev/sdd1"을 마운트 해제
sudo umount /dev/sdd1
5. 라즈베리파이4에 SDCard 삽입 후 실행
이제 SDCard를 라즈베리파이4에 삽입하여 전원을 넣으면 라즈베리파이가 정상 동작하는 것을 확인 할 수 있습니다.
'Embedded > Raspberry PI' 카테고리의 다른 글
[RaspberryPI4] Bare metal에서 UART통신을 위한 레지스터 확인 (2) | 2025.07.18 |
---|---|
[RaspberryPI4] Bare metal에서 C언어로 GPIO 제어 (2) | 2025.07.16 |
[RaspberryPI4] Bare metal에서 Assembly 언어로 GPIO 제어 (3) | 2025.07.11 |
[Raspberrypi4] BCM2711의 UART 입력 주파수(UARTCLK) 초기 설정값 (0) | 2025.07.10 |
이전 Raspberrypi OS 이미지 다운로드 (0) | 2025.04.05 |