임베디드 Linux 시스템 요약
본 시리즈는 임베디드 Linux 학습 및 개발 과정에서 적용되는 기술들을 정리한 것입니다. 기능별로 SDK 플랫폼 구축, 임베디드 Linux 운영 플랫폼 구축, 드라이버 개발 기술, 그리고 애플리케이션 개발 기술로 분류했으며, 임베디드 Linux 개발의 주요 기술들을 포함하고 있습니다.
📑 SDK 플랫폼 구축: Linux 시스템 설치(Ubuntu, Arch Linux, centos 등), 소프트웨어 및 지원 라이브러리 설치, 크로스 컴파일, shell 문법, 그리고 빠른 배포 SDK 솔루션 기술을 포함합니다.
📑 임베디드 Linux 운영 플랫폼 구축: u-boot 포팅 및 프레임워크, kernel 포팅 및 프레임워크, rootfs 파일 시스템 구축 방법, qemu 실습 가상 머신으로 Linux 플랫폼 구동 등을 포함합니다.
📑 드라이버 개발 기술: Linux 커널 드라이버 인터페이스, 장치 트리(Device Tree) 문법과 장치 트리 인터페이스, 문자 장치(Character Device), 블록 장치(Block Device), 네트워크 장치 등의 구현을 포함합니다.
📑 애플리케이션 개발 기술: Linux 애플리케이션 계층 인터페이스, C/C++ 애플리케이션 개발, Linux 플랫폼 디버깅 방법, Linux 플랫폼 GUI 개발 기술 및 Web 애플리케이션 개발 등을 포함합니다.
본 시리즈는 지식 포인트가 매우 많으며 개인적인 실습과 이해를 바탕으로 하기에 누락이나 부족한 부분이 있을 수 있습니다. 여러분의 비판과 지적을 환영합니다.
궁금한 점이 있다면 issue를 제기하거나 **위챗: "sxc123456zc"**로 연락하여 논의할 수 있으며, 더 많은 자료 공유는 위챗 공식 계정: <임베디드 기술 요약>을 팔로우해 주세요.
목차는 다음과 같습니다.
ch00. 서론
설명
본 시리즈는 난이도 순서가 아닌, 완전한 임베디드 Linux 제품 애플리케이션을 구축하는 개발 프로세스에 따라 내용을 설명합니다.
⚠️ 주의: 학습 중 어려운 부분이 있다면 건너뛰고 다음 학습으로 진행해도 됩니다. 쉬운 것부터 시작하여 기초 지식을 익힌 후 진행하는 것이 더 효율적일 수 있습니다.
임베디드 Linux는 제품 개발에 사용되는 기술이므로, 문서만으로는 충분하지 않습니다. 실제 하드웨어 플랫폼에서 디버깅 및 검증을 하고, 소스 코드를 이해하며, 직접 애플리케이션을 설계하고 개발해야 깊이 있게 이해하고 숙달할 수 있습니다.
본 시리즈의 내용이 광범위하여 분량상의 한계로 인해 일부 기술만 얕게 다룰 수밖에 없습니다. 각 장을 설명할 때 제가 정리하거나 개발하면서 참고했던 서적들을 함께 안내할 것이니, 이를 병행 학습하는 것을 권장합니다.
# github 주소
git clone https://github.com/zc110747/build_embed_linux_system.git
또한 본 프로젝트는 제품 애플리케이션 프로젝트와 연계하여 관련 기술 지식을 검증하는 데 사용되며, 구체적인 내용은 다음과 같습니다.
# 이 문서를 보조하는 임베디드 Linux 애플리케이션 프로젝트를 위한 클론 명령어
git clone http://github.com/zc110747/remote_manage.git
학습 로드맵
step-1: Linux 플랫폼 설치 및 숙지
주요 목표:
- Linux 시스템을 설치하고 기본 명령 조작에 익숙해지는 것
- Linux 환경에서 소프트웨어 설치 방법(apt-get 또는 yum)과 효율성 도구 적용 방법을 습득하는 것
- 환경 변수의 기본 개념과 크로스 컴파일의 기초를 이해하는 것
주요 내용:
- 가상 머신 사용 및 Linux 시스템 설치
- 자주 사용하는 명령어 숙지(cd, mv, cp, echo, rm, chmod 등)
- 자주 사용하는 소프트웨어 검색, 설치 및 적용(ssh, tftp, nfs, samba 등)
- gcc와 Makefile을 사용하여 애플리케이션을 구축할 수 있는 능력
step-2: 포팅된 소스 코드를 기반으로 임베디드 Linux 플랫폼 구축
주요 목표:
- 임베디드 Linux 시스템 구축을 완료하고 하드웨어에 실제로 구동하는 것
- U-Boot와 Linux 환경에서의 환경 변수 매개변수 및 명령어 조작에 익숙해지는 것
- 드라이버의 프레임워크를 이해하고 참고 예제를 통해 캐릭터 장치 드라이버를 구현하는 것
- 디바이스 트리(Device Tree) 개념을 처리하고 이해하며, 이를 드라이버 개발에 적용하는 것
주요 내용:
- U-Boot, Kernel 및 rootfs의 기본 개념 숙지
- menuconfig 설정 수정 방법 및 Makefile 컴파일 습득
- 최소한 한 가지 칩셋의 다운로드/업데이트 방법 숙지(sdcard, tftp, nfs 등 포함)
- 최소한 한 가지 파일 시스템의 컴파일 구축 과정 시도(busybox, buildroot, yocto, Debian, ubuntu 또는 android)
- U-Boot와 Linux 플랫폼의 주요 환경 변수 및 시스템 명령어 습득
- 참고 소스 코드를 기반으로 캐릭터 장치 드라이버를 구현하고, 드라이버 로드, 제거, 장치 생성 과정을 완료하는 것
step3: 임베디드 Linux 애플리케이션 기초 개발
주요 목표:
- Linux 플랫폼에서 애플리케이션의 일반적인 인터페이스를 습득하는 것
- 임베디드 Linux 애플리케이션을 구축하고, 모듈화 및 Makefile 기반으로 빌드할 수 있는 능력
- 일반 소프트웨어와 라이브러리의 크로스 컴파일 방법과 애플리케이션 지원 추가 방법을 습득하는 것
- Linux 플랫폼에서의 코드 디버깅 능력을 습득하는 것
- C++를 기반으로 Linux 플랫폼 애플리케이션 개발을 하는 것
주요 내용:
- Linux 애플리케이션 레이어 API 인터페이스 숙지
- Makefile 문법 및 프로젝트 구축 방법
- gcc를 기반으로 Linux 플랫폼 애플리케이션 구현
- Linux 플랫폼에서의 라이브러리 크로스 컴파일 및 적용(json, mqtt, asio, fmt 등)
step-4: 임베디드 드라이버 개발 심화 학습
주요 목표:
- Linux 주요 드라이버의 개발 방법과 커널이 제공하는 인터페이스를 습득하는 것
- 코어(core), 클럭(clock), 주변 장치(peripheral) 등을 포함한 SoC 구조를 이해하는 것
- 인터럽트 메커니즘을 이해하고, 커널에서 자주 사용되는 인터럽트 관련 인터페이스 사용법을 숙달하는 것
- 대부분의 캐릭터 장치 드라이버를 구현할 수 있고, 주요 하드웨어 프레임워크의 드라이버 개발 방법을 습득하는 것
- 일반적인 서브시스템을 기반으로 드라이버를 개발할 수 있는 능력
- 동시성 제어(concurrency control) 관련 인터페이스 적용법을 숙달하는 것
주요 내용:
- Linux 커널 인터페이스 기능 및 사용 설명
- Linux 커널 동시성 제어 인터페이스 설명
- 인터럽트 메커니즘 및 관련 인터페이스 구현
- Cortex-A 칩 설계 및 커널 리소스 설명
- spi, i2c 프레임워크 기반의 드라이버 개발
- iio, rtc 서브시스템 기반의 드라이버 개발
단계 5: 임베디드 Linux 플랫폼 애플리케이션 솔루션 구축
주요 목표:
- APP 기능 프레임워크 구축 및 코드 구현
- Qt C++ 기반의 애플리케이션 구현 실현
- node와 vue를 기반으로 한 웹 애플리케이션 구축
- 시스템 빠른 배포 및 컴파일 명령어 구현
주요 내용:
- 애플리케이션 요구사항 분석, APP 기능 프레임워크 구현, 모듈 분해
- Qt C++ 기반의 방법론 구현
- node와 vue를 기반으로 한 프런트엔드 및 백엔드 프레임워크 구현
- 쉘(shell) 문법 숙달을 바탕으로 빠른 배포 솔루션 구축
- 프린팅 또는 gdb를 이용한 디버깅 방법 학습
확장: 칩 bringup 및 Linux 시스템 플랫폼 숙지
주요 목표:
- 블록 장치(block device) 및 네트워크 장치 드라이버 개발 숙지
- DRM 프레임워크 기반의 드라이버 개발 실현
- U-Boot 포팅, U-Boot 실행 흐름 이해
- 커널(Kernel) 포팅 과정, Kernel 실행 흐름 이해
- 최소 한 가지 칩의 bringup 전체 프로세스 완료
- 파일 시스템 구축 지원 (busybox, debian, ubuntu 및 android)
- qemu 기반의 시뮬레이션 환경으로 시스템 구축
주요 내용:
- 블록 장치 및 네트워크 장치 드라이버
- DRM 프레임워크 드라이버 장치 개발
- U-Boot 포팅 방법
- U-Boot 실행 흐름 분석
- 커널 포팅 방법
- Kernel 실행 흐름 분석
- 파일 시스템 포팅 및 구축 방법
- qemu 가상 머신을 이용한 임베디드 Linux 시스템 구동 시뮬레이션