Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

5. Исправление ядра с помощью заплаток

5.1 Наложение заплаток

Накладывающиеся обновления ядра распространяются в виде заплаток. Например, если у вас версия 1.1.45, и вас оповестили, что выпущен `patch46.gz' для него, это означает, что вы можете обновить ядро до версии 1.1.46 приложив эту заплатку. Вы можете захотеть сначала сделать резервную копию дерева исходных текстов ядра (сначала `make clean' и затем `cd /usr/src; tar zcvf old-tree.tar.gz linux' создаст для сжатый архивный файл с резервной копией).

Так, продолжая пример, приведенный выше, предположим, что у вас файл `patch46.gz' расположен в директории /usr/src. Выполним cd в /usr/src и выполним `zcat patch46.gz | patch -p0' (или `patch -p0 < patch46' если эта заплатка не является сжатой). Вы увидите некоторые вещи мелькающие на экране, которые сообщают вам, что программа пытается приложить куски заплатки на нужные файлы и информацию о том, удачна данная операция или нет. Обычно этот процесс идет слишком быстро, чтобы вы могли прочитать и вы можете не быть уверенными, удачна эта операция или нет, в этом случае вы можете использовать опцию -s для программы patch, которая заставляет patch выдавать только сообщение об ошибках (вы не получите сообщения ``эй, мой компьютер действительно что-то делает!'', но если вы это предпочитаете..). Для того, чтобы взглянуть на то какие разделы не прошли гладко, перейдите в директорию /usr/src/linux и посмотрите файлы с расширением .rej. Некоторые версии программы patch (старые версии, которые могли быть скомпилированы на более худших файловых системах) оставляют отклоненные файлы с расширением #. вы можете использовать команду `find' для того чтобы найти эти файлы:

    find .  -name '*.rej' -print

эта команда печатает список всех файлов, которые находятся в текущей директории и ее поддиректориях и имеют расширение .rej на стандартный вывод.

если все прошло правильно, то выполните команды `make clean', `config', и `dep' как описано в разделах 3 и 4.

Существует еще несколько опций для команды patch. Как было отмечено выше, patch -s запретит вывод всех сообщений за исключением сообщений об ошибках. Если вы храните ваше ядро где-то в другом месте, отличном от /usr/src/linux, то выполнение patch -p1 (в этой директории) правильно выставит заплатку. Другие опции команды patch хорошо описаны в ее справочной странице.

5.2 Если что-то неправильно

(Замечание: этот раздел относится к большинству старых ядер).

Наиболее частая проблема возникает когда заплатка модифицирует файл, называемый `config.in' и он не выглядит достаточно правильно, потому-что вы изменили его опции для вашей машины. Это было исправлено, но эта проблема может возникнуть со старыми выпусками ядра. Для исправления этой проблемы посмотрите в файл config.in.rej, и посмотрите что осталось сделать оригинальной заплатке. Изменения обычно обозначаются символами `+' и `-' в начале строки. Посмотрите строки, которые окружают эти символы и запомните где установлено `y' или `n'. Теперь отредактируйте файл config.in, и измените `y' на `n' и `n' на `y' где это нужно. Выполните команду

    patch -p0 < config.in.rej

и если она выдала, что операция проведена удачно (без ошибок), то вы можете продолжать работу выполняя настройку ядра и его компиляцию. Файл config.in.rej все равно останется, но вы можете удалить его.

если у вас все равно существуют проблемы, то это значит, что вы могли установить заплатку не с тем номером. Если программа patch сообщает `previously applied patch detected: Assume -R? (обнаружена предыдущая заплатка: использовать опцию -R?', то вы скорее всего пытаетесь приложить заплатку с номером меньшим, чем номер версии вашего ядра; если вы ответите `y', то программа попытается вернуть ваши исходные тексты к предыдущей версии, и скорее всего это вызовет ошибку; поэтому вам понадобится установить заново все дерево исходных текстов (что может быть не такой уж плохой идеей).

Для того чтобы убрать изменения внесенные заплаткой, используйте команду `patch -R' с оригинальной заплаткой.

Лучше всего в случае, когда заплатки делают что-то неправильно, начать применять ее с новым деревом исходных текстов (например извлеченным из одного из файлов linux-x.y.z.tar.gz), и запустит процесс заново.

5.3 Избавляемся от файлов .orig

После всего нескольких заплаток у вас накопится куча файлов с расширением .orig. Например одно ядро 1.1.51, которое было последний раз почищено при версии 1.1.48. Удаление .orig файлов сохранило примерно половину мегабайта дисковой памяти.

    find .  -name '*.orig' -exec rm -f {} ';'
эта команда позаботится о вас. Версии программы patch, которые используют знак # для отклоненных файлов используют знак тильды ~ вместо .orig.

Существует лучший способ избавится от .orig файлов, который зависит от GNU программы xargs:

    find .  -name '*.orig' | xargs rm
или ``довольно безопасный, но несколько более многословный'' метод:
    find . -name '*.orig' -print0 | xargs --null rm --

5.4 Другие заплатки

Также существуют другие заплатки (я буду назвать их ``нестандартными''), кроме поставляемых Linus. Если вы накладываете такие заплатки, то заплатки от Linus могут работать неправильно и вы должны будете либо убрать их, изменить исходные тексты или заплатку, либо установить новое дерево исходных текстов, или выполнить комбинацию описанных действий. Это может быть очень расстраивающим, так что если вы не хотите изменять исходные тексты (с возможно плохим результатом), то удалите нестандартные заплатки до приложения заплаток полученных от Linus, или просто установите новое дерево исходных текстов. Затем вы можете посмотреть работают ли нестандартные заплатки. Если они не работают, то вы либо задержались с использованием старого ядра, поиграйтесь с исходными текстами или измените заплатку, либо просто дождитесь выхода новой версии нестандартной заплатки.

Какие существуют заплатки не входящие в стандартный дистрибутив? Вы вероятно слышали о них. Я использую такую заплатку для того, чтобы курсор на моей консоли не мигал, я ненавижу мигающие курсоры (Эта заплатка часто обновляется (или по крайней мере обновлялась) по мере выпуска новых версий ядра. Для большинства новых устройств драйвера разрабатываются как загружаемые модули и частота использования нестандартных заплаток значительно уменьшается.


[ Назад | Оглавление | Далее ]










helloworld.ru © 2001-2021
Все права защищены