Installation d'un port Console:
J'ai soudé un connecteur sur la carte mère du nslu2 afin de raccorder une liaison série. L'emplacement est prévu et se nomme "J2". Il y a 4 points au pas de 2.54 mm. Il se situe juste en dessous des 2 rams et de la batterie. Par contre, c'est un niveau TTL 3.3V, qui n'est pas branchable directement sur un port RS232. Il convient donc d'adapter les niveaux avec par exemple un MAX3232 + 4 condensateurs ou un kit d'adaptation déjà fait. Il y a plus d'infos sur la page du site NSLU2. J'ai personnellement réalisé un petit adaptateur avec un max3232, 4 condensateurs, un connecteur Subd 9 points femelle sur un bout de carte d'étude. Attention toutefois: le MAX232 (et équivalent) est fait pour adapter des niveaux TTL (5V) vers un port série, alors que le max3232 est fait pour adapter des niveaux 3.3V vers rs232. Si vous vous inspirez de cet article pour ajouter un port série sur votre lecteur satellite ou votre téléphone portable (et oui, ca peut marcher aussi, je l'ai fait sur un téléphone Nokia...) il faudra d'abord vérifier si votre port série fonctionne en 5V ou en 3.3V...
Utilisation:
Ca commence a devenir rigolo après avoir branché, puisque l'on peut via ce port, soit accéder à Redboot (le chargeur de démarrage et utilitaire de diagnostique intégré) ou tout simplement suivre le boot linux de votre nslu2 et entrer en root sous shell sur la machine....
Arès avoir connecté le NSLU2 à votre adaptateur TTL 3.3V -> RS232, et l'adaptateur au PC, munissez vous de Putty et faites une connexion sur le port série de votre choix à 115200 bauds, no parity, 8 bits 1 stop (sur putty juste préciser le port et la vitesse, le reste est ok par défaut).
Allumez votre NSLU2, et préparez vous à taper control+C dès qu'il vous le demandera :
Ethernet eth0: MAC address 00:0f:66:7f:3c:d4 IP: 192.168.0.1/255.255.255.0, Gateway: 192.168.0.1 Default server: 0.0.0.0, DNS server IP: 0.0.0.0 RedBoot(tm) bootstrap and debug environment [ROMRAM] Red Hat certified release, version 1.92 - built 15:16:07, Feb 3 2004 Platform: IXDP425 Development Platform (XScale) Copyright (C) 2000, 2001, 2002, Red Hat, Inc. RAM: 0x00000000-0x02000000, 0x000723a0-0x01ff3000 available FLASH: 0x50000000 - 0x50800000, 64 blocks of 0x00020000 bytes each. == Executing boot script in 2.000 seconds - enter ^C to abort ^C <------- ON TAPE CTRL C ICI!!!!!!!!!!! RedBoot>
Vous voila sous Redboot. De cet environnement, on peut très facilement transformer son nslu2 en une inutile enclume. Donc si vous ne savez pas ce que vous faites, éteignez le tout et allez la plage ;).
Sachant que Redboot dispose d'une aide en ligne, et que Redhat (l'editeur de redboot) a eu la délicatesse de nous mettre une doc à disposition (Le Redboot User Guide), on va pouvoir expérimenter.
Aide :
help
Boot normal :
boot;exec 0x01d00000
Affichage des infos de version et de mémoire :
version
Redémarrage :
reset
Effacement de la mémoire de paramètres (au cas ou elle serait endommagée, elle sera automatiquement réinitialisée lors du prochain boot) :
fis erase -f 0x50040000 -l 0x20000
Chargement firmware. Il faut bien évidemment un serveur tftp pour cette opération, et qu'il contienne l'image de boot à charger et que le NSLU2 soit raccordé au pc en ethernet par un cable croisé en plus de la liaison série. Ici le serveur tftp est en 192.168.0.2, et nous nous apprêtons à unslunger....
load -r -v -b 0x01000000 -h 192.168.0.2 Unslung-6.10-beta.bin
Vérification de la somme de contrôle de l'image chargée :
cksum
Ecriture du firmware sur la flash (Attention! Il faut que la somme de contrôle corresponde à celle de l'image!):
fis write -f 0x50060000 -b 0x01060000 -l 0x7a0000
Reboot du NSL :
reset
Si on laisse se dérouler un boot normal, voici ce que l'on obtient sur la liaison série (il n'y a pas de doute, on est bien sous Linux!)
have eRcOmM copy kernel code from flash to RAM copy ramdisk file from flash to RAM run kernel Using base address 0x01d00000 and length 0x000e9bac Uncompressing Linux................................................................ done, booting the kernel. Linux version 2.4.22-xfs (unslung@unslung.org) (gcc version 3.4.4) #1 Sat Dec 29 03:29:38 UTC 2007 CPU: XScale-IXP425/IXC1100 revision 1 Machine: Intel IXDP425 Development Platform Warning: bad configuration page, trying to continue Security risk: creating user accessible mapping for 0x60000000 at 0xff00f000 Security risk: creating user accessible mapping for 0x51000000 at 0xf1000000 On node 0 totalpages: 8192 zone(0): 8192 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: console=ttyS0,115200n8 root=/dev/mtdblock4 rootfstype=jffs2 rw init=/linuxrc mem=32M@0x00000000 Calibrating delay loop... 131.48 BogoMIPS Memory: 32MB = 32MB total Memory: 30272KB available (1582K code, 281K data, 244K init) Dentry cache hash table entries: 4096 (order: 3, 32768 bytes) Inode cache hash table entries: 2048 (order: 2, 16384 bytes) Mount cache hash table entries: 512 (order: 0, 4096 bytes) Buffer cache hash table entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 8192 (order: 3, 32768 bytes) POSIX conformance testing by UNIFIX PCI Autoconfig: Found Bus 0, Device 1, Function 0 PCI Autoconfig: BAR 0, Mem, size=0x1000, address=0x4bfff000 PCI Autoconfig: Found Bus 0, Device 1, Function 1 PCI Autoconfig: BAR 0, Mem, size=0x1000, address=0x4bffe000 PCI Autoconfig: Found Bus 0, Device 1, Function 2 PCI Autoconfig: BAR 0, Mem, size=0x100, address=0x4bffdf00 PCI: bus0: Fast back to back transfers disabled Linux NET4.0 for Linux 2.4 Based upon Swansea University Computer Society NET3.039 Initializing RT netlink socket Starting kswapd VFS: Disk quotas vdquot_6.5.1 Journalled Block Device driver loaded devfs: v1.12c (20020818) Richard Gooch (rgooch@atnf.csiro.au) devfs: boot_options: 0x0 Installing knfsd (copyright (C) 1996 okir@monad.swb.de). JFFS2 version 2.1. (C) 2001 Red Hat, Inc., designed by Axis Communications AB. i2c-core.o: i2c core module i2c-dev.o: i2c /dev entries driver module i2c-core.o: driver i2c-dev dummy driver registered. i2c-algo-bit.o: i2c bit algorithm module version 2.6.1 (20010830) pty: 256 Unix98 ptys configured Serial driver version 5.05c (2001-07-08) with MANY_PORTS SHARE_IRQ SERIAL_PCI enabled ttyS00 at 0xff000003 (irq = 15) is a XScale UART ttyS01 at 0xff001003 (irq = 13) is a XScale UART RAMDISK driver initialized: 16 RAM disks of 16384K size 1024 blocksize SCSI subsystem driver Revision: 1.00 * host:<NULL> cfi_cmdset_0001: Erase suspend on write enabled Using buffer write method Creating 6 MTD partitions on "IXP425 Flash": 0x00000000-0x00040000 : "RedBoot" 0x00040000-0x00060000 : "SysConf" 0x00060000-0x00160000 : "Kernel" 0x00160000-0x00180000 : "Ramdisk" 0x00180000-0x007e0000 : "Flashdisk" 0x007e0000-0x00800000 : "FIS directory" usb.c: registered new driver usbdevfs usb.c: registered new driver hub pci probe begin ehci_hcd 00:01.2: NEC Corporation USB 2.0 ehci_hcd 00:01.2: irq 26, pci mem c3872f00 usb.c: new USB bus registered, assigned bus number 1 PCI: 00:01.2 PCI cache line size set incorrectly (0 bytes) by BIOS/FW. PCI: 00:01.2 PCI cache line size corrected to 32. ehci_hcd 00:01.2: USB 2.0 enabled, EHCI 1.00, driver 2003-Jun-19/2.4 Device descriptor:8 bytes received. Device descriptor:18 bytes received. hub.c: USB hub found hub.c: 5 ports detected pci probe ok host/usb-uhci.c: $Revision: 1.3 $ time 03:30:28 Dec 29 2007 host/usb-uhci.c: High bandwidth mode enabled host/usb-uhci.c: v1.275:USB Universal Host Controller Interface driver host/usb-ohci.c: USB OHCI at membase 0xc387a000, IRQ 28 host/usb-ohci.c: usb-00:01.0, NEC Corporation USB usb.c: new USB bus registered, assigned bus number 2 Device descriptor:8 bytes received. Device descriptor:18 bytes received. hub.c: USB hub found hub.c: 3 ports detected host/usb-ohci.c: USB OHCI at membase 0xc3880000, IRQ 27 host/usb-ohci.c: usb-00:01.1, NEC Corporation USB (#2) usb.c: new USB bus registered, assigned bus number 3 Device descriptor:8 bytes received. Device descriptor:18 bytes received. hub.c: USB hub found hub.c: 2 ports detected Initializing USB Mass Storage driver... usb.c: registered new driver usb-storage USB Mass Storage support registered. i2c-dev.o: Registered 'IXP425 I2C Adapter' as minor 0 i2c-core.o: adapter IXP425 I2C Adapter registered as adapter 0. NET4: Linux TCP/IP 1.0 for NET4.0 IP Protocols: ICMP, UDP, TCP, IGMP IP: routing cache hash table of 512 buckets, 4Kbytes TCP: Hash tables configured (established 2048 bind 4096) IP-Config: No network devices available. NET4: Unix domain sockets 1.0/SMP for Linux NET4.0. NetWinder Floating Point Emulator V0.97 (double precision) VFS: Mounted root (jffs2 filesystem). Freeing init memory: 244K Sleeping while waiting for disk... 1 Can't find valid rootfs, using ramdisk ... Insmod ixp400 Warning: loading ixp400 will taint the kernel: no license See http://www.tux.org/lkml/#export-tainted for information about tainted modules Module init. Insmod ixp425 ixp425_eth: Initializing IXP425 NPE Ethernet driver software v. 1.1 ixp425_eth: CPU clock speed (approx) = 0 MHz [error] ixEthMiiPhyScan : unexpected Mii PHY ID 00008201 ixp425_eth: ixp0 is using the PHY at address 1 ixp425_eth: ixp1 is using the PHY at address 0 BusyBox v1.3.1 (2007-12-29 03:38:35 UTC) Built-in shell (ash) Enter 'help' for a list of built-in commands. # ixp425_eth: ixEthMiiLinkStatus failed on PHY0. Can't determine the auto negotiated parameters. Using default values. Creating ramfs for /dev: Creating ramfs for /var: Starting Hostname : OK Starting Modules : enable_irq(22) unbalanced from c39431bc X1226: I2C based RTC driver. i2c-core.o: driver X1226 registered. X1226: found X1226 on IXP425 I2C Adapter i2c-core.o: client [X1226] registered to adapter [IXP425 I2C Adapter](pos. 0). atr is 20 Warning: loading ufsd will taint the kernel: non-GPL license - Commertial product See http://www.tux.org/lkml/#export-tainted for information about tainted modules ufsd: driver loaded Starting Modules : Setting LAN media type : Starting Set CGI_ds.conf: OK Restore time and timezone: 11/30/1999-17:03:37 OK Restore usrgrpshares: OK Starting WEB Server: User guest password set to none. OK OK Starting samba: Starting INET Server: OK Creating ramfs for /tmp: Starting QuickSet Daemon : OK OK OK Starting Crond : Starting Rest Task : Checking quotas. This may take some time. Done. Turning on quota. LKG7F3CD4: boot complete! OK Starting Optware Packages: Starting Bootdisk scripts: ====> linksys_hostname is LKG7F3CD4 ====> real_hostname is LKG7F3CD4 Checking disk status : Tue Nov 30 17:04:19 PST 1999
Ce qui, sur un unslung, nous permet de passer directement sous shell (juste faire entrée et vous y êtes...):
# ls -al drwxr-xr-x 1 root root 0 Dec 31 1969 . drwxr-xr-x 1 root root 0 Dec 31 1969 .. -rw-r--r-- 1 root root 26 Dec 31 1969 .unslung drwxr-xr-x 1 root root 0 Dec 31 1969 bin drwxr-xr-x 1 root root 0 Dec 31 1969 dev drwxr-xr-x 1 root root 0 Dec 31 1969 dev.state drwxr-xr-x 1 root root 0 Nov 30 17:04 etc drwxr-xr-x 1 root root 0 Dec 31 1969 home drwxr-xr-x 1 root root 0 Dec 31 1969 initrd drwxr-xr-x 1 root root 0 Dec 31 1969 lib -rwxr-xr-x 1 root root 2585 Dec 31 1969 linuxrc drwxr-xr-x 1 root root 0 Dec 31 1969 lost+found drwxr-xr-x 1 root root 0 Dec 31 1969 mnt drwxr-xr-x 1 root root 0 Dec 31 1969 opt dr-xr-xr-x 46 root root 0 Dec 31 1969 proc drwxr-xr-x 1 root root 0 Dec 31 1969 root drwxr-xr-x 1 root root 0 Dec 31 1969 sbin drwxrwxr-x 1 admin everyone 0 Dec 31 1969 share drwxrwxrwt 1 root root 0 Nov 30 17:03 tmp drwxr-xr-x 1 root root 0 Dec 31 1969 unslung drwxr-xr-x 1 root root 0 Dec 31 1969 upload drwxr-xr-x 1 root root 0 Dec 31 1969 usr drwxr-xr-x 1 root root 0 Dec 31 1969 var drwxr-xr-x 1 root root 0 Dec 31 1969 var.state # cat .unslung V2.3R63-uNSLUng-6.10-beta # cat /proc/cpuinfo Processor : XScale-IXP425/IXC1100 rev 1 (v5b) BogoMIPS : 131.48 Features : swp half thumb fastmult edsp Hardware : Intel IXDP425 Development Platform Revision : 0000 Serial : 0000000000000000 # df -h Filesystem Size Used Available Use% Mounted on /dev/mtdblock4 6.4M 6.1M 320.0k 95% / /dev/mtdblock4 6.4M 6.1M 320.0k 95% /dev.state /dev/mtdblock4 6.4M 6.1M 320.0k 95% /var.state # mount /dev/root on / type jffs2 (rw) proc on /proc type proc (rw) usbdevfs on /proc/bus/usb type usbdevfs (rw) /dev/root on /dev.state type jffs2 (rw) ramfs on /dev type ramfs (rw) /dev/root on /var.state type jffs2 (rw) ramfs on /var type ramfs (rw) none on /tmp type ramfs (rw) # free total used free shared buffers Mem: 30516 15720 14796 0 0 Swap: 0 0 0 Total: 30516 15720 14796 # ps aux PID Uid VmSize Stat Command 1 root 404 S /bin/init 2 root SW [keventd] 3 root SWN [ksoftirqd_CPU0] 4 root SW [kswapd] 5 root SW [bdflush] 6 root SW [kupdated] 7 root SW [mtdblockd] 8 root SW [khubd] 9 root Z N [jffs2_gcd_mtd4] 153 root SWN [jffs2_gcd_mtd4] 161 root DW [ixp425_csr] 162 root SW [ixp425 ixp0] 165 root 696 S /bin/sh 281 root 552 S /sbin/syslogd -n 282 root 528 S /sbin/klogd -n 321 root 836 S upnpd &>/dev/null 330 root 836 S upnpd &>/dev/null 331 root 836 S upnpd &>/dev/null 334 root 836 S upnpd &>/dev/null 335 root 836 S upnpd &>/dev/null 336 root 836 S upnpd &>/dev/null 422 root 912 S /usr/sbin/thttpd -C /etc/thttpd.conf 442 root 2936 S /usr/sbin/smbd -D 444 root 2940 S /usr/sbin/smbd -D 445 root 2424 S /usr/sbin/nmbd -D 452 root 464 S /bin/inetd 474 root 668 S /usr/sbin/QuickSet 482 root 616 S /usr/sbin/USB_Detect 487 root 584 S /usr/sbin/USB_Detect 490 root 460 S /usr/sbin/onetouch_detect 493 root 572 S /usr/sbin/onetouch_detect 503 root 416 S /usr/sbin/crond 509 root 564 S /usr/sbin/CheckResetButton 511 root 388 S /usr/sbin/CheckPowerButton 513 root 388 S /usr/sbin/do_umount 583 root 628 R ps aux # help [les commandes du shell busybox] Built-in commands: ------------------- . : bg break cd chdir continue eval exec exit export false fg hash help jobs kill let local pwd read readonly return set shift source times trap true type ulimit umask unset wait