linux kernel make firmware_install编译流程分析

本文详细分析了在Linux Kernel 4.11.4版本中,针对x86平台,执行`make firmware_install`命令时的流程。从主Makefile开始,解释了如何确定srctree和objtree的值,以及INSTALL_FW_PATH和fw-shipped-all的来源。通过阅读scripts/Makefile和firmware/Makefile中的内容,揭示了`__fw_install`目标的生成过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博客已迁移,新博客地址:https://www.wxtechblog.com

#1. 文章说明

  • 内核版本号为:4.11.4,针对x86平台,存不存在.config文件无所谓。
  • 需要读者有基础Makefile知识
  • 分析输入make firmware_install命令时的情形,只分析主要流程,其它的像变量赋值等部分只分析会影响流程执行的内容。
  • 不会讲解Makefile文件中出现的函数,如果不懂,可以bing。

#2. 主Makefile流程分析

  目标firmware_install定义在源码根目录下Makefile中的line 1120行

1119 PHONY += firmware_install
1120 firmware_install:
1121    @mkdir -p $(objtree)/firmware
1122    $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_install

  由于只输入了make firmware_install,因此KBUILD_SRC为空,会解析line 118 ~ line 158的语句。

  这部分中,line 137 ~ line 157的语句无效。原因是编译时只输入了make firmware,导致line 122行条件为假,因此KBUILD_OUTPUT为空值,line 137行的语句为假,所以line 137 ~ line 157的语句无效。因此,line 156行的skip-makefile为空值,因此line 161行的条件为真,所以line 161 ~ line 1698的语句有效。

  srctree的值定义于源码根目录Makefi

### 编译 Linux 5.4.0 内核 为了编译 Linux 5.4.0 内核,需遵循一系列特定的操作流程来确保成功完成编译过程。 #### 准备工作环境 安装必要的工具包对于准备编译环境至关重要。这通常涉及更新现有的软件包列表并安装构建内核所需的依赖项: ```bash sudo apt-get update && sudo apt-get upgrade sudo apt-get install build-essential libncurses-dev bison flex \ libssl-dev libelf-dev openssl dwarves ``` #### 获取源码 下载指定版本的 Linux 内核源代码是下一步操作的关键部分。可以从官方网站获取稳定版的 tarball 文件,并解压至本地磁盘上适当的位置: ```bash wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.tar.gz tar -xvf linux-5.4.tar.gz cd linux-5.4 ``` #### 配置内核选项 配置新内核时,可以利用已有的 `.config` 文件作为起点,该文件定义了各种驱动程序和支持功能的选择情况。如果之前有类似的配置,则可以直接复制过来使用[^2];如果没有现成的配置文件,则可以通过交互式的菜单界面来进行设置: ```bash cp /usr/src/linux-headers-$(uname -r)/.config . make menuconfig ``` #### 开始编译 一旦完成了所有的前期准备工作之后就可以正式进入编译阶段了。这里推荐采用多线程的方式加速整个进程,具体命令如下所示: ```bash make -j$(nproc) ``` #### 安装模块与固件 当编译完成后还需要单独处理一些额外的内容,比如加载新的硬件支持以及初始化ramdisk镜像等任务。这部分可通过执行下面两条指令实现自动化部署: ```bash sudo make modules_install firmware_install sudo make INSTALL_MOD_STRIP=1 modules_install ``` #### 创建启动映像 最后一步就是创建可引导的 vmlinuz 映像文件以便后续能够正常开机运行。此步骤同样简单明了,只需一条简单的 shell 命令即可达成目的: ```bash sudo make install ``` 以上即为完整的 Linux 5.4.0 版本内核的手动编译指南[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值