[라즈베리파이] 라즈비안(Raspbian) 리눅스 커널(LinuxKernel) 빌드하기
By Guillermo Austin Kim | 2019년 5월 14일 |
이번 절에서는 라즈베리파이에서 라즈비안 리눅스 커널 소스 코드를 내려받고 빌드하는 방법을 알아보겠습니다. 필자는 라즈베리파이를 쓸 때 다음 명령어로 root로 변경해 커널 빌드를 합니다.$ sudo su 명령어 입력 과정에서 불필요한 권한 설정을 피하기 위해서입니다. 라즈비안 커널 소스 코드 내려받기 리눅스 커널 소스 코드를 다운로드 받는 방법을 소개합니다. 다음 명령어를 입력하면 라즈비안 최신 커널 소스를 내려 받을 수 있습니다.git clone --depth=3000 위 명령어를 라즈베리파이 터미널에서 입력하면 다음 화면을 볼 수 있습니다.root@raspberrypi:/home/pi/RPi_kernel_src# git clone --depth=3000 into 'linux'...remote
[리눅스커널] 스케줄링: 스케줄링/디버깅: ftrace: sched_switch와 sched_wakeup 이벤트 소개
By Guillermo Austin Kim | 2019년 9월 15일 |
리눅스 커널 ftrace 에서 sched_switch와 sched_wakeup 이벤트를 지원합니다. 각각 이벤트에 대해 소개하고 메시지를 분석하는 방법을 살펴보겠습니다. 리눅스 커널의 프로세스 동작을 처음 접하는 분들이 겪는 어려움이 있습니다. 실제 리눅스 시스템에서 얼마나 자주 프로세스가 스케줄링 되는지 확인할 수 없다는 것입니다. 그 이유는 간단합니다. 코드를 분석한 내용을 실제 리눅스 시스템에서 확인하지 않기 때문입니다. 그래서 임베디드 리눅스를 개발할 때 모듈이나 드라이버 코드가 실행할 때 어떤 프로세스가 어떻게 스케줄링 되는지 확인하기도 어렵습니다. 리눅스 커널에서는 이런 의문을 해소시킬 수 있는 디버깅 기능을 지원합니다. 바로 ftrace입니다. ftrace 에는 프로세스
[Linux][Kernel] 슬랩 메모리: kmalloc 소개
By Guillermo Austin Kim | 2018년 4월 9일 |
리눅스 커널에서 메모리란 소리만 나와도 공포에 질리는 분들이 있습니다. 예전에 저도 그랬죠. 스타크래프트에서 테란 조이기를 당할 때와 비슷한 느낌이었죠. 정말 갑갑했죠. 메모리풀, vmalloc, 슬랩 메모리, 하이 메모리 등등 용어를 듣다 보면 뇌정지가 올 때가 있습니다. 그런데 나중에 깨닫게 된 사실은 리눅스 커널에서 메모리를 제대로 이해하는 개발자가 매우 적다는 것이었습니다. 그래서 조금 위안을 가졌죠. 리눅스 커널 메모리 시스템을 이해하려고 리눅스 커널 코드를 열어 보는 분들이 있습니다. 이것은 정말 옵져버 없이 럴커 밭에 달려드는 질럿과 같습니다. 절대 이렇게 분석하면 포기할 수 밖에 없습니다. 그 이유는 리눅스 커널 메모리 관련 코드가 정말 어렵거든요. 그럼 어떻게 리눅스 커널 메모리 시스템을
[리눅스커널] thread_info 구조체의 preempt_count - 인터럽트 컨텍스트 실행 저장
By Guillermo Austin Kim | 2020년 2월 29일 |
리눅스 시스템에서 인터럽트는 언제든지 발생할 수 있습니다. 인터럽트가 발생하면 프로세스 실행을 멈추고 인터럽트에 해당하는 인터럽트 핸들러를 실행합니다. 커널에서는 인터럽트가 발생해서 인터럽트 서비스 루틴을 실행하는 동작을 인터럽트 컨텍스트라고 부릅니다. ---참고로 인터럽트는 외부 입출력 장치에 어떤 변화가 있을 때 발생하는 전기 신호 혹은 이를 CPU에게 알려서 처리하는 과정을 뜻합니다. 리눅스 커널은 인터럽트를 처리할 수 있는 함수를 지원하며, 자세한 내용은 5장의 5.1절에서 설명합니다.--- thread_info 구조체의 preempt_count 필드에 인터럽트가 실행 중인 상태를 나타내는 비트를 설정합니다. 이 비트를 읽어 인터럽트 컨텍스트 유무를 식별합니다. 리눅스 커널에서는 현재 실행 중