Миграция на Linux 2.6

Перевод: polachok
Примечание: мой первый перевод, извините за ужасный стиль.

Введение

Я потратил целый день переводя свой Red Hat 9 на ядро 2.6. Этот документ не претендует на полноценность, здесь решены только те проблемы, которые были  меня. Вот они: sysfs, QM_MODULES, rpm, module-init-tools, Hotplug, Wireless, linux-wlan-ng, prism2_pci, USB, sound, realplay, VMware, и ACPI и APM.

Это инфа не полная. Пожалуйста присылайте комментарии, исправления и т.д.. Мое мыло в конце страницы.

Также посмотри HowTo Upgrade To The 2.6 Kernel на kerneltrap.org.

Хард / Софт

У меня IBM ThinkPad T30. Я делал все это с ядром версии 2.6.0-test2, но я думаю это подойдет и для 2.6.0-test3, 2.6.0-test4, 2.6.0-test5, 2.6.0-test6, 2.6.0-test7, 2.6.0-test8, 2.6.0-test9, 2.6.0-test10.

Вот мой файл конфигурации ядра.

Ядро 2.6.0-test{2,3,4,5,6,7,8,9,10}

Если ты получаешь ошибки прерываний во время запуска ядра, попробуй откомпилтровать его с помощью GCC 2.95.3.

RPM (and realplay)

rpm перестает работать на ядре 2.6. Сначала он ничего не делает, апотом выводит сообщение:

rpmdb: unable to join the environment
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db3 - Resource temporarily unavailable (11)
error: cannot open Packages database in /var/lib/rpm
no packages

Ты можешь профиксить этот баг вот так:

 export LD_ASSUME_KERNEL=2.2.5
(или эквивалент в твоей оболочке) а затем запустив rpm снова. Stéphane Raimbault говорит что ты можешть также скачать и использовать последнюю версию rpm, но я не проверял.

У меня была такая же проблема с realplay, она исправляется также.

Вот что Penelope Fudd сказал об этой проблеме:

Оригинальная glibc из RH9 c багом, обновленная glibc - нет:

ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-2.3.2-27.9.i386.rpm

А после этого надо обновить еще:

ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-common-2.3.2-27.9.i386.rpm
ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-devel-2.3.2-27.9.i386.rpm
ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-utils-2.3.2-27.9.i386.rpm

Я попытался сделать это командой rpm -Uvh glibc*, но это не сработало. Я набрал rpm -e <старая версия> и rpm -Uvh --force
<новая>. Это работало.

Modutils / module-init-tools

Тебе нужны новые modprobe, insmod, rmmod, и тд. Если их не будет, будут ошибки типа "QM_MODULES: Function not implemented.'' Скачай последнюю версию module-init-tools. Прочти README. I запусти:

./configure --prefix=/
make moveold
make
make install

Теперь переведи /etc/modules.conf в /etc/modprobe.conf с помощью ./generate-modprobe.conf который входит в состав module-init-tools:

./generate-modprobe.conf /etc/modprobe.conf
Обрати внимание на результат, особенно конец файла.

Вот моя копия /etc/modprobe.conf.

Hotplug

Hotplug нужен для подключения беспроводных устройств. Включи CONFIG_HOTPLUG в конфигурации ядра. Затем замени все строки "/proc/ksyms'' на "/proc/kallsyms'' в /etc/rc.sysinit.

Вот  моя копия /etc/rc.sysinit.

Файловая система Sysfs

Step 1:

Создай /sys.


Step 2:

Где строка:

mount -f /proc
в/etc/rc.sysinit, добавь:
mount -f /sys
на следующей строке.
Step 3:

Где строка:

action $"Mounting proc filesystem: " mount -n -t proc /proc /proc
в /etc/rc.sysinit, добавь:
action $"Mounting sysfs filesystem: " mount -n -t sysfs /sys /sys
на следующей строке.
Step 4:

Добавь:

none    /sys  sysfs   defaults  0 0
в /etc/fstab.
Step 5:

В функции halt_get_remaining в файле /etc/init.d/halt, измени

awk '$2 ~ /^\/$|^\/proc|^\/dev/{next}
на
awk '$2 ~ /^\/$|^\/proc|^\/sys|^\/dev/{next}

Вот моя копия /etc/rc.sysinit. А это моя копия /etc/init.d/halt.

USB

Названия модулей USB различны. Это затрагивает и /etc/modprobe.conf (посмотри на "usb-controller'') и на, /etc/rc.sysinit.  Я переименовал все "keybdev'' в "usbkbd'' и "mousedev'' в "usbmouse''. Также, я заменил все "/proc/bus/usb'' на "/sys/bus/usb''. (Также сделай это в /etc/init.d/halt.)

Посмотри на "needusbstorage'' в /etc/rc.sysinit. Я изменил эту секцию на:

needusbstorage=
if [ $usb = "1" ]; then
needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /sys/bus/usb/devices 2>/dev/null`
action $"Initializing USB HID interface: " modprobe hid 2> /dev/null
action $"Initializing USB keyboard: " modprobe usbkbd 2> /dev/null
action $"Initializing USB mouse: " modprobe usbmouse 2> /dev/null
fi

Вот моя копия /etc/rc.sysinit.

Беспроводные  устройства (linux-wlan-ng, prism2_pci)

Я использую драйвер linux-wlan-ng prism2_pci, которому нужен hotplug для работы.Я использовал версию 0.1.16-pre9, но перешел на 0.2.1-pre9. Скрипт /etc/wlan/shared содержит ошибкиr. Вот моя копия /etc/wlan/shared. Она содержит исправления. Воспользуйся diff если хочешь узнать что я изменил. Я полагаю что остальные файлы /etc/wlan могут остаться без изменений.

Звук

IBM ThinkPad T30 поставляется со звуковой картой Intel 810 + ac 97.Теперь модуль называеся  "snd-intel8x0''. Вот секция моего /etc/modprobe.conf.

alias char-major-14 soundcore
alias sound-slot-0 snd-intel8x0
alias snd-card-0 snd-intel8x0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
install sound-slot-0 /sbin/modprobe --ignore-install sound-slot-0 && { /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1; /bin/true; }
remove sound-slot-0 { /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1; /bin/true; }; /sbin/modprobe -r --ignore-remove sound-slot-0

Вот моя копия /etc/modprobe.conf.

VMware

Сначала замени все "/proc/ksyms'' на "/proc/kallsyms'' в /usr/bin/vmware-config.pl.

Запуск vmware-config.pl даст ошибки компиляции. Разархивируй vmnet.tar в /usr/lib/vmware/modules/source. Получится папка vmnet-only. В ней отредактируй bridge.c. На 368-й строке измени:

atomic_add(skb->truesize, &sk->wmem_alloc);
на:
atomic_add(skb->truesize, &sk->sk_wmem_alloc);
и также, на 618-й и 817-й ситроках, измени protinfo на sk_protinfo. Затем заархивируй эту папку vmnet-only, заменив старый vmnet.tar, и перезапусти vmware-config.pl. Проверь что vmware-config.pl тот же компилятор, каким ты откомпилировал ядро. Я использовал GCC 2.95, но возможно тебе повезет с GCC 3 {Мне повезло --прим. polachok}.

José Luis Domingo López (спасибо!) написал мне следующее:

[...]
Последние изменения в task_struct сделали компиляцию сетевого модуля vmware
невозможной. Исправить это просто: разархивируй vmmon.tar, открой
vmmon-only/linux/driver.c и замени все: current->uid,
current->euid, current->fsuid, current->egid, current->gid and
current->fsgid

на

current->__uid, current->__euid, current->__fsuid,
current->__egid, current->__gid and current->__fsgid, respectively.

PS1: это изменение есть в tast_struct с ядра 2.6.0-test6-mm1, но этого нет в 2.6.0-test6.

PS2: ядро и модули VMware откомпилированы gcc 3.2.3 из Debian Sid

Nick Atkins написал мне мыло в котором отметил, что можно запустить vmware-config.pl для ядра 2.6 и GCC 3.x. Файл есть на http://ftp.cvut.cz/vmware/. Он сказал что последний тарбол (типа vmware-any-any-updateXX.tar.gz) должен быть разархивирован и запущен вместо vmware-config.pl. Я не пробовал. (Спасибо José Luis Domingo López за советы.)

Слово об ACPI и APM

BIOS у ThinkPad T30's сломанный, это затрагивает ACPI. Можно скачать обновления с IBM'ского сайта. Однажды я попробовал, ACPI заработало, но только частично. И я решил вернуться к APM, т.к. уровень зарядки батарей отображался неверно

RPM-ки

Попробуй вот эти kernel 2.6 RPMs. Я сам не пробовал, но они выглядят многообещающе.

Я

Это моя любимая часть. Меня зовут Thomer M. Gil, я студент Computer Science в MIT. У меня есть проблемы с р-р-речью и домашняя страница.

Эта страница была создана 9 Августа, 2003.
Последние изменения 2 Декабря, 2003.
Мое мыло [my first name]@[my last name].com.
Мое имя Thomer, моя фамилия Gil.
Перевод: polachok, 16.01.04


(c) Polachok, 2003. Design is stolen from austerity litestep theme's readme. Best appearance in Mozilla.

Hosted by uCoz