当前位置: 首页>>技术教程>>正文


获取内核源代码(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. 如果您要构建一个外部模块(包括正在开发的模块),则只需要内核头文件:

    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. 如果您要基于上游内核进行开发(这是我的建议),则应该克隆Linus’ tree并在那里工作。要测试您的模块,您需要构建一个完整的上游内核,或者使用上面第1点中给出的方法来构建您的模块。

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8125.html,未经允许,请勿转载。