일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- platformio
- UART
- 라즈베리파이
- Visual Studio Code
- Debugging
- STM32
- Arduino
- Visual Studio
- buildroot
- vscode
- QEMU
- atmel
- esp32
- Debug
- BeagleBone
- raspberrypi
- C++
- 디버깅
- 아두이노
- AVR
- Raspberry
- yocto
- nucleo
- GPIO
- USART
- bare metal
- 리눅스
- AArch64
- Linux
- avr-gcc
- Today
- Total
임베디드를 좋아하는 조금 특이한 개발자?
[RTOS 개발] 개발 시작 후 지금 까지의 상황 본문
- 프로젝트 Github
https://github.com/MainForm/RaspberryPI4_BaremetalOS
GitHub - MainForm/RaspberryPI4_BaremetalOS
Contribute to MainForm/RaspberryPI4_BaremetalOS development by creating an account on GitHub.
github.com
1. 프로젝트 시작 이유
사실 개발한지는 10일 정도가 지났습니다. 그리고 개발하면서 새로 배운 내용을 이 블로그에서 정리하며 진행하려 했지만 생각보다 개발 진도가 블로그에 포스트 하는 진도보다 차이가 많이 나기 시작하고 조금이나 간단하게 개발일지를 적는 것이 좋을 것 같아 꽤 개발이 진행되었음에도 조금씩 포스트를 올려 보려고 합니다.
처음 RTOS를 개발하려고 했던 것은 아니였습니다. 단순히 라즈베리파이에서 Bare metal환경으로 GPIO를 제어하는 유투브 영상과 " 임베디드 OS 개발 프로젝트"라는 책을 보면서 현재 가지고 있는 라즈베리파이4에 navilos를 이식(Porting) 해볼까하는 호기심으로 시작한 프로젝트입니다.
2. 지금까지의 역경
하지만, 생각보다 많은 역경이 있었습니다. 먼저 라즈베리파이4의 아키텍쳐는 aarch64를 사용하는 ARMv8-a 아키텍쳐 입니다. 하지만 책이나 유투브 영상에서는 aarch32을 사용하는 아키텍쳐이므로 어셈블리의 명령어 및 레지스터의 이름조차도 전혀 달랐습니다. 그러므로 데이터시트를 확인하면서 aarch32 기반의 예제를 aarch64의 ARMv8-a으로 고치는 노가다를 하게 되었습니다.
또, 하나의 역경은 제 욕심에 의해 발생하였습니다. 저는 bare metal 환경에서 UART로 디버깅하기 위해 printf을 직접 구현한는 것보다 외부 라이브러리을 사용하고자 하였습니다. 그러던중 newlib이라는 프로젝트에 아주 적합한 라이브러리를 찾게 되었지만 해당 라이브러리를 사용시 프로그램이 멈춰버리는 상황이 발생하여 갖같은 방법을 동원하여 고쳐보려고 하였지만 실패하고 그렇게 하루를 날리게 되었습니다.
3. 지금 진행 상황
그 2가지 역경 이후 지금까지는 막히는 부분이 없이 순조롭게 개발을 이어 나가고 있습니다. 현재 Peripheral는 GPIO, UART, Interrupt 까지 구현하였으며 특히 UART에서 Rx 인터럽를 사용하여 데이터를 echo하는 프로그램까지 정상적으로 개발을 완료 하였습니다. 이제 앞으로 Timer peripheral만 구현한다면 기본적인 peripheral은 구현 완료한 셈입니다. Timer 까지 개발을 완료한다면 정확한 1초 마다 "Hello world"를 출력하는 예제를 실행해볼 예정입니다.
지금 현재 상황은 프로젝트를 리팩토링(Refactoring)하는 중입니다. 여러가지 Peripheral를 개발하면서 단조로운 프로젝트의 구조로는 한계를 맞하였습니다. 또한 앞으로 Peripheral 뿐만이 아니라 여러가지 개발 보드(ex. realview-pb-a8, BeagleBone Black 등)를 지원하기 위한 기능과 다양한 ARM 아키텍쳐를 지원하는 기능 더 나아가 HAL(Hardware Abstract Layer)를 추가할 필요가 생겼습니다. 지금까지 HAL 을 추가 완료하였으며 각 Peripheral를 HAL에 연결하고 동작을 확인하고 있습니다. 이로 인해 앞으로 어떠한 기능을 추가하더라도 문제가 없을 것으로 생각하지만 다시 프로젝트의 크기가 너무 커진다면 다시 리펙토링을 해야할 때가 올 것입니다.
다음은 Makefile의 간소화가 필요할 것으로 생각 됩니다. 너무 많은 폴더 너무 많은 코드는 현재의 Makefile로 감당하기에 너무 복잡하게 되었습니다. Makefile를 분산하여 좀더 보기 쉽고 간소화한 필드 과정이 필요하다고 판단됩니다.
'Project > RTOS 개발' 카테고리의 다른 글
[RTOS 개발] 새로운 개발보드(Realview-PB-A8) 추가 (2) | 2025.07.26 |
---|---|
[RTOS 개발] 리펙토링을 통해 프로젝트의 기본적이 구조 구성 완료 (4) | 2025.07.23 |