임베디드 리눅스 프로그래밍 완전정복 프랭크 바스케즈 pdf 다운로드를 무료로 제공합니다 임베디드 리눅스를 이용해서 장치를 만들 때 고려할 하드웨어 관련 사항, 툴체인과 부트로더 선택, 커널 구성과 루트 파일 시스템 생성, 빌드 시스템 선택, 플래시 메모리
관련 교재 pdf 모음
책 소개
리눅스(Linux)는 지난 수년간 임베디드 컴퓨팅에서 중추적인 역할을 해왔다. 그럼에도 이 주제를 전반적으로 다루는 책은 지금껏 너무나 적었다. 이 책은 그 ‘결핍’을 해소하고자 만들어졌다. ‘임베디드 리눅스 (embedded Linux)’라는 용어는 잘 정의돼 있지 않지만, 온도조절장치에서부터 Wi-Fi 라우터, 산업용 제어 장치에 이르기까지 광범위한 장치 안에 들어 있는 운영체제에 적용될 수 있다. 하지만 이들은 모두 동일한 기본적인 오픈소스 소프트웨어를 기반으로 만들어졌다. 이것이 내가 엔지니어로서 쌓았던 경험과 교육 과정을 개발하는 과정에서 축적해온 자료를 기반으로 이 책에서 설명하는 기술이다. 기술은 멈춰 있는 법이 없다. 임베디드 컴퓨팅에 기반을 둔 산업은 주류 컴퓨팅과 마찬가지로 무어의 법칙에 민감하다. 무어의 법칙이 암시하는 기하급수적인 성장은 이 책의 1판이 출간된 이래로 놀랍도록 많은 것이 바뀌었음을 뜻한다. 3판은 리눅스 5.4, Yocto 프로젝트 3.1(Dunfell), Buildroot 2020.02 LTS 등 주요 오픈소스 요소들의 최신 버전을 이용하도록 완전히 개정됐다. Autotools 외에도, 최근 들어 많이 채택되는 최신 빌드 시스템 CMake 역시 다룬다.
임베디드 리눅스 프로그래밍 정복
1부. 임베디드 리눅스의 요소
1장. 시작
__리눅스 선택하기
__리눅스를 선택하지 말아야 할 때
__참여 단체들
__프로젝트 생명주기
____임베디드 리눅스의 4요소
__오픈소스
__라이선스
__임베디드 리눅스를 위한 하드웨어 선택하기
__이 책에서 사용하는 하드웨어
____라즈베리 파이 4
____비글본 블랙
____QEMU
__개발 환경
__요약
2장. 툴체인을 배우자
__기술적 요구 사항
__툴체인 소개
____툴체인의 종류
____CPU 아키텍처
____C 라이브러리 고르기
__툴체인 찾기
__crosstool-NG를 이용해 툴체인 빌드하기
____crosstool-NG 설치
____비글본 블랙용 툴체인 빌드
____QEMU용 툴체인 빌드
__툴체인의 구조
____크로스 컴파일러를 알아보자
____sysroot, 라이브러리, 헤더 파일
____툴체인 안의 다른 도구들
____C 라이브러리의 요소를 살펴보자
__라이브러리와 링크하기: 정적 링크와 동적 링크
____정적 라이브러리
____공유 라이브러리
__크로스 컴파일 기술
____단순 makefile
____Autotools
____패키지 구성
____크로스 컴파일 관련 문제
____CMake
__요약
__추가 자료
3장. 부트로더에 대한 모든 것
__기술적 요구 사항
__부트로더는 무슨 일을 하는가?
__부트 순서
____1단계: 롬 코드
____2단계: SPL
____3단계: TPL
__부트로더에서 커널로 이동
__장치 트리 소개
____장치 트리 기초
____reg 프로퍼티
____레이블과 인터럽트
____장치 트리 인클루드 파일
____장치 트리 컴파일하기
__U-Boot
____U-Boot 빌드하기
____U-Boot 설치하기
____U-Boot 사용하기
____리눅스 부팅
____U-Boot를 새로운 보드에 이식하기
____빌드와 테스트
____팔콘 모드
__요약
4장. 커널 구성과 빌드
__기술적 요구 사항
__커널은 무엇을 하는가?
__커널 선택하기
____커널 개발 주기
____안정적 장기 지원 릴리스
__커널 빌드하기
____소스 구하기
____커널 구성 이해하기: Kconfig
____LOCALVERSION을 이용해 커널 식별하기
____언제 커널 모듈을 사용하는가?
__컴파일하기: Kbuild
____어떤 커널 이미지를 컴파일할지 알아내기
____빌드 아티팩트
____장치 트리 컴파일하기
____모듈 컴파일하기
____커널 소스 청소하기
____라즈베리 파이 4용 64비트 커널 빌드하기
____비글본 블랙용 커널 빌드하기
____QEMU용 커널 빌드하기
__커널 부팅하기
____라즈베리 파이 4 부팅하기
____비글본 블랙 부팅하기
____QEMU 부팅하기
____커널 패닉
____초기 사용자 공간
____커널 메시지
____커널 명령줄
__리눅스를 새 보드에 이식하기
____새로운 장치 트리
____보드의 compatible 프로퍼티 설정하기
__요약
__추가 자료
5장. 루트 파일시스템 만들기
__기술적 요구 사항
__루트 파일시스템에는 무엇이 있어야 하는가?
____디렉터리 레이아웃
____스테이징 디렉터리
____POSIX 파일 접근 권한
____스테이징 디렉터리의 파일 소유권과 권한
____루트 파일시스템용 프로그램
____루트 파일시스템용 라이브러리
____장치 노드
____proc과 sysfs 파일시스템
____커널 모듈
__루트 파일시스템을 타깃으로 전송하기
__부트 initramfs 만들기
____단독형 initramfs
____initramfs 부팅하기
____QEMU로 부팅하기
____비글본 블랙 부팅하기
____initramfs를 커널 이미지에 넣기
____장치 테이블을 이용해 initramfs 빌드하기
____오래된 initrd 형식
__init 프로그램
____데몬 프로세스 시작하기
__사용자 계정 구성하기
____루트 파일시스템에 사용자 계정 추가하기
__장치 노드를 관리하는 더 좋은 방법
____devtmpfs를 사용하는 예
____mdev를 사용하는 예
____결국 정적 장치 노드는 그렇게 나쁜 것인가?
__네트워크 구성하기
____glibc용 네트워크 요소
__장치 테이블을 이용해 파일시스템 이미지 만들기
____비글본 블랙 부팅하기
____NFS를 이용해 루트 파일시스템 마운트하기
____QEMU로 테스트하기
__비글본 블랙으로 테스트하기
__파일 권한 문제
__TFTP를 이용해 커널 로드하기
__요약
__추가 자료
6장. 빌드 시스템 선택하기
__기술적 요구 사항
__빌드 시스템 비교
__바이너리 배포
__Buildroot 소개
____배경
____안정 버전 릴리스 및 장기간 지원 버전
____설치
____구성
____실행
____실제 하드웨어에 타기팅
____커스텀 BSP 생성
____자신의 코드 추가
____라이선스 준수
__Yocto 프로젝트 소개
____배경
____안정적인 릴리스와 지원
____Yocto 프로젝트 설치
____설정
____빌드
____QEMU 타킷 실행
____레이어
____local.conf를 통한 이미지 커스터마이징
____이미지 레시피 쓰기
____SDK생성
____라이선스 검사
__요약
__추가 자료
7장. Yocto를 이용한 개발
__기술적 요구 사항
__기존 BSP 위에서 빌드
____기존 BSP를 빌드
____Wi-Fi 제어
____블루투스 제어
____커스텀 레이어 추가
__devtool로 변경 사항 캡처
____개발 워크플로
____새로운 레시피 생성
____레시피로 빌드된 소스 수정
____레시피를 최신 버전으로 업그레이드
__나만의 배포판 빌드
____할 때와 하지 말아야 할 때
____새로운 배포 레이어 생성
____배포판 환경 설정
____배포판에 더 많은 레시피 추가
____런터임 패키지 관리
__원격 패키지 서버 프로비저닝
__요약
__추가 자료
8장. Yocto의 내부를 살펴보자
__기술적 요구 사항
__Yocto의 아키텍처와 워크플로 분석
____메타데이터
____빌드 태스크
____이미지 생성
__메타데이터를 레이어로 분리
__빌드 실패에 대한 문제 해결
____오류 격리하기
____환경 설정 덤프
____태스크 로그 읽기
____더 많은 로깅 추가
____devshell에서 명령 실행
____의존성 그래프 작성
__BitBake 구문과 의미 이해
____태스크
____의존성
____변수
____함수
____RDEPENDS 재확인
__요약
__추가 자료
2부. 시스템 아키텍처와 설계 결정
9장. 저장소 전략 수립
__기술적 요구 사항
__저장소 옵션
____NOR 플래시
____NAND 플래시
__부트로더에서 플래시 메모리 접근하기
____U-Boot와 NOR 플래시
____U-Boot와 NAND 플래시
____U-Boot와 MMC, SD, eMMC
__리눅스에서 플래시 메모리 접근
____MTD
____MMC 블록 드라이버
__플래시 메모리를 위한 파일시스템
____플래시 변환 레이어
__NOR와 NAND 플래시 메모리를 위한 파일시스템
____JFFS2
____YAFFS2
____UBI와 UBIFS
__컨트롤러가 내장된 플래시를 위한 파일시스템
____플래시벤치
____Discard와 TRIM
____ext4
____F2FS
____FAT16/32
__읽기 전용 압축 파일시스템
____SquashFS
__임시 파일시스템
__읽기 전용 루트 파일시스템 만들기
__파일시스템 선택
__요약
__추가 자료
10장. 소프트웨어 업데이트
__기술적 요구 사항
__업데이트는 어디에서 시작하는가?
__무엇을 업데이트해야 하는가?
____부트로더
____커널
____루트 파일시스템
____시스템 애플리케이션
____장치별 데이터
____업데이트가 필요한 컴포넌트
__소프트웨어 업데이트의 기본
____견고한 업데이트
____안전한 업데이트
____업데이트 보안
__업데이트 메커니즘 유형
____시메트릭 이미지 업데이트
____어시메트릭 이미지 업데이트
____원자 파일 업데이트
__OTA 업데이트
__로컬 업데이트 시 Mender 사용하기
____Mender 클라이언트 빌드하기
__업데이트 설치하기
__OTA 업데이트 시 Mender 사용하기
__로컬 업데이트 시 balena 사용하기
____계정 생성하기
____애플리케이션 생성하기
____장치 추가하기
____CLI 설치하기
____프로젝트 푸시하기
__요약
11장. 장치 드라이버 인터페이스
__기술적 요구 사항
__장치 드라이버의 역할
__문자 장치
__블록 장치
__네트워크 장치
__실행 시 드라이버 찾기
____Sysfs에서 정보 가져오기
__적합한 장치 드라이버 찾기
__사용자 공간의 장치 드라이버
____GPIO
____LED
____I2C
____SPI
__커널 장치 드라이버 작성
____캐릭터 드라이버 인터페이스 설계
____장치 드라이버의 구조
____커널 모듈 컴파일하기
____커널 모듈 로딩
__하드웨어 구성 정보 찾기
____장치 트리
____플랫폼 데이터
____장치 드라이버와 하드웨어의 연동
__요약
__추가 자료
12장. 브레이크아웃 보드를 이용한 프로토타이핑
__기술적 요구 사항
__장치 트리의 소스에 회로도 매핑하기
____회로도와 데이터 시트 읽기
____비글본 블랙에 데비안 설치하기
____spidev 활성화하기
____장치 트리 커스터마이징하기
__브레이크아웃 보드를 이용한 프로토타이핑
____SPI 점퍼 닫기
____GNSS 안테나 부착하기
____SPI 헤더 부착하기
____SPI 점퍼 와이어 연결하기
__로직 분석기로 SPI 신호 프로빙하기
__SPI를 통해 NMEA 메시지 수신하기
__요약
__추가 자료
13장. 시스템 구동: init 프로그램
__기술적 요구 사항
__커널 구동 이후
__init 프로그램의 소개
__BusyBox init
____Buildroot init 스크립트
__System V init
____inittab
____init.d 스크립트
____새로운 데몬 추가
____서비스 시작과 종료
__systemd
____Yocto 프로젝트와 Buildroot에서 system 빌드하기
____타깃, 서비스, 유닛의 소개
____Systemd로 시스템을 구동하는 방법
____직접 만든 서비스 추가
____워치독 추가
____임베디드 리눅스에서 중요한 점
__요약
__추가 자료