linux源碼分析(五)-start_kernel

2016-10-28 16:45 by 軒脈刃, 76 閱讀, 2 評(píng)論, 收藏編輯

前置:這里使用的linux版本是4.8,x86體系。

local_irq_disable();

這個(gè)函數(shù)是做了關(guān)閉中斷操作。和后面的local_irq_enable相對(duì)應(yīng)。說明啟動(dòng)的下面函數(shù)是不允許被中斷搶占的。這個(gè)函數(shù)追下去會(huì)發(fā)現(xiàn)下面的代碼:

static inline void native_irq_disable(void) { asm volatile("cli": : :"memory");
}

這個(gè)寫法是linux的內(nèi)聯(lián)匯編寫法。在C語言中寫匯編語言。實(shí)際上調(diào)用的是匯編cli命令。cli命令是禁用中斷功能。http://rock3.info/blog/2013/11/24/linux-c%E4%B8%AD%E8%B0%83%E7%94%A8%E6%B1%87%E7%BC%96%E7%94%A8%E6%B3%95/

接著start_kernel,linux關(guān)閉完中斷之后,還使用了一個(gè)變量early_boot_irqs_disabled來標(biāo)記已經(jīng)關(guān)閉irq了。

這里稍微說說irq的概念,我們把中斷分為兩個(gè)概念,一個(gè)是上半部,一個(gè)是下半部,上半部指的是硬件直接要求立即響應(yīng)的中斷。下半部指的是可以在某個(gè)特定時(shí)間之后執(zhí)行的。這里的IRQ就是一個(gè)上半部概念。每個(gè)硬件設(shè)備都有一個(gè)irq線,通過這個(gè)線把中斷描述符傳遞給CPU,CPU獲取中斷之后立即執(zhí)行對(duì)應(yīng)已經(jīng)注冊(cè)的操作。

# boot_cpu_init()

這個(gè)函數(shù)功能是初始化第一個(gè)CPU。

void __init boot_cpu_init(void)
{
    int cpu = smp_processor_id();

    /* Mark the boot cpu "present", 
        		

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式