AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1312054
Accepted
Leonardo Saracini
Leonardo Saracini
Asked: 2021-01-30 09:43:58 +0800 CST2021-01-30 09:43:58 +0800 CST 2021-01-30 09:43:58 +0800 CST

手动解压内核的最佳方法

  • 772

我正在使用 Raspberry Pi 4 USB 启动 ssd。
操作系统:Ubuntu 桌面 20.04.2 64bit arm64

要在没有 sd 卡的 USB 上启动,我将启动配置为在解压缩的 vmlinux 上启动。

这是由于缺少使用压缩内核 vmlinu z在 USB 上启动的能力

所以我使用脚本绑定到 apt 事件,在更新后解压缩内核。
我的脚本是这样的:

#... controls 
zcat vmlinuz > vmlinux
#... 

它可以工作,但现在,我发现,与更新的内核版本有关,这个脚本:
/usr/src/linux-raspi-headers-5.4.0-1028/scripts/extract-vmlinux

在我看来,这个脚本也解压缩了内核。

我的问题是:最好使用这个脚本,除非zcat?

像这个命令:# extract-vmlinux vmlinuz > vmlinux
这个命令正确吗?

kernel
  • 2 2 个回答
  • 1700 Views

2 个回答

  • Voted
  1. Best Answer
    grifferz
    2021-01-31T05:15:21+08:002021-01-31T05:15:21+08:00

    最好使用extract-vmlinux有几个原因:

    • 你不知道使用了什么样的压缩。它可能是 gzip、LZ4、Bzip2、XZ ……最新的extract-vmlinux脚本知道如何提取各种压缩内核,尽管您仍然需要相关的命令行实用程序。
    • 压缩内核不像简单的压缩文件。它们是自解压的,因此包含二进制标头。内核映像本身也可能在其之前或之后具有其他二进制对象。我很惊讶这zcat对你有用;简单地使用lz4catLZ4 压缩内核对我不起作用。

    出于与您不同的原因,我编写了一个内核安装挂钩脚本,用于extract-vmlinux解压缩 LZ4 压缩的 Ubuntu 内核。这应该可以帮助您为 Raspberry Pi 提供相同的功能。

    • 2
  2. Leonardo Saracini
    2021-02-02T07:27:16+08:002021-02-02T07:27:16+08:00

    我会将您的解决方案与我的集成。
    我将在 post update apt 钩子上执行,
    但会考虑将 abaut 移动到内核 post install 钩子中,
    这是我的代码:

    #!/bin/bash -e
    
    #Set Variables
    BTPATH=/boot/firmware
    CKPATH=$BTPATH/vmlinuz
    DKPATH=$BTPATH/vmlinux
    EXTRACT_VMLINUX="/usr/src/linux-headers-$(uname -r)/scripts/extract-vmlinux"
    if ! [ -x $EXTRACT_VMLINUX ]; then
      echo -e "\e[32m$EXTRACT_VMLINUX is not executable\e[0m"
      echo -e "\e[32mI will use zcat!\e[0m"
      EXTRACT_VMLINUX="zcat -qf"
    fi
    
    if [ -e $BTPATH/check.md5 ]; then
        if md5sum --status --ignore-missing -c $BTPATH/check.md5; then
          echo -e "\e[32mFiles have not changed, Decompression not needed\e[0m"
              exit 0
        else 
              echo -e "\e[31mHash check failed, kernel will be furter investigate\e[0m"
        fi
    fi
    
    mv $DKPATH $DKPATH.bak
    
    if [ ! $? == 0 ]; then
      echo -e "\e[31mDECOMPRESSED KERNEL BACKUP FAILED!\e[0m"
      exit 1
    else 
      echo -e "\e[32mDecompressed kernel backup was successful\e[0m"
    fi
    # Decompress the new kernel 
    echo "Decompressing kernel: "$CKPATH".............."
    $EXTRACT_VMLINUX $CKPATH > $DKPATH
    if [ ! $? == 0 ]; then
      echo -e "\e[31mKERNEL FAILED TO DECOMPRESS!\e[0m"
      exit 1
    else
      echo -e "\e[32mKernel Decompressed Succesfully\e[0m"
    fi
    
    #Hash the new kernel for checking
    md5sum $CKPATH $DKPATH > $BTPATH/check.md5
    
    if [ ! $? == 0 ]; then
        echo -e "\e[31mMD5 GENERATION FAILED!\e[0m"
    else 
        echo -e "\e[32mMD5 generated Succesfully\e[0m"
    fi
    
    #Exit
    exit 0
    

    更新

    有一个问题:
    如果我执行 $EXTRACT_VMLINUX /boot/firmware/vmlinuz && echo 'ok'
    输出将是:

    extract-vmlinux:找不到 vmlinux。
    好的

    extract-vmlinux if fail 不要抛出错误:不要退出 1 如果我们使用它,
    这是一个坏新,如果失败,我们可以检查它
    zcat -qf vmlinuz > vmlinux

    所以最好不要使用 extract-vmlinux 而是使用 zcat 。

    对于 rpi 用户

    在 Ubuntu 20.04.2 上,不再需要在树莓派 4 上的 USB 上解压缩内核:

    在 config.txt 我们可以使用kernel=vmlinuz它,它无需解压即可工作。

    此致

    • 0

相关问题

  • 为 i7 处理器编译内核的最佳方法是什么?

  • 未连接到任何可见进程的令人讨厌的 CPU 峰值

  • 如何让我的电脑中的风扇在暂停时关闭?[关闭]

  • Ubuntu 是否支持与 SSD 一起使用的 TRIM 命令?

  • 使用 apt-get upgrade 时如何强制安装内核更新?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve