0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Openwrt開發(fā)指南 第13章 OpenWrt啟動流程

嵌入式大雜燴 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-06-29 09:09 ? 次閱讀

1 系統(tǒng)介紹

任何系統(tǒng)的啟動都是開發(fā)人員首要關注的問題,因為只有了解了系統(tǒng)的啟動流程和啟動機制,才能真正掌握一個系統(tǒng),如果對啟動的啟動不熟悉的話,是不可能真正用好一個系統(tǒng),openwrt系統(tǒng)也不例外,他的啟動和一般的嵌入式系統(tǒng)啟動還有所區(qū)別,現(xiàn)在咱們就分析一下openwrt的啟動流程。

2 內(nèi)核補丁

在Openwrt的官網(wǎng)上面下載的源碼,其中包括了一些內(nèi)核補丁,這里究竟為什么要給內(nèi)核做補丁呢?因為Openwrt為了支持更多的路由器,更多的操作和Openwrt特有的一些內(nèi)核功能,linux源碼是不具備的,這樣Openwrt為了增加這些功能,就需要在linux官網(wǎng)上面下載的源代碼中做一些修改,在這里體現(xiàn)為給linux源碼打補丁。Openwrt源碼中的linux補丁文件放在target/linux/generic文件下面,有對于不同版本的linux內(nèi)核補丁文件。MT7621采用的是4.14版本的內(nèi)核,所以他的補丁文件在patches-3.10目錄下面。這里是所有的內(nèi)核補丁文件,在編譯Openwrt的時候,會首先把他們拷貝到內(nèi)核目錄下面,然后在內(nèi)核上面打上這些補丁,然后再編譯內(nèi)核。咱們首先分析他對于linux啟動的補丁,它的名字是921-use_preinit_as_init.patch(在Ubuntu源文件中),咱們可以看看他的內(nèi)容。

1687957914523ryq8uqu368

可以看到他它修改linux內(nèi)核中默認的啟動項,可以看到它首先啟動/etc/preinit(開發(fā)板的文件系統(tǒng)中),它是個腳本,咱們就從這個腳本說起。

3 preinit

preinit腳本在etc目錄下面,首先先看看他的內(nèi)容:

1687957915143b9s2vhfo5j

1687957915417zyxxhzksdm

16879579156795p1y7yz6ui

這就是個bash腳本,前半部分只是定義了一些變量,先記住他們的內(nèi)容即可,有兩個函數(shù)是我們需要了解的,boot_hook_init和boot_run_hook。他們定義在/lib/functions/preinit.sh文件中,boot_hook_init是初始化一個函數(shù)隊列,boot_run_hook是運行一個函數(shù)隊列,還有一個這個文件沒有體現(xiàn),后面的文件中會遇到,這里說明一下,boot_book_add這個是在一個函數(shù)隊列中添加一個函數(shù)。然后就是執(zhí)行:

1687957915922vlcbm60zd8

循環(huán)執(zhí)行/lib/preinit 目錄下面的腳本,這里簡要分析/lib/preinit目錄下的一個文件,循環(huán)執(zhí)行/lib/preinit目錄下面的腳本,這里簡要分析一個,這里分析02_default_set_state,首先看看他的內(nèi)容。

1687957916173xsnmntpb28

可以看到它就是在preinit_main函數(shù)隊列中增加一個函數(shù),這個函數(shù)就是簡單的執(zhí)行一個腳本。當運行preinit_main的時候,隊列中的所有函數(shù)就會依次執(zhí)行。其他文件可以自行分析,都比較簡單。

最后在preinit腳本中執(zhí)行preinit_main。執(zhí)行完這個腳本之后init進程會根據(jù)inittab文件執(zhí)行其他的啟動項。

4 inittab

inittab為linux初始化文件系統(tǒng)時init初始化程序用到的配置文件。這個文件負責設置init初始化程序初始化腳本在哪里;每個運行級初始化時運行的命令;開機、關機、重啟對應的命令;各運行級登陸時所運行的命令。

如果存在/etc/inittab文件,Busyboxinit程序解析它,然后按照它的指示創(chuàng)建各種子進程,否則使用默認的配置創(chuàng)建子進程。

/etc/inittab文件中每個條目用來定義一個子進程,并確定它的啟動方法,格式如下

:::

1、id:表示這個子進程要使用的控制臺,如果省略,則使用與init進程一樣的控制臺.

2、runlevels:這個字段沒有意義,可以省略。在linux有意義.

3、action:表示init進程如何控制這個子進程,具體取值見下表.

4、process:要執(zhí)行的程序,它可以是可執(zhí)行程序,也可以是腳本.如果process字段前有“-”字符,這個程序被稱為“交互的”.

【attention】action取值

名稱 執(zhí)行條件 說明
sysinit 系統(tǒng)啟動后最先執(zhí)行 指定初始化腳本路徑,只執(zhí)行一次,init進程等待它結束才繼續(xù)執(zhí)行其它動作
wait 系統(tǒng)執(zhí)行完sysinit進程后 只執(zhí)行一次,init進程等待它結束才繼續(xù)執(zhí)行其它動作
once 系統(tǒng)執(zhí)行完wait進程后 只執(zhí)行一次,init進程不等待它結束
respawn 啟動完once進程后 init進程監(jiān)測發(fā)現(xiàn)子進程退出時,重新啟動它,永不結束.如Shell命令解釋器
askfirst 啟動完respawn進程后 與respawn類似,不過init進程先輸出“Please pressEntertoactivatethis console”,等用戶輸入回車后才啟動子進程
shutdown 當系統(tǒng)關機時 即重啟、關閉系統(tǒng)時執(zhí)行的程序
restart 系統(tǒng)重啟時 init進程重啟時執(zhí)行的程序,通常是init程序本身先重新讀取、解析/etc/inittab文件,再執(zhí)行restart程序
ctrl+alt+del 按下Ctrl+Alt+Del 鍵時按Ctrl+Alt+Del組合鍵時執(zhí)行的程序

先肯看/etc/inittab中的內(nèi)容:

16879579166909bk7d607ww

從上面的分析可以看出它在開機啟動的時候執(zhí)行/etc/init.d/rcS腳本,以前是有/etc/init.d/rcS腳本的,現(xiàn)在的openwrt已經(jīng)去掉了這個腳本文件,只要有rcSSboot這幾個參數(shù)就可以,但是功能是有的就是按順序執(zhí)行/etc/rc.d下面的各個腳本,以S開頭代表啟動的時候執(zhí)行的腳本,與命令行中的S對應,以K開頭的代表關機的時候需要執(zhí)行的腳本,與命令行中的K對應。

5 總結

從上面的分析我們來總結一下openwrt的啟動流,/etc/preinit->/lib/preinit/->/etc/inittab->/etc/rc.d/S。

1687957916947kp3rounhet

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5059

    文章

    18975

    瀏覽量

    302076
  • 函數(shù)
    +關注

    關注

    3

    文章

    4284

    瀏覽量

    62325
  • OpenWrt
    +關注

    關注

    10

    文章

    127

    瀏覽量

    39247
  • 啟動流程
    +關注

    關注

    0

    文章

    14

    瀏覽量

    6462
  • 腳本
    +關注

    關注

    1

    文章

    387

    瀏覽量

    14811
收藏 人收藏

    評論

    相關推薦

    Openwrt開發(fā)指南 25 配置OpenWrt支持網(wǎng)絡攝像頭

    Openwrt開發(fā)指南 25 配置OpenWrt支持網(wǎng)絡攝像頭
    的頭像 發(fā)表于 07-13 08:56 ?2260次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>25<b class='flag-5'>章</b> 配置<b class='flag-5'>OpenWrt</b>支持網(wǎng)絡攝像頭

    Openwrt開發(fā)指南 1 OpenWrt入門

    如果要學習openwrt的話,買些列表中二手的路由器來實踐下更容易學習,大部分要升級一下rom芯片和內(nèi)存芯片,典型配置都是4M、64M。
    的頭像 發(fā)表于 06-27 09:09 ?4171次閱讀

    Openwrt開發(fā)指南 2 OpenWrt開發(fā)環(huán)境搭建

    開發(fā)PC機上的軟件時,可以直接在PC機上編輯、編譯、調(diào)試軟件,最終發(fā)布的軟件也是在PC機上運行。對于物聯(lián)網(wǎng)OpenWrt開發(fā),最初的嵌入式設備是一個空白的系統(tǒng),需要通過主機為它構建基本的軟件系統(tǒng),并
    的頭像 發(fā)表于 06-27 09:09 ?6715次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>2<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b><b class='flag-5'>開發(fā)</b>環(huán)境搭建

    Openwrt開發(fā)指南 3 OpenWrt下載及配置

    編譯OpenWrt首先需要下載源碼,OpenWrt的源碼是通過git下載,OpenWrt目前已經(jīng)很好的支持了MT7620、MT7821等芯片,因此OpenWrt系統(tǒng)完全可以用于MT76
    的頭像 發(fā)表于 06-27 09:10 ?5468次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>3<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b>下載及配置

    Openwrt開發(fā)指南 4 燒寫OpenWrt固件

    對于一個完整的嵌入式系統(tǒng),它由U-boot、內(nèi)核(Linux)、文件系統(tǒng)、應用程序四部分組成。那么這四部分之間的關系是怎么樣的呢?OpenWrt是屬于哪部分呢?
    的頭像 發(fā)表于 06-27 09:11 ?4580次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>4<b class='flag-5'>章</b> 燒寫<b class='flag-5'>OpenWrt</b>固件

    Openwrt開發(fā)指南 7 添加Web界面

    LUA語言的官方版本只包括一個精簡的核心和最基本的庫。這使得LUA體積小、啟動速度快,從而適合嵌入在別的程序里。UCI是OpenWrt中為實現(xiàn)所有系統(tǒng)配置的一個統(tǒng)一接口,英文名UnifiedConfigurationInterface,即統(tǒng)一配置接口。LuCI,即是這兩個
    的頭像 發(fā)表于 06-29 09:04 ?3628次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>7<b class='flag-5'>章</b> 添加Web界面

    Openwrt開發(fā)指南 12 添加OpenWrt軟件包

    OpenWrt是一個比較完善的嵌入式Linux開發(fā)平臺,在無線路由器應用上已有4000多個軟件包。我們可以在其基礎上增加軟件包,以擴大其應用范圍。在OpenWrt中增加軟件包極其方便,按照
    的頭像 發(fā)表于 06-29 09:09 ?8588次閱讀

    Openwrt開發(fā)指南 14 統(tǒng)一接口配置UCI

    UCI即統(tǒng)一接口配置(UnifiedConfigurationInterface)的簡稱,它被應用于OpenWrt系統(tǒng)上面。
    的頭像 發(fā)表于 06-29 09:11 ?2949次閱讀

    Openwrt開發(fā)指南 17 驅(qū)動開發(fā)之字符設備驅(qū)動程序

    首先將 RT5350_drv 文件夾傳到 OpenWrt 源碼的chaos_calmer/package/kernel 目錄下。然后進入 OpenWrt 源碼的頂層目錄,執(zhí)行 make menuconfig。
    的頭像 發(fā)表于 07-02 09:20 ?3096次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>17<b class='flag-5'>章</b> 驅(qū)動<b class='flag-5'>開發(fā)</b>之字符設備驅(qū)動程序

    Openwrt開發(fā)指南 22 Openwrt串口的使用2

    在上一中,我們成功的讓驅(qū)動程序支持了串口 2,并且做了簡單的測試。接下來,我們就為串口 2 添加一個應用程序,從而實現(xiàn) Wi-Fi 串口。實現(xiàn)過程非常簡單,首先進入 OpenWrt 系統(tǒng)源碼,然后運行 make menuconfig 命令進行配置。
    的頭像 發(fā)表于 07-05 09:09 ?3915次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>22<b class='flag-5'>章</b> <b class='flag-5'>Openwrt</b>串口的使用2

    Openwrt開發(fā)指南 24 配置開發(fā)板支持U盤

    Openwrt開發(fā)指南 24 配置開發(fā)板支持U盤
    的頭像 發(fā)表于 07-13 08:55 ?2877次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>24<b class='flag-5'>章</b> 配置<b class='flag-5'>開發(fā)</b>板支持U盤

    Openwrt開發(fā)指南 29 OpenWrt 防火墻介紹

    Openwrt 是一個 GNU/Linux 的發(fā)行版, 和其他大多數(shù)的發(fā)行版一樣,Openwrt 的防火墻同樣也是基于 iptables。 在 OpenWRT 下防火墻的默認行為已經(jīng)可以滿足路由器的需要,一般情況下也無需修改。
    的頭像 發(fā)表于 07-15 16:24 ?3395次閱讀
    <b class='flag-5'>Openwrt</b><b class='flag-5'>開發(fā)指南</b> <b class='flag-5'>第</b>29<b class='flag-5'>章</b> <b class='flag-5'>OpenWrt</b> 防火墻介紹

    RT5350 Wi-Fi 模塊開發(fā)指導_物聯(lián)網(wǎng) openwrt 開發(fā)概述

    物聯(lián)網(wǎng)的資料 物聯(lián)網(wǎng)openwrt開發(fā)概述 物聯(lián)網(wǎng)openwrt開發(fā)概述 物聯(lián)網(wǎng)openwrt開發(fā)
    發(fā)表于 11-16 14:52 ?0次下載

    openwrt開發(fā)教程1~6

    openwrt開發(fā)教程1~6
    發(fā)表于 03-17 14:23 ?53次下載

    openwrt都有什么功能_openwrt詳細功能介紹_openwrt刷機教程

    penWrt作為一個嵌入式的Linux發(fā)行版已經(jīng)得到廣泛的運用,本文主要介紹了openWRT開發(fā)背景、OpenWrt功能、openWRT特點以及op
    發(fā)表于 12-27 10:21 ?16.6w次閱讀
    <b class='flag-5'>openwrt</b>都有什么功能_<b class='flag-5'>openwrt</b>詳細功能介紹_<b class='flag-5'>openwrt</b>刷機教程