Course Code: ldd
Duration: 35 hours
Prerequisites:
- GNU/Linux 시스템을 일반 사용자로서 기본적으로 다룰 수 있는 능력
- 명령줄 쉘을 기본적으로 사용할 수 있는 능력
- 사용자 공간/응용 프로그램 개발에 대한 기본적인 지식
- 중급 C 프로그래밍 지식
- Embedded GNU/Linux Systems Architecture 과정을 수강한 적이 있어야 합니다 (강력히 추천!) 또는 해당 주제에 대한 충분한 이해가 필요합니다.
Overview:
설명
이 5일짜리 훈련 과정은 실습과 강의를 결합하여 GNU/Linux 커널 내부와 디바이스 드라이버 개발 개념을 설명합니다. 이 과정은 빠르게 이해하도록 설계되었습니다. 우리는 프로세스, 개념, 명령어 등을 설명하여 GNU/Linux 디바이스 드라이버 작성에 필요한 지식을 이론과 현장 훈련을 통해 제공합니다.
재발명하지 말고 경험이 많은 트레이너로부터 배우세요. 집으로 돌아가면 실제로 활용할 수 있는 실용적인 지식을 얻을 것입니다.
참석 대상
GNU/Linux 디바이스 드라이버 개발이나 평가를 담당하거나 관심이 있는 소프트웨어 엔지니어, 필드 엔지니어, (프로젝트) 매니저, 하드웨어 엔지니어 등을 위한 프로그램입니다.
Course Outline:
소개
- GNU/Linux의 간략한 역사
- 라이선스
- 커널 버전 관리
- 릴리즈 주기
- 커널 트리
- 메인라인
- 커널 대 사용자 공간
- 기제 대 정책
- 커널 드라이버의 대안
- RTOS vs. Linux
메모리 관리
- 가상 메모리와 물리 메모리
- 커널에서의 메모리 할당
- 페이지
- 영역
- API
- 슬래브
커널 패치
- 수명 주기
- git
- 커널 소스 코드
- 패치 생성
- 패치 확인
- 패치 수정
- 패치 전송
- 검토된 코드
커널 모듈
- 커널 소스 코드 얻기
- 구성/빌드/설치
- 디바이스 드라이버 (정적으로 링크, 런타임에 로드)
- 초기화/종료
- 라이선스
- EXPORT_SYMBOL_GPL
- 트리 외부 Makefile
- module-init-tools
- 커널 트리 내 모듈
- Kconfig
- 매개변수 전달
- sparse
문자 드라이버
- 아키텍처
- 사용자/커널 인터페이스
- I/O 서브시스템
- VFS
- sysfs (디바이스, 버스, 드라이버, 클래스)
- kobject/ktype/kset
- Linux 커널 드라이버 모델
- 디바이스 파일
-
문자 드라이버
- 초기화
- 등록
- 열기, 해제
- cdev, cdev add, cdev del,...
- 메이저/마이너 번호
- udev, udevmonitor, udevadm
고급 문자 드라이버 연산
- ioctl
- 잠금 해제된 ioctl
- 호환성 ioctl
- 사용자 공간 API
- 커널 공간 API
- 프로세스 수명 주기
- 대기/차단
- 대기/깨우기
- 대기 큐
- 우박 세례
- poll/select
커널 디버깅
- 디버깅
-
커널 디버깅
- git 이진 검색
- 커널에서의 디버그 지원
- printk, syslogd, klogd, 로그 레벨, 속도 제한, 디버그 레벨, 선택적 서브시스템 디버그
- debugfs 쿼리로 디버깅
- OOPS 디버깅, OOPS 확인
- 마법 SysRq 키
- kgdb/kdb
- JTAG
추적
- gcov
- lcov
- oprofile
-
ftrace
- nop 추적기
- 함수 추적기
- 스케줄 스위치 추적기
- 함수 그래프 추적기
- 동적 추적기
- trace-cmd/kernelshark
- perf
- LTTng
인터럽트
- 인터럽트 vs. 폴링
- 인터럽트
- 프로그램 섹션
- 재진입성
- 이벤트
- 인터럽트 핸들러
- 공유 인터럽트 핸들러
- 인터럽트 흐름
- 인터럽트 제어
작업 연기
- 상단/하단 절반
- 소프트IRQs
- 태스크릿
- 작업 큐
- 스레딩 인터럽트
동시성
- 중요 영역/섹션
- 원자성
- 레이스 조건
- 동기화
- 잠금
- 잠금 해결 방법
- 데드록
- 경합
- 무엇을 잠글 것인가?
-
어떤 것이 사용 가능한가?
- 원자 연산
- 스핀 록
- 읽기-쓰기 스핀 록
- 세마포어
- 이진 세마포어
- 뮤텍스
- 읽기-쓰기 세마포어
- 완료 변수
- 순차적 잠금
- 프리emption 비활성화
- 순서와 장벽
시간
- HZ
- Jiffies
- 큰/작은 지연
- 커널 타이머
하드웨어 I/O
- I/O 포트
- I/O 메모리
- 레지스터 접근 시 사이드 이펙트 처리 방법
사용자-커널 통신
- put(get)_user()
- copy to(from)_user()
- 커널 I/O
- 메모리 매핑
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
포터블성
- 단어 크기
- 불투명한 타입
- 부호/부호 없는 문자
- 데이터 정렬
- 정수 프로모션
- 코드 재사용
- 엔디안성
- 시스템 틱
- 페이지 크기
- 명령어 순서
- SMP/프리emption/높은 메모리
저작권 표시가 없는 경우, 이 내용과 과정 개요는 Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) 라이선스 하에 제공됩니다.
Overview in Category: