Лучший способ вручную декомпресс ядра Ubuntu

Я на RPI4 USB загрузка SSD.
S.O: Ubuntu Desktop 20.04.2 64bit ARM64

Для загрузки на USB без SD-карты Я настроил мою загрузку для загрузки на DECOMPS VMLINUX.

Это связано с отсутствующими возможностями для загрузки на USB, используя конденсированное ядро VMlinu Z

Итак, я использую привязку сценариев для мероприятия APT, которое распаковано ядро ​​после обновления.
Мой скрипт похож на это:

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

Это работает, но теперь я обнаружил, относится к обновленной версии ядра, этот скрипт:
/usr/src/linux-rasspi-Headers-5.4.0-1028/Scripts / extract-vmlinux

Для меня швовает, что этот скрипт декомпрессирует ядро ​​тоже.

Мой вопрос: лучше использовать этот скрипт, если ZCAT ?

Мне нравится эта команда: # Extract-vmlinux vmlinuz> VMlinux
Это правильная команда?

с уважением, Леонардо

0
задан 29 January 2021 в 20:43

2 ответа

Лучше использовать extract-vmlinux по нескольким причинам:

  • Вы не знаете, какая компрессия используется. Это может быть gzip, LZ4, Bzip2, XZ, ... Последний скрипт extract-vmlinux знает, как извлечь все виды сжатого ядра, хотя вам все равно понадобится соответствующая утилита командной строки.
  • Сжатые ядра не похожи на простые сжатые файлы. Они самораспаковываются, поэтому содержат двоичный заголовок. Сам образ ядра может содержать и другие двоичные объекты до или после него. Удивительно, что zcat работал на вас; простое использование lz4cat не работает на мне с LZ4-сжатыми ядрами.

По другой причине, чем ваша, я написал скрипт для установки ядра, который использует extract-vmlinux для распаковки ядра Ubuntu, сжатого по LZ4. Это должно помочь вам в вашем стремлении получить то же самое для Raspberry Pi.

1
ответ дан 18 March 2021 в 23:39

Я буду интегрировать ваше решение с моим.
Я буду выполнять на почтовом обновлении APT крюка
Но подумаю, что абаут переехать в ядро ​​пост установочный крючок
Это мой код:

#!/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 / прошивка / vmlinuz && echo 'ok'
Вывод будет:

Экстракт-vmlinux: не могу найти VMLINUX.
ОК

Extract-VMlinux, если вы не бросаете ошибку: не делайте выход 1
Это плохое новое
Если мы используем zcat -qf vmlinuz> vmlinux IT работает, и если не удается проверить его

, так что лучше не использовать экстракт vmlinux и вместо этого используйте zcat.

Для пользователя RPI

на Ubuntu 20.04.2 Больше не нужно декомпрессировать ядро ​​на USB на Raspberry Pi 4:

в Config.txt мы можем использовать kernel = VMlinuz и Работа без декомпрессии.

С наилучшими пожеланиями

0
ответ дан 18 March 2021 в 23:39

Другие вопросы по тегам:

Похожие вопросы: