linux 检查mps版本,linux_mps启动流程_存储相关.doc
linux_mps啟動流程_存儲相關
Linux-mips啟動流程
-存儲相關
linux內核啟動的第一個階段是從 /arch/mips/kernel/head.s文件開始的。而此處正是內核入口函數kernel_entry(),該函數定義在 /arch/mips/kernel/head.s文件里。kernel_entry()函數是體系結構相關的匯編語言,它首先初始化內核堆棧段,來為創(chuàng)建系統中的第一個進程進行準備,接著用一段循環(huán)將內核映像的未初始化數據段(bss段在_edata和_end之間)清零,最后跳轉到/arch/mips/kernel/setup.c 中的 start_kernel()初始化硬件平臺相關的代碼。下面講述start_kernel() 函數。在這個函數中跟內存初始化的函數是setup_arch()。
第一部分:以函數調用關系為線索
下面是函數之間調用關系的框圖:
第一章:start_kenel()->setup_arch()
setup_arch(&command_line);每種體系結構都有自己的 setup_arch() 函數,這些是體系結構相關的。【如何確定編譯那個體系結構的 setup_arch() 函數呢?主要由 linux 源碼樹頂層 Makefile 中 ARCH 變量來決定的。例如: MIPS 體系結構的。SUBARCH := mips
ARCH ?= $(SUBARCH)】。
void __init setup_arch(char **cmdline_p)
{
cpu_probe();
調用函數cpu_probe(),該函數通過MIPS CPU的PRID寄存器來確定CPU類型,
從而確定使用的指令集和其他一些CPU參數,如TLB等
prom_init();
prom_init() 函數是和硬件相關的,做一些低層的初始化,接受引導裝載程序傳給內核的參數,確定 mips_machgroup,mips_machtype 這兩個變量,這兩個變量分別對應著相應的芯片組合開發(fā)板;
cpu_report();
打印 cpu_probe() 函數檢測到的 CPU 的 Processor ID。如果有浮點處理器,也打印浮點處理器的 Processor ID。
【應用程序通過終端接口設備使用特定的接口規(guī)程與終端進行交互,與操作系統內核本身交互的終端稱為控制臺,
它可以是內核本身的內部顯示終端,也可以是通過串口連接的外部啞終端。
由于大多數情況下控制臺都是內核顯示終端,因此內核顯示終端也常常直接稱為控制臺。
內核終端對用戶來說具有若干個虛擬終端子設備,它們共享同一物理終端,
但同一時刻只能有一個虛擬終端操作硬件屏幕。
宏 CONFIG_VT 的意思是否支持虛擬終端。
當配置了宏 CONFIG_VGA_CONSOLE 時為內核本身的內部顯示終端。
當配置了宏 CONFIG_DUMMY_CONSOLE 時為通過串口連接的外部啞終端。
用變量 conswitchp 來進行指定。
#if defined(CONFIG_VT)
#if defined(CONFIG_VGA_CONSOLE)
conswitchp = &vga_con;
#elif defined(CONFIG_DUMMY_CONSOLE)
conswitchp = &dummy_con;
#endif
#endif】
arch_mem_init(cmdline_p);
對內存進行初始化。
resource_init();
這個函數遍歷每一個內存空間范圍(物理地址),在資源管理器中進行資源申請,并對內核代碼和數據段進行資源申請。
#ifdef CONFIG_SMP
plat_smp_setup();
#endif
} / /start_kernel函數到此結束(以下均是)。
以下圖片是截自版本linux-2.6.34內核版本。
第二章:start_kenel()->setup_arch()->arch_mem_init()
接下來我們看看arch_mem_init()函數中的函數調用關系及各自的功能。
static void __init arch_mem_init(char **cmdline_p)
{
plat_mem_setup();
這個函數是平臺具體相關的,移植內核需要自己手動編寫。對于開發(fā)板的 CPU 和 board 的初始化都是在這個函數中進行的。detects the memory configuration and wi
總結
以上是生活随笔為你收集整理的linux 检查mps版本,linux_mps启动流程_存储相关.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue的视图化创建项目_vue-cli3
- 下一篇: AJAX详解教程