Computer Science
탄탄한 기반 실력을 위한
전공과 이론 지식 모음
Today I Learned!
배웠으면 기록을 해야지
TIL 사진
Flutter 사진
Flutter로 모바일까지
거꾸로캠퍼스 코딩랩 Flutter 앱개발 강사
스파르타코딩클럽 즉문즉답 튜터
카카오테크캠퍼스 3기 학습코치
프로필 사진
박성민
임베디드 세계에
발을 들인 박치기 공룡
임베디드 사진
EMBEDDED SYSTEM
임베디드 SW와 HW, 이론부터 실전까지
ALGORITHM
알고리즘 해결 전략 기록
🎓
CAU 소프트웨어학부
텔레칩스 차량용 임베디드 스쿨 3기
애플 개발자 아카데미 1기
깃허브 사진
GitHub
프로젝트 모아보기
Instagram
인스타그램 사진

Embedded System 60

[Embedded Linux] BeagleBone Black의 부팅과정 (2) - Secondary Program Loader

들어가며BeagleBone Black의 부팅 시퀀스를 살펴보는 과정에서 생각보다 글이 길어지는 것 같아서 시리즈로 쪼개어봤다. 이번에 살펴볼 내용은 Secondary Program Loader이다.ㅤㅤ우선 큰 그림부터사용자 서비스가 올라올 때 까지 무슨 일이 일어나는지를 한 번 보자.전원을 공급한다보드에 내장된 ROM Boot Loader를 실행한다이때 어떤 장치에서 부팅할 지 결정함Secondary Program Loader를 SRAM으로 옮김SPL으로 Jump!SRAM에 올라온 Secondary Program Loader를 실행한다RAM(메인메모리)을 초기화하는 역할U-Boot 이미지를 RAM에 올림U-Boot 로 Jump!RAM에 올라온 U-Boot를 실행한다페리퍼럴들을 초기화커널 로드 / 디바이스..

[Embedded Linux] BeagleBone Black의 부팅과정 (1) - ROM Boot Loader

들어가며이전에 포스팅한 글에서 BeagleBone Black의 부팅 시 예상과 다르게 SD카드로 부팅되는 문제의 원인을 찾기 위해서 ROM Boot Loader 부터 시작해서 U-Boot로 넘어가는 부팅 로직을 확인했다. 이 과정이 꽤나 도움이 되는 부분이라고 생각이 들어서, 아예 SPL과 U-Boot 쪽도 쭉 살펴보면서 커널을 올리고 루트파일시스템이 탑재되면서 OS가 시작되는 과정을 살펴보려고 한다. 출발!ㅤ우선 큰 그림부터사용자 서비스가 올라올 때 까지 무슨 일이 일어나는지를 한 번 보자.전원을 공급한다보드에 내장된 ROM Boot Loader를 실행한다이때 어떤 장치에서 부팅할 지 결정함Secondary Program Loader를 SRAM으로 옮김SPL으로 Jump!SRAM에 올라온 Seconda..

[Embedded Linux] BeagleBone Black에서 왜 BOOT 버튼을 안눌러도 SD카드로 바로 부팅이 될까

요약분명 메뉴얼에는 비글본 블랙에서 BOOT 버튼을 누른 채로 켜면 SD카드로, 버튼을 안누르면 eMMC로 부팅이 된다고 되어있다. 그런데 막상 둘 다 시도해보면 모두 SD카드에 있는 OS로 부팅이 됐다. (도대체 왜)ㅤ그리고 그 이유를 찾아냈는데, 생각치 못한 곳에 있었다. 부팅 단계별로 진행을 살펴보면 다음과 같다.ㅤ먼저 1단계, 보드에 내장되어있는 ROM Boot Loader (RBL)를 실행하면서 부팅을 시작한다. RBL은 커널을 실행하기 위해 필요한 U-Boot를 실행하기 위한 준비를 위해서, MLO를 RAM에 올리고 실행할 준비를 해야한다. (ㅋㅋ) 이때 BOOT 버튼의 누름 여부에 따라 SYSBOOT 값이 달라져서 MLO 를 가져오는 위치가 달라진다. 이게 메뉴얼에 작성되어 있는대로 eMMC..

[Embedded Linux] M1 Mac에서 비글본 블랙 SSH 연결하기

ㅤ라즈베라파이, TOPST D3 에서 리눅스 개발을 할 때 사용했던 것처럼, VSCode에서 보드에 SSH로 접속해서 개발을 하고자 한다. 기본적인 설정 및 연결을 위한 방법들을 확인하는 과정과 해결 방법을 기록했다.ㅤ우선, 이렇게 하면 안되더라[지금 LAN 케이블로 맥북과 비글본 블랙 보드를 연결해둔 상태이다. USB C to LAN 어댑터를 사용해줬다.]그러면 아래처럼 설정 > 네트워크 탭에 ‘USB 10/100 LAN’와 ‘~_BeagleBone_Black’ 이라는 항목이 생긴다.ㅤ나는 이름만 보고서 BBB 보드의 이름을 가지고 있는 항목을 확인하고, 그 안에 IP 주소를 갖다가 SSH 연결에 사용하면 될거라 생각했다.ㅤ그래서 요 IP 주소를 내 username이랑 붙여서 연결을 시도했다.ㅤ물론 결..

[Embedded Linux] M1 Mac에서의 비글본 블랙 부팅하기

0. 자료 찾아보기https://docs.beagle.cc/intro/beagle101/index.html#getting-started-with-linux비글보드의 공식 introduction 페이지. 위 페이지에서 비글본에 대한 기본적인 가이드를 확인할 수 있다.ㅤ1. 케이블 연결컴퓨터와 비글본 보드를 동봉된 케이블을 이용해 연결해준다. 기본적으로 PC와의 연결을 mini-B USB를 이용해야하고, 보드와 함께 USB A to Mini-B를 제공해주고 있기 때문에, USB A to C 허브를 사용해 맥북과 연결해주었다.ㅤ2. Finder에서 비글본 연결 확인하기그러면 보드에 전원이 들어오면서 파란색 LED들이 깜빡이고, 이렇게 Finder 에서 외장 연결로 BEAGLEBONE 이라는 연결이 뜨는 것을 ..

[Embedded Linux] 독학용 리눅스 개발 보드 고르기, BeagleBone Black

들어가며이번에 프로젝트를 진행하면서 리눅스의 부팅 과정, 시스템 콜에 대한 추적, 다비아스 드라이버나 모듈 등을 마구마구 열어보고 분해분석하면서 내 것으로 만들지 못한게 너무너무 아쉬웠다. 1차 프로젝트 때는 라즈베리파이 위에서 리눅스 개발과 공부를 진행했었기 때문에, 그래서 라즈베리파이를 하나 사서 여기에다가 호작질을 하면서 공부를 하려고 계획하고 있었다. 그래서 설날을 맞이하여 바로 사이트에서 검색해봤다.ㅤ그런데 짜잔, 라즈베리파이가 한 7만원 정도 할거라고 생각했는데, 생각보다 비쌌다. 여기에 부가적으로 전원 케이블이나 UART 시리얼 디버거 등을 추가하면 더 많이 비싸질테니 (라즈베리파이에 여러 센서 부품까지 포함된 키트는 심지어 18만원이였다) 다 합해서 8만원 정도 생각했던 나에게는 심히 당황..

[MCU] MCP2515 SPI2CAN 모듈은 개발보드에 따라 허리를 끊고 별도 Vcc를 인가해줘야한다 (아닐 수 있음)

아주 특이한 트러블슈팅 사례가 있었다.이 SPI2CAN 모듈을 사용하면 CAN Controller가 없는 보드에서도 SPI 통신을 통해서 모듈에 있는 CAN Controller에 접근하고, Transciver 의 역할까지 수행해서 CAN 버스에 메시지를 보내고 받을 수 있게된다. 우리의 보드에서는 CAN Controller 핀이 있긴 하지만, 내부 드라이버에 CAN이 구현이 되어있지 않아서 (정확히는 수신 과정에서 문제가 있어서) SPI2CAN 모듈을 사용해 개발을 진행하고 있었다. 그런데 간헐적으로 통신이 되는, 또는 간헐적으로 통신이 안되는 문제가 자주 발생했다. 흠... 우선 디버깅 환경을 CAN 메시지를 정상적으로 쏘고 있던 STM32 보드에 현재 개발보드의 SPI2CAN 모듈을 물려 진행하였다...

Embedded System/MCU 2026.02.08

[MCU] CAN 통신 - 빠른 고속 CAN vs 안전한 저속 CAN

CAN 통신이란?CAN 통신(Controller Area Network)은 여러 ECU 장치들이 마스터(중앙 제어 Host) 없이 서로 통신하기 위해서 설계된 메시지 기반의 표준 통신 규격이다. = Non-Host 버스 방식의 메시지 기반 프로토콜ㅤ이름이 Controller Area Network 인 이유는 ECU Controller 끼리 통신하도록 구성된 네트워크이기 때문임.ㅤ자동차 산업에서 CAN을 쓰는 이유?자동차 산업이 발전함에 따라서 ECU(Electronic Control Unit)들이 점점 많이 탑재되고있다. 센서 처리나 엔진, 변속기, 차제 제어 등에 사용되는 ECU들간에 서로 데이터나 신호를 주고받기 위해서 통신을 위해서 서로 연결하다보니 배선이 복잡해지고 케이블의 무게와 부피로 차량의 ..

Embedded System/MCU 2025.12.25

[Embedded Linux] 디바이스 드라이버 작성해보기

라즈베리파이에서 디바이스 드라이버 만들어보기!디바이스 드라이버 만들어보기디바이스 트리에 대해서 공부를 하다보니 갑자기 디바이스 드라이버 이야기가 나왔고, 실습을 진행하다가 정신을 차려보니 어느새 내가 GPIO 드라이버를 하나 만들어 커널에 등록하고 GPIO 제어를 하고 있었다. 여기까지 오려고 한 건 아니였는데,,, 그러다보니 글이 길어져서 디바이스 트리 글에서 따로 분리했다! 이것도 파보면 엄청나게 방대한 내용이 있을 것 같아서 두렵긴 하다….ㅤㅤ디바이스 드라이버 소스코드 컴파일~/led_driver 라는 폴더를 하나 만들어주고, 아래 2개의 파일을 추가해보자. 위에 있는 led-gpio.c 파일은 디바이스 드라이버의 소스코드이고, 아래 Makefile 은 이를 빌드하기위한 파일이다.// led-gpi..

[Embedded Linux] Linux의 디바이스 트리

ㅤㅤ이번에 U-Boot에서 시작된 커널의 초기화 및 실행 과정을 쭉 따라가면서 어떤 일들이 일어나는지 찾아봤는데, 그 과정에서 디바이스 트리에 대한 정보(.dtb)를 특정 메모리 위치에 로드해주면서 커널을 실행하는 것을 확인했다. 디바이스 트리가 도대체 무엇이길래! 이렇게나 중요한 커널과 어깨를 나란히 하면서 메모리에 로드되고 커널 초기화 시에 어떤 역할을 하는지 간략하게 찾아봤었는데, 이 녀석은 좀 자주 나오는 키워드 같아서 이 참에 조금 더 자세히 살펴보려고 한다.ㅤㅤ디바이스 트리가 뭐냐!Device Tree 라는건 하드웨어의 구성을 나타내는 데이터 구조이다. 다음의 정보들을 트리 구조로 표현한 것!보드에 연결된 하드웨어 목록각 하드웨어가 매핑된 메모리 주소어떤 인터럽트를 사용하는지어떻게 연결이 되어..