boot loader能全部用C程式編寫嗎

2021-09-05 05:01:09 字數 587 閱讀 1896

在《什麼是boot loader》一文中我丟擲了乙個問題,這個問題如下:

我們說boot loader通常採用彙編和c語言相結合來編寫的,那能不能全部用c語言來進行編寫呢?為什麼?

對於這一問題的答案是:不能。c程式中所有的**都是以函式的形式出現的。可能有人要說在c中也可以嵌入彙編**,能不能用這種方式來實現整個boot loader呢?再看看題目,這裡只考慮所有的**只能是以函式的形式出現。那c程式中函式呼叫要乙個什麼樣的環境呢?堆疊!我們寫c程式時在函式名的後面,就是用花括號將**括起來的,開始的花括號其實可以理解為有一段彙編**(具體細節以後會有文章進行解釋)對堆疊進行操作。那堆疊從哪來呢?顯然,堆疊是一塊記憶體區,也就是說我們用c程式寫**之前,必須保證記憶體已經初始化好了、可以用了。回憶一下,我們在《什麼是boot loader》一文中提到,sdram記憶體晶元的初始化是boot loader中很重要的一步。也就是說,我們必須保證初始化好了sdram記憶體晶元後,才能進行c函式呼叫。因此,完全用c語言來實現boot loader是不可行的。

如果你覺得本文的哪些地方需要改進或是存在一些不明白的地方,請

用PHP遍歷目錄下的全部檔案

專案中有這麼乙個需求,需要遍歷某個資料夾 目錄 下的所有檔案。下面是解決這個問題所寫的php 在這裡記錄一下。第一種實現辦法是用dir返回物件,第二種實現辦法 用readdir 函式。乙個簡單的目錄遞迴函式 第一種實現辦法 用dir返回物件 function tree directory 開始執行 ...

基於S3C2440的bootloader移植詳解

首先 在彙編中初始化堆疊,中斷向量表,mmu,時鐘,串列埠等,然後跳到c語言的main函式。這部分 小於4k,放在block0。這個main函式用來將第二段 拷備到dram中並執行。不說這麼多廢話了,說多了無益,讓我們一起來揭開bootloader的神秘的面紗吧!先說下我移植的bootloader的...

S3C2450 Bootloader除錯總結

s3c2450的整個bootloader包括四個部分 1 eboot.whimory 2 nbl1.irom sd 3 nbl1.lsb 4 nbl2 實現功能 生成三個有用的檔案 block0img.nb0,eboot.nb0 eboot.bin,以及irom sd eboot.nb0。其中前兩個...