Linux Kernel

atomic_set 연산에 대하여

start_kernel() -> cgroup_init_early 함수를 보면 아래와 같은 코드가 있습니다. atomic_set(&init_css_set.refcount, 1); 그런데, atomic_set 매크로는 아래와 같이 되어있군요. #define atomic_set(v,i) (((v)->counter) = (i)) 왜 그냥 init_css_set.refcount = 1 과 같이 하면 될 것을 굳이 이렇게 한꺼풀을...

local exclusive monitor & global exclusive monitor

Exclusive Monitor 는 메모리 접근에 대한 동기화를 위해서 ARM 에서 제공하는 방식입니다. ARM Information Center 에 가보면 아래와 같은 예제 그림이 나와 있네요. Exclusive Monitor 는 위와 같이 Local Monitor 와 Global Monitor 가 존재하는데, 그림에는 나와있지 않지만 Exclusive...

매크로에서 # 와 ## 의 차이

매크로에서 # 와 ## 의 차이

# : stringification 기본적으로 컴파일러에서 처리하는 문자열들은 token으로 보는데, 이 token들을 string constant로 처리하고자 할 때 사용합니다. 즉, 아래 예제에서처럼 val 이라는 token 을 “val” 문자 자체로 사용하게게 됩니다. 사용 시 한 가지 주의할 점은, 이 경우 argument를...

arm/kernel/head.S (2) – proc_info_list 구조체의 값은 누가 언제 채웠는가?

arm/kernel/head.S (2) – proc_info_list 구조체의 값은 누가 언제 채웠는가?

Makefile 을 보면 processor 관련 config 에 따라 arch/arm/mm 에서 build 하는 파일이 다릅니다. 우리 분석 환경의 .config 에는 다음과 같이 설정되어 있습니다. CONFIG_CPU_V7=y CONFIG_CPU_32v6K=y CONFIG_CPU_32v7=y CONFIG_CPU_ABRT_EV7=y CONFIG_CPU_PABRT_V7=y CONFIG_CPU_CACHE_V7=y CONFIG_CPU_CACHE_VIPT=y CONFIG_CPU_COPY_V6=y CONFIG_CPU_TLB_V7=y CONFIG_CPU_HAS_ASID=y CONFIG_CPU_CP15=y CONFIG_CPU_CP15_MMU=y...

arm/kernel/head.S (1) – Code Flow

arm/kernel/head.S (1) – Code Flow

arch/arm/boot/compressed/head.S 파일의 경우는 사실 이래저래 복잡해보여도, 핵심 역할은 다음과 같았습니다. 메모리에 올린 zImage 가 위치를 잘못잡았을 경우 이미지의 위치를 재배치한다. zImage 속에 삽입된 원래의 압축된 커널 이미지를 zImage 가 속한 128 M 메모리 경계 시작지점...