获取内核源代码(ubuntu)

获取内核源代码(ubuntu)

我想尝试编写一个Linux 驱动程序。我正在尝试设置我的环境。我当前的内核:

$ uname -r
4.10.0-37-generic

然后我下载源代码:

$ apt-get source linux-image-$(uname -r)
Reading package lists... Done 
Picking 'linux' as source package instead of 'linux-image-4.10.0-37-generic'
...

我去编译并修改我的驱动程序,但失败了。查看dmesg,显示:

version magic '4.10.17 SMP mod_unload ' should be '4.10.0-37-generic SMP mod_unload '

此时,我很困惑。我返回到我下载的源代码树,当我运行时

$ make kernelversion
4.10.17

好的,尝试两个。下载内核 4.10.17 并安装。

$ uname -r
4.10.17-041017-generic

仍然错误:

version magic '4.10.17 SMP mod_unload ' should be '4.10.17-041017-generic SMP mod_unload

所以也许有人可以提供帮助:对我来说,在 ubuntu 上获得工作内核和匹配源的最佳和正确方法是什么(好吧,xubuntu,但我认为这并不重要)?我是否需要从 kernel.org 获取代码并从头开始构建它?我有点想匹配已发布的 Ubuntu 内核。

答案1

有多种方法...

  1. 如果您尝试构建外部模块(包括您正在开发的模块),则只需要内核头文件:

    apt install linux-header-$(uname -r)
    

    这将提供必要的文件,以便符号/lib/modules/$(uname -r)/{build,source}链接指向有意义的内容。然后你可以通过运行在另一个目录中构建一个模块

    make -C /lib/modules/$(uname -r)/build SUBDIRS="/path/to/your/module" modules
    

    这将确保该模块是为您正在运行的内核构建的。

  2. 如果您想基于 Ubuntu 内核进行开发,请使用适当的linux-source软件包;对于您的 Ubuntu 版本,目前是linux-source-4.10.0

    apt install linux-source-4.10.0
    cd /usr/src
    tar xf linux-source-4.10.0.tar.bz2
    

    这将包括 Ubuntu 内核补丁,允许您构建与当前内核具有相同功能的内核。但请注意包描述中的警告:

    该包主要供其他包使用,以构建自定义风味。

    如果您希望使用此软件包来创建自定义 Linux 内核,那么建议您研究一下 kernel-package 软件包,该软件包旨在简化创建内核映像包的任务。

    如果您只是尝试为您的内核构建第三方模块,则不需要此软件包。安装适当的 linux-headers 包。

  3. 如果你想基于上游内核进行开发(这是我推荐的),你应该克隆莱纳斯的树并在那里工作。要测试您的模块,您需要构建完整的上游内核,或者使用上面第 1 点中给出的方法构建模块。

无论如何,使用Linux的源包本身(使用 获得apt-get source),因为它实际上是为构建 Ubuntu 中使用的所有内核而设计的。如果你盲目地debuild使用该源码包,你将等待几个小时才能完成构建......(在某些情况下,这适当的,Ubuntu 内核文档会解释该怎么做;但这很可能不是其中之一。)

相关内容