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

Embedded System 52

[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..

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

일반적으로 프로세스 끼리는 서로 독립된 메모리 공간을 사용한다. 따라서 프로세스끼리는 서로의 영역을 침범할 수 없다.ㅤㅤ프로그램을 설계하다보면 여러 프로세스가 서로에게 정보나 신호를 주고받아야하는 상황이 온다. A 에서 처리한 결과가 B 에게 전달되어야 한다거나, 혹은 A와 B가 동시에 작업을 시작하거나 작업의 우선순위가 있을 수 있다. 이러한 상황에서 프로세스 간의 통신 (IPC, Inter-Process Communication)이 필요하다.ㅤㅤ이번 아티클에서는 기본으로 사용하는 파일 기반의 IPC, 산업적인 니즈에 따라 나온 System V IPC, 그리고 여기에 대해 개선된 POSIX 기반의 IPC에 대해서 차례대로 소개해보려 한다.ㅤㅤ우선 파일을 거쳐 데이터를 주고받는 기본적인 형태의 IPC 에..

[Embedded Linux] Linux 시그널

시그널이란?시그널은 프로세스에게 특정한 이벤트가 발생했음을 알려주는 비동기 알림(Asynchronous Notification)이다. 커널이나 다른 프로세스에서 특정 프로세스에게 신호를 보낼 수 있다. 이를 통해 프로세스의 정상적인 실행 흐름을 중단하고 잠시 시그널에 대한 처리를 하도록 할 수 있다.ㅤ이게 왜 필요하나면프로세스가 뭘 하고있든 상관없이 실행 중간에 특정 코드를 처리하도록 만들 수 있다. 무한루프에 빠져있던 프로세스를 멈추기 위해서 시그널을 보내 잠시 무한루프를 빠져나와 프로세스를 종료하는 코드를 실행하도록 하는 등에 사용할 수 있다.ㅤ시그널의 전달과 처리 과정시그널에서 유의할 점은 비동기 라는 것. 시그널의 발생과 함께 핸들러가 무조건 바로 즉시 호출되지는 않는다.ㅤ1. 시그널 발생시그널은..

[Embedded Linux] 리눅스의 프로세스 타파

프로세스가 무엇이냐리눅스의 프로세스는 현재 실행중인 프로그램을 말한다. 정확히는 실행중인 프로그램의 인스턴스를 칭하는 말. 프로그램은 단순히 코드와 데이터의 집합이자 파일일 뿐이다. 같은 프로그램이라도 여러 개가 동시에 실행될 수 있고, 이들을 각각 프로세스라고 부른다.ㅤ리눅스에서의 프로세스는 다음의 특징을 갖는다.독립적 실행 단위 : 파일이 메모리에 로드되어서 CPU에 의해 실제로 실행되는 동적인 상태고유한 자원 : OS로부터 할당받는 고유한 주소 공간, 스택, 레지스터, 파일 핸들 등의 자원을 가진다. 다른 프로세스는 이 프로세스의 공간을 침범하지 못한다.Process ID : 각 프로세스는 시스템 내에서 할당받는 유일하고 고유한 번호를 가진다.ㅤtest 라는 실행파일을 백그라운드로 여러 번 실행시켜..

[Embedded Linux] 라즈베리파이의 부팅

라즈베리 파이의 부팅 과정 (간단 version)파워 온! → GPU가 먼저 켜진다. (CPU는 죽어있는 상태)1단계 부트로더 (ROM) : GPU가 이걸 ROM에서 실행. 이 단계에서 SD Card에서 2단계 부트로더를 찾음2단계 부트로더 (bootcode.bin) : SDRAM의 활성화. 이 단계에서 RAM에 3단계 부트로더를 로드3단계 부트로더 (start.elf) : GPU Firmware로 동작하며, 커널 이미지를 읽어옴커널 부팅 준비 (start.elf) : 시스템 설정을 읽고, 커널 이미지 로드 + CPU에게 제어권 넘기기커널 부팅 시작 : 리눅스 커널이 CPU에서 실행되기 시작ㅤㅤ라즈베리 파이는 GPU가 주도권을 가지고 부팅을 시작한다.단계별로 나눠둔 이유? 각 단계마다 필요로 하는 메모리..

[Embedded Linux] Linux 커널 아키텍처

리눅스의 커널은 Monolithic리눅스의 커널은 기본적으로 Monolithic 구조이다. 그러나 유연성을 위해서 커널 모듈을 적극적으로 사용하고 있다.ㅤㅤ리눅스가 사용하는 Monolithic 커널이란 다음의 특징을 가진다.하나의 거대한 커널 공간에 모든 핵심적인 서비스가 포함되어 실행된다.커널 컴포넌트간에 직접 서로 함수를 호출할 수 있어, 오버헤드가 적어 좋은 성능을 가진다.단, 커널의 크기가 매우 크고 복잡하다. (기존에는) 새로운 기능이 추가되거나 기능 수정을 위해서는 전체 커널을 새로 컴파일해서 사용해야했다.ㅤㅤMonolithic 구조의 단점들을 해결하기 위해서 리눅스는 모듈식 설계(Loadable Kernel Module, LKM)를 적용한다.장치 드라이버, 파일 시스템같은 기능들은 필요할 때..

[Embedded Linux] 시스템콜 함수가 호출되면 아래에선 무슨일이 일어나나

리눅스 기본에 대해서 공부하면서 리눅스가 커널을 기준으로 위아래가 분리된 아키텍처로 구성되어 있다는 것을 파악했다. 그리고 유저 프로세스에서는 직접 하드웨어나 자원을 건드리지 못하고, 커널에게 시스템콜을 요청해서 자원에 액션을 취할 수 있다는 것까지 파악했다. 이런건 이제 아주 명쾌하지!ㅤ그 과정에서 혹시 이 코드를 내가 따라가볼 수 있나 궁금해서 열어봤다가, 작게 하나의 소제목으로 넣으려고 했던 내용이 너무 길어지는 것 같아서 아예 새로운 글로 빼버렸다.ㅤㅤ그렇다면 내가 C로 작성한 실행파일에서 실제로 이 시스템콜 호출 함수를 사용했을 때, 내려가는 과정을 볼 수 있을까? 가 궁금해서 한 번 따라가봤다.ㅤUser Process인 C 파일부터 시작사용자 쪽에서 아래 코드로 작성된 프로그램을 실행했다고 하..