天天看點

C118 免按開機自動加載固件

最近無事,研究了按按鈕開機的功能;功能的起初是參考了别人的系統是怎麼做免開機加載固件的.

一、原理:

1.c118 原生loader部分代碼是沒有源代碼的,它上電隻需要按開機鍵然後系統就會起來. 2.原生loader起來後,加載bb裡面的loader .  BBloader就會接管系統所有的interrupt 3.隻要控制bbloader reset系統,c118 就會跑原生的loader,然後linux端用oscomo背景執行加載固件的指令,系統就會自動加載固件;

二、需要解決的問題;

1.怎麼讓機器一上電,就自動起來   解決辦法:把開機鍵用焊錫連接配接起來來. 2.開機鍵連接配接起來後,bbloader裡面一直有問題.   這個問題我研究了bbloader起來後,系統裡面其它按鍵好像不會有問題,但是power就有問題.仔細研究代碼,發現對power部分的代碼做了特殊處理,power key的代碼隻要有interrupt就會過濾的press pressed幾種狀态.power 隻會有一種狀态,而且按了後,等待釋放驅動裡面就調用了poweroff.   是以隻需修改代碼流程,把power鍵屏蔽,把power off函數調用去掉即可; 3.怎麼讓系統重新開機;   測試過,系統重新開機隻需要watchdog這個定時器;   參考這個指令osmload reset,檢視代碼發現reset的時候,給loader發了reset消息,然後bbloader回複一ok 的msg.然後就直接調用了驅動裡面的watchdog.   系統就重新開機了.

三、還需要解決的問題.

上面所有的都在bbloader裡面做的處理,但是沒在layer1裡面處理。 bbloader 和layer1的差別在于,layer1 init的時候打開了中斷,bbloader init的時候禁用了所有中斷,測試過程中,發現不禁用所有中斷,watchdog 隻會關閉系統,但是不會自動重新開機.

繼續閱讀