freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

嵌入式系統(tǒng)bootloader啟動全過程詳解-wenkub

2023-04-24 11:41:13 本頁面
 

【正文】 ROM 或 Flash 這樣的固態(tài)存儲設備中直接運行。此外,在論及這個話題時,主機方所用的軟件也要考慮。比如,Blob 在啟動時處于正常的啟動加載模式,但是它會延時 10 秒等待終端用戶按下任意鍵而將 blob 切換到下載模式。從主機下載的文件通常首先被 Boot Loader 保存到目標機的 RAM 中,然后再被 Boot Loader 寫到目標機上的FLASH 類固態(tài)存儲設備中。啟動加載(Boot loading)模式:這種模式也稱為自主 (Autonomous)模式。從固態(tài)存儲設備上啟動的 Boot Loader 大多都是 2 階段的啟動過程,也即啟動過程可以分為 stage 1 和 stage 2 兩部分。因此在系統(tǒng)加電后,CPU 將首先執(zhí)行 Boot Loader 程序。這也就是說,對于兩塊不同的嵌入式板而言,即使它們是基于同一種 CPU 而構建的,要想讓運行在一塊板子上的 Boot Loader 程序也能運行在另一塊板子上,通常也都需要修改 Boot Loader 的源程序。盡管如此,我們仍然可以對 Boot Loader 歸納出一些通用的概念來,以指導用戶特定的 Boot Loader 設計與實現(xiàn)。2. Boot Loader 的概念簡單地說,Boot Loader 就是在操作系統(tǒng)內核運行之前運行的一段小程序。Boot Loader 的主要運行任務就是將內核映象從硬盤上讀到 RAM 中,然后跳轉到內核的入口點去運行,也即開始啟動操作系統(tǒng)。常用的嵌入式 GUI 有:MicroWindows 和 MiniGUI 懂。通常用 ram disk 來作為 root fs。2. Linux 內核。1. 引言在專用的嵌入式板子運行 GNU/Linux 系統(tǒng)已經變得越來越流行。特定于嵌入式板子的定制內核以及內核的啟動參數(shù)。4. 用戶應用程序。引導加載程序是系統(tǒng)加電后運行的第一段軟件代碼。而在嵌入式系統(tǒng)中,通常并沒有像 BIOS 那樣的固件程序(注,有的嵌入式 CPU 也會內嵌一段短小的啟動程序),因此整個系統(tǒng)的加載啟動任務就完全由 Boot Loader 來完成。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調用操作系統(tǒng)內核準備好正確的環(huán)境。1. Boot Loader 所支持的 CPU 和嵌入式板每種不同的 CPU 體系結構都有不同的 Boot Loader。2. Boot Loader 的安裝媒介(Installation Medium)系統(tǒng)加電或復位后,所有的 CPU 通常都從某個由 CPU 制造商預先安排的地址上取指令。下圖1就是一個同時裝有 Boot Loader、內核的啟動參數(shù)、內核映像和根文件系統(tǒng)映像的固態(tài)存儲設備的典型空間分配結構圖。而至于在 stage 1 和 stage 2 具體完成哪些任務將在下面討論。也即 Boot Loader 從目標機上的某個固態(tài)存儲設備上將操作系統(tǒng)加載到 RAM 中運行,整個過程并沒有用戶的介入。Boot Loader 的這種模式通常在第一次安裝內核與根文件系統(tǒng)時被使用;此外,以后的系統(tǒng)更新也會使用 Boot Loader 的這種工作模式。如果在 10 秒內沒有用戶按鍵,則 blob 繼續(xù)啟動 Linux 內核。比如,在通過以太網連接和 TFTP 協(xié)議來下載文件時,主機方必須有一個軟件用來的提供 TFTP 服務。但這種做法無疑是以運行速度的犧牲為代價的。而 stage2 則通常用C語言來實現(xiàn),這樣可以實現(xiàn)給復雜的功能,而且代碼會具有更好的可讀性和可移植性。 為加載 Boot Loader 的 stage2 準備 RAM 空間。 設置好堆棧。 初始化本階段要使用到的硬件設備。 將 kernel 映像和根文件系統(tǒng)映像從 flash 上讀到 RAM 空間中。 調用內核。中斷屏蔽可以通過寫 CPU 的中斷屏蔽寄存器或狀態(tài)寄存器(比如 ARM 的 CPSR 寄存器)來完成。4. 初始化 LED。 為加載 stage2 準備 RAM 空間為了獲得更快的執(zhí)行速度,通常把 stage2 加載到 RAM 空間中來執(zhí)行,因此必須為加載 Boot Loader 的 stage2 準備好一段可用的 RAM 空間范圍。具體的地址范圍可以任意安排,比如 blob 就將它的 stage2 可執(zhí)行映像安排到從系統(tǒng) RAM 起始地址 0xc0200000 開始的 1M 空間內執(zhí)行。具體的測試方法可以采用類似于 blob 的方法,也即:以 memory page 為被測試單位,測試每個 memory page 開始的兩個字是否是可讀寫的。3. 然后,立即將這兩個字的內容讀回。比如:向第一個字寫入 0xaa,第 2 個字中寫入 0x55。6. 恢復這兩個字的原始內容。 設置堆棧指針 sp堆棧指針的設置是為了執(zhí)行 C 語言代碼作好準備。 跳轉到 stage2 的 C 入口點在上述一切都就緒后,就可以跳轉到 Boot Loader 的 stage2 去執(zhí)行了。其原因是顯而易見的。也即,用匯編語言寫一段trampoline 小程序,并將這段 trampoline 小程序來作為 stage2 可執(zhí)行映象的執(zhí)行入口點。b _trampoline的含義是:立即跳轉到_trampoline并執(zhí)行它。設備初始化完成后,可以輸出一些打印信息,程序名字字符串、版本號等。也就是說,具體的嵌入式系統(tǒng)往往只把 CPU 預留的全部 RAM 地址空間中的一部分映射到 RAM 單元上,而讓剩下的那部分預留 RAM 地址空間處于未使用狀態(tài)。 /* the byte number of the memory region */ int used?;谏鲜?memory_area_t 數(shù)據結構,整個 CPU 預留的 RAM 地址空間可以用一個 memory_area_t 類型的數(shù)組來表示,如下所示:memory_area_t memory_map[NUM_MEM_AREAS] = { [0 ... (NUM_MEM_AREAS 1)] = { .start = 0, .size = 0, .used = 0 },}。/* first write a 0 to all memory locations */for(addr = MEM_START。 addr MEM_END。 } /* * 當前頁已經是一個被映射到 RAM 的有效地址范圍 * 但是還要看看當前頁是否只是 4GB 地址空間中某個地址頁的別名? */ if(* (u32 *)addr != 0
點擊復制文檔內容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1