如何打开linux内核选项APIC选项,阐述Linux内核里面的APIC编程

阐述Linux内核里面的APIC编程

微软操作系统的火热,你是在应用Linux操作系统么?如果你是Linux操作系统的老用户。 这里为你讲解的问题会对Linux内核里面的APIC编程有所帮助。Linux内核的名字也是“Linux”。APIC就是高级PIC咯,高级可编程中断控制器。现在的多核系统上面每个cpu对应一个localapic,就是用来管理中断的,包括外部中断和cpu内部中断等。

1、apic的具体原理和规范,可以看“Intel?64andIA-32ArchitecturesSoftwareDeveloper'sManualVolume3A:SystemProgrammingGuide”上的第十章“TheAdvancedProgrammableInterruptController(APIC)“

2、关于APIC在BIOS里面的初始化,大概是BIOS会初始化好APIC,然后提供一张APIC表cpu表给要启动的系统使用吧。在ntel?64andIA-32ArchitecturesSoftwareDeveloper'sManualVolume3A:SystemProgrammingGuide的第8章“MULTIPLE-PROCESSORMANAGEMENT”第9章“PROCESSORMANAGEMENTANDINITIALIZATION”有详细介绍“”。也可以继续看标准文档“ACPIspec40”“IntelMultiprocessorSpecification”上面关于那个表的描述。

3、网上国人写个这篇文章也非常不错,他整理了上面的文档和Linux相关的代码。我也只是发现APIC的这个文档而已,和APIC相关的文档还是比较少吧。

“InterruptinLinux(硬件篇)——细节、实现,与疑问Author:ZX_WING(xing5820@163.com)”

4、内核代码

http://lxr.linux.no/#linux+v2.6.30.5/arch/x86/kernel/apic/apic.c

http://lxr.linux.no/#linux+v2.6.30.5/arch/x86/kernel/mpparse.c

等都是相关的,可以结合上面说的那个文档和系统启动时的输出看一下,启动时输出的ACPI,apicid,processor那些的都是系统初始化apic的时候打印输出的。

在内核参数加上apic=debug可能看到更详细的输出。

5、自己的驱动需要设置控制apic的时候,也可以使用系统里面定义的那些函数咯。在这里有很多函数声明,也可以去看一下具体是怎么作的

http://lxr.linux.no/#linux+v2.6.30.5/arch/x86/include/asm/apic.h

这里有很多宏的定义,都是和apic的配置有关的,可以对应看一下intel的文档。

http://lxr.linux.no/#linux+v2.6.30.5/arch/x86/include/asm/apicdef.h

比如KDB就是用ipicpu内部中断)的函数来禁止其他cpu的

void(*send_IPI_allbutself)(intvector);

void(*send_IPI_all)(intvector);

void(*send_IPI_self)(intvector);

而一般的apic都是通过下面这两个函数来进行的

apic_wait_icr_idle();

apic_write_around(APIC_ICR2,SET_APIC_DEST_FIELD(x86_cpu_to_apicid[i]));

apic_write(APIC_ICR,icr);//写ICR寄存器,产生ipi中断

x86_cpu_to_apicid是系统导出的一个获取物理apicid的变量,不过不同的内核版本里面实现有点不同,可以看具体的代码。apicid是区分每个apic的标志了,也用于区分不同的processor的。

希望通过本文的介绍你能学会Linux内核里面的APIC编程。

教会你轻松Linux网卡安装

实例讲解Linux以太网卡的安装及配置

全面了解Linux网卡的工作原理

你了解Linux系统开机知识么?

教会你Linux操作系统实现email和fax的互转互发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值