- 论坛徽章:
- 0
|
在看源码的时候遇到了RT的问题。
下面是我跟踪的思路:
初始化IRQ
start_kernel -> init_IRQ -> init_arch_irq();
这里,这个init_arch_irq 的值由 arch/arm/kernel/setup.c文件里面 setup_arch 函数中的: init_arch_irq = mdesc->init_irq; 来给定。
那,这个mdesc 由该函数中: mdesc = setup_machine(machine_arch_type); 来给定。
而setup_machine函数又调用了: lookup_machine_type(nr);
lookup_machine_type位于:
arch/arm/kernel/head-common.c
- ENTRY(lookup_machine_type)
- stmfd sp!, {r4 - r6, lr}
- mov r1, r0
- bl __lookup_machine_type
- mov r0, r5
- ldmfd sp!, {r4 - r6, pc}
复制代码 __lookup_machine_type位于同一文件中:-
- .type __lookup_machine_type, %function
- __lookup_machine_type:
- adr r3, 3b
- ldmia r3, {r4, r5, r6}
- sub r3, r3, r4 @ get offset between virt&phys
- add r5, r5, r3 @ convert virt addresses to
- add r6, r6, r3 @ physical address space
- 1: ldr r3, [r5, #MACHINFO_TYPE] @ get machine type
- teq r3, r1 @ matches loader number?
- beq 2f @ found
- add r5, r5, #SIZEOF_MACHINE_DESC @ next machine_desc
- cmp r5, r6
- blo 1b
- mov r5, #0 @ unknown machine
- 2: mov pc, lr
复制代码 到这里应该是把machine_type找到了,可是,最终init_irq是怎样被赋值的,也就是:mdesc->init_irq 在何时被赋值的? |
|