智慧型路由器 原始碼追蹤路由器啟動過程

2021-07-06 06:56:55 字數 2630 閱讀 9184

首先來張圖簡要的從原始碼的角度展示一下linux核心的路由器啟動過程(看不清的話建議放大後檢視):

下面的重點是關注一下,kernel啟動後,從第乙個使用者程序執行,到系統啟動完畢,做了哪些事。

1. 路由器核心啟動執行流程

uboot在設定好一些環境引數後會將pc指標指向核心**,從此cpu就交由linux全權掌控。網上很多詳解linux啟動的文章,在此就不多此一舉的分析**了,但還是畫個流程圖。

注意到流程圖中的藍色方框,init程式啟動後會根據inittab中的配置來執行相應的程式或指令碼。一般inittab會放到/etc檔案加下,但是路由器中是在/etc_ro資料夾下。找到inittab檔案,檢視,發現只有如下兩行資訊:

:

:sysinit

:/etc_ro/rcs

ttys1:

:respawn

:/bin/sh

2. 理解inittab檔案作用機制解讀:inittab檔案每行有四個字段,字段之間用「:」分開,形式如下:

id:入口唯一識別符號,它是乙個字串,getty和mingetty等程式項,要求id和tty的編號相同。

runlevel:配置行適用的執行級別,著這裡可填入多個執行級別,比如12345或者25等

action:執行方式如下表:

process:所要執行的shell命令,任何合法的shell語法均適用於該字段。

現在,我們再來解讀inittab裡的兩行資訊:

:

:sysinit

:/etc_ro/rcs //不論在哪個執行等級,都將執行/etc_ro/rcs指令碼

ttys1:

:respawn

:/bin/sh //啟動並監視/bin

/sh,若/bin

/sh終止則重啟它

/etc_ro/rcs:指令碼完成了一些系統初始化工作,它完成了磁碟檢查,載入硬體模組一起其他一些需要優先執行的任務。

/bin/sh:指令碼直譯器,作用不解釋。

知道了init程式載入inittab檔案的機制後,如果我們想在開機的時候執行某些程式或指令碼就可以借助inittab檔案實現,相信你知道怎麼做了。

設一道題目作為練習:

寫乙個指令碼檔案命名mystartmount.sh,要求系統在開機時執行該指令碼,列印hello world資訊。

3. init第乙個啟動的指令碼檔案rcs

檢視rcs檔案,內容及解釋如下:

從中的**可以看到,該檔案除了建立一些目錄節點外,啟動了telnet,將nvram_daemon放入後台執行,還啟動了使用者程式init_system。從名字上理解似乎這個應用程式是初始化系統的,但是我們的linux系統都已經跑起來了,還要它初始化什麼呢?

這個init_system的程式到底做了什麼,請看下節。

4. init_system做了什麼

init_system的原始碼位於user/lighttpd-1.4.20/cgi_src/目錄下,檢視init_system.c,找到main函式:

int main(int argc, char *argv)

if (!strcmp(argv[1], "start")) else

if (!strcmp(argv[1], "restart")) else

return

0;}

函式除了呼叫了do_system啟動lighttpd外,還呼叫init_internet()。刨根問個底吧,檢視init_internet()**,發現該函式在呼叫lighttpd伺服器裡的一些cgi之前,執行了internet.sh指令碼,這是/sbin目錄下的shell指令碼。

static void init_internet(void)

我們知道,系統下的internet.sh是隨開機啟動的。我們又可以聯想到,假如我們要在開機執行乙個我們自定義的指令碼,完全可以將我們的指令碼檔案放在internet.sh裡面呼叫,當然也可以放在rcs指令碼裡面呼叫,其實講了這麼多主要用意在此。internet.sh本身的內容我們現在不必理會,知道它是處理進行一些網路設定就行了。

至此,linux系統以及一些開機啟動的附屬程式及shell指令碼都啟動完成!

路由器連線路由器

有兩種方法!無論哪種,和貓接的主路由總是不變!只要改從路由的設定!第一。從路由還是當路由用!設定 路由a為主路由,路由b為從路由!假設你現在有兩個路由 路由a 和 路由b 同時使用的是adsl撥號上網。首先,設定路由a的wan口狀態設定為pppoe撥號狀態,然後填入adsl撥號的賬號和密碼。然後,設...

無線路由器連線路由器

接觸過寬頻路由器的使用者,大抵都了解寬頻路由器上的埠有wan口和lan口之分。寬頻路由器在工作過程中有這樣乙個特點 從lan到wan方向上的資料流預設不受限制通過路由器,從wan到lan方向上預設不能通過。注 無線寬頻路由器的無線接入部分從屬於lan的範圍 也就是說,預設情況從區域網內電腦上發出的資...

路由器路由功能

我以前剛開始接觸到一些常用的網路裝置 router switch hub等 的時候,只是從一些資料中知道router與switch 或hub 最大的分別就是多了個路由功能,對於現在低端的產品從功能上來說,switch和hub基本上是分別不大的 本文只討論低端的產品,因為我沒有怎麼使用較高階的產品,對...