SlideShare a Scribd company logo
Linux Kernel 101
Kangmin Park (pr0gr4m)
Kangmin Park (pr0gr4m)
• Linux Kernel Contributor
• IPv6
• MPLS
• Bluetooth
• Bridge
• I2C, SPI, Mailbox, …
• Realtek RTL8188, RTL8812AU Contributor
• 네이버 클라우드
• SDN Service
• (전) 아이엘아이티
• (전) 자유/오픈소스 소프트웨어 연합회
• (전) 육군본부
• (전) 프로토콜마스터
Difficulties
Kernel Source
vim + ctags + cscope Linux source code (v5.15.4) - Bootlin
Elixir Bootlin
Curriculum
System Call
System Call
User Application
open
Library(x86,arm,…)
Interrupt Vector
read exit
fork
write
sys_open sys_read sys_exit
sys_clone
sys_write
vfs_open vfs_read do_exit
kernel_clone
vfs_write
File System (ext/proc/debugfs/…) Kernel Driver
User
Space
Kernel
Space
virtual filesystem
strace
SYSCALL_DEFINE
More?
• 다음 함수들을 호출했을 때 커널에서 어떤 함수가 호출되는지 조
사하기
• fork, vfork, pthread_create, execl, exit, open, read, write, close, malloc, mmap
• 가상머신에 리눅스를 설치한 후, 직접 커널을 빌드해서 부팅
• Linux Kernel Build - Linux Kernel Analysis (pr0gr4m.github.io)
• 커널 소스에 자기가 만든 시스템콜을 새로 추가하고, 유저 스페이
스에서 해당 시스템콜을 사용해보기
• [Linux Kernel 5] system call 추가하기 (tistory.com)
Google
Wall
How to Study
• 커널에 적용되어 있는 개념과 기능들을 공부합니다
• 커널에 정의된 구조체와 함수가 어떤 역할을 하는지 공부합니다
• 커널 함수들이 언제 어떻게 동작하는지 트레이싱합니다
• 커널 소스코드를 주석과 커밋로그를 참고하여 분석합니다
• 커널 컨트리뷰트를 수행합니다
Concept & Feature
Source Auditing and Tracing
문c 블로그
문c 블로그 – 최신 ARM 리눅스 5.x 커널 분석 (jake.dothome.co.kr)
LWN
Basic
• struct task_struct
• 커널에서 프로세스/쓰레드를 관리하기 위한 구조체
• struct mm_struct
• 프로세스에 할당된 메모리를 관리하기 위한 구조체
• struct irq_desc
• 인터럽트 요청을 표현하기 위한 디스크립터 구조체
• struct sk_buff
• 소켓 버퍼를 관리하기 위한 구조체
• kernel_clone()
• 새로운 프로세스/쓰레드를 만들기 위한 함수
• kmalloc()
• 커널에서 메모리를 할당받기 위한 함수
• request_irq()
• 인터럽트 핸들러를 등록하는 함수
• inet_init()
• 여러 네트워크 프로토콜들을 초기화하는 함수
More and More
• 방금 전에 소개된 구조체와 함수들을 엘릭서에서 찾아보고 주석
을 참고하여 커널에서 어떤 역할을 하는지 조사하기
• 커널을 수정하여 시스템에서 kernel_clone() 함수가 몇 번 호출되
었는지 카운팅하고, 새로운 시스템콜 get_kernel_clone_count() 만
들어 유저 스페이스에서 kernel_clone() 함수가 호출된 횟수 구하
기
• 커널을 수정하여 수신하는 패킷들 중 로컬 호스트로 들어오는 패
킷들을 다음 그림과 같이 덤프하여 커널 메시지로 출력하기
• ip_local_deliver_finish()
• dmesg –w
Contribute
• 빌드 환경 구축
• 소스 코드 분석
• commit target 발견
• 소스 코드 수정 및 테스트
• git patch 파일 생성
• patch mail 발송
• review에 따라 patch 재생성
• accept or reject
Commit
• Fix Typo (오타 수정)
• Cleanup
• 코드 스타일 교정
• 불필요한 코드 제거
• 사용하지 않는 변수 제거
• 변수/함수 타입 변경
• Optimize (최적화)
• Improve (성능 향상)
• Bugfix (버그 수정) - syzbot
• Introduce (새로운 컨셉)
Patch Mail
• 어떻게 리눅스 커널 개발을 하는가 — The Linux Kernel
documentation
• [Linux Kernel] 리눅스 커널 개발 가이드: Introduction
(hyeyoo.com/110)
• Linux Kernel 개발참여방법과 문화 (Contribution)
(slideshare.net/UbuntuKorea/linux-kernel-contribution)
• 리눅스 커널 패치와 커밋 - YES24
LKML
Linux Patchwork
Linux Kernel 101 for Beginner

More Related Content

PDF
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
PPTX
Openstack zun,virtual kubelet
PDF
Rancher Simple User Guide
PDF
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
PDF
[오픈소스컨설팅] ARM & OpenStack Community
PPTX
Mirantis open stack provisioning automation
PDF
[221] docker orchestration
PDF
Introduction to Docker - LOGISPOT
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
Openstack zun,virtual kubelet
Rancher Simple User Guide
[OpenInfra Days Korea 2018] Day 2 - E5: Mesos to Kubernetes, Cloud Native 서비스...
[오픈소스컨설팅] ARM & OpenStack Community
Mirantis open stack provisioning automation
[221] docker orchestration
Introduction to Docker - LOGISPOT

What's hot (20)

PDF
2017 k8s and OpenStack-Helm
PPT
Kubernetes
PDF
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
PDF
cbhoilab vagrant와 ansible 쿠버네티스 설치 v2
PDF
[2015-05월 세미나] 파이선 초심자의 Openstack
PDF
Prometheus in openstack-helm
PDF
Kubernetes에서 Windows Application 호스팅하기
PPTX
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
PDF
쉽고 빠르게 접하는 오픈스택
PDF
[오픈소스컨설팅] SELinux : Stop Disabling SELinux
PDF
Devfair kubernetes 101
PPTX
GitLab과 Kubernetes를 통한 CI/CD 구축
PDF
셸 스크립트를 이용한 클라우드 시스템 운영
PDF
Mesos + Marathon + Docker
PDF
Toward kubernetes native data center
PDF
Puppet과 자동화된 시스템 관리
PDF
Kubernetes & helm 활용
PPTX
[넥슨] kubernetes 소개 (2018)
PDF
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
PDF
Kubernetes on Premise Practical Guide
2017 k8s and OpenStack-Helm
Kubernetes
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
cbhoilab vagrant와 ansible 쿠버네티스 설치 v2
[2015-05월 세미나] 파이선 초심자의 Openstack
Prometheus in openstack-helm
Kubernetes에서 Windows Application 호스팅하기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
쉽고 빠르게 접하는 오픈스택
[오픈소스컨설팅] SELinux : Stop Disabling SELinux
Devfair kubernetes 101
GitLab과 Kubernetes를 통한 CI/CD 구축
셸 스크립트를 이용한 클라우드 시스템 운영
Mesos + Marathon + Docker
Toward kubernetes native data center
Puppet과 자동화된 시스템 관리
Kubernetes & helm 활용
[넥슨] kubernetes 소개 (2018)
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
Kubernetes on Premise Practical Guide
Ad

Similar to Linux Kernel 101 for Beginner (20)

PDF
Linux 강의자료 ed10
PPTX
리눅스 드라이버 실습 #1
PDF
리얼리눅스 제 1 회 세미나: "리눅스, 제대로 알고 코딩하자!"
PPTX
우분투 커널 컴파일
PDF
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
PPTX
우분투에 시스템콜 추가하기
PPTX
IoT with Raspberry Pi + Node JS - Chapter 1
PPTX
Linux programming study
PDF
제로부터시작하는오픈소스
PDF
Kernel 2.6 makefile_분석(송형주)
PDF
ice_grad
PDF
리눅스 커널 기초 태스크관리
PDF
제로부터시작하는 Git 두번째 이야기
PDF
ce_grad
PPTX
shell and process
PDF
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
PDF
[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이
PPTX
Network researching
PDF
RHEL8 Kernel Management Manual in Korean
PDF
Linux kernel 3.x와 2.6.11의 PID Hash Table 자료구조 비교
Linux 강의자료 ed10
리눅스 드라이버 실습 #1
리얼리눅스 제 1 회 세미나: "리눅스, 제대로 알고 코딩하자!"
우분투 커널 컴파일
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
우분투에 시스템콜 추가하기
IoT with Raspberry Pi + Node JS - Chapter 1
Linux programming study
제로부터시작하는오픈소스
Kernel 2.6 makefile_분석(송형주)
ice_grad
리눅스 커널 기초 태스크관리
제로부터시작하는 Git 두번째 이야기
ce_grad
shell and process
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이
Network researching
RHEL8 Kernel Management Manual in Korean
Linux kernel 3.x와 2.6.11의 PID Hash Table 자료구조 비교
Ad

More from InfraEngineer (19)

PDF
삐약삐약 네트워크 엔지니어 이야기
PDF
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
PDF
주니어의 쿠버네티스 생태계에서 살아남기
PDF
클라우드 엔지니어 취업 고군 분투기
PDF
CKA(Kubernetes 자격증) 잘 준비하는 법_
PPTX
HTTP2도 잘 모르는데 벌써 HTTP3 (v2)
PDF
[MeetUp][3rd] 아무도 이야기하지 않는 클라우드 3사 솔직 비교
PPTX
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화
DOCX
F5 container ingress_service_in_kuernetes_with_calico_cni_by_duck_in_korea
DOCX
Calico routing modes_trans_by_duck_in_korean
PDF
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2
PDF
[MeetUp][2nd] 컭on턺
PDF
[MeetUp][2nd] 알아두면 쓸모있는 테라폼
PDF
IT 인프라 엔지니어에게 길을 묻다
PDF
Kubernetes networking-made-easy-with-open-v switch
PDF
Packet walks in_kubernetes-v4
PDF
[MeetUp][1st] 오리뎅이의_쿠버네티스_네트워킹
PDF
[MeetUp][1st] 오픈소스를 활용한 xflow 수집-시각화
PDF
[MeetUp][1st] 자동화를 왜 해야하나요
삐약삐약 네트워크 엔지니어 이야기
시니어가 들려주는 "내가 알고 있는 걸 당신도 알게 된다면"
주니어의 쿠버네티스 생태계에서 살아남기
클라우드 엔지니어 취업 고군 분투기
CKA(Kubernetes 자격증) 잘 준비하는 법_
HTTP2도 잘 모르는데 벌써 HTTP3 (v2)
[MeetUp][3rd] 아무도 이야기하지 않는 클라우드 3사 솔직 비교
[MeetUp][3rd] Prometheus 와 함께하는 모니터링 및 시각화
F5 container ingress_service_in_kuernetes_with_calico_cni_by_duck_in_korea
Calico routing modes_trans_by_duck_in_korean
[MeetUp][2nd] 오리뎅이의_쿠버네티스_네트워킹_v1.2
[MeetUp][2nd] 컭on턺
[MeetUp][2nd] 알아두면 쓸모있는 테라폼
IT 인프라 엔지니어에게 길을 묻다
Kubernetes networking-made-easy-with-open-v switch
Packet walks in_kubernetes-v4
[MeetUp][1st] 오리뎅이의_쿠버네티스_네트워킹
[MeetUp][1st] 오픈소스를 활용한 xflow 수집-시각화
[MeetUp][1st] 자동화를 왜 해야하나요

Linux Kernel 101 for Beginner

  • 1. Linux Kernel 101 Kangmin Park (pr0gr4m)
  • 2. Kangmin Park (pr0gr4m) • Linux Kernel Contributor • IPv6 • MPLS • Bluetooth • Bridge • I2C, SPI, Mailbox, … • Realtek RTL8188, RTL8812AU Contributor • 네이버 클라우드 • SDN Service • (전) 아이엘아이티 • (전) 자유/오픈소스 소프트웨어 연합회 • (전) 육군본부 • (전) 프로토콜마스터
  • 4. Kernel Source vim + ctags + cscope Linux source code (v5.15.4) - Bootlin
  • 8. System Call User Application open Library(x86,arm,…) Interrupt Vector read exit fork write sys_open sys_read sys_exit sys_clone sys_write vfs_open vfs_read do_exit kernel_clone vfs_write File System (ext/proc/debugfs/…) Kernel Driver User Space Kernel Space virtual filesystem
  • 11. More? • 다음 함수들을 호출했을 때 커널에서 어떤 함수가 호출되는지 조 사하기 • fork, vfork, pthread_create, execl, exit, open, read, write, close, malloc, mmap • 가상머신에 리눅스를 설치한 후, 직접 커널을 빌드해서 부팅 • Linux Kernel Build - Linux Kernel Analysis (pr0gr4m.github.io) • 커널 소스에 자기가 만든 시스템콜을 새로 추가하고, 유저 스페이 스에서 해당 시스템콜을 사용해보기 • [Linux Kernel 5] system call 추가하기 (tistory.com)
  • 13. Wall
  • 14. How to Study • 커널에 적용되어 있는 개념과 기능들을 공부합니다 • 커널에 정의된 구조체와 함수가 어떤 역할을 하는지 공부합니다 • 커널 함수들이 언제 어떻게 동작하는지 트레이싱합니다 • 커널 소스코드를 주석과 커밋로그를 참고하여 분석합니다 • 커널 컨트리뷰트를 수행합니다
  • 17. 문c 블로그 문c 블로그 – 최신 ARM 리눅스 5.x 커널 분석 (jake.dothome.co.kr)
  • 18. LWN
  • 19. Basic • struct task_struct • 커널에서 프로세스/쓰레드를 관리하기 위한 구조체 • struct mm_struct • 프로세스에 할당된 메모리를 관리하기 위한 구조체 • struct irq_desc • 인터럽트 요청을 표현하기 위한 디스크립터 구조체 • struct sk_buff • 소켓 버퍼를 관리하기 위한 구조체 • kernel_clone() • 새로운 프로세스/쓰레드를 만들기 위한 함수 • kmalloc() • 커널에서 메모리를 할당받기 위한 함수 • request_irq() • 인터럽트 핸들러를 등록하는 함수 • inet_init() • 여러 네트워크 프로토콜들을 초기화하는 함수
  • 20. More and More • 방금 전에 소개된 구조체와 함수들을 엘릭서에서 찾아보고 주석 을 참고하여 커널에서 어떤 역할을 하는지 조사하기 • 커널을 수정하여 시스템에서 kernel_clone() 함수가 몇 번 호출되 었는지 카운팅하고, 새로운 시스템콜 get_kernel_clone_count() 만 들어 유저 스페이스에서 kernel_clone() 함수가 호출된 횟수 구하 기 • 커널을 수정하여 수신하는 패킷들 중 로컬 호스트로 들어오는 패 킷들을 다음 그림과 같이 덤프하여 커널 메시지로 출력하기 • ip_local_deliver_finish() • dmesg –w
  • 21. Contribute • 빌드 환경 구축 • 소스 코드 분석 • commit target 발견 • 소스 코드 수정 및 테스트 • git patch 파일 생성 • patch mail 발송 • review에 따라 patch 재생성 • accept or reject
  • 22. Commit • Fix Typo (오타 수정) • Cleanup • 코드 스타일 교정 • 불필요한 코드 제거 • 사용하지 않는 변수 제거 • 변수/함수 타입 변경 • Optimize (최적화) • Improve (성능 향상) • Bugfix (버그 수정) - syzbot • Introduce (새로운 컨셉)
  • 23. Patch Mail • 어떻게 리눅스 커널 개발을 하는가 — The Linux Kernel documentation • [Linux Kernel] 리눅스 커널 개발 가이드: Introduction (hyeyoo.com/110) • Linux Kernel 개발참여방법과 문화 (Contribution) (slideshare.net/UbuntuKorea/linux-kernel-contribution) • 리눅스 커널 패치와 커밋 - YES24
  • 24. LKML