91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

嵌入式分享#57:為什么 Kernel 內(nèi)置驅(qū)動(dòng)能 “上電自啟”?

BSP調(diào)試從0到1 ? 來源:嵌入式分享 ? 作者:嵌入式分享 ? 2026-02-24 08:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

歡迎關(guān)注“嵌入式分享”,每周更新!? 正文

從接觸 Linux 系統(tǒng)開始,我們就知道內(nèi)核內(nèi)置(built-in)驅(qū)動(dòng)會(huì)在系統(tǒng)上電啟動(dòng)時(shí)自動(dòng)加載,而編譯為.ko文件的驅(qū)動(dòng)則需要手動(dòng)通過insmod加載。

這看似順理成章的差異,背后實(shí)則是內(nèi)核對(duì)驅(qū)動(dòng)初始化機(jī)制的精巧設(shè)計(jì) —— 核心在于module_init和module_exit這兩個(gè)宏在不同編譯模式下的實(shí)現(xiàn)邏輯差異。

要理解這一點(diǎn),首先需要明確一個(gè)前提:無論是內(nèi)置驅(qū)動(dòng)還是可加載模塊,其初始化和卸載的核心邏輯都是通過module_init(入口)和module_exit(出口)定義的。兩者的差異并非 “是否執(zhí)行這些函數(shù)”,而是 “何時(shí)、如何觸發(fā)這些函數(shù)的執(zhí)行”。

有了以上思路,問題就好辦了。

先從module_init/module_exit 入手,閱讀源碼(源碼路徑:include/linux/module.h)知道,這兩個(gè)宏根據(jù)驅(qū)動(dòng)是否編譯為模塊,會(huì)展開為不同的代碼,從而決定初始化函數(shù)的調(diào)用時(shí)機(jī)。

當(dāng)驅(qū)動(dòng)為內(nèi)置模塊(#ifndefMODULE

此時(shí)MODULE宏未定義,module_init被定義為__initcall(x):

wKgZPGmc796AKm6SAADQPSnCx3A599.png

__initcall(x):將函數(shù)x注冊(cè)到內(nèi)核的初始化調(diào)用隊(duì)列中。內(nèi)核啟動(dòng)時(shí),會(huì)按優(yōu)先級(jí)依次執(zhí)行所有__initcall標(biāo)記的函數(shù)(從early_initcall到late_initcall)。

編譯時(shí),這些初始化函數(shù)會(huì)被歸類到內(nèi)核的初始化段(如.init.text),內(nèi)核啟動(dòng)時(shí)會(huì)按順序執(zhí)行這些函數(shù)。

因此,內(nèi)置驅(qū)動(dòng)的初始化函數(shù)會(huì)在系統(tǒng)啟動(dòng)階段自動(dòng)執(zhí)行,無需手動(dòng)干預(yù)。

當(dāng)驅(qū)動(dòng)為可加載模塊

此時(shí)MODULE宏被定義(編譯時(shí)通過-DMODULE指定),module_init和module_exit的定義完全不同。

wKgZPGmc796AY5tDAADkYCZTn70516.png module_init(initfn):將用戶定義的initfn函數(shù)別名為init_module(內(nèi)核模塊加載器約定的初始化入口)。 module_exit(exitfn):將用戶定義的exitfn函數(shù)別名為cleanup_module(模塊卸載時(shí)的入口)。

當(dāng)通過insmod加載.ko文件時(shí),內(nèi)核會(huì)調(diào)用init_module函數(shù);通過rmmod卸載時(shí),會(huì)調(diào)用cleanup_module函數(shù)。這兩個(gè)函數(shù)與用戶定義的initfn/exitfn是同一個(gè)函數(shù)(通過alias屬性關(guān)聯(lián))。

總結(jié)

內(nèi)置驅(qū)動(dòng)與可加載模塊的加載差異,本質(zhì)是module_init宏在不同編譯模式下的實(shí)現(xiàn)分流:

可加載模塊通過 “函數(shù)別名” 將初始化邏輯綁定到insmod觸發(fā)的標(biāo)準(zhǔn)入口,屬于 “用戶態(tài)手動(dòng)觸發(fā)”;

內(nèi)置驅(qū)動(dòng)通過 “初始化調(diào)用鏈” 將初始化邏輯注冊(cè)到內(nèi)核啟動(dòng)流程,屬于 “內(nèi)核態(tài)自動(dòng)執(zhí)行”。

這種設(shè)計(jì)既保證了系統(tǒng)關(guān)鍵驅(qū)動(dòng)的自動(dòng)初始化(確保啟動(dòng)流程順暢),又提供了非關(guān)鍵驅(qū)動(dòng)的動(dòng)態(tài)加載能力(提升靈活性、節(jié)省內(nèi)存),是 Linux 內(nèi)核設(shè)備模型 “模塊化” 與 “啟動(dòng)可靠性” 的精妙平衡。

(完)

本人專注 Linux 驅(qū)動(dòng) & Linux/Android BSP 開發(fā)調(diào)試,可接外包項(xiàng)目/技術(shù)支持/問題定位。有需求可加微信:【Chen_WeChat2026】。

更多原創(chuàng)技術(shù)文章:《README 2026》

審核編輯 黃宇

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

    關(guān)注

    88

    文章

    11756

    瀏覽量

    218997
  • Kernel
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    12074
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式驅(qū)動(dòng)開發(fā),需要掌握哪些技能?

    有經(jīng)驗(yàn)的老司機(jī)都知道,做嵌入式驅(qū)動(dòng)開發(fā)需要掌握一系列的技能,包含編程、硬件、操作系統(tǒng)、調(diào)試等多個(gè)方面。 1、硬件知識(shí)熟悉原理圖:能看懂原理圖以及各種元器件的含義,以及PCB布局等。 了解
    發(fā)表于 01-20 16:46

    什么是嵌入式應(yīng)用開發(fā)?

    概述 所謂的嵌入式應(yīng)用開發(fā)就是在嵌入式操作系統(tǒng)下進(jìn)行開發(fā)、軟硬件綜合開發(fā) ?嵌入式應(yīng)用開發(fā)?是指在嵌入式操作系統(tǒng)下進(jìn)行開發(fā),包括系統(tǒng)化設(shè)計(jì)指導(dǎo)下的硬件和軟件綜合研發(fā)。
    發(fā)表于 01-12 16:13

    ARM嵌入式這樣學(xué)

    軟件,嵌入式應(yīng)用軟件。大部分的嵌入式軟件都寄宿在ARM內(nèi)核的芯片,三星,飛利浦等等都有ARM內(nèi)核的IC,做計(jì)算機(jī)軟件的人,很容易的就轉(zhuǎn)做嵌入式軟件,但是要做
    發(fā)表于 12-04 07:48

    嵌入式硬件設(shè)計(jì)解析

    嵌入式硬件設(shè)計(jì)是一個(gè)復(fù)雜而精細(xì)的過程,它涉及將微控制器(MCU)、微處理器(MPU)或數(shù)字信號(hào)處理器(DSP)等核心芯片與其他外圍電子元件(如傳感器、執(zhí)行器、存儲(chǔ)器、電源管理芯片等)進(jìn)行組合和連接
    發(fā)表于 12-02 08:22

    嵌入式需要掌握哪些核心技能?

    嵌入式需要掌握哪些核心技能? 若想通過學(xué)習(xí)嵌入式技術(shù)提升就業(yè)競(jìng)爭(zhēng)力,需重點(diǎn)掌握C語言、嵌入式硬件架構(gòu)、RTOS/Linux開發(fā)、通信協(xié)議四大核心技能,并結(jié)合行業(yè)需求積累項(xiàng)目經(jīng)驗(yàn)。 以下為具體分析
    發(fā)表于 10-21 16:25

    Melexis推出新型嵌入式電機(jī)驅(qū)動(dòng)芯片MLX81339

    Melexis推出新型嵌入式電機(jī)驅(qū)動(dòng)芯片MLX81339。該芯片配備PWM/串行接口,專為工業(yè)應(yīng)用設(shè)計(jì),支持高達(dá)40W的三相無刷直流電機(jī)(BLDC)和步進(jìn)電機(jī)控制,適用于風(fēng)扇、泵及定位系統(tǒng)等緊湊型設(shè)備。其內(nèi)置可編程閃存支持應(yīng)用的
    的頭像 發(fā)表于 10-10 10:45 ?824次閱讀

    嵌入式從入門到進(jìn)階,怎么學(xué)?

    嵌入式從入門到進(jìn)階,怎么學(xué)? 嵌入式學(xué)習(xí)的核心是 “軟硬結(jié)合的技術(shù)壁壘”,科學(xué)分層才能高效突破。以下是從入門到高階的精簡(jiǎn)路線,幫你避開彎路: 1、基礎(chǔ)奠基層:構(gòu)建技術(shù)底座 C 語言聚焦 指針、結(jié)構(gòu)體
    發(fā)表于 09-02 09:44

    Linux嵌入式和單片機(jī)嵌入式的區(qū)別?

    Linux嵌入式與單片機(jī)嵌入式在多個(gè)方面存在顯著的區(qū)別,以下是詳細(xì)的比較和歸納: 一、基本概念 1. Linux嵌入式: 定義:將Linux操作系統(tǒng)運(yùn)行在嵌入式設(shè)備
    發(fā)表于 06-20 09:46

    運(yùn)行在嵌入式系統(tǒng)的emApps

    在當(dāng)今快節(jié)奏的嵌入式系統(tǒng)世界中,靈活性和適應(yīng)性是嵌入式系統(tǒng)實(shí)現(xiàn)的關(guān)鍵。SEGGER推出了其最新創(chuàng)新:Embedded apps(emApps)應(yīng)用,類似于手機(jī)上的應(yīng)用程序,可以運(yùn)行在嵌入式系統(tǒng)
    的頭像 發(fā)表于 06-18 09:53 ?863次閱讀
    運(yùn)行在<b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>上</b>的emApps

    【RK3588】嵌入式人工智能實(shí)驗(yàn)箱——智高校產(chǎn)教融合新平臺(tái)

    在AIoT技術(shù)驅(qū)動(dòng)產(chǎn)業(yè)變革的浪潮中,嵌入式人工智能已成為工業(yè)物聯(lián)網(wǎng)、智慧交通、智慧醫(yī)療等領(lǐng)域創(chuàng)新突破的關(guān)鍵引擎。飛凌嵌入式教育品牌ElfBoard立足產(chǎn)業(yè)前沿,重磅推出嵌入式人工智能實(shí)
    的頭像 發(fā)表于 06-11 14:29 ?1567次閱讀
    【RK3588】<b class='flag-5'>嵌入式</b>人工智能實(shí)驗(yàn)箱——智<b class='flag-5'>啟</b>高校產(chǎn)教融合新平臺(tái)

    嵌入式開發(fā)入門指南:從零開始學(xué)習(xí)嵌入式

    基礎(chǔ) 3. 學(xué)習(xí)路徑推薦第一階段:熟悉開發(fā)環(huán)境(如Keil、IAR、STM32)第二階段:掌握裸機(jī)編程與驅(qū)動(dòng)開發(fā)第三階段:學(xué)習(xí)RTOS(實(shí)時(shí)操作系統(tǒng))如FreeRTOS第四階段:深入理解Linux嵌入式
    發(fā)表于 05-15 09:29

    飛凌嵌入式2025嵌入式及邊緣AI技術(shù)論壇圓滿結(jié)束

    飛凌嵌入式「2025嵌入式及邊緣AI技術(shù)論壇」在深圳深鐵皇冠假日酒店盛大舉行,此次活動(dòng)邀請(qǐng)到了200余位嵌入式技術(shù)領(lǐng)域的技術(shù)專家、企業(yè)代表和工程師用戶,共享嵌入式及邊緣AI技術(shù)的盛宴!
    的頭像 發(fā)表于 04-28 13:57 ?4125次閱讀
    飛凌<b class='flag-5'>嵌入式</b>2025<b class='flag-5'>嵌入式</b>及邊緣AI技術(shù)論壇圓滿結(jié)束

    飛凌嵌入式「2025嵌入式及邊緣AI技術(shù)論壇」議程公布

    4月22日,飛凌嵌入式“2025嵌入式及邊緣AI技術(shù)論壇”將在深圳舉行,論壇以“新生態(tài),智未來”為主題,旨在匯聚行業(yè)智慧,探討嵌入式技術(shù)與邊緣AI的深度融合與創(chuàng)新應(yīng)用。
    的頭像 發(fā)表于 04-02 15:12 ?1339次閱讀
    飛凌<b class='flag-5'>嵌入式</b>「2025<b class='flag-5'>嵌入式</b>及邊緣AI技術(shù)論壇」議程公布

    Python在嵌入式系統(tǒng)中的應(yīng)用場(chǎng)景

    你想把你的職業(yè)生涯提升到一個(gè)新的水平?Python在嵌入式系統(tǒng)中正在成為一股不可缺少的新力量。盡管傳統(tǒng)嵌入式開發(fā)更多地依賴于C和C++語言,Python的優(yōu)勢(shì)在于其簡(jiǎn)潔的語法、豐富的庫和快速的開發(fā)周期,這使得它在某些
    的頭像 發(fā)表于 03-19 14:10 ?1491次閱讀

    泰凌微電子亮相2025年德國紐倫堡嵌入式展覽會(huì)

    2025年3月11日至13日,全球規(guī)模最大的嵌入式系統(tǒng)專業(yè)展覽會(huì)——2025年嵌入式世界紐倫堡展覽會(huì)(Embedded World 2025)在德國紐倫堡會(huì)展中心盛大舉行。2003年創(chuàng)辦以來,該展會(huì)已成為
    的頭像 發(fā)表于 03-13 09:06 ?1514次閱讀