linux核心相關知識

2021-10-08 12:05:31 字數 2875 閱讀 3466

參考

乙個嵌入式 linux 系統從軟體角度看可以分為四個部分:引導引導程式(bootloader),linux 核心,檔案系統,應用程式。其中 bootloader是系統啟動或復位以後執行的第一段**,它主要用來初始化處理器及外設,然後呼叫 linux 核心。linux 核心在完成系統的初始化之後需要掛載某個檔案系統做為根檔案系統(root filesystem)。根檔案系統是 linux 系統的核心組成部分,它可以做為linux 系統中檔案和資料的儲存區域,通常它還包括系統配置檔案和執行應用軟體所需要的庫。應用程式可以說是嵌入式系統的「靈魂」,它所實現的功能通常就是設計該嵌入式系統所要達到的目標。如果沒有應用程式的支援,任何硬體上設計精良的嵌入式系統都沒有實用意義。

1)bootloader概念和作用

bootloader是嵌入式系統的引導引導程式,它是系統上電後執行的第一段程式,其作用類似於 pc 機上的 bios。

在完成對系統的初始化任務之後,它會將非易失性儲存器(通常是flash或doc等)中的linux 核心拷貝到 ram 中去,然後跳轉到核心的第一條指令處繼續執行,從而啟動 linux 核心。

bootloader多數有兩個階段的啟動過程:

stage1:彙編

設定cpu為svc模式,關閉mmu和dcache(icache可以開啟,指令cache,dcache需要mmu支援);

硬體裝置初始化:關閉看門狗,關中斷,設定cpu始終頻率,ram初始化;

為第二階段**準備ram準備空間,載入第二階段**;

設定堆疊指標 sp;

清bss段,呼叫c函式,跳到stage2的入口點。

stage2:c語言

初始化本階段要使用到的硬體裝置;

檢測系統的記憶體對映;

載入核心映像和檔案系統映像;

設定核心的啟動引數。

2)bootloader的執行過程

不同的處理器上電或復位後執行的第一條指令位址並不相同,對於 arm 處理器來說,該位址為 0x00000000。對於一般的嵌入式系統,通常把 flash 等非易失性儲存器對映到這個位址處,而 bootloader就位於該儲存器的最前端,所以系統上電或復位後執行的第一段程式便是bootloader。而因為儲存 bootloader的儲存器不同,bootloader的執行過程也並不相同,下面將具體分析。

嵌入式系統中廣泛採用的非易失性儲存器通常是 flash,而 flash 又分為 nor flash 和nand flash 兩種。它們之間的不同在於:nor flash 支援晶元內執行(xip, execute in place),這樣**可以在flash上直接執行而不必拷貝到ram中去執行。而nand flash並不支援xip,所以要想執行 nand flash 上的**,必須先將其拷貝到 ram中去,然後跳到 ram 中去執行。

3)bootloader的功能

實際應用中的 bootloader根據所需功能的不同可以設計得很複雜,除完成基本的初始化系統和呼叫 linux 核心等基本任務外,還可以執行很多使用者輸入的命令,比如設定 linux 啟動引數,給 flash 分割槽等;也可以設計得很簡單,只完成最基本的功能。但為了能達到啟動linux 核心的目的,所有的 bootloader都必須具備以下功能:

(1)、初始化 ram

因為 linux 核心一般都會在 ram 中執行,所以在呼叫 linux 核心之前 bootloader 必須設定和初始化 ram,為呼叫 linux核心做好準備。初始化 ram 的任務包括設定cpu 的控制暫存器引數,以便能正常使用 ram 以及檢測ram 大小等。

(2)、初始化串列埠

串列埠在 linux 的啟動過程中有著非常重要的作用,它是 linux核心和使用者互動的方式之一。linux 在啟動過程中可以將資訊通過串列埠輸出,這樣便可清楚的了解 linux 的啟動過程。雖然它並不是 bootloader 必須要完成的工作,但是通過串列埠輸出資訊是除錯bootloader 和linux 核心的強有力的工具,所以一般的 bootloader 都會在執行過程中初始化乙個串列埠做為除錯埠。

(串列埠:

(3)、檢測處理器型別

bootloader在呼叫 linux核心前必須檢測系統的處理器型別,並將其儲存到某個常量中提供給 linux 核心。linux 核心在啟動過程中會根據該處理器型別呼叫相應的初始化程式。

(4)、設定 linux啟動引數

bootloader在執行過程中必須設定和初始化 linux 的核心啟動引數。目前傳遞啟動引數主要採用兩種方式:即通過 struct param_struct 和struct tag(標記列表,tagged list)兩種結構傳遞。struct param_struct 是一種比較老的引數傳遞方式,在 2.4 版本以前的核心中使用較多。從 2.4 版本以後 linux 核心基本上採用標記列表的方式。但為了保持和以前版本的相容性,它仍支援 struct param_struct 引數傳遞方式,只不過在核心啟動過程中它將被轉換成標記列表方式。標記列表方式是種比較新的引數傳遞方式,它必須以 atag_core 開始,並以atag_none 結尾。中間可以根據需要加入其他列表。linux核心在啟動過程中會根據該啟動引數進行相應的初始化工作。

(5)、呼叫 linux核心映像

bootloader完成的最後一項工作便是呼叫 linux核心。如果 linux 核心存放在 flash 中,並且可直接在上面執行(這裡的 flash 指 nor flash),那麼可直接跳轉到核心中去執行。但由於在 flash 中執行**會有種種限制,而且速度也遠不及 ram 快,所以一般的嵌入式系統都是將 linux核心拷貝到 ram 中,然後跳轉到 ram 中去執行。

不論哪種情況,在跳到 linux 核心執行之前 cpu的暫存器必須滿足以下條件:r0=0,r1=處理器型別,r2=標記列表在 ram中的位址。

核心網相關知識

hlr home location register 歸屬位置暫存器 hlr是gsm gprs edge網路的cn core network,核心網 的網元。它是乙個資料庫,儲存著某個運營商的使用者的相關。例如 補充業務 鑑權引數 apn access point name,接入點名稱 使用者當前訪...

linux 相關知識

一 shell的基本概念 shell是作業系統中執行的程式 位於作業系統核心和使用者之間 shell定義使用者與os程序互動的乙個介面,命令直譯器 二 shell的分類 種類 bsh csh ksh bash bash是linux的預設shell bash是bsh的公升級替代品 tcsh是csh的相...

Linux相關知識

1 安裝五筆 sudo apt get install ibus ibus table ibus table wubi2 linux如何切換到root使用者 預設安裝完成之後並不知道root使用者的密碼,那麼如何應用root許可權呢?1 sudo 命令 這樣輸入當前管理員使用者密碼就可以得到超級使用...