로드맵 썸네일

시스템 소프트웨어 개발자를 위한 Linux kernel: basic course

작성자 프로필 이미지

김동현 (Austin Kim)

Linux
운영체제
linux-kernel

입문 대상

로드맵 참여중인 유저 프로필 사진
로드맵 참여중인 유저 프로필 사진

274명 참여중

30% 할인

4개 남음전체 구매 적용
쿠폰 받기

로드맵 코스

시스템 반도체, 자동차 분야 등

시스템 소프트웨어 개발자라면 꼭 알아야 할 리눅스 커널


모든 IT 기기에서 가장 많이 사용되는 운영체제는 무엇일까요? 바로 리눅스 운영체제입니다. 스마트 폰, 디지틀 TV, 항공 엔터테인먼트 시스템 및 서버에 사용되고 있습니다. 시스템 반도체 업체에서 리눅스(리눅스 디바이스 드라이버)를 활용해 자신이 설계한 하드웨어를 제어합니다. 또한 전기 자동차(Automotive)을 구성하는 다양한 부품(인포테인먼트, 자율주행, 텔레메틱스)에도 리눅스(Linux)가 많이 활용되고 있습니다.

리눅스 운영체제(Operating System)의 핵심은 리눅스 커널입니다. Arm Architecture(Armv8-A) 아키텍처와 더불어 현재 시스템 소프트웨어 업계에서 가장 많이 필요한 기반 지식이 요구되는 내용이 리눅스 커널(linux-kernel)이라고도 볼 수 있어요.

리눅스 시스템 소프트웨어 개발자, 리눅스 임베디드 시스템(BSP) 프로그래머 주목!

시스템 반도체, 전기 자동차 분야(자율주행, 인포테인먼트)를 포함한 리눅스 시스템 소프트웨어 분야에서 주니어 개발자   

시스템 반도체, 전기 자동차 분야와 같은 리눅스 시스템 소프트웨어 개발 분야에서 일하고 싶은 취업 준비생 

리눅스 시스템 소프트웨어 분야(메모리, 파일 시스템, 운영체제)의 대학원 진학 희망자

리눅스 시스템 소프트웨어 분야로 커리어를 전환하려는 다른 분야의 개발자 

그런데 리눅스 커널은 시스템 소프트웨어 분야의 입문자에 있어 거대한 장벽과 같은 존재입니다. 입문자들은 리눅스 커널을 배우다가 수 차례 포기한 경험이 있을 것입니다. 그 어려운 리눅스 커널 버전이 업그레이드되면서 점점 더 복잡하게 진화하고 있습니다. 2024년 이후에는 리눅스 커널 버전은 v6.6 이상으로 업그레이드되고 있는데, 진입 장벽이 더 높아지고 있습니다.

시스템 반도체, 전기 자동차 분야를 포함한 다양한 분야에 포진된 리눅스 시스템 소프트웨어 개발자 분들은 리눅스 커널을 잘 알아야 개발 역량을 키울 수 있다는 사실은 알고 있습니다. 하지만 리눅스 커널을 어떻게 배워야 하고 무엇보다 실무에서 어떤 내용을 잘 알아야 하는지 감을 잡기 어려운 상황입니다.

로드맵을 구성한 이유와

드리고 싶은 말씀

이번에 소개할 로드맵은 ‘디버깅을 통해 배우는 리눅스 커널의 구조와 원리’ 책의(1부) 저자 직강 강의입니다. 먼저 이번 로드맵을 만든 이유에 대해서 말씀드리겠습니다.


리눅스 시스템 소프트웨어 개발자의 고충과 어려움

많은 리눅스 시스템 소프트웨어 개발자들은 리눅스 디바이스 드라이버를 개발합니다. 다양한 제품의 스펙과 요구 사항에 맞게 리눅스 디바이스 드라이버를 개발해야 합니다. 시스템 반도체 업체에 있는 시스템 소프트웨어 개발자는 자신의 설계한 칩을 구성하는 하드웨어(IP)를 제어하는 드라이버를 작성합니다. 전기 자동차 개발자도 마찬가지입니다. 예를 들어, 속도계(클러스터)나 네비게이션과 관련된 기능을 리눅스 디바이스 드라이버로 개발해야 합니다.

그런데 리눅스 디바이스 드라이버를 개발하는 과정에서 다음과 같은 문제를 만날 수 밖에 없습니다

  • 커널의 configuration을 잘못 설정해서 커널 패닉이 난다.

  • 인터럽트 핸들러를 등록했는데 인터럽트 핸들러가 호출되지 않는다.

  • 타이머를 사용했는데 타이머가 제대로 설정되지 않는다.

  • 갑자기 부팅 속도가 매우 느려진다.

  • 특정 애플리케이션에서 소리가 끊긴다.

이와 같은 문제를 제대로 분석하기 위해서 무엇을 해야 할까요? 바로 리눅스 커널을 알아야 합니다. 리눅스 시스템 소프트웨어 개발자 입장에서 처음 리눅스 커널을 배우는 과정은 바로 고통입니다. "리눅스 커널을 배워야 위와 같은 문제를 해결할 수 있는데, 너무 어렵다"라고 느낍니다. 그 이유는;

  • 리눅스 커널 소스 코드가 너무 복잡해서, 지금 분석하는 코드가 실행되는지도 모르겠다.

  • 분석하는 함수를 호출하는 구문이 보이지 않아 소스 분석 도중에 길을 잃는다.

  • 리눅스 커널 버전이 계속 업그레이드가 되어 예전에 눈에 익었던 리눅스 커널 API가 보이지 않는다.


기반 지식이 없는 상태에서 개발을 해야 하는 상황

처음 리눅스 시스템 소프트웨어 개발자로 프로젝트를 시작하면 바로 과제를 진행해야 합니다. 특히 신입 개발자나 주니어 개발자는 기반 지식을 갖추지 못한 상태에서 개발을 시작하는 경우가 많습니다. 리눅스 시스템 소프트웨어 관련 업무는 영어로 Quality Work이라고 합니다. 기반 지식이 부족한 상태에서는 일을 진척하기 어렵다는 의미입니다. 리눅스 디바이스 드라이버나 리눅스 커널 혹은 Arm 프로세서와 같은 기반 지식은 익힐 시간이나 기회가 없는 상황에서 일을 해야 하는 상황입니다.


이와 같은 어려움을 겪는 리눅스 시스템 소프트웨어 개발자에게 도움을 드리기 위해 이번 로드맵을 구성하는 강의를 제작했습니다.

강의의 차별화 포인트

이번 강의는 그 동안 한번도 유튜브나 어느 강의 플렛폼에서 다룬 적이 없는 콘텐츠로 구성되어 있습니다! 리눅스 커널을 구성하는 다양한 자료 구조를 리눅스 커널 메모리 덤프를 통해 debugging(디버깅)합니다. 이 강의를 수강하시는 분은 교육용 프로그램(TRACE32)을 내려 받아 직접 실습하실 수 있습니다. 로드맵에서 구성된 강의의 차별화 포인트는 아래와 같습니다.

1. '디버깅을 통해 배우는 리눅스 커널의 구조와 원리' 책의 저자 직강 강의

로드맵을 구성한 강의를 제작한 교육자는 '2021년 대한민국 학술원 우수 도서상'을 받은 '디버깅을 통해 배우는 리눅스 커널의 구조와 원리'의 저자입니다. 강의의 핵심을 설명할 때 책의 내용을 기반으로 설명하므로, 책과 함께 강의를 들으실 수 있습니다.

2. TRACE32 시뮬레이터 프로그램(교육용)과 다양한 리눅스 커널 덤프 제공

리눅스 시스템 소프트웨어 개발 전반에 TRACE32 디버거와 프로그램은 광범위하게 사용됩니다. 그런데 TRACE32 프로그램은 라이선스가 있어야 실행할 수 있습니다. 이번 로드맵에서 구성된 강의를 수강하시면 교육용 TRACE32 시뮬레이터 프로그램을 '인프런 강의 자료'에서 내려 받아 직접 trace32 시뮬레이터 프로그램을 활용해 메모리 덤프를 debugging(디버깅)할 수 있습니다. 예를 들어 프로세스의 다양한 동작(프로세스 생성, 소멸, 인터럽트 컨텍스트) 그리고 인터럽트의 동작(인터럽트 핸들러 실행, Preemption)을 메모리 덤프로 디버깅할 수 있습니다.

3. 최신 리눅스 커널 버전인 v6.1 기반

이번 로드맵에서 구성된 강의는 커널 버전 v6.1 기반에서 리눅스 커널의 소스 코드를 분석합니다. 최근에서 개발 중인 많은 프로젝트는 커널 버전 v5.10 이상의 버전을 사용하는 경우가 많습니다. 이번 로드맵에서 구성된 강의를 들으면 최신 리눅스 커널(v6.1) 버전으로 리눅스 커널을 구성하는 다양한 기능을 익힐 수 있습니다. 참고로, 국내에서는 v6.1 커널 버전 기반으로 리눅스 커널의 주요 기능을 분석한 강의나 콘텐츠가 거의 없는 상황입니다.

4. Armv8(64비트 기반) 리눅스 커널

기존의 스마트 폰, 디지틀 TV, 서버를 비롯한 시스템 반도체 업체와 전기 자동차(Automotive) 개발에서 사용되는 리눅스는 Armv8-A(64비트) 아키텍처 기반입니다. 현재 시스템 소프트웨어 업계에서 가장 많이 필요한 기반 지식이 요구되는 내용이 Armv8-A(64비트) 기반 리눅스 커널이라고도 볼 수 있어요. 이번 로드맵에서 구성된 모든 강의는 Armv8-A(64비트) 기반 리눅스 커널입니다.

5. 글로벌 시스템 반도체 업체의 리눅스 커널 BSP 개발자들이 하는 디버깅 방법 소개

이번 로드맵에서 구성된 강의에서는 리눅스 커널 메모리 덤프를 TRACE32 시뮬레이터를 사용해 프로세스(process)와 관련된 커널의 자료 구조를 디버깅하면서 crash-utility로 메모리 덤프를 로딩해 커널의 주요 동작을 분석합니다. 특히 프로세스의 스택이 깨지거나 스택 오버플로우가 발생할 때 디버깅 방법은 정상급 펩리스 업체 개발자들도 잘 모르는 내용입니다.

️ 강의의 차별화 포인트 

‘디버깅을 통해 배우는 리눅스 커널의 구조와 원리’ 저자 직강 강의입니다.

리눅스 커널을 구성하는 주요 기능의 기본 개념을 이해하기 쉽게 설명합니다.

[프로세스의 기본 개념] 멀티 코어 시스템 구조의 프로세스 실행, 프로세스의 핵심 개념

[인터럽트를 처리하는 방식] 디바이스 드라이버, 프로세스 관점으로 처리 방식 소개

최신 커널 버전인 v6.1 기준으로 커널 소스 코드를 직접 분석하면서 리눅스 커널을 구성하는 주요 기능을 상세하게 설명합니다.

[프로세스] 'struct task_struct' 와 관련된 current 매크로 및 관련 소스 코드

[인터럽트] interrupt를 처리하는 소스 코드 분석

[ftrace] ftrace를 설정할 때 호출되는 커널 소스 분석

리눅스 커널을 구성하는 주요 자료 구조에 익숙해지기 위해서 직접 메모리 덤프를 사용해 디버깅을 할 필요가 있습니다. 로드맵을 구성하는 강의에서는 TRACE32(trace32)와 Crash Utility 프로그램을 사용해 커널의 구조 동작을 상세히 디버깅합니다. )물론 수강생 분들은 TRACE32 프로그램(교육용)을 내려받아 따라하면서 실습할 수 있습니다. )

[Advanced-디버깅] 커널 소스 코드와 함께 Crash utility와 TRACE 프로그램 디버깅


[프로세스 디버깅] 프로세스의 생성과 종료 과정을 TRACE32 프로그램으로 디버깅

[인터럽트 디버깅] 인터럽트(interrupt) 핸들러를 TRACE32 프로그램으로 함께 디버깅

리눅스 커널에서 제공하는 가장 강력한 트레이서 중 하나인 ftrace를 다룹니다. ftrace 메시지를 설정하는 방법을 소개하고 상세하게 ftrace 메시지의 내용을 분석합니다.

[ftrace 소개] ftrace의 특징과 설정 방법 소개


[인터럽트 interrupt 동작 tracing] 인터럽트의 동작을 트레이싱하는 명령어 소개

실전 프로젝트를 개발하는 과정에서 만날 수 있는 다양한 케이스 스터디(익셉션, crash)를 소개합니다. 관련 커널 로그와 커널의 동작 원리를 상세히 분석합니다. 또한 디버깅을 통해 문제를 어떻게 해결하는지에 대해서도 설명합니다.

책 집필/강의경력을 바탕으로
누구보다 깊고 상세하게!

국내 시스템 소프트웨어 분야에서 전무후무한! '리눅스 커널'책과 'Arm 아키텍처(Armv8-A, Armv7-A)' 책을 쓴 저자입니다. 또한 최신 시스템 소프트웨어 트렌드(전기자동차, 시스템 반도체- 시스템 소프트웨어)를 가장 잘 알고 있는 현업 개발자이자, 시스템 소프트웨어 분야에서 가장 지식 전파 활동을 활발하게 하는 교육자입니다. 

  • '디버깅을 통해 배우는 리눅스 커널의 구조와 원리' (2021년, 대한민국 학술원 우수도서상) 저자

  • '시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리'(2023년) 저자

  • '프로그래머스 데브 코스: 리눅스 시스템 및 커널 전문가' 메인 강사

  • 2022년 6월, 한국컴퓨터종합학술대회 (KCC2022) - 튜토리얼 발표 [ftrace를 이용해 리눅스 커널 정복하기]

  • LG전자 '리눅스 커널' 및 'Armv8 아키텍처' 사내 강사(국내 및 해외 개발자 포함) - (2020년~2024년) 


국내에서 어느 누구보다 리눅스 커널을 구성하는 주요 기능을 잘 설명할 수 있는 교육자라고 자신있게 말씀드릴 수 있습니다.

로드맵 상세보기

6개 코스

로드맵에 포함된 강의 썸네일
리눅스 운영체제의 전체 구조를 설명하고 리눅스 커널을 잘 배워야 하는 이유를 설명합니다. 또한 최신 리눅스 시스템 소프트웨어 개발과 관련된 생태계를 설명합니다. 각 챕터를 구성하는 내용을 소개하고 핵심적인 내용을 요약해 설명합니다.

무료

로드맵에 포함된 강의 썸네일
실전 프로젝트에서 디버깅이 중요한 이유와 실전 프로젝트와 가장 유사한 사례를 참고해 커널 디버깅을 하는 과정을 상세히 설명합니다. printk, dump_stack(), sysrq와 같은 기본적인 디버깅 기능을 상세히 설명합니다.  Ftrace를 소개하고 Ftrace 메시지를 통해 커널 소스를 분석하는 방법과 다양한 Ftrace event에 대해 설명합니다.

33,000

로드맵에 포함된 강의 썸네일
실전 프로젝트에서 덤프 분석이 필요한 이유에 대해 설명하고 Crash-Utility와 TRACE32 프로그램으로 커널을 디버깅하는 방법을 상세히 설명합니다. 실전 프로젝트를 개발하는 과정에서 만날 수 있는 다양한 케이스 스터디를 소개합니다.ftrace를 설정하는 3가지 방법을 소개하고 boot-time ftrace tracer가 필요한 이유에 대해서 상세히 설명합니다.

55,000

로드맵에 포함된 강의 썸네일
프로세스의 실행 공간을 설명하고 프로세스를 알아야 하는 이유를 설명합니다.
프로세스의 속성 정보를 저장하고 관리하는 task_struct 구조체를 TRACE32와 Crash-Utility 디버깅 프로그램을 사용해 분석합니다. 프로세스의 자료구조와 함수 호출 흐름을 상세히 설명합니다. 프로세스의 동작을 트레이싱하는 ftrace 메시지를 출력하는 커널 소스 코드를 세세히 분석합니다.

55,000

로드맵에 포함된 강의 썸네일
인터럽트(interrupt)를 처리하는 방식을 설명하고 다양한 관점으로 인터럽트가 처리되는 흐름을 설명합니다. 인터럽트가 처리되는 흐름을 큰 그림으로 분석하고 IRQ 서브 시스템(Arm 아키텍처에 의존적이지 않음)에서 실행되는 함수를 세세하게 설명합니다. TRACE32와 Crash-utility 디버깅 프로그램을 사용해 인터럽트와 관련된 자료구조를 분석합니다. 인터럽트의 동작을 트레이싱하는 ftrace 메시지를 출력하는 커널 소스 코드를 세세히 분석합니다.

55,000

로드맵에 포함된 강의 썸네일
리눅스 디바이스 드라이버를 개발하는 과정에서 반드시 구현하고 최적화해야 할 요소 중 하나는 인터럽트를 후반부로 처리하는 방식입니다. 대표적인 인터럽트 후반부 기법인 threaded IRQ(IRQ 스레드), Softirq 그리고 태스크릿을 상세하게 설명합니다.

55,000

30% 할인

4개 남음전체 구매 적용
쿠폰 받기

로드맵 코스 6