번외!asmlinkage__visible__init__no_sanitize_address__noreturn__no_stack_protectorboot_cpu_init()page_address_init()버킷 (bucket)pr_notice("%s", linux_banner);
번외!
asmlinkage
- 함수가 호출될 때 인자들이 레지스터가 아닌 스택을 통해 전달되어야 함을 나타낸다.
- 주로 시스템 콜이나 인터럽트 핸들러와 같이 어셈블리 언어와의 인터페이스에서 사용됨
__visible
- 함수가 다른 파일에서도 보이게 해야 함을 나타냄
- 주로 모듈 간에 함수가 공유될 필요가 있을 때 사용됨, 이는 정적 링킹(static linking) 시에 해당 함수가 외부에서 접근 가능하도록 함
__init
- 이 매크로는 함수가 초기화 코드의 일부임을 나타냄
- 초기화가 완료된 후에는 메모리에서 해당 함수를 해제할 수 있음을 컴파일러에게 알림
→ 효율적인 커널 메모리 활용
__no_sanitize_address
- 주소 산정 오류 검사(Address Sanitizer, ASan)를 비활성화
- ASan은 메모리 오류를 탐지하는 도구로, 런타임에 메모리 접근을 확인하여 오류를 찾아냄
- 일부 낮은 수준의 커널 코드에서는 이 기능을 비활성화할 필요가 있음
__noreturn
- 함수가 반환되지 않음을 나타냄
즉 종료 함수를 호출하거나, 시스템을 재부팅 하거나, 아니면 계속 다른 코드를 실행함
__no_stack_protector
- 스택 보호기능(Stack Protector)을 비활성화
- 스택 보호기능은 함수의 반환 주소나 로컬 변수들이 버퍼 오버플로우 공격에 의해 손상되는 것을 방지하기 위해 사용되는 보안 기능
- 그러나, 커널의 특정 부분에서는 이 기능이 성능 저하를 일으킬 수 있으므로 비활성화가 필요할 수 있음
boot_cpu_init()
첫 번째 프로세서 활성화 수행
/* * Activate the first processor. */ void __init boot_cpu_init(void) { int cpu = smp_processor_id(); /* Mark the boot cpu "present", "online" etc for SMP and UP case */ set_cpu_online(cpu, true); set_cpu_active(cpu, true); set_cpu_present(cpu, true); set_cpu_possible(cpu, true); #ifdef CONFIG_SMP __boot_cpu_id = cpu; #endif }
smp_processor_id()
를 사용해 현재 CPU의 ID를 가져옴
set_cpu_online()
,set_cpu_active()
,set_cpu_present()
,set_cpu_possible()
를 사용해 CPU의 상태를 설정.
SMP (Symmetric Multiprocessing)
및 UP (Uniprocessor)
시스템 모두를 고려한다.- SMP 환경에서는 부팅 CPU의 ID를
__boot_cpu_id
변수에 설정
page_address_init()
페이지 주소의 해시 테이블을 초기화
void __init page_address_init(void) { int i; for (i = 0; i < ARRAY_SIZE(page_address_htable); i++) { INIT_LIST_HEAD(&page_address_htable[i].lh); spin_lock_init(&page_address_htable[i].lock); } }
page_address_htable
배열의 각 항목에 대해 루프를 실행
- 각 항목에 대해
INIT_LIST_HEAD()
매크로를 사용하여 연결 리스트 헤드를 초기화
→ 동일한 해시 버킷에 속하는 페이지 주소들을 저장하는 데 사용됨
spin_lock_init()
함수를 사용하여 해당 버킷의 락을 초기화
→ 다중 스레드 환경에서 동시에 여러 스레드가 해당 버킷에 접근하는 것을 방지하기 위해 사용됨
버킷 (bucket)
해시 테이블에서 사용되는 용어로, 해시 함수에 의해 결정된 위치를 말함
pr_notice("%s", linux_banner);
시스템 부팅 메세지 출력
/** * pr_notice - Print a notice-level message * @fmt: format string * @...: arguments for the format string * * This macro expands to a printk with KERN_NOTICE loglevel. It uses pr_fmt() to * generate the format string. */ #define pr_notice(fmt, ...) \ printk(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
cat /proc/cmdline → command_line
마운트 : 파일 시스템과 연결해서 씀 , virtual file system에 얹어서 마운트라 함
kernel_init부터
댓글