日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nboot通过DNW下载并运行eboot.nb0

發布時間:2025/4/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nboot通过DNW下载并运行eboot.nb0 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?1.?????? stepldr/main.c下面的mian函數調用Uart_Init()對串口的初始化

我們使用UART1來作為debug口。

?

2.?????? 實現nboot通過串口下載并運行eboot.nb0的函數體

?

我們接下來分析其實現

2.1?? Uart_Getch()函數

這個函數主要是在nboot啟動的時候,判斷是否有來之我們對鍵盤的操作,假如我們在等待的時間之內按下空格鍵,那么這時候nboot就處于等待用戶通過DNW.exe下載并運行eboot.nb0的狀態,假如我們在等待的時間內沒有按鍵空格鍵,那么nboot會接下去運行eboot,繼而由eboot來加載NK

?

上圖的第119行表示UART1RX buffer register是否接受到數據,如果有數據,就接下來執行第124行,也即讀取接收到的數據

#define RdURXH1()?? (*(volatile unsigned char *)0x50004024)

當然,我們按下鍵盤的空格鍵,這時候DNW.exe會接受到這個信息,然后DNW.exe會通過我們WINCE設備與PC實際的串口線來發送到UART1RX buffer register

當我們按下鍵盤的空格鍵,nboot就處于等待我們下載eboot.nb0的狀態,通過DNW.exe的“serial port -> transmit”來發送eboot.nb0,那么nboot是如何接受并運行eboot.nb0呢?接下來,我們來看看ComLoad()的函數體

2.2 ComLoad()

?

?

其中#define LOAD_ADDRESS_PHYSICAL?? 0x30038000

上圖的第87是把串口發送過來的數據保存到SDRAM中以0x0x30037FFC為起始的內存中,而地址0x30037FFC0x30037FFF用于記錄eboot.nb0的文件大小,從0x30038000地址開始記錄eboot.nb0的數據,這也是ebootSDRAM中的起始地址。

?

90行到第93行是記錄下eboot.nb0文件的大小,用4個字節來記錄,為什么是4個字節?而且為什么是前面4個字節呢?這應該是由微軟WINCE6.0編譯生成eboot.nb0時,由其編譯生成工具決定的。

?

99行,為什么DownloadFileSize=fileSize-6呢?因為有4個字節是用于記錄eboot.nb0的大小,那么另外2個字節應該是用于記錄eboot.nb0的校驗碼。

?

DNW.exe通過UART1eboot.nb0下載到以0x30038000為起始的內存中后,接下來做什么呢?接著看ComLoad()的函數體的后面部分

?

從第102行到105行可以看出來,eboot.nb0的后兩個字節是用于記錄本身數據的校驗碼的。這幾行代碼也就是用來計算eboot.nb0的數據的校驗碼。

?

107和第108這兩行讀取了eboot.nb0中記錄的校驗碼。

110行用于比較現在計算出來的校驗碼是否和保存在eboot.nb0中的校驗碼一樣,如果不一樣,那么nboot就會退出運行,從而eboot.nb0的代碼就得不到運行,這樣的現象我也遇到過(但很少出現),但如果重新來下載eboot.nb0就沒有了,不知是否是因為DNW.exe本身有bug?如果校驗碼一直,那么接下來就在SDRAM中運行eboot.nb0

?

181行,就是eboot.nb0SDRAM中開始運行了,也即從Src/Bootloader/Eboot/starup.s下面的StartUp函數開始運行,見下圖

?

接著就從ResetHandler處開始運行。

總結

以上是生活随笔為你收集整理的nboot通过DNW下载并运行eboot.nb0的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。