爲了實現WINCE標準UI和我們產品的SHELL的切換,系統需要實現自動重啓的功能,這裏的自動重啓並不是按下reset鍵之後的從nboot開始執行的復位重啓,而只是跳轉到NK的開始地址處執行,和bootloader沒有關係。
在src/inc/oal_ioctl_tab.h中,我們看到自動重啓的函數OALIoCtlHalReboot(),我們來看看這個函數體
這個函數是利用看門狗來實現的復位重啓方式,是從nboot開始執行的,我們來實現直接從NK的起始地址處執行,我把這個函數體改爲如下所示
主要是增加了調用OALCPUPowerReset()函數,而這個函數我在/Src/Oal/Oallib/startup.s
有了上面的支持,在應用程序或者驅動都可以通過調用KernelIoControl(IOCTL_HAL_REBOOT,NULL,0,NULL,0,NULL)函數來實現自動重啓的功能了,當調用KernelIoControl((IOCTL_HAL_REBOOT,....)函數的時候,就轉而調用了OALIoCtlHalReboot()從而可以實現自動重啓的功能。