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

Embedded System/Embedded Linux 17

[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만원 정도 생각했던 나에게는 심히 당황..

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

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

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

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

[Embedded Linux] 프로세스간 통신 IPC - POSIX 기반의 IPC

일반적으로 프로세스 끼리는 서로 독립된 메모리 공간을 사용한다. 따라서 프로세스끼리는 서로의 영역을 침범할 수 없다.ㅤㅤ프로그램을 설계하다보면 여러 프로세스가 서로에게 정보나 신호를 주고받아야하는 상황이 온다. A 에서 처리한 결과가 B 에게 전달되어야 한다거나, 혹은 A와 B가 동시에 작업을 시작하거나 작업의 우선순위가 있을 수 있다. 이러한 상황에서 프로세스 간의 통신 (IPC, Inter-Process Communication)이 필요하다. 가장 기본이 되는 파일을 이용한 IPC(파이프, FIFO, Socket)가 궁금하다면 이 글을 읽어보자.또, 그 다음 제시된 산업적인 니즈 충족을 위한 System V의 IPC(메시지 큐, 세마포어, 공유 메모리)가 궁금하다면 이 글을 읽어보자. POSIX의 I..

[Embedded Linux] 프로세스간 통신 IPC - System V 기반의 IPC

일반적으로 프로세스 끼리는 서로 독립된 메모리 공간을 사용한다. 따라서 프로세스끼리는 서로의 영역을 침범할 수 없다.ㅤㅤ프로그램을 설계하다보면 여러 프로세스가 서로에게 정보나 신호를 주고받아야하는 상황이 온다. A 에서 처리한 결과가 B 에게 전달되어야 한다거나, 혹은 A와 B가 동시에 작업을 시작하거나 작업의 우선순위가 있을 수 있다. 이러한 상황에서 프로세스 간의 통신 (IPC, Inter-Process Communication)이 필요하다.ㅤㅤ가장 기본이 되는 파일을 이용한 IPC(파이프, FIFO, Socket)가 궁금하다면 이 글을 읽어보자.ㅤSystem V 의 IPCUNIX가 실제 산업 환경에서 쓰이기 시작하면서, 여러가지 요구사항이 추가되기 시작했다. 이 니즈를 충족시키기 위해 새로운 IPC..