4. 추천 학습 순서 (Step by Step Code)
1) 코드 분석 전
사전 이해도
- 네트워크 C 프로그래밍 중급
앞으로 익숙해져야 할 툴
- Linux bash shell
- GCC
- Git
- Vim
코드 분석 전 읽어야 할 이론서
- 간단한 커널 이론서
- ARM 및 ARM64 아키텍처에 관한 이론서
2) 어셈블리 코드 분석 시작
3) C 코드 분석 시작
4) 아키텍처 설정
- setup_arch() – for ARM64
- —early_fixmap_init()
- —early_ioremap_init()
- —setup_machine_fdt()
- —parse_early_param()
- —cpu_uninstall_idmap()
- —arm64_memblock_init()
- —paging_init()
- ——map_kernel()
- ——map_mem()
- ——cpu_replace_ttbr1()
- ——memblock_allow_resize()
- —unflatten_device_tree()
- —bootmem_init()
- —–sparse_init()
- —–zone_sizes_init()
- —request_standard_resources()
- —early_ioremap_reset()
- —psci_dt_init()
- —cpu_read_bootcpu_ops()
- —smp_init_cpus()
- —smp_build_mpidr_hash()
- Fixmap
- Early ioremap
- Earlycon & Earlyprintk
- Spinlock
- READ_ONCE() 및 WRITE_ONCE()와 lockless 리스트
- DTB – 구조
- Memblock – (1)
- Memblock – (2)
- ARM64 페이지 테이블 -2- (매핑)
- ARM64 페이지 테이블 -3- (API)
- NUMA -1- (ARM64 초기화)
- NUMA -2- (Fallback Node)
- NUMA -3- (Memory policy)
- Zone 타입
- Memory Model -1- (Basic)
- Memory Model -2- (mem_map)
- Memory Model -3- (Sparse Memory)
- Memory Model -4- (APIs)
- DTB (fdt API)
- DTB (of API)
- GFP 플래그
- IDR(integer ID 관리)
- Compound 페이지
- Bootmem with Bitmap
- FTrace
- Kernel Debugging
- Kernel Tracing
- Kprobe
- Profiling
- Sparse 정적 분석 도구
- TRACE_EVENT
- 디버그 메모리 -1- (Page Alloc)
- 디버그 메모리 -2- (Page Poisoning)
- 디버그 메모리 -3- (Page Owner 추적)
- 디버그 메모리 -4- (Idle Page 추적)
- Ioremap
- Kmap(Pkmap)
- Radix Tree
- might_sleep()
5) 페이징 및 메모리 설정
- boot_init_stack_canary()
- mm_init_cpumask()
- setup_command_line()
- setup_nr_cpu_ids()
- setup_per_cpu_areas()
- smp_prepare_boot_cpu()
- build_all_zonelists()
- page_alloc_init()
- parse_early_param()
- parse_args()
- jump_label_init()
- setup_log_buf()
- vfs_caches_init_early()
- sort_main_extable()
- mm_init()
- ——page_ext_init_flatmem()
- ——mem_init()
- ——kmem_cache_init()
- ——pgtable_init()
- ——vmalloc_init()
- anon_vma_init()
- Per-cpu -1- (Basic)
- Per-cpu -2- (초기화)
- Per-cpu -3- (동적 할당)
- Per-cpu -4- (atomic operations)
- Exception -6- (MM Fault)
- Zoned Allocator -1- (물리 페이지 할당-Fastpath)
- Zoned Allocator -2- (물리 페이지 할당-Slowpath)
- Zoned Allocator -3- (Buddy 페이지 할당)
- Zoned Allocator -4- (Buddy 페이지 해지)
- Zoned Allocator -5- (Per-cpu Page Frame Cache)
- Zoned Allocator -6- (Watermark)
- Zoned Allocator -7- (Direct Compact)
- Zoned Allocator -8- (Direct Compact-Isolation)
- Zoned Allocator -9 (Direct Compact-Migration)
- Zoned Allocator -10- (LRU & pagevecs)
- Zoned Allocator -11- (Direct Reclaim)
- Zoned Allocator -12- (Direct Reclaim-Shrink-1)
- Zoned Allocator -13- (Direct Reclaim-Shrink-2)
- Zoned Allocator -14- (Kswapd & Kcompactd)
- Swap -1- (Basic, 초기화)
- Swap -2- (Swapin & Swapout)
- Swap -3- (Swap 영역 할당/해제)
- Swap -4- (Swap 엔트리)
- Slub Memory Allocator -1- (구조)
- Slub Memory Allocator -2- (캐시 초기화)
- Slub Memory Allocator -3- (캐시 생성)
- Slub Memory Allocator -4- (Order 계산)
- Slub Memory Allocator -5- (Slub 할당)
- Slub Memory Allocator -6- (Object 할당)
- Slub Memory Allocator -7- (Object 해제)
- Slub Memory Allocator -8- (Drain/Flash 캐시)
- Slub Memory Allocator -9- (캐시 Shrink)
- Slub Memory Allocator -10- (Slub 해제)
- Slub Memory Allocator -11- (캐시 삭제)
- Slub Memory Allocator -12- (Slub 디버깅)
- Slub Memory Allocator -13- (slabinfo)
- Kmalloc
- kmalloc()
- Kmalloc vs Vmalloc
- Vmalloc
- vmalloc()
- Vmap
- CMA(Contiguous Memory Allocator)
- CMA(Contiguous Memory Allocator) for DMA
- DMA -1- (Basic)
- DMA -2- (DMA Coherent Memory)
- DMA -3- (DMA Pool)
- DMA -4- (DMA Mapping)
- Rmap -1- (Reverse Mapping)
- Rmap -2- (TTU & Rmap Walk)
- Rmap -3- (PVMW)
6) 클럭, 타이머 및 인터럽트
- Common Clock Framework -1- (초기화)
- Common Clock Framework -2- (APIs)
- Timer -3- (Clock Sources Subsystem)
- Timer -4- (Clock Sources Watchdog)
- Timer -5- (Clock Events Subsystem)
- Timer -6- (Clock Source & Timer Driver)
- Timer -7- (Sched Clock & Delay Timers)
- Timer -8- (Timecounter)
- Timer -1- (Lowres Timer)
- Timer -2- (HRTimer)
- Exception -8- (ARM64 Handler)
- Interrupts -1- (Interrupt Controller)
- Interrupts -2- (irq chip)
- Interrupts -3- (irq domain)
- Interrupts -4- (Top-Half & Bottom-Half)
- Interrupts -5- (Softirq)
- Interrupts -6- (IPI Cross-call)
- do_IPI()
- Interrupts -7- (Workqueue 1)
- Interrupts -8- (Workqueue 2)
- Interrupts -9- (GIC v3 Driver)
- Interrupts -10- (irq partition)
- Interrupts -12- (irq desc)
- Timer -9- (Tick Device)
- Timer -10- (Timekeeping)
7) 스케줄러, mutex 및 RCU
- Scheduler -1- (Basic)
- Scheduler -2- (Global Cpu Load)
- Scheduler -3- (PELT-1)
- Scheduler -3a- (PELT-2)
- Scheduler -4- (Group Scheduling)
- Scheduler -5- (Scheduler Core)
- Scheduler -6- (CFS Scheduler)
- Scheduler -7- (Preemption & Context Switch)
- Scheduler -8- (CFS Bandwidth)
- Scheduler -9- (RT Scheduler)
- Scheduler -10- (Deadline Scheduler)
- Scheduler -11- (Stop Scheduler)
- Scheduler -12- (Idle Scheduler)
- Scheduler -13- (Scheduling Domain 1)
- Scheduler -14- (Scheduling Domain 2)
- Scheduler -15- (Load Balance 1)
- Scheduler -16- (Load Balance 2)
- Scheduler -17- (Load Balance 3 NUMA)
- Scheduler -18- (Load Balance 4 EAS)
- Scheduler -19- (초기화)
- PID 관리
- do_fork()
- cpu_startup_entry() – cpuidle | 문c
- Priority Inversion & Priority Inheritance
- Mutex for linux kernel space
- RCU(Read Copy Update) -1- (Basic)
- RCU(Read Copy Update) -2- (Callback process)
- RCU(Read Copy Update) -3- (RCU threads)
- RCU(Read Copy Update) -4- (NOCB process)
- RCU(Read Copy Update) -5- (Callback list)
- RCU(Read Copy Update) -6- (Expedited GP)
- RCU(Read Copy Update) -7- (Preemptible RCU)
8) 디바이스 드라이버
.
- Device & Driver -1- (Basic)
- Device & Driver -2- (Bus & Class)
- Device & Driver -3- (Platform Device)
- Pin Control Subsystem -1-
- Pin Control Subsystem -2-
- GPIO Subsystem -1-
- GPIO Subsystem -2-
- GPIO Subsystem -3- (Device Tree)
- GPIO Subsystem -4- (new Interface)
- I2C Subsystem -1- (Basic)
- I2C Subsystem -2- (Core)
- I2C Subsystem -3- (Transfer)
- I2C Subsystem -4- (I2C-Mux)
- SPI Subsystem -1- (Basic)
- SPI Subsystem -2- (Driver)
- PCI Subsystem -1- (Basic)
- PCI Subsystem -2- (Core)
- PCI Subsystem -3- (Host Controller)
- MTD(Memory Technology Device) -1-
- MTD(Memory Technology Device) -2-
- MTD(Memory Technology Device) -3-
- Console & TTY Driver
- IOMMU
9. 네트워크 시스템 및 파일 시스템
각자 도생 ^^;
문영일 선배님 안녕하세요~! 16차 이파란입니다.
리눅스 코어 도사가 되기 위한 짱짱 멋진 로드맵이네요!
저를 포함한 많은 리눅서들에게 항상 큰 도움 주셔서 감사합니다!
안녕하세요? 이파란님!
큰 도움이라고 하기에는 부끄럽습니다. ^^
오늘도 좋은 하루되길 바랍니다.
안녕하세요 문영일님.
pci susystem 3- host controller 부분은 접속시 로그인이 필요한데, 혹시 의도하신 걸까요?
감사합니다
안녕하세요? 이승인님.
해당 글은 링크가 잘못되어 있어 다시 바로 잡았습니다.
말씀해주셔서 감사합니다. 즐거운 하루 되시길 바랍니다.