相关文章推荐
骑白马的羽毛球  ·  Openwrt 和通用Linux设备通过 ...·  1 月前    · 
幸福的眼镜  ·  linux ...·  4 周前    · 
失恋的薯片  ·  容器 - Linux 201·  3 周前    · 
豪情万千的铁板烧  ·  在文件末尾加一行linux命令 • ...·  3 周前    · 
胡子拉碴的小刀  ·  Linux ...·  3 周前    · 
愉快的墨镜  ·  学习Android之一些高级技巧 - ...·  1 年前    · 
很拉风的柚子  ·  抛弃数据库---Newtonsoft.Jso ...·  2 年前    · 
捣蛋的茶叶  ·  打印UDF日志_云原生大数据计算服务 ...·  2 年前    · 
高兴的红酒  ·  JPA的save()方法导致mysql设置了 ...·  3 年前    · 
正直的手电筒  ·  页面性能监测之performance-腾讯云 ...·  3 年前    · 
Code  ›  Linux kernel release 5.x – 北境程序猿
kernel config linux系统
https://gamedebug.github.io/linux-kernel-release-5.x/
耍酷的炒饭
10 月前
  • 首页
  • 关于
    • 北境程序猿 photo

      北境程序猿

    • 详细
    • Email
    • Twitter
    • Facebook
    • Google+
    • LinkedIn
    • Instagram
    • Github
    • StackOverflow
    • Steam
    • SoundCloud
    • Weibo
    • Hacker News
  • 文章
    • 所有文章
    • 所有标签

Linux kernel release 5.x

31 Dec 2019

Reading time ~2 minutes


概述

这些是Linux版本5的发行说明。仔细阅读它们,因为它们会告诉你这是怎么回事,解释如何安装内核,如果出现问题该怎么做。

Linux是什么?

Linux是操作系统Unix的克隆版,由Linus Torvalds在一个松散的网络黑客团队的帮助下从零开始编写。它的目标是POSIX和单一UNIX规范的遵从性。

它具有您在现代成熟的Unix中所期望的所有功能,包括真正的多任务处理、虚拟内存、共享库、按需加载、共享的写时复制可执行文件、适当的内存管理以及包括IPv4和IPv6在内的多堆栈网络。

它是在GNU通用公共许可证v2下发布的——有关更多细节,请参阅附带的复制文件。

它在什么硬件上运行?

虽然最初是为基于32位x86的pc(386或更高)开发的,但现在Linux也可以运行(至少)康柏Alpha AXP、Sun SPARC和UltraSPARC、摩托罗拉68000、PowerPC、PowerPC64、ARM、日立SuperH、Cell、IBM S/390、MIPS、HP PA-RISC、Intel IA-64、DEC VAX、AMD x86-64 Xtensa和ARC架构。

只要拥有分页内存管理单元(PMMU)和GNU C compiler (gcc)的端口(GNU compiler Collection的一部分,gcc), Linux就很容易移植到大多数通用的32位或64位体系结构上。Linux也已经被移植到许多没有PMMU的架构上,尽管功能明显有些受限。Linux也被移植到自身。现在可以将内核作为一个用户空间应用程序来运行——这称为UserMode Linux (UML)。

文献

  • 在Internet上和书籍中都有大量的电子文档,有特定于linux的,也有关于一般UNIX问题的。我建议在任何Linux FTP站点上查找LDP (Linux文档项目)书籍的文档子目录。这个自述并不意味着是系统上的文档:有更好的可用资源。
  • 在Documentation/子目录中有各种README文件:例如,这些文件通常包含特定于内核的安装说明。请阅读文档/流程/更改。rst文件,因为它包含有关问题的信息,这些问题可能通过升级内核而导致。

安装内核源代码

  • 如果你安装了完整的源代码,把内核tarball放在你有权限的目录下(比如你的主目录),然后解压:
xz -cd linux-5.x.tar.xz | tar xvf -

用最新内核的版本号替换“X”。

不要使用/usr/src/linux区域!这个区域有一组(通常不完整的)内核头文件,这些头文件由库头文件使用。它们应该与库匹配,而不是被任何碰巧的内核-du-jour弄得一团糟。

  • 你也可以在5.x发布的补丁之间升。补丁以xz格式发布。要通过补丁进行安装,请获取所有更新的补丁文件,输入内核源代码(linux-5.x)的顶层目录并执行:
xz -cd ../patch-5.x.xz | patch -p1

对于当前源树in_order中所有大于版本“x”的版本,替换“x”,应该没有问题。您可能希望删除备份文件(some-file-name~或some-file-name.orig),并确保没有失败的补丁(some-file-name#或some-file-name.rej)。如果有的话,不是你就是我弄错了。

不像5的补丁。x个内核,5。x的补丁。y内核(也称为-稳定内核)不是增量的,而是直接应用于基数5。x内核。例如,如果您的基础内核是5.0,并且希望应用5.0.3补丁,则不能首先应用5.0.1和5.0.2补丁。类似地,如果您正在运行内核版本5.0.2,并且希望跳到5.0.3,那么在应用5.0.3补丁之前,必须先反转5.0.2补丁(即补丁-R)。您可以在文档/流程/应用程序补丁中了解更多信息。

或者,可以使用脚本补丁内核来自动化这个过程。它确定当前的内核版本,并应用任何补丁发现:

linux/scripts/patch-kernel linux

上面命令中的第一个参数是内核源代码的位置。补丁应用于当前目录,但是可以指定另一个目录作为第二个参数。

  • 确保你没有陈旧的.o文件和依赖:
cd linux
make mrproper

现在应该已经正确安装了源代码。

软件需求

编译并运行5.x内核需要各种软件包的最新版本。参考文档/过程/更改。获取所需的最小版本号以及如何获取这些包的更新。请注意,使用这些包的过于旧的版本可能会导致非常难以跟踪的间接错误,所以不要以为在构建或操作期间出现明显问题时就可以更新包。

为内核构建目录

编译内核时,默认情况下所有输出文件都与内核源代码一起存储。使用make O=output/dir选项可以为输出文件指定一个替代位置(包括.config)。例子:

kernel source code: /usr/src/linux-5.x
build directory:    /home/name/build/kernel

要配置和构建内核,请使用:

cd /usr/src/linux-5.x
make O=/home/name/build/kernel menuconfig
make O=/home/name/build/kernel
sudo make O=/home/name/build/kernel modules_install install

请注意:如果使用O=output/dir选项,那么它必须用于make的所有调用。

配置内核

即使只升级一个次要版本,也不要跳过这一步。在每个版本中都会添加新的配置选项,如果没有按照预期设置配置文件,就会出现奇怪的问题。如果您希望以最少的工作量将现有配置迁移到新版本,请使用make oldconfig,它将只询问新问题的答案。

可供选择的配置命令有:

"make config"      Plain text interface.
"make menuconfig"  Text based color menus, radiolists & dialogs.
"make nconfig"     Enhanced text based color menus.
"make xconfig"     Qt based configuration tool.
"make gconfig"     GTK+ based configuration tool.
"make oldconfig"   Default all questions based on the contents of
                   your existing ./.config file and asking about
                   new config symbols.
"make olddefconfig"
                   Like above, but sets new symbols to their default
                   values without prompting.
"make defconfig"   Create a ./.config file by using the default
                   symbol values from either arch/$ARCH/defconfig
                   or arch/$ARCH/configs/${PLATFORM}_defconfig,
                   depending on the architecture.
"make ${PLATFORM}_defconfig"
                   Create a ./.config file by using the default
                   symbol values from
                   arch/$ARCH/configs/${PLATFORM}_defconfig.
                   Use "make help" to get a list of all available
                   platforms of your architecture.
"make allyesconfig"
                   Create a ./.config file by setting symbol
                   values to 'y' as much as possible.
"make allmodconfig"
                   Create a ./.config file by setting symbol
                   values to 'm' as much as possible.
"make allnoconfig" Create a ./.config file by setting symbol
                   values to 'n' as much as possible.
"make randconfig"  Create a ./.config file by setting symbol
                   values to random values.
"make localmodconfig" Create a config based on current config and
                      loaded modules (lsmod). Disables any module
                      option that is not needed for the loaded modules.
                      To create a localmodconfig for another machine,
                      store the lsmod of that machine into a file
                      and pass it in as a LSMOD parameter.
              target$ lsmod > /tmp/mylsmod
              target$ scp /tmp/mylsmod host:/tmp
              host$ make LSMOD=/tmp/mylsmod localmodconfig
                      The above also works when cross compiling.
"make localyesconfig" Similar to localmodconfig, except it will convert
                      all module options to built in (=y) options.
"make kvmconfig"   Enable additional options for kvm guest kernel support.
"make xenconfig"   Enable additional options for xen dom0 guest kernel
                   support.
"make tinyconfig"  Configure the tiniest possible kernel.

您可以在Documentation/kbuild/kconfig.rst中找到关于使用Linux内核配置工具的更多信息。

make配置说明:

  • 使用不必要的驱动程序会使内核变大,并且在某些情况下会导致问题:探测不存在的控制器卡可能会使其他控制器混淆。
  • 如果存在协处理器,那么编译了数学仿真的内核仍然会使用协处理器:在这种情况下,数学仿真将永远不会被使用。 内核将稍微大一些,但是可以在不同的机器上工作,不管它们是否有数学协处理器。
  • “内核破解”配置细节通常会导致内核变大或变慢(或两者都是),甚至可能通过配置一些例程来主动尝试破解坏代码以发现内核问题,从而降低内核的稳定性(kmalloc())。因此,对于“开发”、“实验”或“调试”特性的问题,您可能应该回答“n”。

编译内核

  • 确保至少有gcc 4.6可用。有关更多信息,请参考文档/流程/更改。 请注意,您仍然可以运行a。用这个内核输出用户程序。
  • 执行make操作以创建压缩的内核映像。如果您安装了lilo以适应内核的makefile,也可以进行make安装,但是您可能需要首先检查您的特定lilo设置。 要进行实际的安装,您必须是root用户,但是正常的构建都不需要root用户。不要白白取根的名字。
  • 如果您将内核的任何部分配置为模块,那么还必须执行make modules_install。
  • 详细的内核编译/构建输出: 通常,内核构建系统以一种相当安静的模式运行(但不是完全安静)。但是,有时您或其他内核开发人员需要在执行编译、链接或其他命令时查看它们。为此,请使用“详细”构建模式。这是通过将V=1传递给make命令来实现的,例如:
make V=1 all

要让构建系统也告诉每个目标重建的原因,使用V=2。默认值是V=0。

  • 准备一个备份内核,以防出现问题。对于开发版本尤其如此,因为每个新版本都包含没有调试的新代码。还要确保对与该内核对应的模块进行备份。如果正在安装与工作内核版本号相同的新内核,请在执行make modules_install之前备份modules目录。另外,在编译之前,使用内核配置选项“LOCALVERSION”将唯一后缀附加到常规内核版本。LOCALVERSION可以在“常规设置”菜单中设置。
  • 为了引导新内核,您需要将内核映像(例如…/linux/arch/x86/boot/bzImage)复制到常规可引导内核所在的位置。
  • 不再支持在没有LILO等引导加载程序的帮助下直接从软盘引导内核。 如果您从硬盘驱动器引导Linux,那么您可能会使用LILO,它使用文件/etc/ LILO . confo中指定的内核映像。内核映像文件通常是/vmlinuz、/boot/vmlinuz、/bzImage或/boot/bzImage。要使用新的内核,请保存旧映像的副本,并将新映像复制到旧映像之上。然后,您必须重新运行LILO来更新加载映射!如果不这样做,就无法引导新的内核映像。 重新安装LILO通常是运行/sbin/ LILO您可能希望编辑/etc/lilo.conf来为旧的内核映像(例如,/vmlinux.old)指定一个条目,以防新映像不能工作。有关更多信息,请参阅LILO文档。 重新安装LILO之后,应该一切就绪。请关闭系统,重新启动并享受! 如果您需要更改内核映像中的默认根设备、视频模式、ramdisk大小等,请使用rdev程序(或者在适当的时候使用LILO引导选项)。不需要重新编译内核来更改这些参数。
  • 使用新的内核重新启动并享受它。

如果出了问题

  • 如果您有问题,似乎是由于内核缺陷,请检查文件维护者,看看是否有一个特定的人与您有问题的内核部分相关。如果没有人列在上面,那么最好的办法就是把它们寄给我(torvalds@linuxfoundation.org),也可以寄给其他相关的邮件列表或新闻组。
  • 在所有的bug报告中,请说明您所讨论的内核是什么,如何复制问题,以及您的设置是什么(请使用您的常识)。如果是新的问题,请告诉我,如果是旧的问题,请在第一次注意到它时告诉我。
  • 如果错误结果是这样的消息:
unable to handle kernel paging request at address C0000010
Oops: 0002
EIP:   0010:XXXXXXXX
eax: xxxxxxxx   ebx: xxxxxxxx   ecx: xxxxxxxx   edx: xxxxxxxx
 
推荐文章
骑白马的羽毛球  ·  Openwrt 和通用Linux设备通过 IPIP/GRETAP 进行二层组网 | Sparktour's Blog
1 月前
幸福的眼镜  ·  linux 安装openssl1.1.1_openssl 1.1.1f
4 周前
失恋的薯片  ·  容器 - Linux 201
3 周前
豪情万千的铁板烧  ·  在文件末尾加一行linux命令 • Worktile社区
3 周前
胡子拉碴的小刀  ·  Linux sed在某一行前面、后面追加(转载)-阿里云开发者社区
3 周前
愉快的墨镜  ·  学习Android之一些高级技巧 - PeacefulGemini - 博客园
1 年前
很拉风的柚子  ·  抛弃数据库---Newtonsoft.Json 对象转成JSON文件简单实例,JSON没有反斜杠_newtonsoft.json.jsonconvert-CSDN博客
2 年前
捣蛋的茶叶  ·  打印UDF日志_云原生大数据计算服务 MaxCompute(MaxCompute)-阿里云帮助中心
2 年前
高兴的红酒  ·  JPA的save()方法导致mysql设置了默认值的字段为null的问题 - 简书
3 年前
正直的手电筒  ·  页面性能监测之performance-腾讯云开发者社区-腾讯云
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号