我计划编写一些设备驱动程序,我需要获取 Linux 内核源代码。我的 Linux 内核版本是 3.2.0-23-generic-pae,我从以下网址下载了映像这在我读过的许多文章中,它告诉我需要有整个内核树才能开始插入新模块。
如果我下载此图像并将其粘贴到usr/src/
文件夹中就足够了还是我必须做其他事情?
答案1
这将获取库存内核的源代码:
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
答案2
apt-get source linux
是最简单的方法。它将从您的存储库下载源代码 - 并且它将与您正在运行的版本相同(假设您尚未对其进行自定义)。
但是如果您想找到维护源的位置,您可以运行:
apt-cache showsrc linux
查找“Vcs-”属性(版本控制系统)。它通常是 git(Vcs-Git)或 mercurial 存储库。
注意 - 这些命令适用于任何软件包。只需将“linux”替换为您感兴趣的软件包即可。另请注意,“apt-get source”不需要 sudo 访问权限,并将源代码转储到您当前的目录中。
答案3
只需从中选择一个:
sudo apt install linux-source # downloads into system directory
sudo apt source linux-source # downloads into working directory
如果您被要求在您的文件中提供一些“来源”URL sources.list
,请编辑您的/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/
(例如)。
答案4
在某些情况下,直接从以下位置下载你感兴趣的版本的 Linux 内核源代码和头文件更为实用http://kernel.org(一个相当可靠的 URL/网站,不会消失[例如,标准的 stackoverflow 对陈旧链接的担忧不是一个问题])
原因?例如,您可能对调试较旧/已停用且不再受支持的 Linux 版本感兴趣,其中软件包存储库指向死区,在某些情况下,要么没有可行的当前替代方案,要么存储库的密钥已过期,不允许您获取内容,需要难以记住的难以搜索的神秘技术才能使这些存储库正常工作。
或者您使用的 Linux 机器(或 VM)上的互联网网络可能出现故障,但文件共享或 NFS 可以正常运行,您可以将源下载到另一台机器上并通过文件系统访问。
如果您使用的是相对过时的 Linux 版本,您很可能必须从源代码构建一些内容,并以困难的方式获取它们。