從技術層面分析,按下路由器的 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還是不穩定是為什麼?

TAG:計算機 | 硬體 | 路由器 | 晶元集成電路 | 無線路由器 |