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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

WINCE6.0 + S3C2443的启动过程---nboot篇

發布時間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WINCE6.0 + S3C2443的启动过程---nboot篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

WINCE6.0?+?S3C2443的啟動過程---nboot篇

?

我們啟動WINCE6.0的方式是:nboot+eboot+NK。那么是如何啟動WINCE6.0系統映像的呢?首先是nbooteboot拷貝到SDRAM中執行的地址處運行,接著ebootNK.bin拷貝到SDRAM指定的地址處運行。

?

首先,我們需要通過JTAG把我們nboot文件編譯生成的stpldr.nb0文件燒錄到nandflash的第0block中。那么系統復位或者上電啟動的動作產生之后,是如何從nboot開始執行的呢?我們先看S3C2443datasheetnandflash控制器的相關部分:

?

?

?

當系統上電啟動或者復位后,nand?flash控制器會自動把nandflash0block中的前4KB的啟動代碼(也即nboot的代碼)拷貝到S3C2443配備的名為“stepping?stone”的SRAM中,然后在stepping?stone啟動代碼就自動運行了,也就是nboot在這時候就開始運行了,那么入口點是哪里呢?從/Src/Bootloader/Stepldr/sources的如下內容

TARGETNAME=stepldr

TARGETTYPE=PROGRAM

RELEASETYPE=PLATFORM

EXEENTRY=StartUp

NOMIPS16CODE=1

可以看出nboot的入口函數是StartUp。

?

1.StartUp函數

這個函數就在/Src/Bootloader/Stepldr/startup.s中定義,如下所示:

也即nboot從StartUp開始執行,接著就直接跳轉到ResetHandler執行了,這個函數主要是做了下面一些工作

設置GPIO,關閉watchdog,關閉所有的中斷。

設置系統時鐘,關于系統時鐘的詳細設置,我打算另外再寫一篇來介紹。

初始化內存控制器。

通過寄存器RSTSTAT的值來判斷當前的動作是正常的啟動還是從睡眠中喚醒,如果是從睡眠中喚醒,就直接跳轉到NK在SDRAM的開始地址處0x30200000(也即NK.bin在SDRAM中的存放地址處,也即0x80200000),然后會從NK.bin的start?address處(假如是0x80205394),這個地址就是NK.exe,也即是Oal.exe的開始地址處,也就是從/Src/Oal/Oallib/startup.s下面的函數StartUp開始執行,而0x80205394?-?0x80200000?=0x5394這個偏移值應該是NK.bin打包各個文件之后NK.exe在NK.bin中的偏移值;如果是正常的啟動,將會跳轉到nboot的main(),其中關于睡眠和喚醒,可見我的另一篇博客:http://cky0612.blog.163.com/blog/static/27478916201051793355837/

?

2.main()

Main函數實現了下面的內容:

通過Uart_Init()函數來初始化串口,編譯debug。

通過NF_Init()函數來初始化nand?flash控制器。

通過ReadFlashID()來讀取當前nand?flashID

其中0xECmaker?code(廠家識別代碼)0xA0device?code(設備代碼),這些值是在/Src/Common/Smartmedia/fmd/cfnand.h中的如下數組定義的:

上圖我只是截了這個數組的一小部分,后面的nandflash驅動中會用到這個數組用于判斷當前系統使用的nandflash是否在這個表中。

nandflash的第2block中把eboot的映像文件讀取到SDRAM中指定的地址處(0x30038000),這個地址有eboot/boot.bib來指定,實現部分如下:

nandflash中讀取ebootSDRAM之后,接著就在指定的地址處執行,也即eboot的起始地址處執行eboot,如下所示:

其中LOAD_ADDRESS_PHYSICAL=0x30038000,從此nboot的工作就完成,轉而開始eboot的執行了。

?

總結

以上是生活随笔為你收集整理的WINCE6.0 + S3C2443的启动过程---nboot篇的全部內容,希望文章能夠幫你解決所遇到的問題。

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