Проблем с компилирането на ndiswrapper :|

16 отговора 365 прегледа
#1

Проблем с компилирането на ndiswrapper :|

Опитвам се да си пусна ndiswrapper под Дебиан. Инсталира се без проблеми, независимо дали инсталирам компилиран пакет или от сорс. Проблемът е, че:

modprobe ndiswrapper

дава следната грешка:

FATAL: Error inserting ndiswrapper (/lib/modules/2.6.8-1-386/misc/ndiswrapper.ko): Invalid module format


Много време четох/търсих информация по въпроса. Пробвах много неща. Накрая намерих следния отговор, който ми се стори разумен: че ядрото и ndiswrapper са компилирани с различни версии на gcc :( Ето отговора на човека:

--------------
When I run "modprobe ndiswrapper", I get "Invalid module forma
t" error. What do I do?


This happens for couple of reasons. First, the kernel running
should have been compiled from the same sources as ndiswrapper
is. Secondly, the compiler used for compiling kernel should b
e same as the one used to compile ndiswrapper. To make sure th
ese conditions are met, run "cat /proc/version" and "modinfo n
diswrapper" and make sure that they match (both compiler and k
ernel versions). If they don't match, you need to recompile ei
ther ndiswrapper or kernel or both. One sure way to get it rig
ht is to make sure that you have proper kernel headers install
ed: check that (type exactly as below)

ls -l /lib/modules/$(uname -r)/build/include/linux/version.h

doesn't give error and shows the information about that file.
-------------------------


Ето моите 2 output-a:

cat /proc/version
Linux version 2.6.8-1-386 (dilinger@toaster.hq.voxel.net) (gcc version 3.3.5 (Debian 1:3.3.5-2)) #1 Thu Nov 11 12:18:43 EST2004

modinfo ndiswrapper
filename: /lib/modules/2.6.8-1-386/misc/ndiswrapper.ko
author: ndiswrapper team <ndiswrapper-general@lists.sourceforge.net>
version: 1.1
license: GPL
vermagic: 2.6.8-1-386 686 gcc-3.3
depends:
parm: hangcheck_interval:The interval, in seconds, for checking if driver is hung. (default: 0)
parm: debug:debug level
parm: proc_gid:The gid of the files created in /proc (default: 0).
parm: proc_uid:The uid of the files created in /proc (default: 0).
parm: if_name:Network interface name or template (default: wlan%d)


Доколкото разбирам ядрото е компилирано с gcc3.3.5, а ndiswrapper се компилира сега с gcc3.3. Ако това е така, как мога да компилирам ndiswrapper с gcc3.3.5? Имам ги и двете инсталирани на системата.

Ядрото не съм го компилирал, само съм го разархивирал и съм направил линковете linux и build.


Системата е Debian Sarge с ядро 2.6.8-1.


Благодаря

Отговор
в отговор на fla #2

Re: Проблем с компилирането на ndiswrapper :|

ми начини много. най-простия, вкарай си гцц3.3.5 в PATH променливата преди другата версия. не разбирам много от кернел програмиране, ама не знам дали това ще оправи работата. м/у 3.3. и 3.3.5 не си спомням да имаше страшни разлики. виж 3.3. и 3.4 е друга работа, но може и да съм пропуснал нещо.
ма пробвай така де.

Отговор
в отговор на __me #3

в Makefile

някъде в началото на Makefile се указва доколко си спомням. може да пробваш да го промениш преди
#make

Отговор
в отговор на fla #4

Re: Проблем с компилирането на ndiswrapper :|

Опитай с:

make CC=име_на_3.3.5_компилатор

Отговор
в отговор на fla #5

Омазано ядро?

Благодаря много за съветите! Ще ги пробвам сигурно още тази вечер :)
Мисля си друго: Покрай драйверите на ATI помня че прекомпилирах ядрото със специфични номерации разни. Това може ли да е проблем?
Питам друго, по-конкретно: Понеже досега не съм си слагал ново ядро... Процедирам по следния начин за инсталиране на kernel-source: Изтеглям tar.bzip-а на кърнела, разархивирам го в /usr/src/, правя linux линк да сочи към него и това е. Тоест ТОВА достатъчно ли е, за да могат програмите, които компилирам в последствие да намерят сорса на ядрото? Или трябва да го компилирам и инсталирам??
Ако е достатъчен само сорса, както предполагам, защо ми показва с каква версия на gcc ми е компилирано ядрото? (cat /proc/version) То нали всъщност не е компилирано? Тоест програмите си ползват сорса. ?

И още нещо: Гледам, че като свалям ядрото то се казва kernel-source-2.6.8. Това е в Дебиан. А в kernel.org се намират linux-2.6.8 примерно. Каква е разликата? Мисля четох за ndiswrapper беше, че трябвало да се ползва upatched кърнъл. Тоест Дебиан-ското ядро си е специално пачнато и променено за Дебиан, а linux-2.6.8 и си е оригиналното ядро?


Благодаря

Отговор
в отговор на fla #6

Re: Омазано ядро?

програмите ти търсят изходния код на ядрото на
/lib/modules/`uname -r`/build
(виж го, това е линк към /usr/src/linux-appropriate-version
т.е. като компилираш модул той ще се компилира за ядрото което в момента върви, при условие че са му инсталирани сорсовете в съответната директория. т.е. за да компилираш някакъв модул трябва да си инсталирал и пуснал ядрото с което искаш да го ползваш. или алтернативно, да си промениш билд скрипта за модула да търси сорсовете за ядрото където ти си искаш.
това май беше въпроса или?
ти беше писал че ndiswrapper-a иска да е компилиран със същия компилатор както и ядрото, аз нито мога да потвърдя нито да отрека това твърдение, не зная.
линукс-2.6.8 от кернел орг е оригиналното ядро, дебианското най-вероятно е променено. аз мисля че веднаж пусках тоя ндис...шит с оригинално ядро на сусе (то е доста далече от кернел.орг) и май поне се зареди модула (доколкото си спомням). че картата не тръгна, проблема май че беше друг. така че смятам ч и с дебианското би трябвало да тръгне.

Отговор
в отговор на fla #7

Re: Омазано ядро?

офф топик.. смятам, че сега е добър момент да...започнеш отначало и с друго дистро :)

Отговор
в отговор на fla #8

Re: Омазано ядро?

Освен изходния код на ядрото, при компилиране на външен модул ти трябва и конфигурацията на ядрото, което използваш. Виж дали случайно я няма в /proc (мисля, че файла се казваше config.gz), или /boot. Като я намериш, копирай я в файла /usr/src/linux/.config и после направи make oldconfig в /usr/src/linux. След това опитай да компилираш ядрото пак.

И малко извън темата... Защо използваш ndiswrapper? Сигурен ли си, че няма обикновен драйвер за мрежовата ти карта?

Отговор
в отговор на fla #9

Благодаря...

Благодаря много за отговорите.
Не успях да се справя с коригирането на мake скрипта :| А с make CC= също не стана :|
Благодаря на _me за разясненията. Точно това питах. ...Работата е там, че аз реално си ползвам кърнъла, който си върви със Sarge, който не знам с какво е компилиран :} А може би проблема е станал при конфигурирането, защото си спомням, че конфигурирах и за инсталацията на ATI драйвера...
Като заключение разбирам, че че за да компилирам програма от сорс тя си търси сорса на ядрото, което трябва да е конфигурирано. Не е необходимо да компилирам ядрото. За подробностите ще се ориентирам от debian.org ;)

DLCI: Трудно ще сменя Дебиан-а :) Пробвал съм по-известните дистрибуции - РедХат, Мандрейк, Слак, май само Сузе не съм много-много. Просто Дебиан-а е несравним по леснота на поддръжка и инсталация. Поне за мен ;) ...Всъщност бях пробвал преди време да инсталирам Woody - беше ужасен :) Абсолютно нямах шанс да се справя с неговия инсталатор :) После четох в интернет нещо от сорта: "The Debian installer is so bad because Debian users need it only once" ;-DDD Мноо ми хареса. И си е баш истина. Откакто съм си инсталирал този Дебиан на лаптопа, кво ли не съм го правил - работи си без грешка :) ...Иначе инсталаторът на Sarge е супер - опростен, ясен и бърз :]

I: Със сигурност няма native LINUX драйвер за wireless LAN-ката ми :| Производителят на лаптопа ми дава поддръжка САМО за Уиндоуз. Което в днешно време е разбираемо ;))
Ndiswrapper върви под Кнопикс без забележки! Вграден е дори в Кнопикс 3.7, може да се настройва само с мишка (не, че го правя де ;-P) и просто си е 6! ...Явно ще трябва повече да почета, най-вероятно аз не правя нещо както трябва :)

Благодаря още веднъж за отговорите :)

Отговор
в отговор на fla #10

Re: Благодаря...

Каква ти е wireless картата? В лаптопите обикновено слагат Intel Pro/Wireless 2100 или 2200, защото са част от Centrino платформата на Интел. И за двете има драйвери за Линукс.

Отговор
в отговор на l #11

Broadcom

Картата ми е Broadcom 4306, който е поддържан чип. Ето целия аутпут на lspci -vv:

-------------------------
0000:00:0c.0 Network controller: Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller (rev 03)
Subsystem: Askey Computer Corp.: Unknown device 7050
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast>TAbort- <TAbort- <MAbort- >SERR- <PERR-
Interrupt: pin A routed to IRQ 10
Region 0: Memory at d0004000 (32-bit, non-prefetchable) [size=8K]
Capabilities: [40] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=375mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 PME-Enable- DSel=0 DScale=2 PME-
----------------------

- Все пак мисля, че проблемът си е в някое мое незнание ;) Спомням си, че когато мъчих да инсталирам ATI драйвера ми даваше същата грешка за модула - не можеше да го вкара в ядрото. Съветите в интернет са да прекомпилирам драйвера или ядрото или най-добре и двете. Аз така или иначе не искам да прекомпилирам ядро - това си ми е идеално :) Ще търся друг начин... Най-вече мисля, че някой друг час пред документацията на ядрото и дебиан описанията ще ми решат проблема :]


Благодаря

Отговор
в отговор на fla #12

Re: Broadcom

>"Аз така или иначе не искам да прекомпилирам ядро - това си ми е идеално :) "
Щом не ти върши работа -явно не е "идеално"
Не разбирам, какво толкова те е страх, да го компилираш.
Дръпни си най-новото ядро, виж си старото с какви опции е компилирано.
За да си сигурен, че може да се върнеш на старото - запази го с друго име и
в lilo.conf дай примерно така:

image = /boot/bzImage
root = /dev/hda2
label = lin
read-only # Non-UMSDOS filesystems should be mounted read-only for checking
# Linux bootable partition config ends
# Old kernel
image = /boot/vmlinuz
root = /dev/hda2
label = lin_orig
read-only # Non-UMSDOS filesystems should be mounted read-only for checking
# Linux bootable partition config ends

ако си с grub -по съответния начин за него
bzImage е новокомпилираното ядро , vmlinuz старото, но може и с други имена да са
в началото на
lilo.conf
трябва да имаш:
prompt
Не забравяй да изпълниш командата lilo преди рестарт
И даже новото ядро да е омазано - можеш да си стартираш машината със старото и да оправиш нещата

Когато боговете говорят, ония с фактите никакви ги няма.
Отговор
в отговор на Heaндepтaлeцa Джo #13

Прав си само донякъде :]

Най-напред благодаря все пак за инфо-то, което си ми дал за слагане на нов кърнел :)
Причините да не искам да го правя са няколко:
1. Не съм го правил досега. Сигурен съм, че не е голяма работа, но НЯМАМ ВРЕМЕ! Искам да имам работеща система, а за момента нямам време да я фиквам, ако стане нещо по мое неразбиране :|
2. Не искам за всеки модул който качвам да прекомпилирам ядро :| Не го намирам за практично. Бих искал да реша радикално проблема, тоест да видя действително откъде идва проблема и ако мога да го реша така. Нов кърнел ми е последната надежда :) ...Точно затова харесвам ЛИНУКС - че можеш да разбереш къде е проблема и да го разрешиш и да научиш много работи :) Е, понякога за сметка на време, но специално безжичната ланка не ми е дотрябвала точно сега, а пък под Кнопикс върви идеално ;)

Отговор
в отговор на fla #14

Новост - 386 и 686 - има ли значение и как?

Четох пак доста неща в нета и почти всички отговори, които намирам са, че не са еднакви версиите на gcc, с които са компилирани ядрото и ndiswrapper. А това не е вярно :(

cat /proc/version

дава следното:

Linux version 2.6.8-1-386 (dilinger@toaster.hq.voxel.net) (gcc version 3.3.5 (Debian 1:3.3.5-2)) #1 Thu Nov 11 12:18:43 EST2004

Тоест ядрото си е 2.6.8-1 и си се компилира с gcc-3.3. (Мисля това 5 накрая няма толкова значение; пробвах и такава версия да инсталирам, но няма такава. Има 3.4. Пробвах да компилирам и компилирах и с нея - пак същата грешка.)


След като ядрото е компилирано с gcc-3.3, инсталирам ndiswrapper с него и интересното е какво дава modifno ndiswrapper:

version: 1.1
license: GPL
vermagic: 2.6.8 686 gcc-3.3

Тоест gcc-то си е 3.3, ядрото си е 2.6.8, ама ЗАЩО Е 686???! :|||||||||||||| Това намирам като единствена разлика! Остава въпросът: ОТКЪДЕ при компилирането се чете това 686???! :((( Мисля, че ако реша този проблем ще ми се modprobe-не модула без проблем. Някакви идеи?


Благодаря

Отговор
в отговор на fla #15

Re: Новост - 386 и 686 - има ли значение и как?

може би от конфиг-а на ядрото. то за каква архитектура е компилирано? не му гледай името а конфигурацията.
да не би да има някаква несъвместимост между конкретно тази версия на ядрото и конкретно този модул? прочети там някакви информации от страницата на ndisswrapper-a. може и в кернел.орг, ама там много повече работи стават, та докато намериш това, което търсиш, ще загубиш много време.

Отговор
в отговор на fla #16

Re: Новост - 386 и 686 - има ли значение и как?

Имах същия проблем с ndwis и федора (с едно от ядрата им, не си спомням кое).
Като инсталирах 2.6.11 (последното им) и дръпнах новия ndis код всичко тръгна по мед и масло.

Пробвай да свалиш ново ядро за Дебиян (мисля че имат 2.6.10) и пак пробвай.

Само един въпрос - нема ли прекомилирана версия на ndis за Дебиян?

Отговор
в отговор на fla #17

ПРОБЛЕМЪТ РАЗРЕШЕН?? ...Донякъде...

Отново след много ровене... Колкото повече ровиш толкова повече по-конкретна информация намираш с времето :]
Попаднах на следния сайт:

[линк]

в който човекът пита защо навсякъде дават само линк към репозитори за дадени пакети, а ги няма качени готиви компилирани някъде :)
Е, реших за последно за вечерта да пробвам и това. Има логика, ако аз не компилирам правилно.
Така и се оказа :) Инсталирам двата пакета, които човекът ги е качил на сайта си и, които са точно за дебиан тестинг 2.6.8-1-386. Инсталацията без проблеми, modprobe ndiswrapper - без проблеми :)... Проверих веднага modinfo ndiswrapper и видях, че си е 386 компилиран :) Извода: трябват повече данни на задклавиатурното устройство относно инфото за мястото на 386/686, от което се чете при компилиране на пакети :)

Така че, Ник - да - има компилирани пакети и теми свършиха чудесна работа :) (Иначе ядро не исках да сменям.)

Остава обаче проблема с липсата нa wlan0 ;-D Просто не ми го показва като устройство от iwconfig... :) Но пък в google имаше доста такъва питания, тоест имам нов материал за четене ;) (И все пак, ако някой се е сблъсквал с този проблем и реши да сподели ще съм му благодарен :)


Благодаря на всички помагащи :)

Отговор