리눅스커널
Posts
154 posts[리눅스커널] thread_info 구조체의 preempt_count - 인터럽트 컨텍스트 실행 저장
리눅스 시스템에서 인터럽트는 언제든지 발생할 수 있습니다. 인터럽트가 발생하면 프로세스 실행을 멈추고 인터럽트에 해당하는 인터럽트 핸들러를 실행합니다. 커널에서는 인터럽트가 발생해서 인터럽트 서비스 루틴을 실행하는 동작을 인터럽트 컨텍스트라고 부릅니다. ---참고로 인터럽트는 외부 입출력 장치에 어떤 변화가 있을 때 발생하는 전기 신호 혹은 이를 CPU에게 알려서 처리하는 과정을 뜻합니다. 리눅스 커널은 인터럽트를 처리할 수 있는 함수를 지원하며, 자세한 내용은 5장의 5.1절에서 설명합니다.--- thread_info 구조체의 preempt_count 필드에 인터럽트가 실행 중인 상태를 나타내는 비트를 설정합니다. 이 비트를 읽어 인터럽트 컨텍스트 유무를 식별합니다. 리눅스 커널에서는 현재 실행 중
[리눅스커널] 프로세스: 커널 스레드는 어떻게 생성할까?
이어서 커널 스레드를 생성하는 과정에서 호출되는 함수를 소개하고 세부 코드를 분석하겠습니다. 커널 스레드가 생성되는 과정은 크게 2단계로 나눌 수 있습니다. 1) 1단계: kthreadd 프로세스에게 커널 스레드 생성을 요청 kthread_create() kthread_create_on_node() 2) 2단계: kthreadd 프로세스가 커널 스레드를 생성 kthreadd() create_kthread() 각 단계별로 실행되는 함수를 살펴보겠습니다. 1단계: kthreadd 프로세스에게 커널 스레드 생성 요청 유저 프로세스를 생성하려면 fork() 함수를 호출해야 하듯이, 커널 스레드를 생성하려면 kthread_create() 커널 함수를 호출해야 합니다. 먼저 kthreadd 프
[리눅스커널] 인터럽트: 'Unbalanced enable for IRQ' 메시지에 대해서
프로젝트를 개발하다 보면 다음과 같은 WARN() 메시지를 커널 로그로 볼 수 있다. Unbalanced enable for IRQ 23------------[ cut here ]------------WARNING: at kernel/irq/manage.c:437:NIP [c00000000016de8c] .__enable_irq+0x11c/0x140LR [c00000000016de88] .__enable_irq+0x118/0x140Call Trace:[c000003ea1f23880] [c00000000016de88] .__enable_irq+0x118/0x140 (unreliable)[c000003ea1f23910] [c00000000016df08] .enable_irq+0x58/0xa0[c000003ea
[리눅스커널] 딜레이 워크: 패치 코드 내용과 작성 방법 알아보기
이번 절에서는 딜레이 워크를 만들어보는 실습을 진행합니다. 실습할 패치 코드 시나리오는 다음과 같습니다. 인터럽트 핸들러에서 워크를 큐잉 워크 핸들러 실행 워크 핸들러에서 딜레이 워크를 실행 이번 장에서 배운 내용을 총복습하는 실습입니다. 먼저 패치 코드를 작성해 봅시다. 패치 코드의 내용과 작성 방법 먼저 패치 코드를 소개하겠습니다. diff --git a/drivers/mailbox/bcm2835-mailbox.c b/drivers/mailbox/bcm2835-mailbox.c--- a/drivers/mailbox/bcm2835-mailbox.c+++ b/drivers/mailbox/bcm2835-mailbox.c@@ -33,11 +33,23 @@1 #include



![[CV] [Comi] 'ファイブスター物語'(더 파이브 스타 스토리즈) 19권. 연재분에서 벌어지는 '검성 대 검성'](https://img.zoomtrend.com/2026/06/06/1780766083-ECB2ABEB93B1EC9EA5EB8DB0ECBD94EC8AA4.jpg)