코스 개요

소개

  • 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) 라이선스 하에 제공됩니다.

요건

  • GNU/Linux 시스템을 일반 사용자로서 기본적으로 다룰 수 있는 능력
  • 명령줄 쉘을 기본적으로 사용할 수 있는 능력
  • 사용자 공간/응용 프로그램 개발에 대한 기본적인 지식
  • 중급 C 프로그래밍 지식
  • Embedded GNU/Linux Systems Architecture 과정을 수강한 적이 있어야 합니다 (강력히 추천!) 또는 해당 주제에 대한 충분한 이해가 필요합니다.
 35 시간

참가자 수


참가자당 가격

회원 평가 (5)

예정된 코스

관련 카테고리