一
請問uboot啟動過程都做了些什么?
二
為什么uboot要關(guān)掉cache?
三
nandflash和norflash的區(qū)別,對norflash的操作方式的理解?
請先思考后在看答案哦
一
uboot啟動過程都做了些什么
1、cpu剛開始初始化的時候,還未設(shè)置棧,所以先使用匯編代碼,構(gòu)建異常項鏈表,然后設(shè)置cpu為svc(特權(quán))模式,同時關(guān)閉FIQ和IRQ(防止突發(fā)中斷程序跑飛了)
注:在跳轉(zhuǎn)到內(nèi)核之前,要滿足CPU出在SVC模式下。
2、對cp15協(xié)處理器進(jìn)行設(shè)置,這里主要是關(guān)閉MMU和cache
3、進(jìn)入到板級初始化階段,這里會進(jìn)行時鐘、內(nèi)存、串口的初始化。最后還要關(guān)閉看門狗。
4、接下來就是設(shè)置棧,為c語言準(zhǔn)備運(yùn)行環(huán)境,調(diào)用board_init_f,填充gd結(jié)構(gòu)體。
5、對代碼重定位,搬運(yùn)到內(nèi)存中去,搬運(yùn)之后,跳轉(zhuǎn)到內(nèi)存中去執(zhí)行board_init_r,這里就可以開啟cache了,當(dāng)然也可以不開啟。然后初始化其他設(shè)備。比如flash、網(wǎng)卡、emmc等。初始化完之后,在執(zhí)行main_loop
二
uboot要關(guān)掉cache
1、cpu剛開始初始化的時候,還未設(shè)置棧,所以先使用匯編代碼,構(gòu)建異常項鏈表,然后設(shè)置cpu為svc(特權(quán))模式,同時關(guān)閉FIQ和IRQ(防止突發(fā)中斷程序跑飛了)
注:在跳轉(zhuǎn)到內(nèi)核之前,要滿足CPU出在SVC模式下。
2、對cp15協(xié)處理器進(jìn)行設(shè)置,這里主要是關(guān)閉MMU和cache
3、進(jìn)入到板級初始化階段,這里會進(jìn)行時鐘、內(nèi)存、串口的初始化。最后還要關(guān)閉看門狗。
4、接下來就是設(shè)置棧,為c語言準(zhǔn)備運(yùn)行環(huán)境,調(diào)用board_init_f,填充gd結(jié)構(gòu)體。
5、對代碼重定位,搬運(yùn)到內(nèi)存中去,搬運(yùn)之后,跳轉(zhuǎn)到內(nèi)存中去執(zhí)行board_init_r,這里就可以開啟cache了,當(dāng)然也可以不開啟。然后初始化其他設(shè)備。比如flash、網(wǎng)卡、emmc等。初始化完之后,在執(zhí)行main_loop
三
nandflash和norflash的區(qū)別及對norflash的操作方式的理解
兩種芯片的結(jié)構(gòu)不同 NORflash之所以可以片內(nèi)執(zhí)行,就是因為他符合CPU去指令譯碼執(zhí)行的要求。CPU送一個地址出來,NORflash就能給一個數(shù)據(jù)讓CPU執(zhí)行,中間不需要額外的處理操作。
NAND flash不一樣是因為nandflash有地址,數(shù)據(jù),命令共用IO口的問題,cpu把地址發(fā)出來之后,并不能直接得到數(shù)據(jù),還需要控制線的操作才能完成。就是他沒有專用的SRAM接口。
嵌入式系統(tǒng)中代碼的執(zhí)行方式主要有3種:
-
cpu
+關(guān)注
關(guān)注
68文章
10878瀏覽量
212167 -
Linux
+關(guān)注
關(guān)注
87文章
11319瀏覽量
209830 -
Uboot
+關(guān)注
關(guān)注
4文章
125瀏覽量
28256
原文標(biāo)題:Linux面試基礎(chǔ)題3道
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論