[megoldva] kernel modul probléma

Fórumok

Sziasztok!

Adott sgy S3C2416 ARM926 procis vas, amihez szeretnék csatlakoztatni egy USB-s WiFi adaptert - konkrétan egy SMC WUSBS-N3 -at amelyen Ralink RT3070 -es vezérlő van. 2.6.39-es kernel-lel dolgozok, amelyben elvileg van hozzá támogatás: " Ralink rt27xx/rt28xx/rt30xx (USB) support ". Belefordítottam a csomagba - valamiért kizárólag modulként lehet csak kijelölni ( próbáltam átírni a .config-ban is make előtt, de az "y" mindig visszaugrik "m"-re és modul lesz ) ezért utólag kéne a helyére tolni...

Az insmod ezt a hibát dobja a rendszeren:

# insmod rt2800usb.ko
rt2800usb: Unknown symbol rt2x00mac_sw_scan_complete (err 0)
rt2800usb: Unknown symbol rt2800_config_shared_key (err 0)
rt2800usb: Unknown symbol rt2x00mac_add_interface (err 0)
rt2800usb: Unknown symbol rt2800_enable_radio (err 0)
rt2800usb: Unknown symbol rt2800_reset_tuner (err 0)
rt2800usb: Unknown symbol rt2x00mac_get_stats (err 0)
rt2800usb: Unknown symbol rt2800_validate_eeprom (err 0)
rt2800usb: Unknown symbol rt2x00lib_txdone_noinfo (err 0)
rt2800usb: Unknown symbol rt2800_link_stats (err 0)
rt2800usb: Unknown symbol rt2x00usb_disable_radio (err 0)
rt2800usb: Unknown symbol rt2800_rfkill_poll (err 0)
rt2800usb: Unknown symbol rt2800_probe_hw_mode (err 0)
rt2800usb: Unknown symbol rt2800_read_eeprom_efuse (err 0)
rt2800usb: Unknown symbol rt2x00mac_set_key (err 0)
rt2800usb: Unknown symbol rt2800_efuse_detect (err 0)
rt2800usb: Unknown symbol rt2800_config_filter (err 0)
rt2800usb: Unknown symbol rt2800_conf_tx (err 0)
rt2800usb: Unknown symbol rt2x00mac_sw_scan_start (err 0)
rt2800usb: Unknown symbol rt2800_check_firmware (err 0)
rt2800usb: Unknown symbol rt2x00usb_vendor_request_buff (err 0)
rt2800usb: Unknown symbol rt2800_mcu_request (err 0)
rt2800usb: Unknown symbol rt2800_init_eeprom (err 0)
rt2800usb: Unknown symbol rt2800_config_pairwise_key (err 0)
rt2800usb: Unknown symbol rt2800_wait_csr_ready (err 0)
rt2800usb: Unknown symbol rt2x00queue_get_entry (err 0)
rt2800usb: Unknown symbol rt2800_clear_beacon (err 0)
rt2800usb: Unknown symbol rt2800_get_tsf (err 0)
rt2800usb: Unknown symbol rt2x00mac_remove_interface (err 0)
rt2800usb: Unknown symbol rt2x00usb_vendor_request (err 0)
rt2800usb: Unknown symbol rt2x00usb_probe (err 0)
rt2800usb: Unknown symbol rt2x00usb_watchdog (err 0)
rt2800usb: Unknown symbol rt2800_load_firmware (err 0)
rt2800usb: Unknown symbol rt2x00mac_config (err 0)
rt2800usb: Unknown symbol rt2x00usb_suspend (err 0)
rt2800usb: Unknown symbol rt2x00usb_clear_entry (err 0)
rt2800usb: Unknown symbol rt2x00mac_start (err 0)
rt2800usb: Unknown symbol rt2x00mac_rfkill_poll (err 0)
rt2800usb: Unknown symbol rt2800_process_rxwi (err 0)
rt2800usb: Unknown symbol rt2x00mac_set_tim (err 0)
rt2800usb: Unknown symbol rt2x00mac_stop (err 0)
rt2800usb: Unknown symbol rt2800_link_tuner (err 0)
rt2800usb: Unknown symbol rt2800_config_intf (err 0)
rt2800usb: Unknown symbol rt2800_set_rts_threshold (err 0)
rt2800usb: Unknown symbol rt2800_wait_wpdma_ready (err 0)
rt2800usb: Unknown symbol rt2x00mac_configure_filter (err 0)
rt2800usb: Unknown symbol rt2x00usb_disconnect (err 0)
rt2800usb: Unknown symbol rt2x00mac_flush (err 0)
rt2800usb: Unknown symbol rt2800_get_tkip_seq (err 0)
rt2800usb: Unknown symbol rt2800_write_tx_data (err 0)
rt2800usb: Unknown symbol rt2800_disable_radio (err 0)
rt2800usb: Unknown symbol rt2800_ampdu_action (err 0)
rt2800usb: Unknown symbol rt2800_config_ant (err 0)
rt2800usb: Unknown symbol rt2x00mac_tx (err 0)
rt2800usb: Unknown symbol rt2800_config (err 0)
rt2800usb: Unknown symbol rt2x00usb_vendor_req_buff_lock (err 0)
rt2800usb: Unknown symbol rt2x00usb_regbusy_read (err 0)
rt2800usb: Unknown symbol rt2x00usb_kick_queue (err 0)
rt2800usb: Unknown symbol rt2800_txdone (err 0)
rt2800usb: Unknown symbol rt2800_write_beacon (err 0)
rt2800usb: Unknown symbol rt2x00usb_resume (err 0)
rt2800usb: Unknown symbol rt2x00usb_uninitialize (err 0)
rt2800usb: Unknown symbol rt2x00usb_initialize (err 0)
rt2800usb: Unknown symbol rt2800_get_survey (err 0)
rt2800usb: Unknown symbol rt2800_config_erp (err 0)
rt2800usb: Unknown symbol rt2x00usb_flush_queue (err 0)
rt2800usb: Unknown symbol rt2x00mac_bss_info_changed (err 0)
insmod: can't insert 'rt2800usb.ko': unknown symbol in module, or unknown parameter

Ez a 4 modul jön létre, mindre hasonlókat dob:
rt2800usb.ko
rt2800lib.ko
rt2x00usb.ko
rt2x00lib.ko

Valamit rosszul csinálok? Valakinek van valami ötlete hozzá?

Előre is köszönöm mindenkinek!

Hozzászólások

A hibaüzenetre pl. ilyesmit találtam:

http://stackoverflow.com/questions/7513184/linux-kernel-module-problem-…

Nem erről a modulról van szó, de nyilván nem is ez az érdekes.

Ezen felül ne insmod-dal töltsd be a modult, mert az nem kezeli a függőségeket. Használd a modprobe parancsot. Gondolom, mac80211, cfg80211 is kell neki, meg ki tudja, még mi.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

köszi a tippet... körbenéztem, és ezeket már alapból beleraktam a kernelbe:

lib80211
cfg80211
mac80211

a modprobe -ra sajna egyelőre nem találtam semmi használhatót. buildroot-ban és kernel-ben semmi nyoma, és az eddig fellelt feed oldalakon se találtam armv4t-re, s3c24xx-re ilyet

A -r a remove. :) Simán modprobe mudulnév. A modprobe -r modulnév az eltávolítja a kernelből. Nem a HDD-ről törli természetesen. És azt hiszem, nem file-ra, hanem modulnévre kell hivatkozni. Valahogy így:

modprobe rt2800usb

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ha van modinfo parancs, akkor modinfo név segítségével ki tudod deríteni a függőségeket. Nálam, desktop Linuxon:

modinfo ath9k_htc | grep dep
depends:        ath9k_hw,ath9k_common,mac80211,ath,cfg80211

Természetesen aztán a függőségeken tovább kell menni, mert azoknak a moduloknak is lehetnek függőségeik, amelyek itt felsorolásra kerültek.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

thx, sikerült továbbjutnom! bár már 1x próbáltam a modinfo parancsot valami guglin vadászott leírás alapján, de nem tudatosodott bennem a hasznossága. szóval valóban a függőségeken múlt... feltérképeztem hogy mi mire épül, és sorban töltögettem be mindent az insmod-al és már meg is van a wlan0 eszközöm:

crc-ccitt
cfg80211
mac80211
rt2x00lib
rt2800lib
rt2x00usb
rt2800usb

utána eddig jutottam:

# ifup wlan0
phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.

erről szintén olvastam guglizás közben hogy alá kell tolni a megfelelő firmware-t - ha sikerül megoldanom akkor azt is megosztom, hátha valakinek még jól jön egyszer...

valahogyan meg kellene tudnom, hogy mi a firmware neve amit nem talál, de nálam a dmesg-be csak 1 sort dob, közben másnál (asszem PC-n) kiírja hogy mit is hiányol:

[ 145.090339] rt73usb 1-1:1.0: firmware: requesting rt73.bin
[ 145.101757] phy1 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.

kitúrtam, hogy a ./drivers/net/wireless/rt2x00/rt2x00firmware.c -ben van ez a rész:

retval = request_firmware(&fw, fw_name, device);
if (retval) {
ERROR(rt2x00dev, "Failed to request Firmware.\n");
return retval;
}

gondolom a fw_name lenne a keresett firmware neve, de nem tudom rávenni hogy kiírja, nem tudok rájönni a szintaktikájára hogy hogyan kellene hozzáfűzni a failed to... üzenethez. tudna valaki segíteni benne?

szia!

a példát csak máshonnan másoltam be, hogy van akinek megmondja hogy mi a firmware neve ami hiányzik, de nekem nem...

ez nem disztro - saját kernel saját rootfs-el egy embedded rendszeren. végigtúrtam minden fellelhető feed oldalt, de nincsen hozzá firmware package. megpróbáltam bemásolni a /lib/firmware-be mindenfélét - rt2860, rt2x00, rt28xx, rt2800, rt2870, rt3070.bin - de továbbra is csak sír hogy Failed to request Firmware - ezért kellene valahogy átírni a programkódot hogy meg is mondja hogy mi az amit hiányol, ne csak rinyáljon...

The last two require a firmware file, provided by the Linux firmwares package:
pacman -S linux-firmware

> leszedtem ezt a csomagot és átmásoltam belőle a bin-eket a /lib/firmware-be, de ugyanaz...

(azokat a firmware fájlokat találtam benne amelyek az ubuntus vmware gépemen is megvannak)

nem akar működni a modbprobe, mindenre ezt dobálja:
modprobe: chdir(2.6.39): No such file or directory
ezért maradtam az insmod-nál, mert az látszólag most működik. lehet mégis az utóbbi okozza a gondomat?

ő az eszköz:
Bus 001 Device 003: ID 083a:a701 Accton Technology Corp. SMCWUSBS-N3 EZ Connect N Wireless Adapter [Ralink RT3070]

most próbáltam azt, hogy az asztali ubuntu alól (ahol tökéletesen működik az adapter) átmásoltam minden rt*.bin-t a /lib/firmware-ből az azonos helyre az ARM gépre, de ugyanazt az üzenetet dobja mint eddig...

http://git.busybox.net/busybox/plain/docs/mdev.txt

Készíts egy olyan szabályt ami minden devre/eventre illeszkedik (.* 1:1 770 ...),
majd dumpold ki egy text fájlba a fontosabb kiexportált környezeti változókat
(ACTION, SEQNUM, MAJOR, MDEV, DEVPATH stb.), hogy megfigyelhesd milyen beállításokkal
triggerelődnek az események (firmware is). Az általános tapasztalatok után állítsd be
egy specifikus szabályt, ami már a kívánt firmware eventre illeszkedik, majd írd meg
hozzá a kiszolgáló shell scriptet. Én hotplug2-őt használok nálam így néz ki a rule:

SUBSYSTEM ~~ (firmware) {
nothrottle
exec /sbin/hotplug-call
next
}

és a hívott hotplug-call scriptből egy részlet:

#!/bin/sh

. /etc/functions.sh

log() {
echo "$2" | logger -s -p "$1" -t "hotplug-call[$$]" >/dev/null 2>&1
}

if [ -d /sys/firmware -a "$SUBSYSTEM" = "firmware" ]; then
if [ -f "/lib/firmware/$FIRMWARE" -a "$ACTION" = "add" ]; then
echo 1 > "/sys$DEVPATH/loading"
cat /lib/firmware/$FIRMWARE >/sys$DEVPATH/data
echo 0 > "/sys$DEVPATH/loading"
log "daemon.info" "Loading firmware ($FIRMWARE)."
fi
fi

Üdv, Valacska

erre jutottam eddig:

.* 1:1 770 */bin/echo "act:$ACTION seq:$SEQNUM mdev:$MDEV dpath:$DEVPATH subsys:$SUBSYSTEM fw:$FIRMWARE" >> /tmp/wlout

# cat /tmp/wlout
act:add seq:1128 mdev:1-1:1.0 dpath:/devices/platform/s3c2410-ohci/usb1/1-1/1-1:1.0/firmware/1-1:1.0 subsys:firmware fw:rt2870.bin

de most mit írjak akkor a .* helyett konkrét mdev eseménynek? add, firmware - ezekre nem reagál semmit. még valami környezeti változót ki kellene iratnom?

és meeeegy! :)

# ifconfig wlan0 up
phy0 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'.
phy0 -> rt2x00lib_request_firmware: Info - Firmware detected - version: 0.29.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 102.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 4, CWmax: 5, Aifs: 2, TXop: 188.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 5, CWmax: 10, Aifs: 3, TXop: 0.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 5, CWmax: 10, Aifs: 7, TXop: 0.

csak a functions.sh-t szedtem ki az általad bemásolt scriptből és el is indult végre...

már csak a rúterre csatlakozásnak kell utánanéznem...

összefoglaltam hogy hogyan sikerült végül beüzemelnem, hátha jól jön még másnak is:

--------------------------------------

rt2870.bin a /lib/firmware-be

--------------------------------------

/etc/mdev.conf végére:
.* 1:1 770 @/home/root/wlup.sh

--------------------------------------

/home/root/wlup.sh:

#!/bin/sh

log() {
echo "$2" | logger -s -p "$1" -t "hotplug-call[$$]" >/dev/null 2>&1
}

if [ -d /sys/firmware -a "$SUBSYSTEM" = "firmware" ]; then
if [ -f "/lib/firmware/$FIRMWARE" -a "$ACTION" = "add" ]; then
echo 1 > "/sys$DEVPATH/loading"
cat /lib/firmware/$FIRMWARE >/sys$DEVPATH/data
echo 0 > "/sys$DEVPATH/loading"
log "daemon.info" "Loading firmware ($FIRMWARE)."
fi
fi

--------------------------------------

inittab-ba:

null::sysinit:/bin/mount -a
null::sysinit:/bin/hostname -F /etc/hostname
+++ null::sysinit:/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
# now run any rc scripts
::sysinit:/etc/init.d/rcS

--------------------------------------

wpa_psk kulcs generálása:
wpa_passphrase

--------------------------------------

/etc/wpa_supplicant/wpa_supplicant.conf:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=1

network={
ssid="ssid"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk=""
}

--------------------------------------

szükséges modulok:

insmod crc-ccitt.ko
insmod cfg80211.ko
insmod mac80211.ko
insmod rt2x00lib.ko
insmod rt2800lib.ko
insmod rt2x00usb.ko
insmod rt2800usb.ko

--------------------------------------

ifconfig wlan0 up

--------------------------------------

iwlist scan
> megtalálja a routert ? mi a csatorna ?

--------------------------------------

iwconfig wlan0 essid "" channel
wpa_supplicant -B -Dwext -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf
udhcpc -i wlan0