디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1 : 라즈베리 파이로 따라하면서 쉽게 이해할 수 있는 리눅스 커널

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1 : 라즈베리 파이로 따라하면서 쉽게 이해할 수 있는 리눅스 커널

$38.61
Description
신입 리눅스 시스템 개발자부터 5년차 개발자가 실무를 하기 위해 알아야 할
리눅스 커널의 주요 서브시스템을 다룹니다!
실전 개발에서 신입 사원 옆에 친절한 선배 개발자가 앉아서 리눅스 커널에 대해 꼼꼼하게 알려주듯, 리눅스 커널을 쉽고 친절하게 설명하는 책입니다. 이 책은 최신 버전(LTS: 4.19)의 리눅스 커널 소스를 함수 흐름을 따라가며 자세히 분석하고 ftrace와 TRACE32 같은 디버깅 툴을 활용해 커널의 동작 원리를 설명합니다. 또한 라즈베리 파이에서 리눅스 커널의 소스코드를 직접 수정해 설치한 다음 커널을 디버깅하는 방법을 다룹니다. 각 장에서 소개하는 커널 디버깅 방법은 실무 개발에 그대로 적용할 수 있습니다.

▣ [1부] 커널 디버깅(ftrace), 프로세스, 인터럽트, 인터럽트 후반부, 워크큐 편
먼저 커널을 디버깅하는 방법과 함께 ftrace 사용법을 소개합니다. 커널을 실행하는 주인공인 프로세스와 인터럽트를 커널이 처리하는 세부 동작 원리를 다룹니다. 인터럽트 후반부를 처리하는 IRQ 스레드(threaded IRQ)와 Soft IRQ 기법과 커널에서 후반부를 처리하는 워크큐에 대해 설명합니다.

▣ [2부] 타이머, 동기화, 스케줄링, 시스템 콜, 시그널, 가상 파일 시스템, 메모리 관리 편
커널이 시간의 흐름을 관리하는 동작 원리와 동기화 기법(스핀락, 뮤텍스)을 다룹니다. 여러 프로세스의 실행 흐름을 관리하는 스케줄링의 세부 구현 방식과 시스템 콜과 시그널을 커널에서 어떤 방식으로 처리하는지 설명합니다. 다양한 파일 시스템을 공존해 실행시킬 수 있는 가상 파일 시스템과 커널의 메모리를 관리하는 방식에 대해 다룹니다.

부록으로 리눅스 커널의 메일링 리스트를 활용하는 방법과 리눅스 커널에 기여하는 방법을 자세히 소개합니다.

저자

김동현

저자:김동현
LG전자에서11년째임베디드리눅스BSP엔지니어로일하고있다.주로리눅스커널드라이버를안정화(KernelStabilityTroubleshooting)하거나보드를브링업하는과제에참여했다.로우레이어소프트웨어(부트로더,리눅스커널드라이버)의다양한문제를해결할수있는디버깅방법에관심이많으며실무지식을블로그를통해다른개발자와공유하는것을즐긴다.

목차

▣01장:리눅스소개와전망
1.1리눅스와리눅스커널은왜배워야할까?
__1.1.1리눅스는왜배워야할까?
__1.1.2리눅스커널은왜배워야할까?
1.2리눅스의전망
__1.2.1운영체제란무엇인가?
__1.2.2우리는어떤운영체제를쓰고있나?
1.3리눅스의역사
__1.3.1유닉스의탄생
__1.3.21991년:리누스토발즈의등장
__1.3.3리눅스가인기있는이유는무엇일까?
1.4리눅스는어디에쓰일까?
__1.4.1안드로이드
__1.4.2자동차(AutoMotive)
__1.4.3사물인터넷(IoT:InternetofThings)디바이스
1.5임베디드리눅스개발단체
__1.5.1리눅스커널커뮤니티
__1.5.2CPU벤더
__1.5.3SoC벤더
__1.5.4보드벤더및OEM
1.6임베디드리눅스개발을잘하려면무엇을알아야할까?
__1.6.1디바이스드라이버
__1.6.2리눅스커널
__1.6.3CPU아키텍처
__1.6.4빌드스크립트와Git
1.7라즈베리파이와리눅스커널
__1.7.1라즈베리파이실습보드
__1.7.2리눅스커널버전
__1.7.3라즈비안버전
__1.7.4ARM아키텍처
1.8정리

▣02장:라즈베리파이설정
2.1라즈베리파이란?
2.2라즈베리파이설정
__2.2.1라즈베리파이실습을위한준비물
__2.2.2라즈베리파이설치
__2.2.3라즈베리파이기본설정
2.3라즈베리파이커널빌드
__2.3.1라즈비안버전과커널소스버전
__2.3.2라즈비안커널소스코드내려받기
__2.3.3라즈비안리눅스커널빌드
__2.3.4라즈비안리눅스커널설치
__2.3.5전처리코드생성
__2.3.6리눅스커널소스의구조
2.4objdump바이너리유틸리티
2.5라즈베리파이사용시주의사항
2.6정리

▣03장:커널디버깅과코드학습
3.1디버깅이란?
__3.1.1디버깅은문제해결능력의지름길
__3.1.2디버깅과코드학습능력
3.2printk
3.3dump_stack()함수
3.4ftrace
__3.4.1ftrace란?
__3.4.2ftrace는어떻게설정할까?
__3.4.3ftrace메시지는어떻게분석할까?
__3.4.4ftrace로그는어떻게추출할까?
__3.4.5ftrace는커널코드분석의안내자
3.5임베디드디버거의전설TRACE32
3.6커널디버깅용Debugfs드라이버코드
3.7정리

▣04장:프로세스
4.1프로세스소개
__4.1.1프로세스란?
__4.1.2태스크란?
__4.1.3스레드란?
4.2프로세스확인하기
__4.2.1ps명령어로프로세스목록확인
__4.2.2ftrace에서프로세스확인하기
4.3프로세스는어떻게생성할까?
__4.3.1_do_fork()함수소개
__4.3.2유저레벨프로세스를생성할때_do_fork()함수의처리흐름
__4.3.3커널프로세스생성시_do_fork()함수의흐름
4.4유저레벨프로세스실행실습
__4.4.1기본유저레벨프로세스실행실습및ftrace로그분석
__4.4.2exit()함수로프로세스가종료되는과정및ftrace로그분석
4.5커널스레드
__4.5.1커널스레드란?
__4.5.2커널스레드의종류
__4.5.3커널스레드는어떻게생성할까?
4.6커널내부프로세스의생성과정
__4.6.1_do_fork()함수
__4.6.2copy_process()함수분석
__4.6.3wake_up_new_task()함수분석
4.7프로세스의종료과정분석
__4.7.1프로세스종료흐름파악
__4.7.2do_exit()함수분석
__4.7.3do_task_dead()함수분석
__4.7.4do_task_dead()함수를호출하고난후의동작
4.8태스크디스크립터(task_struct구조체)
__4.8.1프로세스를식별하는필드
__4.8.2프로세스상태저장
__4.8.3프로세스간의관계
__4.8.4프로세스연결리스트
__4.8.5프로세스실행시각정보
4.9스레드정보:thread_info구조체
__4.9.1thread_info구조체란?
__4.9.2thread_info구조체분석
__4.9.3thread_info구조체의주소위치는어디일까?
__4.9.4컨텍스트정보상세분석
__4.9.5cpu필드에대한상세분석
__4.9.6thread_info구조체초기화코드분석
4.10프로세스의태스크디스크립터에접근하는매크로함수
__4.10.1current매크로란?
__4.10.2current_thread_info()매크로함수분석
4.11프로세스디버깅
__4.11.1glibc의fork()함수를gdb로디버깅하기
__4.11.2리눅스유틸리티프로그램을이용한실행추적
4.12정리

▣05장:인터럽트
5.1인터럽트소개
__5.1.1인터럽트란?
__5.1.2리눅스커널인터럽트의주요개념
__5.1.3인터럽트를잘알아야하는이유
__5.1.4리눅스커널에서의인터럽트처리흐름
5.2인터럽트컨텍스트
__5.2.1인터럽트컨텍스트란?
__5.2.2ftrace와커널로그로인터럽트컨텍스트확인해보기
__5.2.3in_interrupt()함수란?
__5.2.4인터럽트컨텍스트에서스케줄링을하면어떻게될까?
5.3인터럽트핸들러는언제호출될까?
__5.3.1인터럽트벡터분석
__5.3.2.인터럽트벡터에서스택푸시확인
__5.3.3.인터럽트핸들러의호출흐름분석
5.4인터럽트핸들러는어떻게등록할까?
__5.4.1인터럽트핸들러의등록과정분석
__5.4.2인터럽트핸들러의초기화과정디버깅
__5.4.3인터럽트핸들러등록시플래그설정
5.5인터럽트디스크립터
__5.5.1인터럽트디스크립터란?
__5.5.2인터럽트발생횟수는어떻게저장할까?
5.6인터럽트는언제비활성화해야할까?
5.7인터럽트디버깅
__5.7.1/proc/interrupts
__5.7.2ftrace인터럽트이벤트
__5.7.3ftrace로인터럽트핸들러함수파악하기
5.8정리

▣06장:인터럽트후반부처리
6.1인터럽트후반부기법이란?
__6.1.1인터럽트후반부기법을적용하는이유
__6.1.2인터럽트컨텍스트에서많은일을하면어떻게될까?
__6.1.3TopHalf/BottomHalf란?
__6.1.4인터럽트후반부처리기법의종류
__6.1.5어떤인터럽트후반부처리기법을적용해야할까?
6.2IRQ스레드(threadedIRQ)
__6.2.1IRQ란?
__6.2.2IRQ스레드확인
6.3IRQ스레드는어떻게생성할까?
__6.3.1IRQ스레드는언제생성할까?
__6.3.2라즈베리파이에서IRQ스레드생성과정디버깅
6.4IRQ스레드는누가언제실행할까?
__6.4.1IRQ스레드를깨우는코드분석
__6.4.2IRQ스레드핸들러인irq_thread()함수분석
__6.4.3IRQ스레드의전체실행흐름정리
6.5IRQ스레드디버깅실습
__6.5.1ftrace를이용한IRQ스레드동작확인
__6.5.2IRQ스레드생성실습
__6.5.3IRQ스레드처리함수실행시각측정
6.6SoftIRQ소개
__6.6.1SoftIRQ서비스란?
__6.6.2SoftIRQ의전체흐름
__6.6.3후반부기법으로SoftIRQ를언제쓸까?
__6.6.4SoftIRQ는왜알아야할까?
6.7SoftIRQ서비스
__6.7.1SoftIRQ서비스
__6.7.2SoftIRQ서비스핸들러는언제등록할까?
__6.7.3SoftIRQ서비스핸들러의등록과정실습
6.8SoftIRQ서비스는언제요청할까?
__6.8.1SoftIRQ서비스요청의전체흐름
__6.8.2raise_softirq()함수분석
__6.8.3irq_stat전역변수분석
__6.8.4SoftIRQ서비스를요청했는지는누가어떻게점검할까?
6.9SoftIRQ서비스는누가언제처리할까?
__6.9.1SoftIRQ서비스실행진입점은어디일까?
__6.9.2SoftIRQ서비스요청점검
__6.9.3SoftIRQ서비스실행
__6.9.4ksoftirqd스레드깨우기
6.10ksoftirqd스레드
__6.10.1ksoftirqd스레드란?
__6.10.2ksoftirqd스레드는언제깨울까?
__6.10.3ksoftirqd핸들러run_ksoftirqd()함수분석
6.11SoftIRQ컨텍스트에대해
__6.11.1SoftIRQ컨텍스트시작점은어디일까?
__6.11.2SoftIRQ컨텍스트는언제시작할까?
__6.11.3SoftIRQ컨텍스트확인
6.12태스크릿
__6.12.1태스크릿이란?
__6.12.2태스크릿자료구조
__6.12.3태스크릿은어떻게등록할까?
__6.12.4태스크릿의전체실행흐름파악
__6.12.5태스크릿실행요청은어떻게할까?
__6.12.6태스크릿은언제실행할까?
6.13SoftIRQ디버깅
__6.13.1ftrace의SoftIRQ이벤트소개
__6.13.2/proc/softirqs를이용한SoftIRQ서비스실행횟수확인
6.14정리

▣07장:워크큐
7.1워크큐소개
__7.1.1워크큐의주요개념
__7.1.2워크큐의특징
__7.1.3워크큐와다른인터럽트후반부기법과의비교
__7.1.4워크큐로인터럽트후반부코드를설계하는과정
__7.1.5워크큐를잘알아야하는이유
7.2워크큐의종류
__7.2.1alloc_workqueue()함수분석
__7.2.27가지워크큐
7.3워크란?
__7.3.1work_struct구조체
__7.3.2워크는어떻게초기화할까?
7.4워크를워크큐에어떻게큐잉할까?
__7.4.1워크를워크큐에큐잉하는예제코드살펴보기
__7.4.2워크큐전체흐름도에서워크를워크큐에큐잉하는과정
__7.4.3워크를워크큐에큐잉하는인터페이스

출판사 서평

▣[1부]커널디버깅(ftrace),프로세스,인터럽트,인터럽트후반부,워크큐편
먼저커널을디버깅하는방법과함께ftrace사용법을소개합니다.커널을실행하는주인공인프로세스와인터럽트를커널이처리하는세부동작원리를다룹니다.인터럽트후반부를처리하는IRQ스레드(threadedIRQ)와SoftIRQ기법과커널에서후반부를처리하는워크큐에대해설명합니다.

▣[2부]타이머,동기화,스케줄링,시스템콜,시그널,가상파일시스템,메모리관리편
커널이시간의흐름을관리하는동작원리와동기화기법(스핀락,뮤텍스)을다룹니다.여러프로세스의실행흐름을관리하는스케줄링의세부구현방식과시스템콜과시그널을커널에서어떤방식으로처리하는지설명합니다.다양한파일시스템을공존해실행시킬수있는가상파일시스템과커널의메모리를관리하는방식에대해다룹니다.

부록으로리눅스커널의메일링리스트를활용하는방법과리눅스커널에기여하는방법을자세히소개합니다.