精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

Openwrt開發指南 第13章 OpenWrt啟動流程

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

1 系統介紹

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

2 內核補丁

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

1687957914523ryq8uqu368

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

3 preinit

preinit腳本在etc目錄下面,首先先看看他的內容:

1687957915143b9s2vhfo5j

1687957915417zyxxhzksdm

16879579156795p1y7yz6ui

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

1687957915922vlcbm60zd8

循環執行/lib/preinit 目錄下面的腳本,這里簡要分析/lib/preinit目錄下的一個文件,循環執行/lib/preinit目錄下面的腳本,這里簡要分析一個,這里分析02_default_set_state,首先看看他的內容。

1687957916173xsnmntpb28

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

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

4 inittab

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

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

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

:::

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

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

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

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

【attention】action取值

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

先肯看/etc/inittab中的內容:

16879579166909bk7d607ww

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

5 總結

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

1687957916947kp3rounhet

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

    關注

    5068

    文章

    19014

    瀏覽量

    303229
  • 函數
    +關注

    關注

    3

    文章

    4304

    瀏覽量

    62427
  • OpenWrt
    +關注

    關注

    10

    文章

    127

    瀏覽量

    39266
  • 啟動流程
    +關注

    關注

    0

    文章

    14

    瀏覽量

    6467
  • 腳本
    +關注

    關注

    1

    文章

    387

    瀏覽量

    14830
收藏 人收藏

    評論

    相關推薦

    Openwrt開發指南 25 配置OpenWrt支持網絡攝像頭

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

    Openwrt開發指南 1 OpenWrt入門

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

    Openwrt開發指南 2 OpenWrt開發環境搭建

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

    Openwrt開發指南 3 OpenWrt下載及配置

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

    Openwrt開發指南 4 燒寫OpenWrt固件

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

    Openwrt開發指南 7 添加Web界面

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

    Openwrt開發指南 12 添加OpenWrt軟件包

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

    Openwrt開發指南 14 統一接口配置UCI

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

    Openwrt開發指南 17 驅動開發之字符設備驅動程序

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

    Openwrt開發指南 22 Openwrt串口的使用2

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

    Openwrt開發指南 24 配置開發板支持U盤

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

    Openwrt開發指南 29 OpenWrt 防火墻介紹

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

    RT5350 Wi-Fi 模塊開發指導_物聯網 openwrt 開發概述

    物聯網的資料 物聯網openwrt開發概述 物聯網openwrt開發概述 物聯網openwrt開發
    發表于 11-16 14:52 ?0次下載

    openwrt開發教程1~6

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

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

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