IT/Linux Kernel 13

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 13 - 커널 스레드

안녕하세요.   이전 글에서는 유저공간에서 실행되는 프로세스를 봤습니다. 이제 커널 공간에서 실행하는 프로세스에 대해 알아보는 시간입니다.   1. 커널 스레드  커널 프로세스는 커널 공간에서만 실행되는 프로세스이며 대부분 커널 스레드 형태로 동작합니다. 리눅스 시스템 프로그래밍에서 데몬과 비슷한 처리를 하는데 데몬과 커널 스레드는 백그라운드 작업을 실행하면서 시스템 메모리, 전원 제어동작 수행합니다. 커널 스레드 특징  커널 공간에서만 실행함  유저 영역과 시스템 콜을 받지 않고 동작하는 것이 데몬과 차이  실행, 휴면 등 모든 동작을 커널에서 직접 제어 관리  대부분 커널 스레드는 시스템이 부팅할 때 생성하고 종료할 때까지 백그라운드로 실행  2. 커널 스레드 종류 1) 커널 스레드 항목 확인  ps..

IT/Linux Kernel 13:34:29

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 12 - 4_4_user_process생성과 종료 과정 분석

안녕하세요.  이전 글에서 4_4_user_process라는 사용자 프로그램을 만들어 ftrace 메시지까지 만들어 봤습니다. 책에서는 raspbian_proc로 만들어 테스트한 내용입니다. 내용은 거의 동일합니다.   ftrace 메시지를 바탕으로 프로세스가 어떻게 생성되고 종료하는지 과정을 분석하는 내용입니다.  1. ftrace_log.c 분석 준비  분석할 내용은 get_ftrace.sh를 실행 디렉터리에 ftrace_log.c 파일로 되어 있을 것입니다.파일을 열어 확인합니다.  이전에 봤던 메시지 형태입니다. 그런데 얼마 실행하지 않은 것 같은데 많은 양의 메시지가 저장되어 있습니다. 전체 다 보는 것은 아니고 실행했던 파일 부분을 찾아서 보겠습니다.  rpi_kernel_src $ vim f..

IT/Linux Kernel 2025.03.23

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 11 - _do_fork() 흐름 파악과 ftrace 메시지 추출

안녕하세요.    _do_fork() 함수를 알아보기 위한 사전 정보가 조금 필요에 _do_fork() 마무리하지 못해서 추가 부분을 정리해 봅니다.  1. 유저 레벨 프로세스 생성 시 _do_fork() 함수처리 흐름  유저 레벨 프로세서 생성할 때 흐름은 아래와 같이 fork() 함수 호출하면 glibc 통해 시스템콜을 발생하고 이에 대응하는 sys_clone() 함수 호출합니다. 이후 호출을 따라가면 _do_fork() 함수를 호출합니다.  1) sys_clone 함수  sys_clone() 함수 내부를 보면 return 값(PID)을 받기 위해 _do_fork() 함수를 호출합니다.  SYSCALL_DEFINE5 매크로와 함께 커널 소스 빌드하는 과정에서 sys_ 접두사가 붙여 sys_clone으..

IT/Linux Kernel 2025.03.20

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 10 - 프로세스 생성

안녕하세요.   프로세스와 스레드에 대해 보았고, 이번에 생성하는 과정을 확인을 알아보겠습니다.  진행하기 앞서서 유저 모드와 커널 모드 부분을 먼저 알고 시작해야 할 것 같아서 앞쪽 내용에 추가해 보았습니다. 알고 있는 내용이면 이 부분은 넘어가고 아래쪽 2. 프로세스 생성부터 보면 됩니다.  1. 유저 모드와 커널 모드 그리고 영역  유저 모드와 커널 모드가 나오면, 권한에 관한 것이라고 알 수 있는데, 공간에 대한 개념이 같이 나오기 때문에 혼돈이 있을 것 같아서 나눠서 생각해 보면 좋을 것 같아서 추가해 보았습니다. 1) 유저 모드와 커널 모드 (1) 유저 모드(User Mode)  - 권한 수준: 제한된 권한을 가진 모드입니다. 응용 프로그램(예: 웹 브라우저, 문서 편집기)이 주로 유저 모드에..

IT/Linux Kernel 2025.03.17

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 9 - 프로세서란

안녕하세요.   드디어 디버깅의 영역에서 벗어나 프로세스의 영역으로 들어오게 되었습니다. 프로세스 부분도 양이 많아서, 배워야 할 것이 적지 않을 것으로 생각됩니다.  책 내용을 천천히 정리해 가는 것으로 생각하면 좋을 것 같습니다.  1. 프로세스란?  리눅스 개발자 입장에서 프로세스는 리눅스 시스템 메모리에 적재되어 실행을 대기하거나 실행하는 실행 흐름을 의미합니다.  프로세스를 관리하는 자료구조이자 객체를 태스크 디스크립터(task descriptor)라고 부르고 task_struct구조체로 표현합니다. 이 구조체에 프로세스가 사용하는 메모리 리소스, 프로세스 이름, 실행 시각, 프로세스 아이디(PID), 프로세스 최상단 주소와 같은 속성정보가 지정되어 있습니다. 그러나 이것만으로 프로세스의 흐름까..

IT/Linux Kernel 2025.03.12

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 8 - debugsfs 드라이버 코드

안녕하세요.   지금까지 디버깅방법을 알아봤습니다. 그런데 커널 소스를 수정하는 것에 낯설게 느껴지고 수정하다가 부팅이 안되면 어떡하지 약간의 불안감도 있을 것입니다. 그래서 저도 코드를 작성할 때 한번 더 확인하고, 기존의 작업했던 내용은 SD Card 내용을 전체 백업을 하였습니다.  사실 커널 코드를 잘못 입력하거나 실수하면 시스템이 오동작할 수 있습니다. 즉 부팅이 안될 수 있습니다. 그래서 책에서는 이것을 조금 방지하고자 debugfs 드라이버 코드를 알려줍니다.  1. debugfs 드라이버 원리  전역 변수처럼 변수를 셀에서 설정 값을 주었을 때만 코드가 작동하고, 재부팅하거나 설정값을 초기화하면 원래코드로 동작하는 간단한 원리입니다.   그러나 커널 코드다 보니, 드라이버 파일로 만들어 작..

IT/Linux Kernel 2025.03.09

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 7 - ftrace 사용법 및 분석해 보기

안녕하세요. 이전 글에서 printk()와 dump_stack() 함수를 확인했습니다. 두 함수에는 사용할 때 자주 호출하는 함수에는 사용하기가 어렵다는 주의점이 있었습니다. 이런 부족한 점을 충족하기 위한 커널 디버깅 소프트웨어가 필요했습니다.   1. ftrace 란?  기존의 커널 디버깅 부족함을 해결해 줄 수 있는 요구사항(함수 호출 흐름을 소스코드 수정하지 않고 확인하고 싶다, 커널의 세부 실행 정보를 출력 원함, 수십 번 호출해도 성능에 부담 주지 않았으면 함, 커널 로그도 함께 보고자 함)을 충족하는 디버깅 기능의 소프트웨어입니다.  ftrace 특징으로  - 인터럽트, 스케줄링, 커널 타이머 등의 커널 동작 추적  - 코드 수정할 필요 없이 함수 필터 지정한 함수와 호출한 함수 콜 스택 출..

IT/Linux Kernel 2025.03.05

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 6 - printk와 dump_stack 함수

안녕하세요.  이번 시간은 printk()와 dump_stack()함수에 대해 학습하고 간단하게 디버깅 하는 방법을 알아 보겠습니다.  1. printk 함수  이미 C언어를 접해본 분이라면 printf 함수에 대해 잘 알고 있을 거라 생각됩니다. 함수 끝에 k가 붙은 것처럼 kernel에서 사용하기 위한 함수라는 것을 느낄 수 있을 것입니다.  이미 커널의 수많은 내부 함수에서도 printk 함수를 이용해서 에러 정보를 커널 로그에 출력하고 있습니다.   아래 내용은 책에서 소개한 porcess.c 파일의 일부 내용입니다. __show_regs 함수가 실행되면 레지스터 내용을 커널 로그에 출력하는 일부 코드입니다.   1) printk 형식  int printk(const char *fmt, ...);..

IT/Linux Kernel 2025.03.01

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 5 - 디버깅과 ftrace 예습

안녕하세요.  이번 장에서는 디버깅하는 방법 예습차원에서 중요성, ftrace 내용을 알려주고 있습니다.내용 잘 학습해 보아요. 1. 디버깅의 중요성 1) 임베디드 및 BSP 개발 도중 만나는 대표적인 문제  - 부팅 도중 커널 크래시 발생 - 인터럽트 핸들러를 설정했는데 인터럽트 핸들러가 호출되지 않음 - 시스템 응답 속도가 매우 느려짐 - 파일 복사가 안됨 - 다른 개발자가 작성한 커널 코드를 만날 가능성이 높음   (디바이스 드라이버는 커널함수로 구성되어 있으며 각 서브 시스템을 담당한 개발자가 작성한 코드이기 때문입니다.)  그렇기 때문에 정상적인 동작할 때 몇 가지 내용 파악이 필요   - 함수가 실행될 때 변경되는 자료구조 - 함수가 실행되는 빈도와 실행 시간 - 실행 중인 코드를 어떤 프로세..

IT/Linux Kernel 2025.02.26

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 4 - 전처리 코드 생성과 objdump 사용

안녕하세요.   라즈베리 파이 커널을 설치하고 나머지 뒷부분을 마무리하도록 하겠습니다.  리눅스 커널을 빌드하는 과정에서 전처리코드를 생성하는 방법이 나옵니다.커널에는 많은 양에 매크로가 소스분석에 걸림돌이 됩니다. 그래서 소스코드를 분석할 때 전처리 코드를 함께 보는 것을 추천하며 추출하는 방법 두 가지를 알려 줍니다.  1. 전처리 코드 생성 1) 전체 전처리 파일 추출  이전 글에서 처럼 root 권한을 얻어서 다음 내용을 진행합니다.  리눅스 커널 소스 디렉터리 안에 Makefile이 있습니다.  대략 420번 줄 KBUILD_CLAGS에 "-save-temps=obj \"를 추가해 주고 build 스크립트를 실행해 주면 전체 소스 파일에 전처리코드가 담긴 *.i, *.s 파일이 생성됩니다. 약 ..

IT/Linux Kernel 2025.02.20

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 공부하기 3 - Raspberry Pi4 설정 및 리눅스 커널 빌드와 설치

안녕하세요.   이전 시간에 Kernel 4.19 버전을 설치하기 위해서 몇 가지 사항을 확인했습니다.  이번에는 책에 나온 몇 가지를 추가 설정과 커널 빌디와 설치까지 해보겠습니다. 작업은 SSH Terminal로 접속해서 진행했습니다.   1. 추가 설정 (1) 언어 설정 Chrome과 한글문제를 해결하기 위해서 설치와 설정 몇 가지를 합니다.$ sudo raspi-config "4. Localisation Option->I1 Change Locale"에서 en_GB.UTF-8, en_US.UTF-8, ko_kr.UTF8(선택되어 있음)을 스페이스 바를 눌러 선택하고 확인 누르면 설정이 완료됩니다.    Localisation 철자가 틀렸다고 생각하시는 분이 있지 않나요? Localization 아닌..

IT/Linux Kernel 2025.02.16

디버깅을 통해 배우는 리눅스 커널의 구조와 원리, 도서 공부하기 2 - Raspberry 4 설치(kernel 4.19)

안녕하세요.   설치하는 것까지 자세히 적으려고 한 것은 아닌데 최대한 책과 동일한 커널 버전의 라즈베리파이 버전으로 맞추려고 했습니다.  그러나 몇 가지 문제가 생겨 해결한 방법도 같이 공유하려고 합니다.   1. 라즈베리파이 OS (라즈비안) 설치  Raspberry Pi Imager로 설치하면 되는 되는 것 아니냐 할 수 있지만 Imager로 바로 설치할 경우 최신 버전의 라즈베리파이 OS이 설치되고 커널 버전도 높아 책과 차이가 발생할 것입니다. imager의 32bit Legacy 버전도 bullseye입니다. Raspberry Pi Imager 다운로드https://www.raspberrypi.com/software/    이것저것 해본 내용을 적어 봅니다.   운영체제 선택에서 우리가 받은 ..

IT/Linux Kernel 2025.02.14

디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1, 도서 학습 1 - 시작 준비

안녕하세요.  시간이 조금 지났지만, 디바이스 드라이버 개발에 깊이를 더 하려고 하니 리눅스 커널에 대해서 이해가 필요하다는 것을 알게 되었습니다. 그래서 책을 보며 학습하는 내용을 정리해 보기로 했습니다.   1. Linux Kernel 학습 위한 책 선정 이유  리눅스 커널을 학습할 수 있는 많은 책들이 있는데 그중에 추천받은 책으로 진행하기로 했습니다. "디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1" 책으로 1, 2권으로 나눠져 있습니다.  또 하나는 선택한 이유 중에 하나는 테스트하는 보드가 라즈베리파이라는 것입니다. 다른 책들도 가능하지만 실습환경 맞춰 따라 하기가 쉽지 않다는 것입니다. 현재 출간된 버전도 라즈베리 파이 3으로 작성되어 실습이 안 되는 부분이 있다고 하지만, Pi 4로 ..

IT/Linux Kernel 2025.02.12