__arch_info_begin 부터 __arch_info_end 까지 ( 섹션 .arch.info.init 영역 ) 저장된 machine_desc 구조체에서 MACHINFO_TYPE 값에 해당하는, 변수 nr 을 읽어 온다.
이 값이 부터로드에서 넘긴 arch 넘버(R1)와 같은지 비교하고, 같으면 리턴하고, 다르면 machine_desc 구조체 만큼 증가하여 __arch_info_end 까지 반복하게 된다. 성공 하면, R5 은 일치하는 machine_desc 구조체의 시작 주소를 가지게 되고, 실패하면 R5에 0값을 대입한다.
이 값이 부터로드에서 넘긴 arch 넘버(R1)와 같은지 비교하고, 같으면 리턴하고, 다르면 machine_desc 구조체 만큼 증가하여 __arch_info_end 까지 반복하게 된다. 성공 하면, R5 은 일치하는 machine_desc 구조체의 시작 주소를 가지게 되고, 실패하면 R5에 0값을 대입한다.
섹션 .arch.info.init 영역은 컴파일 시에 MACHINE_START define 에 의해서 저장되게 된다. include/asm-arm/mach/arch.h 에 정의 되어 있다.
#define MACHINE_START(_type,_name) \
static const struct machine_desc __mach_desc_##_type \
__attribute_used__ \
__attribute__((__section__(".arch.info.init"))) = { \
.nr = MACH_TYPE_##_type, \
.name = _name,
MACH_TYPE_##_type 은 arch/arm/tools/mach-types 에 그 값들이 정의 되어 있다.
각 arch 별로 아래와 같은 정의가 존재한다.
// arch/arm/mach-s3c2410/mach-smdk2410.c
MACHINE_START(SMDK2410, "SMDK2410")
// arch/arm/mach-realview/realview_eb.c
MACHINE_START(REALVIEW_EB, "ARM-RealView EB“)
'리눅스커널' 카테고리의 다른 글
[ __arm920_setup ] arch/arm/mm/proc-arm920.S (0) | 2009.10.02 |
---|---|
[ __create_page_tables ] /arch/arm/kernel/head.S (0) | 2009.10.02 |
[ __lookup_processor_type ] arch/arm/kernel/head-common.S (0) | 2009.10.02 |
[ stext ] arch/arm/kernel/head.S (0) | 2009.10.02 |
ARM Instruction (0) | 2009.10.02 |