Kirjoittaja Aihe: [Ratkaistu]Tartteisin vähän apua eee 901 Wlanin kanssa  (Luettu 3026 kertaa)

peran

  • Vieras
Ongelma, on että WLANini löytää kyllä verkot, muttei osaa niihin yhdistää.  :(

Siis olen onnistuneesti "asentanut" Wlanin Adamin kernelillä.

Siis käyttiksenä on perus-ubuntu Adamin kernelillä.

Olen yrittänyt avoimella verkolla ja suljetulla, mutta kummallakaan en ole onnistunut.

Aluksi onnistuin eeePC:n Xardoksilla, mutta sitten päivitin liikaa konetta, ja enkä ole saanut WLANia toimimaan sen jälkeen.

Pitääkö tässä alkaa käyttää ulkoista tikkua, vai löytyykö jokin kauniimpi ratkaisu. Ulkoinen ndiswrapperilla toimiva tikku toki löytyy, vaikken olekaan testannut toimivuutta eeePC:lläni.

Laitan kohta vähän eeePC:stäni arvoja. Siis mitä saan ulos siitä.

Tässäpäs tätä...
Koodia: [Valitse]
$ sudo iwpriv iwlist

$ iwlist ra0 scanning
ra0       Scan completed :
          Cell 01 - Address: 00:19:5B:8F:76:88
                    ESSID:"PHN WLAN"
                    Mode:Managed
                    Channel:1
                    Quality:15/100  Signal level:-84 dBm  Noise level:-81 dBm
                    Encryption key:on
                    Bit Rates:36 Mb/s
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (2) : TKIP CCMP
                        Authentication Suites (1) : PSK
          Cell 02 - Address: 00:16:01:27:46:03
                    ESSID:"12345"
                    Mode:Managed
                    Channel:5
                    Quality:100/100  Signal level:-44 dBm  Noise level:-81 dBm
                    Encryption key:off
                    Bit Rates:11 Mb/s

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:23:54:04:b9:fe 
          inet addr:192.168.11.5  Bcast:192.168.11.255  Mask:255.255.255.0
          inet6 addr: fe80::223:54ff:fe04:b9fe/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6425 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:7
          collisions:0 txqueuelen:1000
          RX bytes:9138246 (8.7 MB)  TX bytes:0 (0.0 B)
          Memory:fbfc0000-fc000000

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1416 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1416 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:72280 (70.5 KB)  TX bytes:72280 (70.5 KB)

ra0       Link encap:Ethernet  HWaddr 00:22:43:24:80:00 
          inet6 addr: fe80::222:43ff:fe24:8000/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:9156 errors:0 dropped:0 overruns:0 frame:0
          TX packets:799 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:873927 (853.4 KB)  TX bytes:0 (0.0 B)
          Interrupt:19
$ iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

ra0       RT2860 Wireless  ESSID:"12345"  Nickname:"RT2860STA"
          Mode:Managed  Frequency=2.432 GHz  Access Point: 00:16:01:27:46:03   
          Bit Rate=54 Mb/s   
          RTS thr:off   Fragment thr:off
          Link Quality=100/100  Signal level:-44 dBm  Noise level:-81 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
« Viimeksi muokattu: 03.01.09 - klo:21.58 kirjoittanut peran »

peran

  • Vieras
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #1 : 01.01.09 - klo:08.14 »
Lisää koodia, josta ehkä on apuja... ???
Koodia: [Valitse]
$ sudo iwpriv ra0 stat
ra0       stat:

Tx success                      = 863
Tx success without retry        = 863
Tx success after retry          = 0
Tx fail to Rcv ACK after retry  = 0
RTS Success Rcv CTS             = 0
RTS Fail Rcv CTS                = 0
Rx success                      = 15732
Rx with CRC                     = 216
Rx drop due to out of resource  = 0
Rx duplicate frame              = 0
False CCA (one second)          = 0
RSSI-A                          = -46
RSSI-B (if available)           = -52
RSSI-C (if available)           = -99

WpaSupplicantUP                 = 0



Koodia: [Valitse]
$ iwpriv
lo        no private ioctls.

eth0      no private ioctls.

ra0       Available private ioctls :
          set              (8BE2) : set 1024 char  & get   0     
          connStatus       (0004) : set   0       & get 2047 char
          driverVer        (0005) : set   0       & get 2047 char
          bainfo           (0006) : set   0       & get 2047 char
          descinfo         (0007) : set   0       & get 2047 char
          radio_off        (000A) : set   0       & get 2047 char
          radio_on         (000B) : set   0       & get 2047 char
          show             (0014) : set 1024 char  & get 2047 char
          bbp              (8BE3) : set 2047 char  & get 2047 char
          mac              (8BE5) : set 1024 char  & get 1024 char
          e2p              (8BE7) : set 1024 char  & get 1024 char
          stat             (8BE9) : set   0       & get 2047 char
          get_site_survey  (8BED) : set   0       & get 1024 char



« Viimeksi muokattu: 01.01.09 - klo:08.24 kirjoittanut peran »

peran

  • Vieras
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #2 : 01.01.09 - klo:09.49 »
Onkohan mulla liian uusi firmis tikussani, kun vaikuttaa niin tuoreelta tapaukselta?

Koodia: [Valitse]
$ iwpriv ra0 driverVer
ra0       driverVer:Driver version-1.7.1.1, Nov 12 2008 02:31:25

peran

  • Vieras
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #3 : 01.01.09 - klo:14.12 »
Jaahas, taitaakin olla toi WLANin heikko toiminta ominaisuus.  :P

Karvameduusa

  • Käyttäjä
  • Viestejä: 1055
    • Profiili
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #4 : 01.01.09 - klo:15.25 »
Jaahas, taitaakin olla toi WLANin heikko toiminta ominaisuus.  :P

Ihan hyvin toiminut WPA2-psk + WPA compatibility asetuksella mikä on ollut purkissa (Ubuntu).

Tosin asensin joskus Xubuntu ja array.org:sta kernelin.
Xubuntussa en saannut aluksi toimimaan Wlania, mutta tyhjensin Wlan asetukset NetworkManagerista ja lisäsin Wlanverkon manuaalisesti NetworkManagerista niin lähti toimimaan.

Oletko kattonut ettei biosista olisi disable wlan. Bios päivitys veti minulta kaikki nolliin.

New_user

  • Käyttäjä
  • Viestejä: 1101
    • Profiili
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #5 : 01.01.09 - klo:16.24 »
Ongelma, on että WLANini löytää kyllä verkot, muttei osaa niihin yhdistää.  :(


Kuulostaa jotenkin samalta, kun itellä oli. Eli kone oli aluperin kiinteällä IP:llä kiinni nettiboksissa, ja sitten kun hommasin tän RT2500 -pohjaisen PCMCIA Wlan-kortin, verkko löytyi hienosti, mut minnekään ei päässyt. Sitte kun kävin network managerissa, ja laiton langallisen DHCP-tilaan ja annoin olla wlan-kortin roaming mode päällä, niin johan alkoi toimia. Jostain syystä joka kerta langallisen kiinteän IP:n käytön jälkeen wlan ei toimi ennenkuin se on pistetty takaisin dhcp-tilaan. Noita salattuja moodeja ei täällä landella :P ole ollut tarvis käyttää. Ja sitte vielä, että joskus jos wlan-linkki on mennyt poikki, ottaa aikansa, ennen kuin ottaa yhteyden uudelleen. Ei siis kannata ihan hätäisesti vaihdella konfiguraatiota.

peran

  • Vieras
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #6 : 01.01.09 - klo:16.45 »
Tarkennettu ongelmankuvaus...
WLAN saa yhteyden jos kyseessä on neitseellinen ESSID - riippumatta salaustyypistä, mutta jos sammuttaa tai laittaa unitilaan, tai sammuttaa vain wlanin, niin samaan verkkoon en enään pääsekään ennen kuin muutan ESSID:iä.

Kuulostaa jotenkin samalta, kun itellä oli. Eli kone oli aluperin kiinteällä IP:llä kiinni nettiboksissa, ja sitten kun hommasin tän RT2500 -pohjaisen PCMCIA Wlan-kortin, verkko löytyi hienosti, mut minnekään ei päässyt. Sitte kun kävin network managerissa, ja laiton langallisen DHCP-tilaan ja annoin olla wlan-kortin roaming mode päällä, niin johan alkoi toimia. Jostain syystä joka kerta langallisen kiinteän IP:n käytön jälkeen wlan ei toimi ennenkuin se on pistetty takaisin dhcp-tilaan. Noita salattuja moodeja ei täällä landella :P ole ollut tarvis käyttää. Ja sitte vielä, että joskus jos wlan-linkki on mennyt poikki, ottaa aikansa, ennen kuin ottaa yhteyden uudelleen. Ei siis kannata ihan hätäisesti vaihdella konfiguraatiota.

Joops, ei taida tässä tapauksessa kuitenkaan olla ko. ongelmasta kysymys. Minulla hakee DHCP:llä, ja langallinen ja langaton ei pitäisi olla samaan aikaan kytkettyinä.

Oletko kattonut ettei biosista olisi disable wlan. Bios päivitys veti minulta kaikki nolliin.

Kyllä Biosissa oli wlan enable, mutta näytti olevan kamera ja bluetooth disenable.

Enpäs ole vielä saanut Wlania toivotulla tavalla toimimaan. Ilmeisesti pitää päivittää BIOS.

Mistäs sen löytää ?


Edit - Tosin tällä hetkellä taistelen Xardosin kanssa.
« Viimeksi muokattu: 01.01.09 - klo:16.51 kirjoittanut peran »

peran

  • Vieras
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #7 : 01.01.09 - klo:16.58 »
Koodia: [Valitse]
$ dmesg
...
[  105.180000] btstack_release: dequeued all remaining buffers from RX Q
[  105.180000] btstack_release: stack driver released 0xf39b25c0
[  128.400000] ===>rt_ioctl_giwscan. 2(2) BSS returned, data->length = 165
[  142.270000] RX DESC f26f0000  size = 2048
[  142.270000] <-- RTMPAllocTxRxRingMemory, Status=0
[  142.280000] I/F(ra0) Key1Str is Invalid key length! KeyLen = 0!
[  142.280000] I/F(ra0) Key2Str is Invalid key length! KeyLen = 0!
[  142.280000] I/F(ra0) Key3Str is Invalid key length! KeyLen = 0!
[  142.280000] I/F(ra0) Key4Str is Invalid key length! KeyLen = 0!
[  142.280000] 1. Phy Mode = 9
[  142.280000] 2. Phy Mode = 9
[  142.300000] RTMPSetPhyMode: channel is out of range, use first channel=1
[  142.310000] 3. Phy Mode = 9
[  142.310000] MCS Set = ff ff 00 00 01
[  142.320000] <==== RTMPInitialize, Status=0
[  142.320000] 0x1300 = 00064300
[  142.330000] ==>rt_ioctl_siwfreq::SIOCSIWFREQ[cmd=0x8b04] (Channel=5)
[  217.400000] usb 5-8: USB disconnect, address 3
[  219.100000] usb 5-8: new high speed USB device using ehci_hcd and address 4
[  219.290000] usb 5-8: configuration #1 chosen from 1 choice
[  219.290000] uvcvideo: Found UVC 1.00 device CNF7129 (04f2:b071)
[  242.310000] usb 5-8: USB disconnect, address 4
[  253.220000] ===>rt_ioctl_giwscan. 3(3) BSS returned, data->length = 285


l. Erroria näkkyy bugaavaan.

BIOS on Revision 1401
Core Version: 1401
Build Date: 08/15/08
EC Firmware Version:EPCB-017

Onkohan tämä sivu oikea hakea päivityksiä. Huom. Minun koneessa olevaa firmistä ei ole ollenkaan listoilla. ???
http://support.asus.com/download/download.aspx?SLanguage=en-us&model=Eee%20PC%20901/Linux
« Viimeksi muokattu: 01.01.09 - klo:17.25 kirjoittanut peran »

Karvameduusa

  • Käyttäjä
  • Viestejä: 1055
    • Profiili
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #8 : 01.01.09 - klo:17.11 »
Lainaus
Mistäs sen löytää ?
Täältä löydät.

Sieltä myös löytyy AFUDOS.exe millä ajetaan tuo .rom.

Komennolla AFUDOS.exe /i1703.rom. Tarvitset boottaavan usb tikun missä on Dos.

peran

  • Vieras
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #9 : 01.01.09 - klo:21.12 »
Komennolla AFUDOS.exe /i1703.rom. Tarvitset boottaavan usb tikun missä on Dos.

Vihjeitä saa antaa, kuinka DOS tehdään tikkuun. Vielä parempi, jos joku tekee 32 Mt:n tikun ja laittaa nettiin siitä dd:llä otetun levykuvan, ja antaa linkin mulle.

FreeDOSsia olen yritellyt, jonka tein rompulle.
Ainakaan oikein ei ollut tehdä tikkua s.e. formatoi FAT16:ksi, ja kopioi ko. osioon kovalevyssä olevan FAT16 DOS:sin dd:llä. Tuli joku starttierrori.

Nyt olen yrittämässä asentaa  boottaavaa tikkua, ja otan dd:llä kopion toiseen tikkuun FAT16 DOS:sta, ja siirrän sen dd:llä eeePC:n levyihin. No, yrittänyttä ei laiteta, vaikka monestihan tässä pääsee yrittämään.

Timo Virtanen

  • Käyttäjä
  • Viestejä: 2080
    • Profiili
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #10 : 02.01.09 - klo:06.54 »
Oman pikku läppärin (Asus 700 4G) WLAN ongelmat katosivat kun tein GDM esittämien "Acer one"  ohjeiden mukaan ajureiden asennukset. Piti ladata jokin backports ajuri jne, mutta ohje toimi hyvin. Ei enää pallojen turhaa jauhattamista yläpaneelissa vaan suoraan verkkoon. Adammin kernelissä on vissiin hieman viilailun varaa? Ai niin läppärissä oli Ubuntu 8.10 ilman Adamin kerneliä, terveisin Timo
"Linux, made in Finland"

T43, T61p, T500 kierrätysläppärit

peran

  • Vieras
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #11 : 03.01.09 - klo:05.17 »
Lainaus
Mistäs sen löytää ?
Täältä löydät.

Sieltä myös löytyy AFUDOS.exe millä ajetaan tuo .rom.

Komennolla AFUDOS.exe /i1703.rom. Tarvitset boottaavan usb tikun missä on Dos.

Mulla heittää seuraavanlaisen herjan yrittäessäni ajaa ko. ohjelmaa uusimmalla freeDOS:lla.

Koodia: [Valitse]
ERROR: This program must be run in MS-DOS mode

Tosin en onnistunut asentamaan DOSsia USB-tikkuun, joten asensin sen SSD:lle. Voin myös asentaa jonkin toisen ilmaisen DOS:sin, mikäli sellainen löytyy.

Minkähänlaista autoexec.bat ja config.sys:ssiä olet käyttänyt tai jotain...

peran

  • Vieras
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #12 : 03.01.09 - klo:05.44 »
Koodia: [Valitse]
ERROR: This program must be run in MS-DOS mode

Tosin en onnistunut asentamaan DOSsia USB-tikkuun, joten asensin sen SSD:lle. Voin myös asentaa jonkin toisen ilmaisen DOS:sin, mikäli sellainen löytyy.

Minkähänlaista autoexec.bat ja config.sys:ssiä olet käyttänyt tai jotain...

Ilmeisesti ongelmia tuotti toi ylämuistin käyttäminen DOS:ssissa, kun vähän rukkaili config.sys:siä, niin johan hyrähti käyntiin.

Kuinkas kauan flashaaminen kestää?

peran

  • Vieras
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #13 : 03.01.09 - klo:06.48 »
Rukkailin ilmeisesti vähän liikaakin config.sys:iä, kun näyttää tekevän vieläkin. Ilmeisesti ko. ohjelma on päässyt ikuiseen silmukkaan. Nyt on vain toiveissa, ettei ole vielä kirjoittanut flashiä.

Pidän nyt noitten ohjeiden mukaisesti konetta auki, josko säkällä osaisi ohjelma sittenkin päästä loppuun.

Tietenkin, jos joku kertoo kuinka kauan 901:sen flashaaminen kestää, niin odotan sen verran. Kaiken järjen mukaan ei pitäisi kestää näin kauaa.

Siis olen vieläkin kiinnostunut onnistuneen flashauksen mukaisista config.sys:stä ja autoexec.bat:sta.

Siis eee:n näytössä seisoo:
Koodia: [Valitse]
WARING!! Do not turn off power during flash BIOS
Search necessary infomation

Imeisesti se jotain ilmoittelee, kun aloittaa varsinaisen flashauksen, joten olen toiveikas, että koneeni toimii edelleen yhtä heikosti kuin aiemminkin, mutta ei huonommin. Tuskin nyt paremminkaan.  :P
« Viimeksi muokattu: 03.01.09 - klo:06.51 kirjoittanut peran »

peran

  • Vieras
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #14 : 03.01.09 - klo:09.42 »
No, ei tullut eeePC:stäni ainakaan vielä paperipainoa.  :D  :D

Mutta vielä ne config.sys:n ja autoexec.bat:n tiedot olis tarpeen.

Ilmeisesti Config.sys:iini tulee laittaa DOS=SINGLE

No, tässä on tämän hetkinen Config.sys:sini, jonka olen virponut.

Koodia: [Valitse]
!COUNTRY=001,437,C:\FDOS\BIN\COUNTRY.SYS

!SET lang=EN

!LASTDRIVE=Z

!BUFFERS=20     

!FILES=40

!DOS=HIGH,UMB

!DOSDATA=UMB

!set dircmd=/ogn /4

!MENUCOLOR=7,0

MENUDEFAULT=2,5

MENU 1 - Load FreeDOS with EMM386, no EMS (most UMBs), max RAM free

MENU 2 - Load FreeDOS with EMM386+EMS and SHARE

MENU 3 - Load FreeDOS including HIMEM XMS-memory driver

MENU 4 - Load FreeDOS without drivers

DOS=HIGH,UMB

12?DEVICE=C:\FDOS\BIN\HIMEM.EXE

1?DEVICE=C:\FDOS\BIN\EMM386.EXE NOEMS X=TEST

2?DEVICE=C:\FDOS\BIN\EMM386.EXE X=TEST

;12?DEVICEHIGH=C:\FDOS\bin\xdma.sys

12?DEVICEHIGH=C:\FDOS\bin\xcdrom.sys /d:FDCD0001

12?DEVICEHIGH=C:\FDOS\bin\cdrcache.sys FDCD0001 CDRCACH0 15000

12?SHELLHIGH=C:\FDOS\bin\command.com C:\FDOS\bin /E:1024 /P=C:\autoexec.bat

3?SHELL=C:\FDOS\bin\command.com C:\FDOS\bin /E:1024 /P=C:\autoexec.bat
12?INSTALLHIGH=C:\FDOS\bin\lbacache.com 15000 TUNS


Kolmosella olen käynnistänyt tämän viritelmän.

Autoexec.bat:tini on tällainen.
Koodia: [Valitse]
@echo off
SET dosdir=C:\FDOS
set PATH=%dosdir%\bin
set NLSPATH=%dosdir%\NLS
set HELPPATH=%dosdir%\HELP
set temp=%dosdir%\temp
set tmp=%dosdir%\temp
SET BLASTER=A220 I5 D1 H5 P330
REM ShsuCDhd /QQ /F:C:\FDBOOTCD.ISO
if not "%config%"=="4" REM LH VIAUDIO
if not "%config%"=="4" REM LH VIAFMTSR
if not "%config%"=="4" LH FDAPM APMDOS
if "%config%"=="2" LH SHARE
if not "%config%"=="4" ShsuCDX /QQ /~ /D:?FDCD0002 /D:?FDCD0003 /D:?CDRCACH0
SET autofile=C:\autoexec.bat
alias reboot=fdapm warmboot
alias halt=fdapm poweroff
SET CFGFILE=C:\fdconfig.sys
echo type HELP to get support on commands and navigation
echo.
echo Welcome to FreeDOS
echo.
if not "%config%"=="4" mouse
lh doslfn

Vai onnistuisiko EEEPC:hen BIOSin päivittäminen yksinkertaisesti laittamalla oma distro sisään ja laittamalla 1703.ROM-tiedosto sda3:een, joka on nimetty BIOS:ksi? ???

peran

  • Vieras
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #15 : 03.01.09 - klo:09.53 »
Jaahas, löytyikin oikea tapa asentaa uusin BIOS.

http://wiki.eeeuser.com/howto:updatebios

No, pitää asentaa takaisin toi Xardos, niin menee kivuttomimmin.

peran

  • Vieras
Vs: [Ratkaistu]Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #16 : 03.01.09 - klo:22.02 »
Tosiaan BIOSin päivitys laittoi järjestelmäni ainakin näin ensivaikutelmaltaan kuntoon.

Ainakaan aikaisemmin Xardos ei ole vielä toiminut näin hyvin kuin koneessani nyt toimii.

Tosiaan: jos omaat BIOSin 1401, niin päivittäminen ratkaisee pahimmat WLAN-ongelmat. Ainakin näin näyttäisi ensisilmäykseltä.

Ja BIOSin päivittäminen kannattaa suorittaa Xardosin omalla käyttiksellä, jolloin päivityspaketin voi hakea suoraan Lisää/Poista-ohjelmalla.

Kiitokset vaivannäöistänne.  :D :D :D

Karvameduusa

  • Käyttäjä
  • Viestejä: 1055
    • Profiili
Vs: Tartteisin vähän apua eee 901 Wlanin kanssa
« Vastaus #17 : 04.01.09 - klo:15.46 »
Jaahas, löytyikin oikea tapa asentaa uusin BIOS.

http://wiki.eeeuser.com/howto:updatebios

No, pitää asentaa takaisin toi Xardos, niin menee kivuttomimmin.

Voitko napata biosupdate.pl koodit jollain tekstieditorilla ja pastea tänne?

Edit:

Hahah, löysin scriptan.

biosupdate.pl
Koodia: [Valitse]
#!/usr/bin/perl

use strict;
use Getopt::Long;

my $wget = '/usr/bin/wget --quiet';
my $baseurl = 'http://update.eeepc.asus.com';
my $pathfile = '/bios/path.idx';
my $product = 'EeePC';

my %opt;

GetOptions (\%opt, "list", "install=s", "current") || exit 1;

if (!%opt) {
    print "Arguments for this script:\n";
    print " --list: lists available updates.\n";
    print " --install <url>: installs BIOS update from provided URL.\n";
    print " --current: returns the current installed version\n";
    exit 0;
}
elsif (keys(%opt) > 1) {
    print "Only one argument allowed.\n";
    exit 1;
}
elsif (defined($opt{list})) {
    my $file;

    checkRoot();

    # Get product name
    my $partcode = getPartCode();

    $file = "$baseurl/$pathfile";
    print STDERR "Retrieving $file...\n";
    (my @pathidx = `$wget -O- $file`) || exit 16;
    my %products = readIdxPaths($file, \@pathidx);
    #printHash(\%products);

    $file = "$baseurl$products{$product}";
    print STDERR "Retrieving $file...\n";
    (my @platformidx = `$wget -O- $file`) || exit 16;
    my %platform = readIdxPaths($file, \@platformidx);
    #printHash(\%platform);

    $file = "$baseurl$platform{$partcode}";
    print STDERR "Retrieving $file...\n";
    (my @partidx = `$wget -O- $file`) || exit 16;
    my %part = readIdxVersions($file, \@partidx);
   
    foreach my $key (keys(%part)) {
        print $key . '|' . $part{$key}{release} . '|' .
              $part{$key}{description} . '|' .
              $baseurl . $part{$key}{path} . "\n";
    }
}
elsif (defined($opt{install})) {
    checkRoot();

    my $partcode = getPartCode();
    exit 7 if ($partcode eq '');

    my $dir = `/bin/mktemp -d`;
    chomp $dir;

    chdir $dir;

    system("$wget $opt{install}") && exit 16;

    my $file = $opt{install};
    $file =~ s/^.*\///;

    if (system("/usr/bin/unzip -qq $file")) {
        print STDERR "Corrupt ZIP file.\n";
        exit 8;
    }

    my $rom = `find -name \*.[Rr][Oo][Mm] | head -n1`;
    chomp $rom;
   
    if ($rom eq '') {
        print STDERR "Cannot find ROM file.\n";
        exit 9;
    }

    mkdir ('mnt', 0755) || exit 10;
    system("/bin/mount -L BIOS mnt") && exit 10;
    system("/bin/cp $rom mnt/$partcode.rom") && exit 10;
    system("/bin/umount mnt") && exit 10;
    system("/bin/echo 0x030c > /proc/acpi/asus/hdps") && exit 10;

    system("rm -fr $dir");

    print STDERR "Success. Please reboot.\n";
}
elsif (defined($opt{current})) {
    checkRoot();
    my $version = `/usr/sbin/dmidecode -s bios-version`;
    $version =~ s/^\s*(\d+)\s*$/$1/;
    print "$version\n";
}


sub readIdxPaths {
    my $file = shift;
    my $raw = shift;

    my %p;
    my $pflag = 0;
    my $product;
    my $line = 0;

    foreach(@$raw) {
        $line++;
        s/\r//;
        chomp;

        if (/^.*<product>\s*(.*\S)\s*$/) {
            parseError($file, $line, 'Unexpected <product> tag.') if ($pflag);
            $product = $1;
            $pflag = 1;
        }
        elsif (/^.*<path>\s*(.*\S)\s*$/ && $pflag) {
            $p{$product} = $1;
            $p{$product} =~ s/\\/\//g;
            $p{$product} =~ s/^(\w)/\/$1/;
        }
        elsif (/^.*<~product>/) {
            parseError($file, $line, 'Unexpected <~product> tag.') if (!$pflag);
            $pflag = 0;
        }
    }

    parseError($file, $line, 'Unexpected EOF.') if ($pflag);

    return %p;
}


sub readIdxVersions {
    my $file = shift;
    my $raw = shift;

    my %p;
    my $pflag = 0;
    my $vflag = 0;
    my $dflag = 0;
    my $product;
    my $version;
    my $line = 0;

    foreach(@$raw) {
        $line++;
        s/\r//;
        chomp;

        if (/^.*<product>\s*(.*\S)\s*$/) {
            parseError($file, $line, 'Unexpected <product> tag.') if ($pflag);
            $product = $1;
            $pflag = 1;
        }
        elsif (/^.*<version>\s*(.*\S)\s*$/ && $pflag) {
            parseError($file, $line, 'Unexpected <version> tag.') if ($vflag);
            $version = $1;
            $vflag = 1;
        }
        elsif (/^.*<release-date>\s*(.*\S)\s*$/ && $pflag && $vflag) {
            $p{$version}{release} = $1;
        }
        elsif (/^.*<path>\s*(.*\S)\s*$/ && $pflag && $vflag) {
            $p{$version}{path} = $1;
            $p{$version}{path} =~ s/^(\w)/\/$1/;
        }
        elsif (/^.*<description>\s*(.*\S)\s*<~description>\s*$/ && $pflag && $vflag) {
            $p{$version}{description} = $1;
        }
        elsif (/^.*<description>.*$/ && $pflag && $vflag) {
            parseError($file, $line, 'Unexpected <description> tag.') if ($dflag);
            $dflag = 1;
        }
        elsif (/^.*<~description>/) {
            parseError($file, $line, 'Unexpected <~description> tag.') if (!$dflag);
            $dflag = 0;

            # Clean up the description
            $p{$version}{description} =~ s/\\n$//;
            $p{$version}{description} =~ s/\|/ /g;
        }
        elsif ($dflag && /^\s*(.*\S)\s*$/ && $pflag && $vflag) {
            $p{$version}{description} .= $1 . '\n';
        }
        elsif (/^.*<~version>/) {
            parseError($file, $line, 'Unexpected <~version> tag.') if (!$vflag);
            $vflag = 0;
        }
        elsif (/^.*<~product>/) {
            parseError($file, $line, 'Unexpected <~product> tag.') if (!$pflag);
            $pflag = 0;
        }
    }

    parseError($file, $line, 'Unexpected EOF.') if ($pflag || $vflag || $dflag);

    return %p;
}


sub getPartCode {
    my $partcode = `/usr/sbin/dmidecode -s baseboard-product-name`;
    $partcode =~ s/^\s*(\S+)\s*$/$1/;

    return $partcode;
}


sub printHash {
    my $hash = shift;

    print "================================================\n";
    foreach my $key (keys(%$hash)) {
        print $key . '=' . $$hash{$key} . "\n";
    }
    print "================================================\n";
}


sub checkRoot {
    if ($< != 0) {
        print "This option must be run as root user.\n";
        exit 1;
    }
}


sub parseError {
    my $file = shift;
    my $line = shift;
    my $reason = shift;

    print STDERR "Error parsing IDX file:\n";
    print STDERR "    $file\n";
    print STDERR "    Line: $line. $reason\n";
    exit 32;
}

Edit:

Nähtävästi vaan Xandros. Tuo toinenkin scripta on poistettu.
« Viimeksi muokattu: 05.01.09 - klo:22.13 kirjoittanut Karvameduusa »