// 参考:http://www.bluezd.info/archives/reg_clock_event_device_1
// x86平台初始化
// 注:arch/x86/kernel/x86_init.c
1.1 struct x86_init_ops x86_init __initdata = {
...
//apic控制器初始化
.irqs = {
.pre_vector_init = init_ISA_irqs,
.intr_init = native_init_IRQ,
.trap_init = x86_init_noop,
},
...
};
// 中断初始化
// 调用路径:start_kernel->init_IRQ
1.2 void __init init_IRQ(void)
{
//中断初始化
...
x86_init.irqs.intr_init();
}
// x86体系结构中断初始化
// 函数任务:
// 1.初始化isa 0~15号中断
// 2.初始化apic中断
1.3 void __init native_init_IRQ(void)
{
int i;
//初始化isa 0~15号中断
x86_init.irqs.pre_vector_init();
//初始化apic中断
apic_intr_init();
...
}
// apic中断初始化
// 函数任务:
// 1.smp 中断初始化
// 2.lapic时钟中断初始化
// 3.x86平台专用ipi
// 4.其他
1.4 static void __init apic_intr_init(void)
{
//smp 中断初始化
smp_intr_init();
...
#if defined(CONFIG_X86_64) || defined(CONFIG_X86_LOCAL_APIC)
//lapic时钟中断初始化
alloc_intr_gate(LOCAL_TIMER_VECTOR, apic_timer
时间子系统1_lapic时钟初始化
最新推荐文章于 2023-04-11 17:26:12 发布
本文档详细介绍了Linux内核中x86平台的初始化过程,特别是LAPIC时钟中断的初始化。从x86_init_ops结构开始,到init_IRQ函数调用native_init_IRQ初始化ISA和APIC中断,接着是apic_intr_init函数初始化SMP中断和LAPIC时钟。smp_intr_init用于SMP IPI中断初始化,而lapic_apic_timer_interrupt和local_apic_timer_interrupt处理LAPIC时钟中断和事件。最后,setup_APIC_timer注册并设置LAPIC时钟事件设备。
摘要由CSDN通过智能技术生成