realisations:nslu2

NSLU2

  • CM : NSLU2
  • Proc : Arm Intel XScale IXP420 @266 MHz (ARMv5TE)
  • Ram : 32 Mo
  • Flash : 8 Mo
  • Ports USB2 : 2
  • LAN : 100 Mbit/s
  • Dimensions : 2.1 x 9.1 x 13 cm
  • Distribution : Debian armel

Acheté d'occasion fin mai 2007 déjà dé-underclocké (266 MHz); les premières révisions étaient bridées à 133 MHz.

Documentation : constructeur wiki linux nslu2

NSLU2 Ouvert
Agrandir
NSLU2 Ouvert

Sur la face avant du boitier se trouvent 4 led d'activités (état, eth, usb1, usb2) ainsi qu'un bouton d'allumage/d'extinction. La face arrière rassemble le connecteur d'alimentation, les 2 ports USB2 et le port Ethernet 100 Mbit/s

Face avant
Agrandir
Face avant

 

Face arrière
Agrandir
Face arrière

Carte mère du “slug” (surnom donné par la communauté au NSLU2, signifie “limace” ;))

NSLU2
Agrandir
NSLU2

Voici mes projets réalisés avec cette petite bestiole :

Réveil mp3
Réveil lisant des mp3 à partir d'un montage NFS et affichant l'heure sur un LCD à base de mpd et lcdd.

Description complète par ici →


Première version de ma webcam filmant les oiseaux en train de picorer dans une mangeoire avec un peu de POE et d'Arduino 8-).

Suite des aventures →
Webcam à oiseau

Le NSLU2, ou slug, est vendu avec un linux propriétaire, il est possible de le re-flasher avec une distribution standard offrant des possibilités bien plus importantes que le firmware de base.

J'ai donc remplacé le firmware d'origine avec la première Debian à gérer l'architecture armel : Lenny 5.0.

J'ai suivi cet article expliquant en détail la procédure de flashage pour mettre une Debian dessus.

La flash est limitée à 8 Mo, il est difficile de faire rentrer une Debian sur un espace si restreint. Le noyau + ramdisk installés sur la flash contiennent tous les modules nécessaires pour charger le système à partir d'une clés USB. Ainsi la limite de la flash pour / est alors levée =).

Voici la version du noyau utilisé : Linux version 2.6.26-2-ixp4xx (Debian 2.6.26-21lenny3).

06/2007 : le slug est fabriqué avec 2 ports USB mais le contrôleur est capable d'en gérer 4. Cette page décrit les points aux quels il faut se brancher pour ajouter des nouveaux ports. En faisant quelques points de soudures très fines sur la carte mère, il est possible d'ajouter 2 ports supplémentaires. J'ai agrandi les ouvertures du boitier pour y loger ces 2 nouveaux ports.

Vue de profil avec les 2 ports supplémentaires
Agrandir
Vue de profil avec les 2 ports supplémentaires

08/2007 : Lors de mes manipulations, la soudure d'un des nouveaux fil s'est cassée, il s'est promené sur la carte mère en provoquant des courts circuits et n'a grillé que 2 ports USB :S. Par chance, l'un des ports natif est toujours opérationnel, j'ai remplacé les fils de connexion des ports HS vers un petit hub.

Hub USB
Agrandir
Hub USB

Je l'ai dégoté sur un site d'enchères en ligne, lui ai retiré le boitier plastique, dessoudé les ports existant et soudé des rallonges de fils vers les ports en façade. Comme il restait encore un port libre sur le hub, je l'ai utilisé pour en faire un connecteur interne au slug afin d'y brancher la clé USB du système.

Nslu2 + Hub USB, recto
Agrandir
Nslu2 + Hub USB, recto
Nslu2 + Hub USB, verso
Agrandir
Nslu2 + Hub USB, verso

L'ensemble est suffisament fin pour rentrer dans le boitier d'origine sans modification supplémentaire.

12/2013 : sur la carte mère du slug se trouve les 4 pin habituels d'un port série : 3.3 V, Tx, Rx et GND. Il suffit d'y souder un connecteur et d'y brancher un adaptateur USB pour interargir dessus par le biais d'un autre ordinateur. Le wiki du NSLU2 explique en détail le brochage du port. Le port est au pas standard de 2.54 mm juste en dessous de la batterie. Par contre, le niveau de TTL est de 3.3V, il faut être vigilant sur l'adaptateur utilisé, certains fonctionnant en 5V.

Emplacement des pins de connection
Agrandir
Emplacement des pins de connection

Ce type de connexion permet d'accéder au slug sans passer par une pile réseau. Il est également possible d'interargir avec l'amorceur de démarrage redboot (équivalent du Bios sur les PC) pour démarrer un firmware différent, le charger depuis le réseau…

La communication série est fiable, tout en ne consommant que peu de ressources (contrairement à un serveur ssh) et est toujours utilisée pour le le débogage des matériels de tout type.

J'ai acheté pour quelques € un adaptateur à base de puce PL2303hx qui gère nativement l'interface USB vers RS232 et est compatible 3.3V.

Adaptateur USB vers RS232 - vue de face
Agrandir
Adaptateur USB vers RS232 - vue de face

 

Adaptateur USB vers RS232 - vue de dos
Agrandir
Adaptateur USB vers RS232 - vue de dos

Une fois l'adaptateur branché sur le 2nd ordinateur, le noyau reconnait bien l'adaptateur :

[  222.581022] usb 3-1.3: new full-speed USB device number 18 using xhci_hcd
[  222.598041] usb 3-1.3: New USB device found, idVendor=067b, idProduct=2303
[  222.598049] usb 3-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  222.598054] usb 3-1.3: Product: USB-Serial Controller
[  222.598058] usb 3-1.3: Manufacturer: Prolific Technology Inc.
[  222.598815] pl2303 3-1.3:1.0: pl2303 converter detected
[  222.599924] usb 3-1.3: pl2303 converter now attached to ttyUSB0

Ici, le device à utiliser est /dev/ttyUSB0.

Il faut ensuite brancher l'adaptateur sur le port série du slug et le démarrer.

Slug sur la table d'opération
Agrandir
Slug sur la table d'opération

Pour se connecter, j'utilise l'outil cu :

sudo cu -l /dev/ttyUSB0 -s 115200
cu: open (/dev/ttyUSB0): Permission denied
cu: /dev/ttyUSB0: Line in use

Hu ? :-? Même en root, je n'ai pas les droits… En regardant les droits sur /dev/ttyUSB0, le group dialout est propriétaire du fichier :

ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 févr.  6 14:02 /dev/ttyUSB0

Il faut ajouter explicitement root au groupe :

sudo usermod -a -G dialout root

puis maintenant :

sudo cu -l /dev/ttyUSB0 -s 115200
Connected.
 
Debian GNU/Linux 7 poopdeck ttyS0
 
poopdeck login: 

Si rien ne se passe, taper sur la touche entrée.

Il est désormais possible de se loguer sur le slug comme un accès en console à une machine physique.

Voici les logs de démarrage de redboot :

+Ethernet eth0: MAC address XX:XX:XX:XX:XX:XX
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
RedBoot> boot;exec 0x01d00000
have eRcOmM 
copy kernel code from flash to RAM
copy ramdisk file from flash to RAM
run kernel 
Using base address 0x01d00000 and length 0x0000dc20
Ans
 
APEX Boot Loader 1.6.10 -- Copyright (c) 2004-2008 Marc Singer
  compiled for Debian NSLU2 on 2009.Oct.06-18:59:32
 
    APEX comes with ABSOLUTELY NO WARRANTY.  It is free software and
    you are welcome to redistribute it under certain circumstances.
    For details, refer to the file COPYING in the program source.
 
  apex => mem:0x00200000+0xdc10   (56336 bytes)
  env  => nor:0x7c000+15k         (empty)
 
    Use the command 'help help' to get started.
 
# sdram-init
 1 bank of 2 128Mib chips
# memscan -u 0+256m
 0x0 0x02000000 (32 MiB)
# copy -s $kernelsrc $bootaddr
# copy -s fis://kernel 0x00008000
1441760 bytes transferred
# copy -s $ramdisksrc $ramdiskaddr
# copy -s fis://ramdisk 0x01000000
6291440 bytes transferred
# wait 10 Type ^C key to cancel autoboot.
Type ^C key to cancel autoboot. 
# boot
ARCH_ID: 597 (0x255)
ATAG_HEADER
ATAG_MEM: start 0x00000000  size 0x02000000
ATAG_CMDLINE: (32 bytes) 'console=ttyS0,115200 noirqdebug'
ATAG_INITRD2: start 0x01000000  size 0x005ffff0
ATAG_END
Booting kernel at 0x00008000...
Uncompressing Linux... done, booting the kernel.
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.2.0-4-ixp4xx (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 Debian 3.2.46-1
[    0.000000] CPU: XScale-IXP42x Family [690541f1] revision 1 (ARMv5TE), cr=0000397f
[    0.000000] CPU: VIVT data cache, VIVT instruction cache
[    0.000000] Machine: Linksys NSLU2
[    0.000000] Memory policy: ECC disabled, Data cache writeback
...