在我本地的 Linux/Ubuntu 中,我有两个 Linux src 目录
/usr/src/linux-3.16.0
/usr/src/linux-3.16.0-generic
我发现3.16.0中的代码比3.16.0-generic中的代码多得多。我想知道这两个目录为什么不同以及如何不同(它们代表什么?)
答案1
这两个目录由相应的包提供,其中包含内核的头文件。使用dpkg
命令查找哪个包提供目录。
$ dpkg -S /usr/src/linux*
linux-headers-X.XX.X-XX: /usr/src/linux-headers-X.XX.X-XX
linux-headers-X.XX.X-XX-generic: /usr/src/linux-headers-X.XX.X-XX-generic
...
第一个目录/usr/src/linux-headers-X.X.XX-XX
包含多种架构的头文件,包括x86、amd64、powerpc等,导致文件数量较多,包体积较大。
另一个目录/usr/src/linux-headers-X.X.XX-XX-generic
似乎主要包含与针对本地安装的 x86 架构相关的源代码。
对应的包在描述中已经暗示了,例如:
$ apt-cache show linux-headers-3.16.0-25 | grep -A3 Description-en
Description-en: Header files related to Linux kernel version 3.16.0
This package provides kernel header files for version 3.16.0, for sites
that want the latest kernel headers. Please read
/usr/share/doc/linux-lts-utopic-headers-3.16.0-25/debian.README.gz for details
据我所知,这两个目录仅包含源代码而不包含二进制文件。而两者的区别主要在于目标架构源代码。
有关的:内核源代码树包含什么?这与 Linux 内核头文件有关吗?
扩展答案(2015.07.30)
既然都存储了相关的代码,那么两个目录中的代码
x86
有什么区别?x86
– 理查德 2015 年 7 月 29 日 19:11
中包含的大多数目录和文件/usr/src/linux-headers-X.X.XX-XX-generic
都是符号链接,它们指向/usr/src/linux-headers-X.X.XX-XX
.换句话说,arch/x86
在这两个目录中发现的只是实际链接和符号链接的区别,还有一些剩余的asm
头文件*-generic
。
config
在这两个包之间,人们可能会注意到另一个主要区别是对应的和generated
目录的存在*-generic
。
根据我的最佳理解,我认为该*-generic
目录包含用于配置和编译与体系结构相关的模块所需的头文件x86
,没有意外更改了linux-headers-x.x.xx-xx
.
最重要的是,这两个目录可能是在各自平台上打包和编译包的“干净”方法。虽然,我没有资格澄清这个问题。
回答者备注:我当时天真地写了这个答案 - 不确定什么是正确的或错误的 - 并且中间可能缺少一些解释。因此,这个答案现在是一个社区维基,因此任何具有最低声誉的人都可以改进这篇文章以充分解释其中的差异。