從技術層面分析,按下路由器的 Reset 鍵後,路由器都做了哪些事情?
按下reset之後,路由器的操作可以分為如下幾步:
1.硬體相關的操作:
reset按鈕通常與cpu的gpio引腳相連,此引腳被配置為中斷模式,觸發方式為上升沿和下降沿觸發。
按鈕被按下和放開時,此gpio引腳電平發生跳變,這樣就會會產生中斷。
只要事先按照cpu的datasheet將對應寄存器配置好,按下reset時,硬體會自動進行這部分操作。
2.中斷處理函數(運行在內核):
cpu執行一個預先註冊的中斷處理函數,通過netlink等手段,通知管理進程reset按鈕被按下或放開。
3.管理進程(運行在用戶層):
多數路由器有一個控制中心,負責解析各種配置命令,並實現具體的功能,這個控制中心通常就是一個管理進程。
比如,我們點擊web頁面的重啟,原始數據先通過網路傳給httpd,接著傳遞給管理進程,管理進程解析這些數據,發現是一個重啟的請求,接著調用system(「reboot」)實現軟重啟功能。類似的,管理進程知道reset按鈕被按下,啟動一個定時器,如果定時器到期之前,reset按鈕被鬆開,則什麼都不做,否則產生一個恢復出廠設置的請求。
管理進程有另外一個模塊,負責處理各種請求。比如按下reset按鈕和web頁面點擊恢復出廠設置,最後都產生同一個請求。此請求對應的處理函數負責清空用戶配置。
4.清空用戶配置:
a.先看一下用戶配置的使用方式:
所謂的用戶配置,通常就是一個xml文件。比如我們通過web頁面配置了一條pppoe的wan連接,則管理進程負責調用ppp進程,創建一條ppp連接,並且在xml中可能產生如下記錄:
《ppp0》《username》abcdefg《/username》《passwd》123456《/passwd》《/ppp0》(先用《》代替尖括弧,不然用手機知乎顯示不出尖括弧裡面的內容。摔!)路由器斷電時,ppp連接斷開。
在下一次啟動時,管理進程的一個模塊負責解析用戶配置xml文件,得到ppp的用戶名密碼,然後建立一個ppp連接。
b.再看一下路由器里存放了些什麼:
路由器的Flash有多個分區(相當於c、d、e、f盤),分別用於保存bootloader,內核(操作系統),不可寫的文件系統(包含busybox等常用可執行文件,某些不需要改變的文件),mac地址,用戶配置等。由於用戶配置需要可讀可寫,而多數路由器的文件系統是不可寫的,所以需要用一個單獨的分區來保存用戶配置。bootloader,mac地址分區一般不會被修改。
內核和文件系統只有升級固件(刷機)才可以被修改。用戶配置分區在修改路由器配置時就會被修改。用戶配置的xml文件也不是憑空生成的,而是基於另外一個默認的xml文件(此文件保存於不可寫文件系統中,出廠前寫好,之後不會改變,默認xml文件中已經有一些xml的條目,比如默認wifi的加密方式為不加密,默認lan ip為192.168.1.1等)。配置pppoe連接時,在默認xml上添加一個條目,記錄用戶名和密碼等信息。
c.清空用戶配置時修改了什麼:
負責清空用戶配置的函數,先擦除用戶配置分區。在用戶層看來,可能就是調用一個API,格式化這個flash分區。
在內核看來,需要操作flash控制器。指定擦除命令,指定起始地址和長度(其實就是將這些參數寫到對應寄存器中)。這樣,cpu就會往連接flash的匯流排(比如spi,nand等)上發出符合匯流排協議和flash datasheet要求的一連串的高低電平。
flash收到擦除命令,起始地址,長度等參數,將對應的數據擦除。
將默認xml文件寫入這個用戶配置分區的過程類似。但是需要指定寫命令,起始地址,長度和要寫入的內容。
將默認xml文件寫入用戶配置分區之後,路由器會重啟(管理進程調用reboot命令軟重啟),管理進程解析默認的用戶配置xml文件,這樣會得到一份默認參數。再根據這些默認參數,執行各種配置。
這時,默認參數中沒有pppoe信息了,也就不會建立pppoe連接了。除用戶配置分區之外,bootloader,內核,文件系統,mac地址等分區都不會被修改。
LZ好壞,捅一下路由器的菊花,人家當然是一陣顫抖,像重新通電了一樣,一切的不快隨之而去......如果一直捅若干秒,路由器會不要不要的大爽,然後昏死過去,醒來後一切回到最初,就像你初見他時,好像什麼都沒有發生過一樣.....
直接捅一下的話只是觸發路由器平台管理把所有晶元的RST信號觸發一下而已,然後就像剛通電一樣接著啟動長按的話會觸發不一樣的操作,一般同時還會修改存儲晶元指定寄存器,這樣路由固件就執行出廠初始化操作
這只是我的設計思路而已,沒有核對過技術文檔
這個reset按鍵短按和長按執行不同軟體邏輯。按鍵設計要考慮去抖動debounce啊
是用原本的出廠配置文件(也就是出廠時候的配置文件,路由器固件里某個位置保留著這些初始當然配置文件),當你按下reset後,這些配置文件替代了已經被你修改過得配置文件。重啟後這些出廠配置文件生效。
路由器的固件和配置文件是掛載在不同的分區的,恢復出廠就是格式化掛載分區嘛。
個人猜測 求專業做路由器的人員批評-----------------------------------------------可能沒那麼複雜 至少覺得這個思路可行通話電腦登陸後台修改配置時只是路由把這些配置的值寫到flash里 然後每次上電程序運行時需要的配置量就都從flash里讀 然後按reset時可以檢測按鍵時間 超過一定時間就運行複位程序 把flash里的值清零或恢復出廠設置
推薦閱讀:
※為什麼有些路由器經常需要重啟,如何解決這個問題?
※為什麼路由器經常要重啟,而絕大部分手機卻可以長時間穩定工作?
※大神們,換了100m光纖,家裡的電腦網速和WiFi還是不穩定是為什麼?