歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 看Linux啟動代碼中的Cache與TLB

看Linux啟動代碼中的Cache與TLB

日期:2017/2/28 16:16:59   编辑:Linux教程

在移植linux2.6.18.1到龍芯3210的時候,也就是在移植筆記3裡,對Cache和TLB進行了一段修改,移植的時候以對照的方式進行修改,現在來看看,為什麼代碼這樣寫。

在移植Linux到龍芯3210筆記3裡面已經知道,對Cache和TLB的操作是在trap_init裡完成的,查了一下trap的英文意思,有一個解釋是"存水池"。

然後進入per_cpu_trap_init,看到兩個函數的調用:

cpu_cache_init();

tlb_init();

對了,正是這兩個函數。

先來看cpu_cache_init:

在./arch/mips/kernel/cpu-probe.c裡我們加入了一段代碼:

(在cpu_probe_legacy函數裡)

switch (c->processor_id & 0xff00) {

case ... ...

... ...

case PRID_IMP_SOC32101:

c->cputype = CPU_SOC32101;

c->isa_level = MIPS_CPU_ISA_II;

c->options = R4K_OPTS |

/* MIPS_CPU_FPU | */ MIPS_CPU_LLSC;

c->tlbsize = 48;

break;

}

看到c->options的值是R4K_OPTS

而:

#define R4K_OPTS (MIPS_CPU_TLB | MIPS_CPU_4KEX | MIPS_CPU_4K_CACHE \

| MIPS_CPU_COUNTER)

明顯地,c->options記錄的就是選定一些關於該CPU的一些特性。而這些特性就成了判斷的標志位,從而選擇不同的初始化,其中MIPS_CPU_4K_CACHE特性就是關於Cache的。

回到cpu_cache_init函數,在./arch/mips/mm/cache.c裡。

該函數就是根據不同的CPU特性來決定用哪個函數初始化我們的cache。

在./include/asm-mips/cpu-features.h定義了這個判定宏:

#define cpu_has_4k_cache (cpu_data[0].options & MIPS_CPU_4K_CACHE)

顯然,對cache的初始化是由r4k_cache_init來執行的。

進入r4k_cache_init,看到:

probe_pcache();

Copyright © Linux教程網 All Rights Reserved