1.概要
2.内容
1.sudo make modules_install
sudo make modules_install
是一个在 Linux 内核编译过程中常用的命令。这个命令的作用是将编译好的内核模块(通常是设备驱动程序、文件系统支持等)安装到系统的适当目录中。这通常需要在拥有超级用户权限的情况下执行,因此使用 sudo
来提升权限。
这里是该命令的一些基本步骤和背景知识:
-
内核编译:在执行
make modules_install
之前,你通常需要先下载或获取 Linux 内核的源代码,并对其进行配置(通常使用make menuconfig
、make xconfig
或直接编辑.config
文件)。之后,你需要编译内核本身和它的模块,这通常通过make
或make -jN
(其中N
是并行编译的线程数)来完成。 -
编译模块:在编译过程中,内核源代码中的各个模块会被单独编译成
.ko
(内核对象)文件。 -
安装模块:
make modules_install
命令负责将这些编译好的模块文件复制到系统的/lib/modules/$(uname -r)
目录下(其中$(uname -r)
是当前内核的版本号)。这样,当系统启动时或运行时,可以动态地加载这些模块。 -
权限要求:由于
/lib/modules
目录通常只允许超级用户写入,因此需要使用sudo
来执行这个命令。 -
后续步骤:安装模块后,你可能还需要更新模块依赖关系,这可以通过运行
depmod
命令来完成。此外,如果你编译的是一个全新的内核,你可能还需要更新引导加载器(如 GRUB)的配置,以确保新内核可以被正确引导。
请确保在执行这些操作之前,你已经备份了重要数据,并了解如何恢复系统,以防出现不可预见的问题。编译和安装内核是一个高级操作,可能会对系统的稳定性和安全性产生影响。
2.如果有多个编译好的内核,这个命令如何选择
sudo make modules_install
命令本身并不涉及选择编译好的内核。这个命令的作用是将当前内核源代码目录下编译好的模块安装到系统的模块目录中。如果你有多个编译好的内核,选择使用哪个内核通常是在系统引导时通过引导加载器(如 GRUB)来完成的,而不是通过编译和安装模块的过程。
以下是关于如何处理多个编译好的内核的一些建议:
- 内核安装:
- 当你编译并安装一个新的内核时,通常会生成一个新的内核镜像文件(如
vmlinuz
)和相应的初始化内存盘镜像文件(如initrd.img
)。 - 这些文件需要被复制到系统的引导目录中(如
/boot
),并且更新引导加载器的配置以包含新的内核选项。
- 当你编译并安装一个新的内核时,通常会生成一个新的内核镜像文件(如
- 引导加载器配置:
- 对于 GRUB 来说,你需要编辑
/etc/default/grub
文件和/boot/grub/grub.cfg
文件(或者通过grub-mkconfig
命令自动生成)来添加新的内核引导条目。 - 你可以设置默认引导的内核,以及引导时显示的内核选项顺序。
- 对于 GRUB 来说,你需要编辑
- 内核模块管理:
- 对于每个内核版本,你都需要单独编译并安装其内核模块。这通常意味着为每个内核源代码目录运行
make modules
和sudo make modules_install
。 - 内核模块是与内核版本紧密相关的,因此确保为正确的内核版本编译和安装模块非常重要。
- 对于每个内核版本,你都需要单独编译并安装其内核模块。这通常意味着为每个内核源代码目录运行
- 选择引导的内核:
- 在系统引导时,GRUB 会显示一个菜单,让你选择想要引导的内核。
- 你可以通过上下箭头键选择内核,然后按下回车键来启动它。
- 删除不再使用的内核:
- 如果你不再需要某个旧的内核版本,你可以通过包管理器(如
apt-get
)或手动删除/boot
目录下的旧内核镜像和初始化内存盘镜像文件。 - 同时,不要忘记更新 GRUB 配置以移除不再使用的内核引导条目。
- 如果你不再需要某个旧的内核版本,你可以通过包管理器(如
总之,sudo make modules_install
命令与选择哪个内核进行引导无关。选择引导的内核是通过引导加载器的配置来完成的,而内核模块的编译和安装则需要针对每个内核版本单独进行。
3.如果我编译了多个内核,执行安装命令的时候,在那个编译目录下,就回安装那个内核对吗
当你编译了多个内核并在不同的内核源代码目录下工作时,执行安装命令(如 sudo make modules_install
)确实会安装当前内核源代码目录下编译好的模块。这是因为在编译内核和模块的过程中,所有的输出文件和中间文件都是基于当前工作目录(即内核源代码目录)的。
具体来说:
-
内核源代码目录:每个内核源代码目录都包含了编译该内核所需的所有文件和配置。当你切换到不同的内核源代码目录时,你的编译环境也会随之改变。
-
编译和安装模块:当你在某个内核源代码目录下执行
make modules
命令时,它会编译该内核版本的所有模块。随后,执行sudo make modules_install
会将这些编译好的模块安装到系统的模块目录中,通常是/lib/modules/$(uname -r)
,其中$(uname -r)
是当前内核的版本号。 -
选择内核进行引导:编译和安装模块并不会改变系统默认的引导内核。选择哪个内核进行引导是由引导加载器(如 GRUB)的配置决定的。你需要手动更新引导加载器的配置来包含新的内核选项,并在系统引导时选择想要引导的内核。
-
管理多个内核:如果你编译了多个内核并希望它们都能被引导加载器识别,你需要确保每个内核的镜像文件和初始化内存盘文件都被复制到了系统的引导目录中,并且引导加载器的配置被正确更新以包含所有内核的选项。
-
清理和删除:如果你不再需要某个内核及其模块,你可以手动删除它们。这包括从引导目录中删除内核镜像和初始化内存盘文件,从系统模块目录中删除对应的模块文件,以及更新引导加载器的配置以移除不再使用的内核选项。
综上所述,执行安装命令时,它会安装当前内核源代码目录下编译好的模块。如果你需要在多个内核之间切换,你需要确保每个内核的模块都已正确编译和安装,并且引导加载器的配置已相应更新。