使用硬件支持修复补丁构建内核的正确方法 - Ubuntu 22.04 LTS - 5.15.0-50

使用硬件支持修复补丁构建内核的正确方法 - Ubuntu 22.04 LTS - 5.15.0-50

主要问题

需要一个解决方案来将硬件支持补丁应用到我当前在 Ubuntu 22.04 中工作的内核,这样它就可以修复确切的问题(此处键盘不工作)而不影响其他设置。

背景

尝试在我的笔记本电脑(Asus vivobook s14-K3402ZA)上双启动 Ubuntu,安装成功,但键盘在启动时无法工作,后来发现只有外接键盘支持,而内置键盘无法与 Ubuntu 一起使用22.04 LTS- 内核5.15.0-50-generic

该问题在“安装前尝试”中被识别,请继续,因为我找到了一个补丁在线解决了类似型号的问题- 根据从评论中获得的信息,它将被添加到未来的 6.1 内核版本中。

但为了让它在当前主线内核上运行,尝试了这个答案

下载了最新的长期 5.15 版本5.15.74,成功编译了.deb包并安装 - 键盘问题已修复,但还存在有关显示亮度、缩放、刷新率等其他几个问题。

答案1

我认为问题是由于 Ubuntu / Debian 发行版内核附带了一些额外的补丁,或者可能是由于安装的内核版本与来自的内核版本的配置差异造成的。kernel.org。

请注意,这 5.15.74 是一个主流 Linux 版本,而提到的5.15.0-50是一个 Ubuntu 版本,两者并不相同。

由于所有其他功能都在源内核中运行,因此最好从源内核构建自定义修补内核来解决问题。

遵循的步骤,

  1. 启用源代码存储库,这将在其中添加所需的 deb-src 行 /etc/apt/sources.list

    启用源存储库

  2. 安装从源代码编译软件包所需的工具,并在构建之前确保大约 20+ GB 的磁盘空间。

    # To install build tools
    sudo apt update
    sudo apt build-dep linux linux-image-$(uname -r)
    
    sudo apt install libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf llvm build-essential libncurses5-dev gcc bc dwarves
    
  3. 获取 Ubuntu 版本的源代码:可以使用命令获取生成特定二进制包的源代码apt source <package>,要获取其他版本,请检查此处 -官方文档,[参考-2]

    # switch to root
    sudo su
    
    # get the current kernel source downloaded and extracted (ignore the end user warning)
    apt source linux-image-unsigned-$(uname -r)
    
    cd /path/to/linux-<version>/
    
    # Give all user execution permissions to scripts (Important, otherwise error will be thrown even if you are running them as root)
    chmod a+x debian/scripts/*
    chmod a+x -R ./scripts
    
  4. 下载并应用补丁,

    patch -p1 < ~/Downloads/<patch-name>.patch
    
  5. 复制现有配置,

    cp /boot/config-$(uname -r) ./.config
    
    # update config for new kernel
    make oldconfig
    
  6. 编译内核,[參考]

    make -j16 deb-pkg LOCALVERSION=-custom
    

    您想-j16用处理器拥有的线程数(用于getconf _NPROCESSORS_ONLN获取数量)替换。“LOCALVERSION”选项可以是任何您想要的。它仅用于文档目的。现在您的内核应该正在编译。这可能需要一段时间,具体取决于您的硬件(1-2 小时)

  7. 安装新修补的内核,更新 grub 并重新启动到新内核

    # change to parent dir
    cd ..
    
    dpkg -i *.deb
    
    update-grub
    reboot
    

    使用主线工具删除旧内核,

答案2

尝试使用主线工具安装最新的(已修复和修补的)内核吗?

sudo add-apt-repository ppa:cappelikan/ppa
sudo apt update
sudo apt install mainline


And then use the tool.

相关内容