vivi
的第二階段
vivi
的第二階段是從
main
()函式開始,同一般的
c語言程式一樣,該函式在
/init/main.c
檔案中,總共可以分為
8個步驟。(1
)函式開始,通過
putstr(vivi_banner)
列印出vivi
的版本。
vivi_banner
在/init/version.c
檔案中定義(2
)對開發板進行初始化(
board_init
函式),
board_init
是與開發板緊密相關的,這個函式在
/arch/s
3c2410/smdk.c
檔案中。開發板初始化主要完成兩個功能,時鐘初始化(
init_time()
)和通用
io口設定(
set_gpios()
)。注意這裡
vgpxcon中的v
表示value
,ogpxcon中的o
表示offset
void set_gpios(void)
其中,gpio
口在smdk2410.h
(\vivi\include\platform\
目錄下)檔案中定義。(3
)記憶體對映初始化和記憶體管理單元的初始化工作:
mem_map_init();
mmu_init();
這兩個函式都在
/arch/s
3c2410/mmu.c
檔案中。
void mem_map_init(void)
如果配置
vivi
時使用了
nand
作為啟動裝置,則執行
mem_map_nand_boot()
,否則執行
mem_map_nor()
。這裡要注意的是,如果使用
nor啟動,則必須先把
vivi
**複製到
ram中。這個過程是由
copy_vivi_to_ram()
函式來完成的。**如下:
static void copy_vivi_to_ram(void)
vivi_ram_base
、vivi_rom_base
、vivi_ram_size
這些值都可以在
smdk2410.h
中查到,並且這些值必須根據自己開發板的
ram實際大小修改。這也是在移植
vivi
的過程中需要注意的乙個地方。
mmu_init()
函式中執行了
arm920_setup
函式。這段**是用組合語言實現的,針對
arm920t
核的處理器。(4
)初始化堆疊,
heap_init()
。(定義在
\vivi\lib\heap.c
檔案中)
int heap_init(void)(5
)初始化
mtd裝置,
mtd_dev_init()
。int mtd_init(void)
return 0; }
這幾個函式可以在
/drivers/mtd/maps/s
3c2410_flash.c
裡找到。(6
)初始化私有資料,
init_priv_data()
。(定義在
\vivi\lib\priv_data\rw.c
檔案中)
此部分的功能是把
vivi
可能用到的所有私有引數都放在預先規劃的記憶體區域,大小為
48k,基位址為
0x33df0000
。在記憶體的分配示意圖方面,可以參考《
s
3c2410
完全開發》,到此為止,
vivi
作為bootloader
的三大核心任務:
initialise various devices, and eventually call the linux kernel,passing information to the kernel.
,現在只是完成第一方面的工作,裝置初始化基本完成,實際上
step 6
是為啟動
linux
核心和傳遞引數做準備的,把
vivi
的私有資訊,核心啟動引數,
mtd分割槽資訊等都放到特定的記憶體區域,等待後面兩個重要工作使用(在
step 8
完成,後面的
step 7
也是為step 8
服務的)。
這48k
區域分為三個組成部分:
mtd引數、
vivi parameter
、linux
啟動命令。(7
)初始化內建命令,
init_builtin_cmds()。通過
add_command
函式,載入
vivi
內建的幾個命令。(8
)啟動boot_or_vivi()
。啟動成功後,將通過
vivi_shell()
啟動乙個
shell
(如果配置了
config_serial_term
),此時
vivi
的任務完成。
0 給主人留下些什麼吧!~~
第二階段小結
資料結構基本概念 資料 資料即資訊的載體,是能夠輸入到計算機中並且能被計算機識別,儲存和處理的符號總稱 資料元素 資料元素是資料的基本單位,又稱之為記錄。一般,資料元素由若干基本項 字段,域,屬性 組成。資料結構 資料結構指的是資料元素及資料元素之間的相互關係,或組織資料的形式 資料之間的結構關係 ...
第二階段小結
先是pta上的作業 這題要求我們熟練的掌握類之間的繼承與多型的使用,在類與類之間傳遞資訊時不能弄混,要弄清楚單一職責原則。這一題主要考察繼承與多型,泛型容器的應用。接下來是學習通上的課後作業 第乙個是單向鍊錶 單向鍊錶由乙個個的節點組成,這些節點都帶有下乙個節點的引用,最後乙個節點指向null,這樣...
Bete衝刺第二階段
web 修復了a版本中介面資料返回錯誤的問題。通知對資料表新增了幾個字段。並且新增了乙個通知查詢的介面。ios 修正網路連線bug 招募功能介面完成但是跳轉問題正在解決 web bug是解決可以一步一步摳好,查查資料也就解決了。晚上手殘,在eclipse的行數條上不小心設了個斷點,導致啟動tomca...