考一考!嵌入式 Linux面試基礎題三道
題一:
請問uboot啟動過程都做了些什麼?
思考過後,再到下方尋找答案
題二:
為什麼uboot要關掉cache?
思考過後,再到下方尋找答案
題三:
nandflash和norflash的區別,對norflash的操作方式的理解?
思考過後,再到下方尋找答案
題一答案:
1、cpu剛開始初始化的時候,還未設置棧,所以先使用彙編代碼,構建異常項鏈表,然後設置cpu為svc(特權)模式,同時關閉FIQ和IRQ(防止突發中斷程序跑飛了)
註:在跳轉到內核之前,要滿足CPU出在SVC模式下。
2、對cp15協處理器進行設置,這裡主要是關閉MMU和cache
3、進入到板級初始化階段,這裡會進行時鐘、內存、串口的初始化。最後還要關閉看門狗。
4、接下來就是設置棧,為c語言準備運行環境,調用board_init_f,填充gd結構體。
5、對代碼重定位,搬運到內存中去,搬運之後,跳轉到內存中去執行board_init_r,這裡就可以開啟cache了,當然也可以不開啟。然後初始化其他設備。比如flash、網卡、emmc等。初始化完之後,在執行main_loop
題二答案:
1、cpu剛開始初始化的時候,還未設置棧,所以先使用彙編代碼,構建異常項鏈表,然後設置cpu為svc(特權)模式,同時關閉FIQ和IRQ(防止突發中斷程序跑飛了)
註:在跳轉到內核之前,要滿足CPU出在SVC模式下。
2、對cp15協處理器進行設置,這裡主要是關閉MMU和cache
3、進入到板級初始化階段,這裡會進行時鐘、內存、串口的初始化。最後還要關閉看門狗。
4、接下來就是設置棧,為c語言準備運行環境,調用board_init_f,填充gd結構體。
5、對代碼重定位,搬運到內存中去,搬運之後,跳轉到內存中去執行board_init_r,這裡就可以開啟cache了,當然也可以不開啟。然後初始化其他設備。比如flash、網卡、emmc等。初始化完之後,在執行main_loop
題三答案:
兩種晶元的結構不同 NORflash之所以可以片內執行,就是因為他符合CPU去指令解碼執行的要求。CPU送一個地址出來,NORflash就能給一個數據讓CPU執行,中間不需要額外的處理操作。
NAND flash不一樣是因為nandflash有地址,數據,命令共用IO口的問題,cpu把地址發出來之後,並不能直接得到數據,還需要控制線的操作才能完成。就是他沒有專用的SRAM介面。
嵌入式系統中代碼的執行方式主要有3種:
完全映射按需分頁eXecute In Place (XIP)片上執行。
![](https://pic.pimg.tw/zzuyanan/1488615166-1259157397.png)
![](https://pic.pimg.tw/zzuyanan/1482887990-2595557020.jpg)
※從一個不起眼的小公司逐漸成為半導體行業巨頭,Microchip CEO史蒂夫桑吉不一般的「擴張」之路
※嵌入式Linux驅動開發基礎總結
TAG:嵌入式ARM |