[Hardware] Не работает PCMCIA на старом notebook (Compact)

"Вадим Левченко" vadimlevchenko на mail.ru
Вт Май 18 12:33:22 MSD 2004


> Здравствуйте,
> 
> Tuesday, May 18, 2004, 3:25:50 AM, you wrote:
> 
> ВЛ> Понятно. Notebook я выкидывать не собираюсь, потому буду пытаться
> ВЛ> сам... Для решения проблемы я решил собрать ядро с выключенной
> ВЛ> pcmcia поддержкой, и дополнительно поставить оригинальный пакет
> ВЛ> pcmcia-cs, в котором как бы поддержка не-CardBus мостов обещана.
> 
> Я тоже тот ноутбук не выкидывал, просто удалось раскрутить начальство
> на более современный, тем самым убив сразу несколько зайцев. Тем не
> менее старый ноутбук ещё жив и, если Ваши усилия увенчаются успехов,
> пожалуйста, отпишите рецепт, если не сюда, то лично, я тогда старичка
> тоже в строй поставлю.
> 
> 
> -- 
> Best regards,
>  Vladimir                            mailto:vkarpinsky на mail.ru
> 
Как ни странно, сеть запустилась :) Все остальное пока не проверял, но уже жить можно.

Итак, если коротко:
Проблема в ядре linux, точнее в "ядерных" драйверах для pcmcia.
Они просто не работают с не-CardBus мостами PCMCIA (насколько я понял, теми, которые не поддерживают bus mastering PCI, хотя, может, я и ошибаюсь). В общем, эта проблема должна касаться всех обладателей старых notebook-ов на 486 и Pentium, матплаты которых уже содержат PCI, но в ее первых версиях.
Хочу заметить: это касается любых ядер. То, что работало раньше, (в ядрах 2.2.X), насколько я понял, было оригинальной версией pcmcia-cs

1. Лечение проблемы радикальное (хирургическое): удаление больного органа (pcmcia модулей) из ядра. Ядро для этого, естественно, надо выкачивать, настраивать и компилировать. После настроек в .config соответствующие строки должны быть:
#
# PCMCIA/CardBus support
#
# CONFIG_PCMCIA is not set
Заодно можно отключить и все сетевые драйвера устройста (кроме самой сети) и, насколько я понимаю, вообще драйвера всех устройств которые могут присутствовать на PCMCIA --- все равно они будут заменены модулями pcmcia-cs. Впрочем, эти драйвера отключать не обязательно, а вот CONFIG_PCMCIA --- обязательно.

2. Далее выкачиваем pcmcia-cs с http://pcmcia-cs.sourceforge.net
Внимательно читаем doc/PCMCIA-HOWTO (п. 2.Compilation and installation) --- краткое его содержание --- это мой п.1.
Настраиваем, компилируем и устанавливаем согласно докам, например:
./Configure
make all
make install

3. В принципе, уже все. Если правильно ответить на первый и последний вопросы ./Configure, то pcmcia-cs сам себя установит куда надо.
Если что-то после этого не будет работать, то у него есть мощные диагностические утилиты. Ну и документация само-собой.

Несколько граблей, на которые я успел наступить:
1. Не всякие комбинации версия ядра/версия pcmcia-cs будут работать вместе. Из общих соображений, надо брать версию ядра более старую, чем версия pcmcia-cs.
Я взял pcmcia-cs 3.2.7 и linux 2.4.23 (т.к. на 2.4.26 у меня pcmcia-cs не заработал).

2. компилировать и pcmcia-cs, и linux надо одинаковыми компиляторами. Я компилировал gcc 3.2.3. Это замечание особенно важно, т.к. pcmcia-cs пытается скомпилировать свои модули более "простым" компилятором. Дабы этого избежать, я запускал ./Configure --kcc=gcc
Ну и все остальные компиляторы (у меня были еще 2.95 и 2.96) на всякий случай снес.

3. Сама по себе проблема установки linux на старый notebook обычно (у меня по крайней мере) отягощена тем, что сеть на [неработающей] PCMCIA --- это единственное связующее звено между ним и окружающим миром. Потому, если хоть в каком-то виде сеть уже работает (в моем случае это был redhat 7.0, хотя, вероятно, у других м.б. и Windows) --- ни в коем случае не сносите ЭТО работающее (пусть худо-бедно, и занимающее ценное дисковое пространство) до того момента, пока новый linux полностью не заработает с PCMCIA.

4. Другая проблема --- это низкое быстродействие таких notebook-ов и маленький диск.
С первым я боролся, собирая ядро на настольном компьютере. Но pcmcia-cs я на всякий случай собирал не notebook. Это не то, чтобы долго, но требует установленного компилятора и наличия сконфигурированных исходников ядра.
В общем я лучше опишу свою "дисковую" ситуацию:
У меня 4GB диск, разбитый пополам. CD-romа нет.
На второй половине стоял redhat. Убрав /home, я освободил ~1G и записал туда образ Compact2.3
Загрузившись с дискеты, я установил Compact на первую половину диска.
Там же (точнее, в /opt/ ) я создал локальное зеркало ftp://ftp.altlinux.com/pub/distributions/ALTLinux/Compact/2.3
Только без реальных пакетов, но с линками на них. Вместо main я подсунул соответствующую директорию из образа диска (подмонтированного как loop-устройство), ну а линки в директории contrib, естественно, вели "в никуда".
Подправил /etc/apt/sources.list, убрав все сетевые источники и добавив что-то вроде:
# Local Compact Mirror
rpm file:/opt/LinuxDistr/Compact2.3/2.3 ALTLinux main contrib

Ну и $apt-get update
После этого по мере необходимости пакеты можно доставлять 
apt-get -ом.
Когда он натыкается на сселки, ведущие в никуда, то честно об этом сообщает.
Соответственно, перегружаемся в redhat и докидываем в contrib/ те пакеты, которые реально требуются (gcc3.2.3 и т.п.).

Короче, в 4GB мне удалось "уложить" два дистрибутива Linux в достаточно полной комплектации (еще раз повторяю, я принципиально не трогал старый redhat), образ одного CD, исходники ядра, компилированные на другом компьютере и исходники pcmcia-cs.

В общем, успехов!


Подробная информация о списке рассылки Hardware