一文搞懂Linux系统内核升级及下载当前内核源代码

1. 下载当前内核源代码

  1. 为什么下载内核源代?
    一是便于查看或学习linux内核代码的底层实现方法;
    二是便于编写或调试Linux设备驱动程序,因为驱动程序的编译需要内核源代码。

  2. 如何选择

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

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

      ==会下载到/usr/src目录下,不会解压。==主要是下载必要的文件,以便/lib/modules/$(uname -r)/{build,source}符号链接指向有意义的内容。然后您可以通过运行在另一个目录中构建模块:

      make -C /lib/modules/$(uname -r)/build M="/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内核补丁,使您可以构建具有与当前内核相同功能的内核。如果执行安装命令时,提示已经安装,可以先执行sudo apt-get remove linux-source-4.10.0 ,在执行安装命令。
      但是请注意包装说明中的警告:

      此包装主要是供其他包装使用,以打造定制风味。如果希望使用此软件包创建自定义Linux内核,则建议您研究软件包kernel-package,该软件包旨在简化创建内核映像软件包的任务。如果您只是尝试为内核构建第三方模块,则不需要此软件包。而是安装适当的linux-headers软件包。

      所以,使用linux源软件包本身(使用apt-get source获得)不是一个好主意,因为它实际上是为构建Ubuntu中使用的所有内核而设计的。如果您盲目地使用该源代码包debuild,您将等待多个小时才能完成构建。

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

  3. 怎么下载?

    1. 如果你是Ubuntu或基于Ubuntu的Debian,内核源代码是作为 deb 包提供的。 首先,与其他的源码包一样用apt-get 来执行安装。 标题为 Linux-source 的源码包就是最新的内核源码包的元包。

      # apt-get install linux-source
      

      在安装内核源代码的 deb 包后,会在 /usr/src 下生成 tar 文件, 只要将这个文件复制到适当的目录下并解压缩, 就能够获取内核源代码。

      $ cp /usr/src/linux-source-3.4.2.tar.bz2 ~/
      $ cd
      $ tar xjf linux-source-2.6.35.tar.bz2
      

    2.如果你是Fedora ,内核源码是作为源码 RPM( SRPM) 提供的。 使用 yum-units包里所带的yumdownloader 下载 SRPM。 此后要使用的 yum-builddep 也是 yum-units 包中所带的, 所以如果事先没有安装, 首先请安装这个工具包。
    可以执行下列命令来下载内核的 SRPM:

      ```bash
    

    $ yumdownloader --source kernel
    ```

      在笔者的环境下, 下载的是 kernel-2.6.35.11-83.fc14.src.rpm。
    

    如前文所述, 发布版内核都带有自身特有的补丁。 SRPM 是将 vanilla 内核的源代码和补丁分开放置的, 补丁在创建过程中被分配给 vanilla 内核的源代码。 所以要获取发布版内核的源代码, 就要完全执行 RPM 的创建过程, 但并不完全执行。 虽然每个 SRPM 在创建 RPM 时都需要用到不同的源码包, 但只要执行下列命令, 就能够安装创建 Linux 内核所需的所有源码包。 这条命令请在 root 权限下执行:

      ```bash
      # yum-builddep kernel-2.6.35.11-83.fc14.src.rpm
      ```
      
      安装 SRPM 需要执行下列命令。 安装 SRPM, 就是指将所包含的文件解压缩。 SRPM 包含的文件将解压缩到在主目录下生成的 rpmbuild 的几个子目录下。
      RPM 包的创建是通过 rpmbuild 命令进行的。 本次操作的目的是获取内核的源代码,所以为了让命令结束前能给源代码修复补丁, 应在 rpmbuild 命令中加上 **-bp** 选项。 命令中的参数会赋予一个用来创建源码包的设置文件, 即 SPEC 文件。
      
      ```bash
      $ cd ~/rpmbuild/SPEC
      $ rpmbuild –bp kernel.spec
      ```
      
      这 时 就 会 生 成 一 个 标 题 为` ~/rpmbuild/BUILD/kernel-2.6.35.fc14/linux-2.6.35.x86_64` 的目录, 在这个目录下会生成发布版内核的源代码。
    

2. 内核升级

  • 为什么升级?
    在使用Linux系统时感到操作卡顿,甚至某些硬件难以工作,新的硬件识别不了等问题时,这些都是内核版本过低导致的,这时候你就需要升级内核版本了。

  • 怎么升级?

    • 1. 查看自己当前linux的内核版本号(注意区别于发行版本号)。
$ uname -r
4.4.0-040400-generic
  • 2. 选择大于自己版本号的版本,下载安装包。
    如果你的系统是ubuntu的,内核的下载可以去ubuntu的内核下载地址,但一定要匹配到适合自己电脑硬件架构(amd64、i386、armhf、ppc64)的内核版本:
    在这里插入图片描述
    确定好架构之后,需至少要下载3个安装包(第1、2、4个安装包),即linux-headers-xxx-xxx_all.deblinux-headers-xxx-generic_xxx_i386.deblinux-image-xxx-generic_xxx_i386.deb

3. 安装
1. 命令格式:sudo dpkg -i ***.deb
2. 安装顺序:
1. linux-headers-xxx_xxx_all.deb
2. linux-headers-***-generic_***_[amd64/i386/armhf/ppc64el].deb
3. linux-modules-***-generic_***_[amd64/i386/armhf/ppc64el].deb //有些版本,modules文件是没有的,也不需要安装,可以忽略。
4. linux-image-***-generic_***_[amd64/i386/armhf/ppc64el].deb

4. 卸载旧的内核

  • 查看目前系统下安装的内核
leon@ubuntu:~/$ dpkg --get-selections| grep linux
console-setup-linux install
 libselinux1:amd64 install
 libselinux1:i386 install
 linux-base install
 linux-firmware install
 linux-generic install
 linux-headers-4.4.0-22 install
 linux-headers-4.4.0-22-generic install
 linux-headers-4.4.0-24 install
 linux-headers-4.4.0-24-generic install
 linux-headers-4.4.0-28 install
 linux-headers-4.4.0-28-generic install
 linux-headers-4.4.0-31 install
 linux-headers-4.4.0-31-generic install
 linux-headers-4.4.0-34 install
 linux-headers-4.4.0-34-generic install
 linux-headers-4.4.0-36 install
 linux-headers-4.4.0-36-generic install
 linux-headers-4.4.0-38 install
 linux-headers-4.4.0-38-generic install
 linux-headers-4.4.0-42 install
 linux-headers-4.4.0-42-generic install
 linux-headers-generic install
 linux-image-4.2.0-21-generic deinstall
 linux-image-4.2.0-22-generic deinstall
 linux-image-4.4.0-31-generic deinstall
 linux-image-4.4.0-34-generic install
 linux-image-4.4.0-36-generic install
 linux-image-4.4.0-38-generic install
 linux-image-4.4.0-42-generic install
 linux-image-extra-4.2.0-21-generic deinstall
 linux-image-extra-4.4.0-31-generic deinstall
 linux-image-extra-4.4.0-34-generic deinstall
 linux-image-extra-4.4.0-36-generic deinstall
 linux-image-extra-4.4.0-38-generic install
 linux-image-extra-4.4.0-42-generic install
 linux-image-generic install
 linux-libc-dev:amd64 install
 linux-sound-base install
 pptp-linux install
 syslinux install
 syslinux-common install
 syslinux-legacy install
 util-linux install1234567891011121314151617181920212223242

可以看到系统已经安装了多个内核版本,包括 headers 和 image ,可以删除这些来卸载旧的内核。
比如删除 4.4.0-22 内核,我们看到上面只有 headers,因此可以这样:

sudo apt-get remove --purge linux-headers-4.4.0-22 
sudo apt-get remove --purge linux-image-4.2.0-22-generic123
...
sudo apt-get autoclean
sudo apt-get autoremove

在这里插入图片描述

5. 重启之后查看系统版本
执行sudo reboot重启系统,在执行uname -r或者uname -a查看自己的版本号是否已经升级成功。

在这里插入图片描述

更多精彩文章,请关注leon的博客小站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leon_George

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值