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!
- 4203 megtekintés
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
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
lehet elnéztem, mert mintha alapból benne lenne a kernelben:
# modprobe -r /home/root/rt2800usb.ko
modprobe: chdir(2.6.39): No such file or directory
valami ilyet találtam hogy -r modulnév, de ez nem tetszik neki... valami gond lehet magával a modprobe-al, vagy én csinálom rosszul ?
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
Persze, ha van modprobe, akkor nem kell foglalkozni a függőségekkel, feloldja magától, betölti, amit kell.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
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...
- A hozzászóláshoz be kell jelentkezni
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?
- A hozzászóláshoz be kell jelentkezni
Változatos csomagokban lehetnek disztribúciónként a cuccaid - "linux-firmware", "firmware-ralink", stb. - rendszerint a /lib/firmware
alatt kötnek ki.
{0} ok boto
boto ?
- A hozzászóláshoz be kell jelentkezni
Ott van: rt73.bin
- A hozzászóláshoz be kell jelentkezni
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...
- A hozzászóláshoz be kell jelentkezni
Mégis mi a wireless eszközöd product_id:device_id-ja? Ha ez megvan - lspci, lsusb, ilyenek -, akkor nézelődj itt:
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
https://wiki.archlinux.org/index.php/RT73_Wireless
--
A főnököm mindig megtartja amit ígér, ha pénzt ígér azt is!
- A hozzászóláshoz be kell jelentkezni
https://wiki.archlinux.org/index.php/Using_the_new_rt2x00_beta_driver
--
A főnököm mindig megtartja amit ígér, ha pénzt ígér azt is!
- A hozzászóláshoz be kell jelentkezni
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)
- A hozzászóláshoz be kell jelentkezni
Most akkor van modprobe vagy nincs? Azért kérdem, mert ragaszkodtál a függőségek manuális feloldása után az insmod-hoz.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
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...
- A hozzászóláshoz be kell jelentkezni
Azt hiszem, rt3070.bin kell neked.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Különben, ha forrásból fordítod a kernelt, van valami okod arra, hogy nem a 3.3.2-est használod?
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
igen, egy elég egyszerű oka van: ahhoz hogy működjön a hálókártya, nand stb elég sok patch-et kell ráhúzni a kernelre, amelyek a 2.6.39-hez készültek, és még nem volt lelkierőm hogy ezeket elkezdjem manuálisan beletúrni egy újabb kernelbe... :)
- A hozzászóláshoz be kell jelentkezni
Nálam az rt3070.bin egy symlink az rt2870.bin-re.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
ezt találtam, csak egyelőre nem igazán sikerült felfognom hogy mit is ír pontosan és hogyan kéne utána csinálni... :)
http://rt2x00.serialmonkey.com/phpBB/viewtopic.php?p=34552#p34552
- A hozzászóláshoz be kell jelentkezni
Mivel kapod el az eventeket? Udev/mdev/hotplug2?
- A hozzászóláshoz be kell jelentkezni
mdev van a rendszeren alapból, de a /etc/mdev.conf teljesen üres
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
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?
- A hozzászóláshoz be kell jelentkezni
For your convenience, the shell env var $MDEV is set to the device name.
Ezek szerint '1-1:1.0' (usb) lesz a dev. Majd a meghívott scriptben ellenőrzöd a
subsystem-et és a firmware-t.
- A hozzászóláshoz be kell jelentkezni
é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...
- A hozzászóláshoz be kell jelentkezni
Az globális függvényeket hoz be a scope-ba, amit a script nem kopipasztázott része használ. Pl. itt húzom fel a wlan interfészt is.
- A hozzászóláshoz be kell jelentkezni
ö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
- A hozzászóláshoz be kell jelentkezni