LINUX.ORG.RU

Не собирается драйвер


0

1

Пришло время и мне, убунтоиду, собрать свой первый драйвер (для WiFi Realtek RTL8188SU).

Система, как ни странно, не убунту, а вполне себе CentOS

[root@***]# uname -a
Linux ***.lan 2.6.18-194.8.1.v5 #1 SMP Thu Jul 15 01:14:04 EDT 2010 i686 i686 i386 GNU/Linux
(а точнее основная на ней ClearOS)

Скачал исходники драйвера, читаю инструкцию.

Platform requirements: PC-Based Linux platform (i386)

8712 USB Linux driver supports Linux kernel version : from 2.6.18 ~ 2.6.33

Вроде всего хватает и ядро как раз вписывается в рамки. Далее

- Demonstration based on Linux Fedora 2.6.24 Part 1: make 8712 USB Linux driver

(1) step1: uncompress the “rtl8712_8188_8191_8192SU_usb_linux_v2.6.x.x.2010xxxx.tar.gz” file. (in “driver” directory) > tar zxvf rtl8712_8188_8191_8192SU_usb_linux_v2.6.6.0.20100930.tar.gz

с распаковкой я успешно справился.

(2) step2: make 8712 USB driver module
> make
(3) step3: clean the operation environment
> ./clean
(4) step4: insert 8712 USB modules
> insmod 8712u.ko

А вот тут возникли проблемы, на шаге «make». Находясь в распакованной директории, я ввёл эту нехитрую команду, на что мне он заругался:

[root@***]# make
make ARCH=i386 CROSS_COMPILE= -C /lib/modules/2.6.18-194.8.1.v5/build M=/home/upload_user/realtek_wifi_driver/driver/driver  modules
make: *** /lib/modules/2.6.18-194.8.1.v5/build: Нет такого файла или каталога.  Останов.
make: *** [modules] Ошибка 2

Помогите понять причину его ненахождения указанной папки и как ему её предоставить.


Ответ на: комментарий от anonymous

>Где подвох?
Не знаю, но по умолчанию оно мой адаптер не видит.

D_Lans
() автор топика

> Помогите понять причину его ненахождения указанной папки и как ему её предоставить.
Нужно поставить хэдеры текущего ядра. Пакет с ними называется kernel-devel, linux-headers или как-то похоже.

AITap ★★★★★
()

Попробуй mkdir /lib/modules/2.6.18-194.8.1.v5/build. Если что - удалишь. А вообще, может просто не хватать kernel-sources или kernel-headers. Моим первым скомпилированным драйвером был ITE RAID и с этого я начинал работать в Linux, поэтому я знаю, кроме установки исходников ядра не нужно больше ничего.

ZenitharChampion ★★★★★
()
Ответ на: комментарий от AITap

Нужно поставить хэдеры текущего ядра. Пакет с ними называется kernel-devel, linux-headers или как-то похоже.

Благодарю, я подозревал, что дело в чём-то простом.

Но следующая проблема: в репозиториях ClearOS, похоже, нет хидеров ядра. Поиск по «kernel-devel» и «linux-headers» не даёт ничего.

Как лучше выйти из этой ситуации? Добавить репозиторий CentOS? Первый попавшийся или там существует деление как в дебиане stable/unstable/testing/... ?

D_Lans
() автор топика
Ответ на: комментарий от mi_estas

>/lib/modules/2.6.18-194.8.1.v5/build это символическая ссылка на /usr/src/linux-source-2.6.18-194.8.1.v5, в этой папке должны быть исходники ядра.

Увы, в /usr/src только ./debug и ./kernels, обе пустые. Что, впрочем, неудивительно, ClearOS это веб-интерфейс-ориентированный дистр.

D_Lans
() автор топика
Ответ на: комментарий от D_Lans

Увы, в /usr/src только ./debug и ./kernels, обе пустые

я всегда это делал сам. руками.

mi_estas
()
Ответ на: комментарий от D_Lans

Это оно или нет?

Судя по всему таки оно, ибо после его инсталла я обнаружил новую папку в /usr/src/kernels/

Снова запустил make, он уже заругался на другое: на отсутствие gcc. Ставлю gcc...

D_Lans
() автор топика

Собралось нормально, но на следующем этапе ./clean вылезло несколько ошибок «что-то там not found» (к сожалению сейчас не могу привести точный текст ошибок).

Меня интересует вопрос: стоит ли обращать внимание на ошибки на этапе очистки или можно забить?

D_Lans
() автор топика
Ответ на: комментарий от mi_estas
[root@***]# ./clean
ERROR: Module r8192s_usb does not exist in /proc/modules
ERROR: Module ieee80211_rsl does not exist in /proc/modules
ERROR: Module ieee80211_crypt_ccmp does not exist in /proc/modules
ERROR: Module ieee80211_crypt_tkip does not exist in /proc/modules
ERROR: Module ieee80211_crypt_wep does not exist in /proc/modules
ERROR: Module ieee80211_crypt does not exist in /proc/modules

Вот такие ошибки критичны появляются на этапе ./clean. Они критичны или нет? Можно пропустить этап с ./clean?

D_Lans
() автор топика
Ответ на: комментарий от mi_estas

посмотрите первый пост, я там написал указанные в инструкции шаги 1-4.

D_Lans
() автор топика
Ответ на: комментарий от gentoo_root

Окей, забил на этот шаг.

Перешёл к следующему

(4) step4: insert 8712 USB modules

insmod 8712u.ko


Он отработал без проблем. Собственно модуль загрузился и wlan0 появился (ура!!!)

Вот только остался вопрос: этот модуль останется загруженным лишь до перезагрузки системы или будет всегда автоматом загружаться?

D_Lans
() автор топика
Ответ на: комментарий от D_Lans

>этот модуль останется загруженным лишь до перезагрузки системы или будет всегда автоматом загружаться?

До перезагрузки, конечно. Чтобы автоматом грузился, надо его скопировать в /lib/modules/`uname -r`/misc и запустить depmod. После этого можно будет грузить модуль по ‘modprobe 8712u’, т.е. можно уже будет использовать средства дистрибутива для автовставки модулей при загрузке.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

Скопировать таким образом?
cp ./8712u.ko /lib/modules/`uname -r`/misc
?

средства дистрибутива для автовставки модулей при загрузке.

А в случае CentOS какой из способов является самым правильным? chkconfig?

D_Lans
() автор топика
Ответ на: комментарий от D_Lans

>Скопировать таким образом?

Именно так, а как иначе?

А в случае CentOS какой из способов является самым правильным?

http://www.google.com/search?q=centos+%D0%B0%D0%B2%D1%82%D0%BE%D0%B7%D0%B0%D0...

http://mysyslog.ru/posts/426

Или какой-нибудь /etc/modules, если он там есть. Или в rc.local дописать modprobe.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

>Чтобы автоматом грузился, надо его скопировать в /lib/modules/`uname -r`/misc и запустить depmod.
Сделал, отработало без проблем.

modprobe 8712u

а вот это не работает, пишет не найден такой модуль.
Запускаю команду просто из рандом папки, перед тем как вставить её в скрипт по твоей ссылке.

D_Lans
() автор топика
Ответ на: комментарий от D_Lans

D_Lans> Поясни, я тоже хочу получить удовольствие :)

сходи на kernel.org, посмотри, какая нынче версия ядра. Заодно посмотри, когда было выпущено 2.6.18. Вот тут и надо получать удовольствие.

demidrol ★★★★★
()
Ответ на: комментарий от D_Lans

>а вот это не работает, пишет не найден такой модуль.

Он точно именно так называется? Есть ли он в выводе ‘modprobe -l’?

gentoo_root ★★★★★
()
Ответ на: комментарий от demidrol

Внезапно, в RHEL-овское(и CentOS-ное) 2.6.18 бэкпортируют некоторые фичи и латают дыры по безопасности. Сторонние же ядра на CentOS лучше не ставить(когда-то получалось собрать на CentOS нормальное ядро самому) - пробовал несколько разных из rpm - в лучшем случае глючил udev...

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

да это-то понятно. Но фичи — это, как правило, не новые драйвера, а именно исправления безопасности.

demidrol ★★★★★
()
Ответ на: комментарий от Pinkbyte

>grep -i 8712u /lib/modules/`uname -r`/modules.dep
Пусто.

D_Lans
() автор топика
Ответ на: комментарий от demidrol

>сходи на kernel.org, посмотри, какая нынче версия ядра. Заодно посмотри, когда было выпущено 2.6.18. Вот тут и надо получать удовольствие.

Ну ведь это особенность такая CentOS, чему тут удивляться...

D_Lans
() автор топика
Ответ на: комментарий от D_Lans

>Пусто.

Значит, depmod ошибочно выполнился почему-то. Может, попробовать ‘depmod -a’, хотя оно и так должно работать.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

Сделал снова
cp ./8712u.ko /lib/modules/`uname -r`/misc
он спросил «перезаписать?»
вбил y

дальше depmod -a
отработало без проблем

но
grep -i 8712u /lib/modules/`uname -r`/modules.dep
modprobe -l | grep 8712
дают пустоту

modprobe 8712u
ругается на отсутствие модуля.

Может он записался под другим именем?

D_Lans
() автор топика
Ответ на: комментарий от D_Lans

>Может он записался под другим именем?

Вряд ли так можно.

При сборке создался один модуль? Может, там ещё были?

И просто ‘modprobe -l’ выдаёт список модулей?

gentoo_root ★★★★★
()
Ответ на: комментарий от D_Lans

Сдаётся мне, что у вас нет каталога /lib/modules/`uname -r`/misc, копируйтё модуль в extra:

cp ./8712u.ko /lib/modules/`uname -r`/extra

Далее depmod. Если ваш модуль будет в файле /lib/modules/`uname -r`/modules.pcimap будет модуль 8712u для PCI id вашей карточки, то он будет грузиться автоматом.

mky ★★★★★
()
Ответ на: комментарий от gentoo_root

>При сборке создался один модуль? Может, там ещё были?
*.ko файл там только один, сабжевый. Кроме него с похожими именами только *.c и *.o файлы.

И просто ‘modprobe -l’ выдаёт список модулей?

Да, и очень длинный, в несколько экранов.

D_Lans
() автор топика
Ответ на: комментарий от anonymous

>ClearOS вполне себе CentOS такой же мля, как твоя Ubuntu вполне себе Debian!
Хитросплетения и причуды загадочного мира плеяды дистрибутивов Linux всегда зачаровывали меня своей таинственностью и неизведанностью.

D_Lans
() автор топика
Ответ на: комментарий от D_Lans

>такой путь есть, но misc это двоичный файл, а не каталог

Омг, вот в чём прикол. ‘cp 8712.ko /lib/modules/`uname -r`/misc’ скопировало 8712.ko в файл misc, потому что каталога не было. Надо файл удалить, на его месте сделать каталог misc, туда скопировать модуль и сделать depmod.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

>Надо файл удалить, на его месте сделать каталог misc
are you sure?

а вдруг этот файл нужный системный.

D_Lans
() автор топика
Ответ на: комментарий от D_Lans

>are you sure?

100%

а вдруг этот файл нужный системный.

Если там был нужный системный файл, то он уже давно перезаписан командой cp ;)

Можно проверить diff'ом, что файл misc совпадает с файлом модуля. Я-то думал, что у вас есть каталог misc, как у людей, тогда cp скопировало бы в него.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

За что вы так нелюбите «extra»?

Я-то думал, что у вас есть каталог misc, как у людей,

Нет, тут всё как у нелюди. Гугл про weak-updates.

mky ★★★★★
()
Ответ на: комментарий от D_Lans

>а вдруг этот файл нужный системный.

Об этом нужно спрашивать не Гентушника, а базу данных пакетов:

«rpm -q -f /lib/modules/`uname -r`/misc»

mky ★★★★★
()
Ответ на: комментарий от mky

>За что вы так нелюбите «extra»?

Почему это не люблю? У меня просто нет этого каталога, а внешние модули устанавливаются в misc пакетным менеджером.

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

В RH пакетный менеджер понимает rpm. Realtek не позаботился о spec-файле для сборки rpm из предоставляемого ими архива с исходниками. Возможно, ТС осилит сборку http://www.kerneldrivers.org/RedHatKernelModulePackages , но сомнительно.

В любом случае, ИМХО, в RH не нужно создавать каталог misc, а складывать модули в extra.

mky ★★★★★
()
Ответ на: комментарий от mky

Так и сделал, скопировал в extra и запустил depmod

Теперь:

[root@***]# grep -i 8712u /lib/modules/`uname -r`/modules.dep
/lib/modules/2.6.18-194.8.1.v5/extra/8712u.ko:
[root@***]# modprobe -l | grep 8712
/lib/modules/2.6.18-194.8.1.v5/extra/8712u.ko

Вроде всё окей.

Всех премного благодарю. :)

D_Lans
() автор топика
Ответ на: комментарий от mky

Всё работает, пакетики бегают.

Однако есть одна непонятка.

Когда втыкаю вай-фай адаптер в сервер (напомню Celeron 700 mhz, 150 RAM), скорость интернета на клиенте провисает до 40-90 килобайт/сек (700 килобит).

Если же я втыкаю адаптер в более мощный комп с Windows 7, скорость становится нормальной 400-500 килобайт/сек (4 мегабит).

Чуть раньше на таком же старом железе под убунтой серверной тоже были проблемы со скоростью.

Что же это, сервер реально не тянет Wi-Fi с WPA2 шифрованием или это так драйвера себя ведут?

Хотя вот сейчас загрузил канал и смотрю top:

top - 18:32:19 up 31 min,  2 users,  load average: 0.57, 0.74, 0.87
Tasks: 103 total,   4 running,  98 sleeping,   1 stopped,   0 zombie
Cpu(s):  2.0%us,  0.7%sy,  0.0%ni, 93.4%id,  0.0%wa,  0.7%hi,  3.3%si,  0.0%st
Mem:    149772k total,   116220k used,    33552k free,     3320k buffers
Swap:  1052248k total,    72380k used,   979868k free,    40028k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
15015 root      16   0  2400 1084  820 R  1.0  0.7   0:03.92 top
 2926 mysql     17   0  136m 5932 2032 S  0.7  4.0   0:11.29 mysqld
 1964 haldaemo  15   0  9636 2180 1720 S  0.3  1.5   0:06.43 hald
 2804 system-m  15   0  136m 3176 2040 S  0.3  2.1   0:07.48 system-mysqld
 3076 root      15   0 95560  944  672 S  0.3  0.6   0:00.51 upnpd
 3403 root      18   0  9904 3216 1536 S  0.3  2.1   0:04.67 syswatch
 5511 root      15   0 14120 3564 2788 S  0.3  2.4   0:02.34 sshd
    1 root      15   0  2156  596  568 S  0.0  0.4   0:01.86 init
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
    3 root      39  19     0    0    0 S  0.0  0.0   0:00.01 ksoftirqd/0
    4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    5 root      10  -5     0    0    0 S  0.0  0.0   0:00.57 events/0
    6 root      10  -5     0    0    0 S  0.0  0.0   0:00.03 khelper
    7 root      10  -5     0    0    0 S  0.0  0.0   0:00.02 kthread
   10 root      10  -5     0    0    0 S  0.0  0.0   0:00.28 kblockd/0
что-то не кажется, что он сильно загружен.

D_Lans
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.