Linux за българи: Форуми

Linux секция за начинаещи => Настройка на хардуер => Темата е започната от: rover65 в Nov 18, 2006, 16:23



Титла: Realtek8139d
Публикувано от: rover65 в Nov 18, 2006, 16:23
Здравейте!
Инсталирах SuSE 10.1, но не мога да инсталирам Лан картата - Realtek 8139D. В дискетата, която върви с картата има драйвери за Линукс, изпълнявам инструкциите за инсталиране -  tar xvzf ........; make  и ми изписва следната грешка:
Makefile:37: ***Linux kernel source not configured - missing config.h. Stop.
След команда lspci :
02:05.0 Ethernrt controller: Unknown device 1904:8139 (rev 01)


Титла: Realtek8139d
Публикувано от: neonic в Nov 18, 2006, 16:33
Това ознава, че не ти е инсталиран kernel-soruce - a. Инсталирай го, след което не би трябвало да ти дава тези проблеми.

По - добре е да пуснеш 8139too, вместо 8139cp, тъй като първият работи по - стабилно, ако може така да се каже.

П.п. В самото ядро би трябвало да има компилирани тези драйвери, така, че мисля дискетата няма да ти е нужна.


Титла: Realtek8139d
Публикувано от: rover65 в Nov 18, 2006, 17:22
Първоначално като стартирах "маке" ми изписа, че нямам инсталиран кернел-сорс, след което го инсталирах и тогава ми даде тази грешка - "Makefile:37: ***Linux kernel source not configured - missing config.h. Stop." Освен ако освен кернел-сорс трябва да инсталрам още нещо.  ???


Титла: Realtek8139d
Публикувано от: senser в Nov 18, 2006, 17:53
Освен да инсталираш сорса на ядрото трябва и да го конфигурираш:
влизаш в директорията, където си го инсталирал (най вероятно /usr/src/linux) и изпълняваш "make menuconfig"


Титла: Realtek8139d
Публикувано от: rover65 в Nov 18, 2006, 18:30
А можете ли по-точно какво трябва да настройвам в кернела - последния път слеd опит за компилиране стигнах до "kernel panic..." ???
P.S. Пропуснах да кажа, че се опитах да инсталирам Debian 3.1 и също не можа да ми опознае картата, но там е обяснимо (според мен де) - кернела е 2.4.27....





Титла: Realtek8139d
Публикувано от: senser в Nov 18, 2006, 18:49
ако си решил да инсталираш драйвера от дискетата (което не е много добре според мен при положение че си има такъв в кернела) не е нужно да компилираш кернела а само да го конфигурираш - какво точно би трябвало да пише в инструкциите идващи с драйвера

я виж дали имаш файла /proc/confi.gz за да помогнем евентуално с инсталирането на нов кернел


Титла: Realtek8139d
Публикувано от: gat3way в Nov 18, 2006, 19:15
Това нещо и аз наскоро го установих - с ядра >= 2.6.18

Дължи се на фактът че при тях вече не съществува такъв include файл. (include/linux/config.h)

Какво може да се направи по въпроса? Ако не те е страх да бърникаш в сорса на неща които се изпълняват в kernelspace (промяната е абсолютно нищожна, лесна и безболезнена) правиш следното: отваряш сорс-а на модула, който ще се компилира (предполагам се казва нещо от сорта на rtl8139.c или 8139too.c или нещо от сорта). Заменяш #include <linux/config.h> c  #include <linux/autoconf.h>

Копираш Makefile като Makefile.backup и си правиш собствен такъв от сорта на:

Цитат

obj-m += rtl8139.o
all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules


Викаш make, ако не се разпищи за грешки копираш rtl8139.ko в /lib/modules/`uname -r`/kernel/drivers/net . Викаш depmod после modprobe rtl8139 и си готов.


Титла: Realtek8139d
Публикувано от: rover65 в Nov 18, 2006, 20:27
Цитат (gat3way @ Ноември 18 2006,20:15)
Това нещо и аз наскоро го установих - с ядра >= 2.6.18

Дължи се на фактът че при тях вече не съществува такъв include файл. (include/linux/config.h)

Какво може да се направи по въпроса? Ако не те е страх да бърникаш в сорса на неща които се изпълняват в kernelspace (промяната е абсолютно нищожна, лесна и безболезнена) правиш следното: отваряш сорс-а на модула, който ще се компилира (предполагам се казва нещо от сорта на rtl8139.c или 8139too.c или нещо от сорта). Заменяш #include <linux/config.h> c  #include <linux/autoconf.h>

Копираш Makefile като Makefile.backup и си правиш собствен такъв от сорта на:

Цитат

obj-m += rtl8139.o
all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules


Викаш make, ако не се разпищи за грешки копираш rtl8139.ko в /lib/modules/`uname -r`/kernel/drivers/net . Викаш depmod после modprobe rtl8139 и си готов.

Файла се казва "sc92031.c" и в него замених #include <linux/config.h> c  #include <linux/autoconf.h>

Но това с Makefile ми дойде множко....Нищо не разбирам от С ! Ако може стъпка по стъпка...  ???

А ето част от config.gz:

# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
CONFIG_MII=m
CONFIG_HAPPYMEAL=m
CONFIG_SUNGEM=m
CONFIG_CASSINI=m
CONFIG_NET_VENDOR_3COM=y
CONFIG_EL1=m
CONFIG_EL2=m
CONFIG_ELPLUS=m
CONFIG_EL16=m
CONFIG_EL3=m
CONFIG_3C515=m
CONFIG_VORTEX=m
CONFIG_TYPHOON=m
CONFIG_LANCE=m
CONFIG_NET_VENDOR_SMC=y
CONFIG_WD80x3=m
CONFIG_ULTRA=m
CONFIG_SMC9194=m
CONFIG_NET_VENDOR_RACAL=y
CONFIG_NI52=m
CONFIG_NI65=m

#
# Tulip family network device support
#
CONFIG_NET_TULIP=y
CONFIG_DE2104X=m
CONFIG_TULIP=m
# CONFIG_TULIP_MWI is not set
# CONFIG_TULIP_MMIO is not set
CONFIG_TULIP_NAPI=y
CONFIG_TULIP_NAPI_HW_MITIGATION=y
CONFIG_DE4X5=m
CONFIG_WINBOND_840=m
CONFIG_DM9102=m
CONFIG_ULI526X=m
CONFIG_PCMCIA_XIRCOM=m
CONFIG_AT1700=m
CONFIG_DEPCA=m
CONFIG_HP100=m
CONFIG_NET_ISA=y
CONFIG_E2100=m
CONFIG_EWRK3=m
CONFIG_EEXPRESS=m
CONFIG_EEXPRESS_PRO=m
CONFIG_HPLAN_PLUS=m
CONFIG_HPLAN=m
CONFIG_LP486E=m
CONFIG_ETH16I=m
CONFIG_NE2000=m
CONFIG_ZNET=m
CONFIG_SEEQ8005=m
CONFIG_NET_PCI=y
CONFIG_PCNET32=m
CONFIG_AMD8111_ETH=m
# CONFIG_AMD8111E_NAPI is not set
CONFIG_ADAPTEC_STARFIRE=m
CONFIG_ADAPTEC_STARFIRE_NAPI=y
CONFIG_AC3200=m
CONFIG_APRICOT=m
CONFIG_B44=m
CONFIG_FORCEDETH=m
CONFIG_CS89x0=m
CONFIG_DGRS=m
CONFIG_EEPRO100=m
CONFIG_E100=m
CONFIG_FEALNX=m
CONFIG_NATSEMI=m
CONFIG_NE2K_PCI=m
CONFIG_8139CP=m
CONFIG_8139TOO=m
# CONFIG_8139TOO_PIO is not set
# CONFIG_8139TOO_TUNE_TWISTER is not set
CONFIG_8139TOO_8129=y
# CONFIG_8139_OLD_RX_RESET is not set
CONFIG_SIS900=m
CONFIG_EPIC100=m
CONFIG_SUNDANCE=m
# CONFIG_SUNDANCE_MMIO is not set
CONFIG_TLAN=m
CONFIG_VIA_RHINE=m
# CONFIG_VIA_RHINE_MMIO is not set
CONFIG_NET_POCKET=y
CONFIG_ATP=m
CONFIG_DE600=m
CONFIG_DE620=m

Ако не върши работа, после ще поставя целия...


Титла: Realtek8139d
Публикувано от: gat3way в Nov 19, 2006, 01:22
А...това 2.4 ядро...

Хм, значи предполагам нямаш пакета kernel-headers за твоята версия на ядрото.


Титла: Realtek8139d
Публикувано от: gat3way в Nov 19, 2006, 01:27
apt-get install kernel-heafers ?


Титла: Realtek8139d
Публикувано от: kamos в Nov 19, 2006, 07:43
Защо не опиташ пъро през YAST да конфигурираш мрежовата карта?


Титла: Realtek8139d
Публикувано от: rover65 в Nov 19, 2006, 17:10
През Яста не става нищо, пробвал съм.

gat3way - Сорса на модула е sc92031.c и в него замених #include <linux/config.h> c  #include <linux/autoconf.h>. Заместих оргиналния файл с променения. И до тук. Има един Makefile, но не разбрах какво трябва да направя с него(нищо не разбирам от програмиране на С).
 
Ето и съдържанието на Makefile:

# Driver files
SRC = sc92031.c
TARGET = sc92031.o

# Kernel Search Path
KSP :=  /lib/modules/$(shell uname -r)/build \
        /usr/src/linux-$(shell uname -r) \
        /usr/src/linux-$(shell uname -r | sed 's/-.*//';) \
        /usr/src/kernel-headers-$(shell uname -r) \
        /usr/src/kernel-source-$(shell uname -r) \
        /usr/src/linux-$(shell uname -r | sed 's/\([0-9]*\.[0-9]*\;)\..*/\1/';) \
        /usr/src/linux

# prune the list down to only values that exist
# and have an include/linux sub-directory
test_dir = $(shell [ -e $(dir)/include/linux ] && echo $(dir))
KSP := $(foreach dir, $(KSP), $(test_dir))

# use this first valid entry in the search path
KSRC := $(firstword $(KSP))

# if Linux kernel source is set up?
ifeq (,$(KSRC))
  $(error Linux kernel source not found)
endif

SRCDIR := $(KSRC)/drivers/net

VERSION_FILE := $(KSRC)/include/linux/version.h
CONFIG_FILE  := $(KSRC)/include/linux/config.h

ifeq (,$(wildcard $(VERSION_FILE)))
  $(error Linux kernel source not configured - missing version.h)
endif

ifeq (,$(wildcard $(CONFIG_FILE)))
  $(error Linux kernel source not configured - missing config.h)
endif

# pick a compiler
ifneq (,$(findstring egcs-2.91.66, $(shell cat /proc/version)))
  CC := kgcc gcc cc
else
  CC := gcc cc
endif

test_cc = $(shell which $(cc) > /dev/null 2>&1 && echo $(cc))
CC := $(foreach cc, $(CC), $(test_cc))
CC := $(firstword $(CC))

# standard flags for module builds
CFLAGS += -Wall -DLINUX -D -DMODULE -DEXPORT_SYMTAB -D -O2 -pipe
CFLAGS += -I$(KSRC)/include -I. -Wstrict-prototypes -fomit-frame-pointer
CFLAGS += $(shell [ -f $(KSRC)/include/linux/modversions.h ] && \
            echo "-DMODVERSIONS -include $(KSRC)/include/linux/modversions.h")

# get the kernel version
KVER := $(shell $(CC) $(CFLAGS) -E -dM $(VERSION_FILE) | grep UTS_RELEASE | \
          awk '{ print $$3 }' | sed 's/\"//g';)
          
ifneq ($(KVER),$(shell uname -r))
  $(warning ***)
  $(warning *** Warning: kernel source version ($(KVER)))
  $(warning *** does not match running kernel  ($(shell uname -r)))
  $(warning *** Continuing with build,)
  $(warning *** resulting driver may not be what you want)
  $(warning ***)
endif

# pick an appropriate install path
ifneq (,$(wildcard /lib/modules/$(KVER)/kernel))
  INSTDIR := /lib/modules/$(KVER)/kernel/drivers/net
else
  INSTDIR := /lib/modules/$(KVER)/net
endif

# look for SMP in config.h
SMP := $(shell $(CC) $(CFLAGS) -E -dM $(CONFIG_FILE) | \
         grep CONFIG_SMP | awk '{ print $$3 }';)
ifneq ($(SMP),1)
  SMP := 0
endif

ifneq ($(SMP),$(shell uname -a | grep SMP > /dev/null 2>&1 && echo 1 || echo 0))
  $(warning ***)
  ifeq ($(SMP),1)
     $(warning *** Warning: kernel source configuration (SMP))
     $(warning *** does not match running kernel (UP))
  else
     $(warning *** Warning: kernel source configuration (UP))
     $(warning *** does not match running kernel (SMP))
  endif
  $(warning *** Continuing with build,)
  $(warning *** resulting driver may not be what you want)
  $(warning ***)
endif          

ifeq ($(SMP), 1)
  CFLAGS += -D
endif          

#enable or disable debug
DEBUG = n
ifeq ($(DEBUG),y)
   CFLAGS += -g -DSILAN_DEBUG -DSILAN_NDEBUG
endif

.SILENT: $(TARGET) clean

$(TARGET):
   echo
   echo "*****************************"
   echo " $(TARGET) built for $(KVER)"
   echo -n "   SMP "   
   if [ "$(SMP)" = "1" ];\
   then echo "Enabled ";\
   else echo "Disabled";\
   fi
   echo "*****************************"
   echo
   $(CC) $(CFLAGS) -c $(SRC)

install: $(SRC) $(TARGET)
   mkdir -p $(MOD_ROOT)$(SRCDIR)
   install -m 644 -o root $(SRC) $(MOD_ROOT)$(SRCDIR)
   mkdir -p $(MOD_ROOT)$(INSTDIR)
   install -m 644 -o root $(TARGET) $(MOD_ROOT)$(INSTDIR)
   

ifeq (,$(MOD_ROOT))
   /sbin/depmod -a || true
else
   /sbin/depmod -b $(MOD_ROOT) -a || true
endif


uninstall:
   if [ -e $(INSTDIR)/$(TARGET) ]; then \
        rm -f $(INSTDIR)/$(TARGET);\
   fi
   
   if [ -e $(SRCDIR)/$(SRC) ]; then \
        rm -f $(SRCDIR)/$(SRC);\
   fi

   /sbin/depmod -a


clean:
   rm -f $(TARGET) *~


Титла: Realtek8139d
Публикувано от: senser в Nov 19, 2006, 18:44
изпълни "make" в директорията на Makefile-a


Титла: Realtek8139d
Публикувано от: rover65 в Nov 19, 2006, 19:09
В директорията в която съм разархивирал драйвера за картата (sl_linux.tgz) при изпълнение на "make" ми дава следната грешка:
Makefile:37: ***Linux kernel source not configured - missing config.h. Stop.


Титла: Realtek8139d
Публикувано от: plamen_f в Nov 19, 2006, 22:45
Освен ако не се бориш за спорта - мислйа че ще тие по-лесно да смениш това 8139D :)
За моя радост като гледам аз съм 8139С и такива проблеми просто нямам...


Титла: Realtek8139d
Публикувано от: Agent_SMITH в Nov 20, 2006, 00:02
От време оно в ядрото има драйвер 8139too с който 99,9% от картите на realtek бачкат като слънце. Защо са тези еквилибристики при положение, че с просто прекомпилиране или зареждане на модула ще имаш перфектно работеща машина?

Внимавай с 8139С в 2.6.18 ядро - бъгав е и се троши. Ползвай 8139too ;)


Титла: Realtek8139d
Публикувано от: rover65 в Nov 20, 2006, 08:00
за plamen_f - на другия комп съм с 8139С и нямам проблем с нея (Debian 3.1), но тази я купих за компа на децата. Те са с windows,  a съм инсталирал SuSE 10.1 като втора ОС и някак си не върви да се излагам пред тях - да не мога да си пусна Нет на Линукса!!!! Така, че си е заради спорта...
А за Agent_SMITH - да, има в ядрото драйвери за 8139 и доколкото си спомням сa инсталирани като модули. От YaST-a избирам ръчно модула Realtek RTL8129/8139, конфигурирам си мрежата и нищо! Пак ifconfig-a ми дава само интерфейса "lo". Колкото до компилирането - ще опитам, но досега съм успял само един път да ми тръгне прекомпилирано ядро, обикновено стигам до "kernel panic"  ???

cd /usr/src/linux
make menuconfig
намирам Realtek8139too и маркирам "*"
make modules
make install
reboot
Нали това трябва да направя? :huh:
Машината е 800Mhz Celeron, I815 chipset, 256SDRAM, 80GB HDD, GForce2 32Mb


Титла: Realtek8139d
Публикувано от: plamen_f в Nov 20, 2006, 08:07
Моите уважения!

За такава кауза си струва наистина и аз бих се поизпотил.

Като преборисх проблема моля, сподели решението с нас!

Успех!


Титла: Realtek8139d
Публикувано от: gat3way в Nov 20, 2006, 10:38
Хм, ще го оправим бе :)

На първо време предполагам знаеш къде ти е сорса на ядрото. Можеш ли да пратиш листинг с поддиректорията include/linux ?

Също така ти май спомена ама пак да питам: какво вади uname -r

Сигурен ли си че се опитваш да компилираш модула срещу kernel source със правилната версия? Премахването на config.h е от 2.6.18 нататък, това е далеч след 2.4.нещо си...

Иначе за конкретният драйвер (никога не съм го ползвал) четох преди малко...доколкото разбирам става въпрос за реалтек карта използваща различен чипсет - Силан (втф са тия) и съответно драйверът 8139too не работи с тях (други IOCTLs, друг I/O adress range). Само не разбрах дали тези хора от Силан/реалтек са пускали въобще версия за ядро 2.6. Makefile-a който си пейстнал прилича на такъв за 2.4 модул (няма obj-m, указват includes, има -DMODULE).

Имам една теория по въпроса...според мен се опитваш да билд-неш този модул срещу kernelsource за версия 2.6.18. Теглил ли си някога тази версия на ядрото и случайно да ти се намира някъде из /usr/src ???


Титла: Realtek8139d
Публикувано от: rover65 в Nov 20, 2006, 20:12
Резултат от uname -r
2.6.16.21-0.25-default, колкото до /usr/src/linux/include/linux там е пълно с директории и файлове, а аз не знам как да и изкарам лист-а ???
Тук намерих нещо ...Цък

Изпълних следното:
   1. ndiswrapper -i netslnt.inf
   2. ndiswrapper -d 1904:8139 netslnt
   3. ndiswrapper -m
...като файла "netslnt.inf" го взех от драйверите за ХР от дискетата, която имам с картата. Всичко протече нормално, рестартирах и до там! Очаквах, че в YaST-a при избор на модул ще се появи примерно sc92031, но нищо такова не се случи. Няма допълнителен модул, който да избера за ethernet интерфейса. Пробвах някакви безумия с избор на безжичен интерфейс....Пак нищо....
Продължавам с мъките.... ???


Титла: Realtek8139d
Публикувано от: rover65 в Nov 25, 2006, 18:33
Даааа, след ровене в Нета и експерименти картата тръгна... Ето стъпките:
Използвах ndiswrapper и инсталирах драйвера за ХР:
I. В конзолата като root:
1. ndiswrapper -i netslnt.inf
2. ndiswrapper -l -- ако драйвера е инсталиран нормално се изписва:
   netslnt       driver installed
3. modprobe ndiswrapper

II. В YaST-a - мрежови устройства/мрежова карта /добавяне
Избирам  "Тип на устройството" да е "безжично"
Избирам от списъка "Безжични LAN карти, използващи директен PCI # интерфейс (Защо точно този тип, не знам! Просто с него тръгна!!!!!;)
След това зададох статичен IP,DNS, GW...

И вече имам мрежа, нет и т.н.

Написах едно скриптче за стартиране:

#!/bin/bash
modprobe ndiswrapper
ifconfig wlan0 192.168.1.3
/sbin/route add default gw 192.168.1.1

И вече всичко е ок!