我正在关注这学习编译内核。我使用
apt-get source linux-image-$(uname -r)
下载我正在使用的Linux内核的源代码。
运行上述命令后,下载了以下文件(和目录)。
user $ ls -l
total 130972
drwxrwxr-x 27 sps sps 4096 Oct 16 03:10 linux-lts-vivid-3.19.0
-rw-rw-r-- 1 sps sps 10980684 Oct 5 10:54 linux-lts-vivid_3.19.0-30.34~14.04.1.diff.gz
-rw-rw-r-- 1 sps sps 7396 Oct 5 10:54 linux-lts-vivid_3.19.0-30.34~14.04.1.dsc
-rw-rw-r-- 1 sps sps 123115155 May 6 21:35 linux-lts-vivid_3.19.0.orig.tar.gz
user $
在里面相同的页面上提到:
构建内核非常简单。将工作目录更改为内核源代码树的根目录,然后输入以下命令:
但我不确定哪个是“内核源代码树的根”。
它是当前目录吗(我运行的位置apt-get source ...
以及上面列出的文件的位置)?
或者,它是目录:
drwxrwxr-x 27 sps sps 4096 Oct 16 03:10 linux-lts-vivid-3.19.0
或者我应该提取 tarball
-rw-rw-r-- 1 sps sps 123115155 May 6 21:35 linux-lts-vivid_3.19.0.orig.tar.gz
输出uname -r
:
user $ uname -r
3.19.0-30-generic
user $
答案1
来自Debian 维基:
源码包为您提供编译或构建所需软件所需的所有文件。
其最简单的形式由三个文件组成:
上游源码包包含压缩文件结尾
以 .dsc 结尾的描述文件。它包含包的名称,既包含在文件名中,也包含在内容中(在 Source: 关键字之后)。
一个 tarball,包含对上游源所做的任何更改,以及为 Debian 包创建的所有文件。
- 这有一个压缩包(源格式:3.0)
- 或.diff.gz结尾(源格式:1.0)
对于 Ubuntu 来说,情况非常相似,就你的情况而言:
- “linux-lts-vivid-3.19.0”:实际内核,从上游 tarball“linux-lts-vivid_3.19.0.orig.tar.gz”开始修补,并使用“linux-lts-vivid_3.19.0-30.34~14.04.1.diff.gz”中列出的修改;
- “linux-lts-vivid_3.19.0-30.34~14.04.1.diff.gz”:一个 tarball,包含对上游源所做的任何更改,以及为 Debian 包创建的所有文件;
- “linux-lts-vivid_3.19.0-30.34~14.04.1.dsc”:以“.dsc”结尾的描述文件。它包含软件包的名称,既包括文件名,也包括内容(在 Source: 关键字之后);
- “linux-lts-vivid_3.19.0.orig.tar.gz”:以“.tar.gz”结尾的上游 tarball(请注意,根据我的经验,它并不总是“.tar.gz”文件,它可以是略有不同的格式,例如“.tar.xz”);
当你运行 时apt-get source linux-image-$(uname -r)
,上游 tarball 会自动使用“linux-lts-vivid-3.19.0”中“linux-lts-vivid_3.19.0-30.34~14.04.1.diff.gz”列出的修改进行修补:
% apt-get source linux-image-$(uname -r)
# ...
dpkg-source: info: extracting linux in linux-3.19.0
dpkg-source: info: unpacking linux_3.19.0.orig.tar.gz
dpkg-source: info: applying linux_3.19.0-30.34.diff.gz
# ...
答案2
内核树的根是目录linux-lts-vivid-3.19.0
。
关于其他文件:
在 tarball 中linux-lts-vivid_3.19.0.orig.tar.gz
您可以找到上游发布的“vanilla”内核;Ubuntu 开发人员为这个内核添加了补丁、驱动程序和更改的内容,这些东西都收集在diff
压缩包中linux-lts-vivid_3.19.0-30.34~14.04.1.diff.gz
。
答案3
嗯。当你运行命令时
apt-get source linux-image-`uname -r`
该命令应该自动地提取源 tarball 并对其进行修补以创建以您的内核命名的目录。 在您的例子中,它看起来像是名为“linux-lts-vivid-3.19.0” - 它在您的目录列表中。
因此,这是源目录,您应该运行:
cd linux-lts-vivid-3.19.0
然后继续按照说明进行操作