vivi原始碼分析

2021-06-01 13:42:18 字數 2360 閱讀 6806

vivi主要包括下面幾個目錄:

arch:此目錄包括了所有vivi支援的目標板的子目錄,例如s3c2410,s3c2440目錄。

drivers:其中包括了引導核心需要的裝置的驅動程式(mtd和串列埠)。mtd目錄下分map、nand和nor三個目錄。

init:這個目錄只有main.c和version.c兩個檔案。和普通的c程式一樣,vivi將從main函式開始執行。

lib:一些平台公共的介面**,比如time.c裡的udelay()和mdelay()。

include:標頭檔案的公共目錄,其中的s3c24xx.h定義了這塊處理器的一些暫存器。platform/smdk24xx.h定義了與開發板相關的資源配置引數,我們往往只需要修改這個檔案就可以配置目標板的引數,如波特率、引導引數、物理記憶體對映等。

vivi的執行可以分為兩個階段:

vivi的第一階段

完成含依賴於cpu的體系結構硬體初始化的**,包括禁止中斷、初始化串列埠、複製自身到ram等。相關**集中在head.s(viviarchs3c24xx目錄下):head.s:

vivi的第二階段

vivi的第二階段是從main()函式開始,同一般的c語言程式一樣,該函式在/init/main.c檔案中,總共可以分為8個步驟。

(1)函式開始,通過putstr(vivi_banner)列印出vivi的版本。vivi_banner在/init/version.c檔案中定義。執行reset_handler,用於將記憶體清零,**在/lib/reset_handle.c中

(2)對開發板進行初始化(board_init函式),board_init是與開發板緊密相關的,這個函式在/arch/s3c24xx/smdk.c檔案中。開發板初始化主要完成兩個功能,時鐘初始化(init_time())和通用io口設定(set_gpios())。其中,gpio口在smdk24xx.h(vivi/include/platform目錄下)檔案中定義。

(3)記憶體對映初始化和記憶體管理單元的初始化工作:這兩個函式都在/arch/s3c24xx/mmu.c檔案中。

(4)初始化堆疊,heap_init()。(定義在vivi/lib/heap.c檔案中)

(5)初始化mtd裝置,mtd_dev_init()。這幾個函式可以在/drivers/mtd/maps/s3c24xx_flash.c裡找到。(drivers/mtd/mtdcore.c)

(6) 初始化私有資料,init_priv_data()。(定義在vivi/lib/priv_data/rw.c檔案中)

(7) 初始化內建命令,init_builtin_cmds()。通過add_command函式,載入vivi內建的幾個命令。(lib/command.c)

(8)啟動boot_or_vivi()。(main.c)

啟動成功後,將通過vivi_shell()啟動乙個shell(如果配置了config_serial_term),此時vivi的任務完成。

vivi的初始配置檔案位置:/vivi/arch/def-configs/smkd24xx, 通過make menuconfig 修改後的配置儲存在這個檔案中,我們也可以載入乙個自己的配置檔案來進行編譯。

int main(int argc, char *argv)         /*/init/main.c */

/*記憶體對映初始化和記憶體管理單元的初始化*/

mem_map_init();      /*arch/s3c2410/mmu.c line194*/

mmu_init();          /*arch/s3c2410/mmu.c line120*/

/*初始化堆疊*/

ret = heap_init();    /*lib/heap.c*/

if (ret)

/*初始化mtd裝置*/

ret = mtd_dev_init();     /*drivers/mtd/mtdcore.c*/

misc();               /*arch/s3c2410/smdk.c*/

/* 初始化內建命令*/

init_builtin_cmds();     /*lib/command.c*/

/*啟動boot_or_vivi()。(main.c)*/         

boot_or_vivi();        /*call vivi_shell() or run_autoboot.*/

return 0;

}/*    啟動成功後,將通過vivi_shell()啟動乙個shell(如果配置了config_serial_term),此時vivi的任務完成 */

/*   vivi的初始配置檔案位置:/vivi/arch/def-configs/smkd24xx, 通過make menuconfig 修改後的配置儲存在這個檔案中,我們也可以載入乙個自己的配置檔案來進行編譯。*/

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...