成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux 驅動掛載順序分析

系統 Linux
流程中 driver_init 函數會對各個驅動入口函數進行初始化,也就是在內存中對驅動初始化函數進行尋址。而 do_initcalls 函數中,會按照驅動的優先級,對驅動一個一個進行掛載。

[[427413]]

本文轉載自微信公眾號「嵌入式Linux系統開發」,作者Jasonangel 。轉載本文請聯系嵌入式Linux系統開發公眾號。

手把手教你分析 Linux 啟動流程

從上文可以得出,start_kernel 函數最后調用的是 rest_init 函數,其實 rest_init 函數不光產生了最重要的 kernel_init (PID=1)和 kthreadd (PID=2)內核進程。

kernel_init 最后演變為用戶空間 init 進程(PID=1)。

rest_init 函數還有一個重要的分支:加載驅動模塊,調用流程如下:

  1. start_kernel 
  2.   |--->rest_init  
  3.       |--->kernel_init 
  4.           |--->kernel_init_freeable 
  5.               |--->do_basic_setup 
  6.                   |--->driver_init 
  7.                   |--->do_initcalls 
  8.                         |--->do_initcall_level 
  9.                             |--->do_one_initcall 

注意,這里就是驅動的初始化和驅動模塊的加載。

我們知道在 rest_init 函數中,最重要的 1 號進程和 2 號進程都已經起來了,也就是說系統已經真正起來了。1 號 2 號進程起來之前,文件系統的掛載是在調用 rest_init 函數之前就掛載好了,此時加載驅動是可以的。

那么這里是如何掛載的呢?

流程中 driver_init 函數會對各個驅動入口函數進行初始化,也就是在內存中對驅動初始化函數進行尋址。而 do_initcalls 函數中,會按照驅動的優先級,對驅動一個一個進行掛載。

linux4.14/init/main.c

驅動的優先級:Linux 把系統中需要掛載的各種東西,都分為14個等級,分別為 1--1s--2--2s--3--3s--4--4s--5--5s--6--6s--7--7s,數字越小優先級越高,定義在:

linux4.14/include/linux/init.h

一般我們自己寫的驅動模塊,文件最后會聲明一個 module_init 和 module_exit ,實際上被定義為 device_initcall,優先級為6,是要比架構初始化模塊和文件系統模塊優先級低。

如果驅動模塊之間有依賴,需要更改模塊掛載順序,有三種方式:

1、增加一個優先級,比如 8。或者把自己的驅動模塊聲明成其他優先級,也就是不用 module_init 去聲明,可以用 fs_initcall 去聲明。

2、對于同一優先級的驅動模塊,可以在 Makefile 中更改其編譯和鏈接的順序,就會切換其掛載的順序。(靜態編譯)

3、動態加載驅動模塊:等 Linux 系統起來以后,手動執行 insmod 和 rmmod 即可掛載和卸載驅動,順序自己決定。測試成功后,再搞到內核中靜態編譯。

雖然可以更改掛載順序,但還是希望大家寫驅動模塊的時候,能夠做到高內聚、低耦合,自己的模塊最好不要依賴其他模塊,防止其他模塊加載失敗導致自己的模塊不可用。

如何看驅動掛載順序?有兩種方式:

1、找到編譯后的 Linux 內核源碼,根目錄下面有個 System.map 文件,這里記載了 Linux 內核所做的所有的事情,是按順序記載的(也有可能在其他輸出目錄)。

一共有三列:地址、區域、操作。在操作中我們可以看到我們聲明的驅動的名字。

 

2、如果你驅動模塊有加一些打印,可以直接看 log。

 

責任編輯:武曉燕 來源: 嵌入式Linux系統開發
相關推薦

2009-08-04 10:46:04

2023-02-14 07:41:07

Linux 系統USB 驅動器

2023-01-13 23:39:51

Linux掛載驅動器

2018-06-27 10:50:16

UbuntuexFAT驅動器

2023-04-28 08:42:08

Linux內核SPI驅動

2010-02-24 15:56:48

Linux系統

2012-05-28 15:49:06

Linux凱迪拉克

2010-01-08 13:40:51

Ubuntu linu

2024-03-27 14:11:39

Linux掛載硬盤

2024-11-29 14:59:16

Linux掛載硬盤

2024-01-04 17:03:43

Linux操作系統硬盤

2021-05-13 21:51:38

鴻蒙HarmonyOS應用

2009-07-20 13:58:07

MySQL JDBC驅

2011-04-11 13:26:25

Linux驅動

2010-03-09 10:11:34

Linux掛載命令

2010-01-04 10:05:18

linux掛載windows

2010-01-04 10:02:10

Linux掛載u盤

2021-03-29 10:29:09

LinuxdockerLinux系統

2010-03-02 09:17:32

Linux local

2009-12-15 13:06:30

Fedora掛載
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品在线视频 | 国产在线观看免费 | 欧美日韩在线视频一区 | 欧美三级在线 | 欧美天堂一区 | 国产精品不卡视频 | 91色视频在线观看 | av在线一区二区三区 | 日韩欧美三区 | 久久免费高清 | 久久国产精品无码网站 | 国产精品久久久久久久久婷婷 | 懂色tv| 天天色天天射天天干 | 久久久福利 | 国产乱码精品一区二区三区中文 | 91精品一区二区三区久久久久 | 黄色免费在线观看网站 | 亚洲欧美一区二区三区国产精品 | 可以免费看的毛片 | 国产一区二区三区四区在线观看 | 亚洲人人 | 欧美一区精品 | 激情在线视频网站 | 欧美videosex性极品hd | 夜夜骑av| 日韩中文字幕一区二区三区 | 水蜜桃久久夜色精品一区 | 日韩成人精品在线 | 日韩中文字幕在线观看视频 | 亚洲国产一区二区三区在线观看 | 久久久久久网 | 在线观看中文字幕亚洲 | 亚洲精品精品 | 国产精品久久久久久久一区探花 | 日韩免费网站 | 人人种亚洲 | 国产99久久精品一区二区300 | 成人国内精品久久久久一区 | 天天拍夜夜爽 | 在线免费亚洲视频 |