0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式分享#57:为什么 Kernel 内置驱动能 “上电自启”?

BSP调试从0到1 来源:嵌入式分享 作者:嵌入式分享 2026-02-24 08:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

欢迎关注“嵌入式分享”,每周更新!☞ 正文

从接触 Linux 系统开始,我们就知道内核内置(built-in)驱动会在系统上电启动时自动加载,而编译为.ko文件的驱动则需要手动通过insmod加载。

这看似顺理成章的差异,背后实则是内核对驱动初始化机制的精巧设计 —— 核心在于module_init和module_exit这两个宏在不同编译模式下的实现逻辑差异。

要理解这一点,首先需要明确一个前提:无论是内置驱动还是可加载模块,其初始化和卸载的核心逻辑都是通过module_init(入口)和module_exit(出口)定义的。两者的差异并非 “是否执行这些函数”,而是 “何时、如何触发这些函数的执行”。

有了以上思路,问题就好办了。

先从module_init/module_exit 入手,阅读源码(源码路径:include/linux/module.h)知道,这两个宏根据驱动是否编译为模块,会展开为不同的代码,从而决定初始化函数的调用时机。

当驱动为内置模块(#ifndefMODULE

此时MODULE宏未定义,module_init被定义为__initcall(x):

wKgZPGmc796AKm6SAADQPSnCx3A599.png

__initcall(x):将函数x注册到内核的初始化调用队列中。内核启动时,会按优先级依次执行所有__initcall标记的函数(从early_initcall到late_initcall)。

编译时,这些初始化函数会被归类到内核的初始化段(如.init.text),内核启动时会按顺序执行这些函数。

因此,内置驱动的初始化函数会在系统启动阶段自动执行,无需手动干预。

当驱动为可加载模块

此时MODULE宏被定义(编译时通过-DMODULE指定),module_init和module_exit的定义完全不同。

wKgZPGmc796AY5tDAADkYCZTn70516.png module_init(initfn):将用户定义的initfn函数别名为init_module(内核模块加载器约定的初始化入口)。 module_exit(exitfn):将用户定义的exitfn函数别名为cleanup_module(模块卸载时的入口)。

当通过insmod加载.ko文件时,内核会调用init_module函数;通过rmmod卸载时,会调用cleanup_module函数。这两个函数与用户定义的initfn/exitfn是同一个函数(通过alias属性关联)。

总结

内置驱动与可加载模块的加载差异,本质是module_init宏在不同编译模式下的实现分流:

可加载模块通过 “函数别名” 将初始化逻辑绑定到insmod触发的标准入口,属于 “用户态手动触发”;

内置驱动通过 “初始化调用链” 将初始化逻辑注册到内核启动流程,属于 “内核态自动执行”。

这种设计既保证了系统关键驱动的自动初始化(确保启动流程顺畅),又提供了非关键驱动的动态加载能力(提升灵活性、节省内存),是 Linux 内核设备模型 “模块化” 与 “启动可靠性” 的精妙平衡。

(完)

本人专注 Linux 驱动 & Linux/Android BSP 开发调试,可接外包项目/技术支持/问题定位。有需求可加微信:【Chen_WeChat2026】。

更多原创技术文章:《README 2026》

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11854

    浏览量

    219831
  • Kernel
    +关注

    关注

    0

    文章

    50

    浏览量

    12151
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    飞凌嵌入式亮相德国纽伦堡embedded world 2026,深耕全球嵌入式AI市场!

    2026年3月10日,全球嵌入式技术领域的年度盛会——embedded world 2026国际嵌入式展览会,在德国纽伦堡会展中心盛大启幕。飞凌嵌入式携多款重磅新品及全场景解决方案再一次隆重参展
    的头像 发表于 03-11 16:37 1.1w次阅读
    飞凌<b class='flag-5'>嵌入式</b>亮相德国纽伦堡embedded world 2026,深耕全球<b class='flag-5'>嵌入式</b>AI市场!

    嵌入式驱动开发,需要掌握哪些技能?

    有经验的老司机都知道,做嵌入式驱动开发需要掌握一系列的技能,包含编程、硬件、操作系统、调试等多个方面。 1、硬件知识熟悉原理图:能看懂原理图以及各种元器件的含义,以及PCB布局等。 了解
    发表于 01-20 16:46

    什么是嵌入式应用开发?

    概述 所谓的嵌入式应用开发就是在嵌入式操作系统下进行开发、软硬件综合开发 ‌嵌入式应用开发‌是指在嵌入式操作系统下进行开发,包括系统化设计指导下的硬件和软件综合研发。
    发表于 01-12 16:13

    arm嵌入式主板优缺点

    功能非常有限,这也导致限制了它的广泛运用,而在ARM架构的嵌入式主板,一般可以通过总线等进行扩展,大大方便了客户。在网络传输方面,大多数的客户要求嵌入式主板具有高速网络功能来快速的传输数据,以实现远程
    发表于 01-08 07:08

    ARM嵌入式这样学

    软件,嵌入式应用软件。大部分的嵌入式软件都寄宿在ARM内核的芯片,三星,飞利浦等等都有ARM内核的IC,做计算机软件的人,很容易的就转做嵌入式软件,但是要做
    发表于 12-04 07:48

    嵌入式硬件设计解析

    嵌入式硬件设计是一个复杂而精细的过程,它涉及将微控制器(MCU)、微处理器(MPU)或数字信号处理器(DSP)等核心芯片与其他外围电子元件(如传感器、执行器、存储器、电源管理芯片等)进行组合和连接
    发表于 12-02 08:22

    嵌入式系统的定义和应用领域

    应用系统在功能、可靠性、成本、体积和功耗等方面的严格要求的专用计算机系统。 那么,嵌入式系统具体应用在哪些领域呢?事实,它们的应用非常广泛。例如,在办公自动化方面,我们常见的打印机、复印机和传真机
    发表于 11-17 06:49

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

    嵌入式需要掌握哪些核心技能? 若想通过学习嵌入式技术提升就业竞争力,需重点掌握C语言、嵌入式硬件架构、RTOS/Linux开发、通信协议四大核心技能,并结合行业需求积累项目经验。 以下为具体分析
    发表于 10-21 16:25

    Melexis推出新型嵌入式电机驱动芯片MLX81339

    Melexis推出新型嵌入式电机驱动芯片MLX81339。该芯片配备PWM/串行接口,专为工业应用设计,支持高达40W的三相无刷直流电机(BLDC)和步进电机控制,适用于风扇、泵及定位系统等紧凑型设备。其内置可编程闪存支持应用的
    的头像 发表于 10-10 10:45 1193次阅读

    嵌入式从入门到进阶,怎么学?

    嵌入式从入门到进阶,怎么学? 嵌入式学习的核心是 “软硬结合的技术壁垒”,科学分层才能高效突破。以下是从入门到高阶的精简路线,帮你避开弯路: 1、基础奠基层:构建技术底座 C 语言聚焦 指针、结构体
    发表于 09-02 09:44

    新一代嵌入式开发平台 AMD嵌入式软件和工具2025.1版现已推出

    AMD 2025.1 版嵌入式软件和工具是面向新一代嵌入式系统开发而打造的综合平台,全面加速概念构想到部署落地。 2025.1 版嵌入式软件和工具的新 增功能 AMD 嵌入式开发框架(
    的头像 发表于 08-20 09:15 4348次阅读

    入行嵌入式应该怎么准备?

    知识: 一、C/C++编程C/C++是嵌入式系统开发中最常用的编程语言。熟练掌握C/C++语言将使你能够理解和编写底层驱动程序、操作系统以及与硬件交互的代码。对于嵌入式系统来说,效率和资源利用率
    发表于 08-06 10:34

    Linux嵌入式和单片机嵌入式的区别?

    Linux嵌入式与单片机嵌入式在多个方面存在显著的区别,以下是详细的比较和归纳: 一、基本概念 1. Linux嵌入式: 定义:将Linux操作系统运行在嵌入式设备
    发表于 06-20 09:46

    运行在嵌入式系统的emApps

    在当今快节奏的嵌入式系统世界中,灵活性和适应性是嵌入式系统实现的关键。SEGGER推出了其最新创新:Embedded apps(emApps)应用,类似于手机上的应用程序,可以运行在嵌入式系统
    的头像 发表于 06-18 09:53 1118次阅读
    运行在<b class='flag-5'>嵌入式</b>系统<b class='flag-5'>上</b>的emApps

    【RK3588】嵌入式人工智能实验箱——智高校产教融合新平台

    在AIoT技术驱动产业变革的浪潮中,嵌入式人工智能已成为工业物联网、智慧交通、智慧医疗等领域创新突破的关键引擎。飞凌嵌入式教育品牌ElfBoard立足产业前沿,重磅推出嵌入式人工智能实
    的头像 发表于 06-11 14:29 1889次阅读
    【RK3588】<b class='flag-5'>嵌入式</b>人工智能实验箱——智<b class='flag-5'>启</b>高校产教融合新平台