问题描述
我打算编写一些设备驱动程序,我需要获取 Linux 内核源代码。我的 Linux 内核版本是 3.2.0-23-generic-pae,我从 this 下载了映像。在我读过的许多文章中,它告诉我需要拥有整个内核树才能开始插入新模块。
如果我下载此图像并将其粘贴到 usr/src/
文件夹中是否足够,或者我必须做其他事情吗?
最佳办法
这将获得股票内核的来源:
apt-get source linux-source
您可以像这样检查内核的哪个版本正在运行:
uname -r
这将打印如下内容:
3.13.0-46-generic
您可以通过以下方式找到系统上可用的当前源包版本列表:
apt-cache search linux-source
要获取内核的上游版本:
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-trusty.git
在上面的链接中,’trusty’ 是 Ubuntu 版本的代号。您可以通过以下方式找到您安装的 Ubuntu 版本的代号:
cat /etc/lsb-release
次佳办法
apt-get source linux
是最简单的方法。它将从您的存储库下载源代码 – 它将与您正在运行的版本相同(假设您尚未对其进行自定义)。
但是如果你想找到源代码的维护位置,你可以运行:
apt-cache showsrc linux
查找 ‘Vcs-‘ 属性(版本控制系统)。它通常是一个 git (Vcs-Git) 或 mercurial 存储库。
注意 – 这些命令适用于任何包。只需将 ‘linux’ 替换为您感兴趣的包。另外请注意,’apt-get source’ 不需要 sudo 访问权限,并且会将源代码转储到您的当前目录中。
第三种办法
直接从 Launchpad 下载源代码
奇怪的是,每个人都推荐 apt-get source
,如果您正在寻找特定的内核版本,它在大多数情况下都不起作用:
假设您需要 3.19.0-58 的内核源代码:apt-get source linux-image-3.19.0-58-generic
将获得该系列中最新内核的源代码:在这种情况下为 3.19.0-80,这不是您所要求的。
所以你有两个选择:
1)放弃,安装内核3.19.0-80,使用apt-get source
2)直接从启动板获取源代码:
-
这应该为您提供该版本的 Launchpad Package Page。
-
向下滚动,单击 “Source:” 链接,您现在在 Package Source Page 上。
-
向下滚动并下载
.tar.gz
、.diff.gz
、.dsc
文件:
-
将它们放在一个新目录中,用
dpkg-source -x *.dsc
解压
笔记:
-
肯定有更好的办法。
-
您可以从 git 获得您想要的版本,但您需要大量下载。请参阅 Ubuntu Wiki Kernel Source Code 中的“使用 git 获取 Ubuntu 版本的内核源代码”。
第四种办法
只需从以下选项中选择一项:
sudo apt install linux-source # downloads into system directory
sudo apt source linux-source # downloads into working directory
如果您被告知在 sources.list
中提供一些 ‘sources’ URL,请编辑您的 /etc/apt/sources.list
文件并取消注释所需的 deb-src
行,例如(如果您正在运行 Xenial):
deb http://fr.archive.ubuntu.com/ubuntu/ xenial main restricted
# deb-src http://fr.archive.ubuntu.com/ubuntu/ xenial main restricted
删除最后一行上的 #
可启用源代码库以供下载,包括内核源代码。
评论:
-
使用现代工具;避免
apt-get
。 -
这些命令下载当前内核的源代码(例如在我的例子中是
4.4.0-75-generic
)。 -
当下载到系统目录时,文件存储在
/usr/src/linux-source-4.4.0/
中(例如)。