Guillermo Austin Kim
Posts
998 posts[Linux][Kernel] __init 매크로 (라즈베리파이)
코드 리뷰를 하다 보면 함수 앞에 __init 코드가 붙은 것이 보입니다. 음, 이 __init이란 코드는 어떤 동작을 할까요?같이 살펴볼게요. 그럼 다음 코드를 한번 같이 볼까요? 위에서 말씀드린대로 init_workqueues 함수 앞에 __init가 붙어 있습니다. 참고로, init_workqueues 함수는 이름과 같이 워크큐를 초기화하는 역할을 수행합니다.[kernel/workqueue.c]static int __init init_workqueues(void){ int std_nice[NR_STD_WORKER_POOLS] = { 0, HIGHPRI_NICE_LEVEL }; int i, cpu; 이전 장에서 C 코드를 보다가 조금 이라도 의문이 생기면 전처리 파일을 열어보는게 좋다고 했죠?이번
[Linux][Kernel] 매크로 ##uname 파라미터 전달 기법
여러분 리눅스 커널 코드를 자주 보시나요? 그런데 커널 소스를 보다가 막힐 때가 종종 있지 않나요? 함수를 따라 가다 보면 존재하지 않는 함수를 호출해서 길을 잃기도 합니다. 그리고 매크로가 너무 많아서 분석 시간이 너무 오래 걸리는 경우도 있습니다. 이번 장에서는 리눅스 커널 코드를 읽다가 만나는 매크로를 모두 풀어보겠습니다. 이 매크로만 풀어도 리눅스 커널 소스 코드를 아주 효율적으로 읽을 수 있어요. 자 그럼 한 가지 예를 들게요. 아래 코드를 보면 PageReclaim와 ClearPageReclaim 함수가 보입니다.[mm/filemap.c]void end_page_writeback(struct page *page){ if (PageReclaim(page)) { ClearPageReclaim
arm instruction(명령어) - ldr
그럼 ldr 명령어의 정의에 대해서 같이 배워볼까요? LDR 명령어는 메모리에서 워드를 레지스터로 읽어 드리는 동작입니다. 자 그럼 아래 명령어를 예를 들어 같이 볼까요? 참고로 R1은 0xD2FB0000라고 하겠습니다.ldr r0, [r1] 그런데 0xD2FB0000메모리 주소에는 00000001란 값이 있다고 가정할께요.메모리주소 값NSD:D2FB0000|>00000001 C50F6000 00000004 40400040 “ldr r0, [r1]” 명령어가 수행되면 r0은 0000000으로 업데이트 됩니다. r1(0xD2FB0000)이 갖고 있는 메모리 값을 r0에 로딩하는 동작이죠. 그럼 아래와 같은 명령어가 실행되면 어떻게 업데이트 될까요?ldr r0, [r1,#0x4] r1에서
arm instruction(명령어) - push & 스택 푸쉬
push & 스택 푸쉬리눅스 커널 함수를 어셈블리 코드로 열어보면 바로 push란 명령어가 눈에 보입니다. 그럼 정말 맞는지 샘플 코드를 볼까요? 아래 코드는 리눅스 커널 핵심 함수입니다. 각 함수에서 가장 먼저 실행되는 명령어가 push죠.NSR:C0FF413C|__schedule: push {r4-r11,r14}NSR:C0FF4140| add r11,r13,#0x20 ; r11,r13,#32NSR:C0FF4144| ldr r3,0xC0FF4948 NSR:C017B0C4|handle_irq_event_percpu: push {r0-r2,r4-r11,r14}NSR:C017B0C8|
[라즈베리파이][리눅스커널]인터럽트 컨택스트란 (1) #CS
인터럽트 컨택스트란인터럽트 컨택스트란 용어가 좀 낯설진 않나요? 그래서 인터럽트 컨택스트를 배우기 전에 우선 컨택스트란 용어를 배울 필요가 있습니다. 혹시 컨텍스트 스위칭이란 단어 들어보신 적이 있나요? 리눅스 커널에서 많이 쓰는 용어인데요. 어렵게 설명하면 컨텍스트란 현재 실행하고 있는 레지스터 묶음을 의미합니다. ARM 프로세스에서는 15개의 레지스터(r0부터 pc)가 있다고 알고 있죠? 이 레지스터 중에 현재 실행 중인 코드 주소를 담고 있는 pc(Program Counter)란 레지스터가 있는데요. 만약 현재 커널이 start_kernel이란 함수를 실행하고 있는데 이 함수의 주소가 0xC000D000이면 pc란 레지스터는 0xC000D000 주소를 담고 있습니다. 이렇게 PC 레지스터를 포함한

![[Spoiler] 점프 신작 '공주님 고문 시간입니다' 원작자에 '우공못' 작가 그림. '시간정지용사' 또다른 플레이어? '다음에 오는 만화 대상' 운영 잡지 폐간](https://img.zoomtrend.com/2026/06/07/1780881297-ECA090ED948426-28EC95A0EB8B88EBA980EC8B9CEAB7B8EB8490.jpeg)
