我正在尝试构建已配置的内核。所以我的同事告诉我在终端中输入
make
然后之后
make modules
我尝试用谷歌搜索,但最接近的结果是这但是当我向下滚动时,它显示的是umake
,而不是make
。
答案1
我将开始回答您的实际问题,但我会采用迂回的方式来回答,以便您能更好地了解情况。
tldr:您需要的软件包是make
或build-essential
。您需要位于与您的 Linux 源代码相同的目录中,并配置一个 .config 文件(听起来您已经这样做了)。然后运行这些命令。可能有帮助的 Google 关键字是“编译 Linux 内核”
构建系统也是如此make
。它允许您通过目录结构递归运行一系列编译命令(或任何命令)。它使用一个简单的系统来仅编译有变化的程序。
Make 允许声明“目标”。传统上,目标是文件名,后面跟着它所依赖的文件。
一个简单的例子是:
helloworld: helloworld.c helloworld.h
gcc helloworld.c -o helloworld
这将存储在一个文件调用中Makefile
,它告诉 make,为了构建 helloworld 文件(编译的二进制文件),您运行它,gcc helloworld.c -o helloworld
如果 helloworld 已经存在,则不要执行任何操作,除非对 helloworld.c 或 helloworld.h 进行更改,这些更改比 helloworld 文件更新。
如果这是 makefile 中唯一的规则,则运行make
将调用此规则(因为它是第一条规则)并尝试构建helloworld
,但也可以通过运行明确调用它make helloworld
Makefile 通常要复杂得多,可能看起来更像这样(这是一个精心设计的例子,我意识到 makefile 几乎永远不会看起来像这样,但它很适合解释):
hello: hello.o libhello.o
gcc hello.o libhello.o -o hello
hello.o: hello.c hello.h
gcc -c hello.c -o hello.o
libhello.o: libhello.c libhello.h
gcc -c libhello.c -o libhello.o
因此,如果您运行make
或,make hello
此 make 文件将检查 hello.o 和 libhello.o,如果它们不存在,它将查找这些目标,从而找出如何构建 hello.o 和 libhello.o,然后像您首先要求的那样构建 hello 二进制文件。这允许您一次指定一个级别的依赖项,并确定以何种顺序编译所有内容以使其正常工作(如果您的某个库没有更改,这也可以节省编译时间,您不需要重新编译该对象)。
您可以指定一个没有任何依赖项的目标,在这种情况下,它只会在目标文件不存在时运行。此外,您的目标不必是该规则创建的文件。例如:
clean:
rm hello *.o
这允许您运行make clean
,它将删除已编译的二进制文件和目标文件。由于它实际上不会创建名为的文件clean
,因此每次运行时make clean
都会执行此规则并清理您的工作目录。这称为伪目标,它们经常使用。make install
您可能经常会看到它来安装您使用 make 构建的程序。
回到你最初的问题
因此,Linux 内核使用 make 进行构建。它有一堆虚假目标,当位于 Linux 源代码的根目录中时,运行make help
以向您显示目标。通常,您从其中一个目标开始,该目标会启动一个程序来帮助您构建文件.config
。这些将是make config
、、和make menuconfig
其他make xconfig
几个。
make
将运行默认目标,该目标使用 .config 文件中指定的选项编译内核。make modules
将仅编译.config
文件中标记为模块的位。在这两个命令之间,您应该得到一个 vmlinuz 内核和一堆内核模块二进制文件。Linux 内核是什么/做什么超出了本文的范围,但简而言之,它是操作系统的核心软件(如果整个系统都是疯子,那么内核就是核心,对吗?)。它在处理器上以最高权限运行,是唯一直接与内存和硬件交互的软件,系统上的所有其他软件都与内核对话以代理对硬件的访问。(该描述中有大约 20 个警告,但这涵盖了最常见的 80% 的工作原理)。
但希望这能给你提供足够的背景信息来搜索更多有用的信息,如果你搜索“编译 Linux 内核”,你应该能找到各种复杂程度的六个资源。官方指南位于linux.org,但如果这是你第一次这样做,它很快就会陷入困境并且没有什么帮助。
在 Ubuntu(以及大多数发行版)中,make 位于软件包中make
,因此它会随安装一起安装,sudo apt install make
但是,要构建内核,您还需要其他程序,因此您通常需要安装包含sudo apt install build-essential
make 的构建工具链和附件。