2

Я недавно купил HP Stream - аккуратный, дешевый ноутбук, на котором я собирался установить Xubuntu. К сожалению, у меня были проблемы из-за его привода eMMC.

Я обнаружил, что невозможно установить любую версию Linux (я пробовал семейства Ubunbtu, Debian и Arch) без применения этого патча для ядра.

Хотя я знаком с Linux как с операционной системой, мне никогда не приходилось применять патч к ядру, и я совершенно не уверен, как это сделать в соответствии с моими целями. Учебники, которые я нашел пока, предназначены для опытных пользователей, желающих обновить свою текущую работающую ОС.

Из моего прочтения можно скомпилировать ядро на другом компьютере, если у него одинаковая архитектура. (Оба компьютера x64) и имеют необходимые драйверы.

Мои вопросы:

Как я могу применить этот патч для ядра?

Как я могу установить его на свой компьютер (ISO?)

Я понимаю, что это потенциально долгий и подробный вопрос и ответ, но у меня немного закончились идеи.

1 ответ1

2

Я думаю, что это не супер просто, если бы были какие-либо варианты загрузки ядра, которые могли бы помочь загрузить HP со стандартным ядром (например, noapic, nomodeset и т.д.), Я бы попробовал их в первую очередь.

Некоторые инструкции слишком длинные и разнообразные, чтобы публиковать их здесь [ https://help.ubuntu.com/community/Kernel/Compile ], но одна страница на самом деле выглядит почти разумно, если вы компилируете для той же архитектуры и выпуска Ubuntu.

Эти шаги предназначены для компиляции ядра на вашем текущем компьютере, если оно того же "типа" x64 и работает с той же версией Ubuntu, что может работать. [Из https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel ]:

Получение исходного кода для релиза Ubuntu

Или

  • Либо apt-get source linux-image-$(uname -r)
  • Или git clone git://kernel.ubuntu.com/ubuntu/ubuntu-<release codename>.git
    Например, чтобы получить точное дерево:
    git clone git://kernel.ubuntu.com/ubuntu/ubuntu-precise.git

Построить среду

Если вы ранее не собирали ядро в своей системе, для успешной сборки вам понадобятся несколько пакетов. Вы можете установить их с помощью:

sudo apt-get build-dep linux-image-$(uname -r)

Изменение конфигурации

[Вот часть, где вы примените свой патч. Эта ссылка выглядит так, как будто патч просто изменяет drivers/mmc/card/block.c , поэтому этот файл должен находиться в загруженных исходных файлах. Похоже, что он просто добавляет немного к одной строке, поэтому, если вы хотите вручную отредактировать одну строку с помощью функции копирования и вставки, которая должна работать, он просто удаляет начальные строки " - " и добавляет начальные строки " + ". Или используя программу patch с patch --verbose -p1 <the_patch_file (может быть, без -p1 если он не работает, контролирует, как он находит файл для патча, см. man patch для информации). Если вы не вносите другие изменения, я пропущу все остальное, как указано в инструкциях. ]

Этот шаг можно пропустить, если не требуется никаких изменений конфигурации. Процесс сборки будет использовать конфигурацию, которая составляется из различных файлов субконфигурации. Самый простой способ изменить что-либо здесь - запустить:

chmod a+x debian/scripts/*
chmod a+x debian/scripts/misc/*
fakeroot debian/rules clean
fakeroot debian/rules editconfigs

Это берет текущую конфигурацию для каждой поддерживаемой архитектуры / разновидности и вызывает menuconfig для редактирования своего файла конфигурации. Chmod необходим, потому что при создании исходного пакета он теряет исполняемые биты в скриптах.

apt-get попытается "обновить" ядро до стандартной сборки / версии ядра Ubuntu, если вы собираете собственное ядро, не добавляя дополнительную строку в конец вашей версии ядра. Чтобы apt-get не отображал ядро Ubuntu как обновляемое при вводе apt-get upgrade, вы должны (из документации по ядру) добавить дополнительную строку в конец версии вашего ядра. Это будет отображаться, например, при вводе uname.

Чтобы предотвратить это, в меню конфигурации ядра перейдите и измените:

  1. Общая настройка --->
  2. () Локальная версия - добавить к выпуску ядра

Сборка ядра

Сборка ядра довольно проста. Измените свой рабочий каталог на корень дерева исходного кода ядра, а затем введите следующие команды:

fakeroot debian/rules clean
fakeroot debian/rules binary-headers binary-generic

Если сборка прошла успешно, набор из трех файлов двоичных пакетов .deb будет создан в каталоге над корневым каталогом сборки. Например, после сборки ядра с версией «2.6.38-7.37» в системе amd64 будут созданы три (или четыре) пакета .deb:

cd ..
ls *.deb
    linux-headers-2.6.38-7_2.6.38-7.37_all.deb
    linux-headers-2.6.38-7-generic_2.6.38-7.37_amd64.deb
    linux-image-2.6.38-7-generic_2.6.38-7.37_amd64.deb

в более поздних выпусках вы также найдете пакет linux-extra-package, который вы также должны установить, если он есть.

Тестирование нового ядра

Установите набор из трех пакетов (в вашей системе сборки или в другой целевой системе) с помощью dpkg -i, а затем перезагрузите компьютер:

sudo dpkg -i linux*2.6.38-7.37*.deb
sudo reboot

Что касается его установки, я бы не стал создавать ISO (с чем-то вроде remastersys), это, вероятно, просто еще одна головная боль ;-)

Если бы вы могли просто скопировать файлы на жесткий диск, который мог бы работать. Обычно я бы предложил Linux Live CD / USB, но если Ubuntu не загружается ... может быть, другой дистрибутив с другим ядром, или использовать Windows для копирования файлов, или образ раздела и Windows-эквивалентный инструмент dd ?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .