소개
국내 시스템 소프트웨어 분야에서 전무후무한! 'Arm 아키텍처(Armv8-A, Armv7-A)'와 '리눅스 커널' 책을 쓴 저자(2권의 책 모두 대한민국 학술원 우수도서에 선정)이며, 최신 시스템 소프트웨어 트렌드(전기자동차, 시스템 반도체- 시스템 소프트웨어)를 가장 잘 알고 있는 현업 개발자입니다. 또한 시스템 소프트웨어 분야에서 가장 지식 전파 활동을 활발하게 하는 교육자입니다.
'시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리'(2024년, 대한민국 학술원 우수도서상) 저자
'디버깅을 통해 배우는 리눅스 커널의 구조와 원리' (2021년, 대한민국 학술원 우수도서상) 저자
'프로그래머스 데브 코스: 리눅스 시스템 및 커널 전문가' 메인 강사
2022년 6월, 한국컴퓨터종합학술대회 (KCC2022) - 튜토리얼 발표 [ftrace를 이용해 리눅스 커널 정복하기]
LG전자 '리눅스 커널' 및 'Armv8 아키텍처' 사내 강사(국내 및 해외 개발자 포함) - (2020년~현재)
국내에서 어느 누구보다 리눅스 커널과 Arm 아키텍처(Armv8-A, Armv7-A)를 잘 설명할 수 있는 교육자라고 자신있게 말씀드릴 수 있습니다.
주요 로드맵 🎯
'시스템 소프트웨어 개발자를 위한 Arm - basic course'
'시스템 소프트웨어 개발자를 위한 Arm - advanced course'
시스템 소프트웨어 개발자를 위한 Linux kernel - basic course
체계적으로 Arm 아키텍처(Armv8-A, Armv7-A)와 리눅스 커널을 배우시려는 분은 로드맵(전체 강의 30% 할인)을 활용하시면 좋습니다.
강의
로드맵
전체 3수강평
- 리눅스 소개와 리눅스 커널 Overview [저자직강 1부-1]
- Arm 아키텍처: 트러스트존(TrustZone) [저자직강 3부-1]
- 디버깅으로 배우는 RISC-V 아키텍처 -1부
- 리눅스 소개와 리눅스 커널 Overview [저자직강 1부-1]
게시글
질문&답변
실제 활용 예시 코드 요청 합니다
저도 요청하신 APK를 실습으로 활용하면 더 효율적으로 트러스트존에 대한 실무적인 내용을 전달할 수 있을 것이라 생각합니다. 하지만 트러스트존을 활용한 애플리케이션의 소스 코드나 APK는 공개되어 있지 않습니다. 이점 양해 부탁드리고요, Arm Trusted Firmware를 활용해 Secure OS의 동작 방식을 다루는 강의를 참고하시면 좋겠습니다.감사합니다.
- 0
- 2
- 46
질문&답변
학습 순서에 대한 질문입니다.
아래 질문 주신 사항에 대해 답신 드립니다.1. 리버싱리버싱의 목표나 범위에 따라 분석하려는 주제가 달라질 수 있습니다. 일반적으로는 아래 순서로 강의를 들으시면 리버싱을 진행하시는데 도움이 될 것이라 생각됩니다.시스템 소프트웨어 개발자를 위한 Arm - basic course시스템 소프트웨어 개발자를 위한 Linux kernel - basic course리버싱을 위해서는 - 어셈블리 명령어와 레지스터, 함수 호출 규약(AAPCS) 순서대로분석하시면 무난할 것으로 예상입니다. 특히 최근에 업데이트된 Arm 아키텍처 강의에서는TRACE32 프로그램을 내려 받아 어셈블리 명령어를 디버깅할 수 있는 내용도 있으니, 리버싱에 많은 도움이 될 것 같습니다. 2. 리눅스 커널 강의제가 쓴 책(디버깅을 통해 배우는 리눅스 커널의 구조와 원리)의 2부에 해당하는 강의는 지금 제작 중이며, 내년 3월 정도에 모든 강의가 Publish될 예정이니 참고하셨으면 좋겠습니다.감사합니다.
- 0
- 1
- 28
질문&답변
인터럽트 처리 순서
아래 문의 주신 질문에 답변드립니다:Big picture에서 보이는 GIC는 주변 장치에서 발생한 인터럽트를 수신하여 처리하는 하드웨어 유닛(IP)입니다.콜 스택에 나타난 gic 관련 핸들러 함수는 Arm 프로세서가 GIC의 CPU 인터페이스로부터 인터럽트를 성공적으로 수신하여 처리하고 있다는 확인(Acknowledgement) 작업을 수행합니다. 익셉션 핸들러 다음에 GIC가 처리되는 것은 아닙니다.추가로 궁금하신 점이 있으면 문의주세요.감사합니다.
- 0
- 2
- 53
질문&답변
preemption 체크 관련 질문
확인 방법이 다른 이유는 인터럽트가 유발된 후 유저 공간으로 복귀하는 프로세스와 커널 공간에서 실행되는 프로세스의 Preemption을 다른 방식으로, 유연하게 처리하기 위해서입니다. 리눅스 커널에서는 기본적으로 CFS 스케줄러에 의해 프로세스의 실행 시간이 관리되는데, 프로세스에게 일정 시간 실행될 수 있는 timeslice를 제공합니다. timeslice를 프로세스가 다 소진했을 때는 preemption될 대상이 되며, 아래와 같이 설정됩니다. 유저 프로세스인 경우 flags를 TIFNEED_RESCHED 로 설정 커널 공간에서 실행되는 프로세스인 경우 preempt_count를 0으로 설정 감사합니다.
- 0
- 2
- 51
질문&답변
Exception Level 설정 관련 질문
질문 주신 내용에 대해 답신드립니다:1. 어셈블리 명령어를 실행해서 익셉션 레벨을 변경할 수는 있습니다. 예를 들어 EL2에서 EL1, 혹은 EL1 에서 EL0으로 낮은 익셉션 레벨로 변경할 수 있습니다.2. 어셈블리 명령어를 실행해서(예시: SVC) 더 높은 익셉션 레벨로 진입할 수는 없습니다. 3. 부팅한 다음에 확인되는 익셉션 레벨은 EL3이며, 칩셋 레벨에서 하드웨어적으로 설정됩니다. 혹시 '시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 1부 저자 직강 (2024년 버전)'을 수강하셨다면, 아래 섹션에서 관련 내용을 확인하실 수 있습니다: -> 섹션 12. [보충] 6.익셉션 레벨: 부팅과정에서 설정되는 익셉션 레벨 https://inf.run/7jyaB감사합니다.
- 0
- 2
- 57
질문&답변
Current EL 관련 질문
Current Exception level을 직역해서 해석하면 현재 익셉션 레벨입니다. 익셉션 벡터 테이블을 해석할 때는 Current Exception level는 익셉션을 핸들링하는 익셉션 벡터 (혹은 익셉션 핸들러)가 존재하는 익셉션 레벨로 해석하시면 됩니다.예를 드신 내용으로 설명드리면요: User App이 실행 중 Exception이 발생했다면, User App이 실행되는 EL0에서 EL1으로 익셉션이 스위칭됩니다. 즉, EL1에 존재하는 VBAR_EL1에서 해당 익셉션(User App이 실행 중 Exception이 발생)을 처리하는데요, 다음과 같이 해석하시면 됩니다.Current Exception level = EL1 Lower Exception Level = EL0 따라서 'Lower Exception Level'에 표기된 오프셋을 기준으로 익셉션 벡터 주소로 분기됩니다. 추가로 궁금하신 점이 있으면 질문해주세요.감사합니다.
- 1
- 1
- 91
질문&답변
T32에 관련해서
질문 주신 내용에 대해 답신 드립니다:1. 강의에서 제공하는 T32 프로그램을 따로 만들어서 진행 부탁드립니다. 실습을 진행하실 때는: 되도록 기존에 (회사에서) 사용하시던 T32 폴더는 T32_back으로 변경하고, 인프런 강의에서 제공하는 TRACE32프로그램을 C:\T32 폴더에 위치시켜서 실습을 진행하시길 권장드립니다. 프로그램 간에 충돌이 일어날 수 있어 이렇게 권장 드립니다.2. (인프런에 올린 TRACE32 프로그램은) 맥북에서 실행되지는 않습니다. 이점 양해 부탁드립니다.감사합니다.
- 0
- 2
- 64
질문&답변
강의 화면에 아무것도 나오지 않고 오디오만 나오네요
아래 문의 주신 사항에 대해 답신 드립니다:1. '커널 디버깅(Debugging) 직접 따라해보기' 강의를 다시 재생했는데요.강의 화면이 제대로 나오는 것(음성 및 강의 화면 제대로 재생)을 확인했습니다. 2. 다른 강의도 플레이를 했는데, 강의 화면에 아무것도 나오지 않고 오디오만 나오는 문제는확인할 수 없었습니다.혹시 오디오만 나오는 문제가 추가로 확인되면, 강의 제목과 오디오만 나오는 부분을알려주세요. 인프런 담당자께 공유드리고 조치되도록 진행하겠습니다.
- 0
- 3
- 67
질문&답변
TRACE32 사용 실습에서 RASPIAN KERNEL DEBUG
질문 주신 내용을 영상으로 촬영해서 답신 드립니다.새로 업데이트된 강의 커리큐럼에서 아래 영상을 확인하실 수 있습니다.44. [수강생 질문 답변] 3.2.1.5 실습(TRACE32 프로그램)을 하는 방법 44번 강의에 업로드된 '강의 노트'의 내용은 아래와 같으니 함께 확인해주세요:---3.2.1.4, 3.2.1.5 실습을 하는 방법에 대해 수강생 분이 문의 주셨는데요.이 질문에 대해 알려드리는 영상입니다.강의에서 사용된 명령어(TRACE32)는 아래와 같으니 참고하세요.r.s pc 0xC1000C94d.l 0xC1000C943.2.1.4, 3.2.1.5 실습 강의 관련 이력은 아래와 같습니다: (1). 2023년도 5월 촬영 (TRACE32를 수강생 분들이 다운로드 받을 수 없는 조건)3.2.1.4 실습: Armv7 범용 레지스터 확인 실습 (TRACE32)3.2.1.5 실습: 브랜치 동작 시 Armv7 범용 레지스터 사용 실습 (TRACE32)(2). 2024년 6월 TRACE32 디버깅 실습 추가 - 2024년 버전 TRACE32 프로그램(시뮬레이터)을 내려 받아 실습할 수 있음(3). 2024년 9월 15일: 본 영상 제작 TRACE32 프로그램(시뮬레이터)을 내려받아서 3.2.1.5 실습을 할 수 있는 방법 업데이트---
- 0
- 2
- 107
질문&답변
강의자료 관련 문의입니다.
강의 문서를 업로드했습니다. 세션 1- 강의 자료에 가시면 강의에서 사용된 문서를 확인하실 수 있습니다.
- 0
- 3
- 77