Sunday, January 18, 2009

my green alix 2c3 box

This is my beloved fanless 24x7 box: Alix 2c3 board, consisting of:
  • CPU: AMD Geode x86 500MHz, 256MB RAM, 2x USB2.0, 3x LAN 100Mb, 1xMiniPCI
    (from http://pcengines.ch/)
  • CardFlash 4GB (as root filesystem)
  • WD Passport 500Mb (USB 2.0), using board's power via USB
  • Power supply: DC 12V 20W :-D

I tried several x86 OSes on it:
  1. OpenBSD 4.4: by far the easiest and +straightforward installation via PXE
  2. Debian stable: all Debian versatility thru your serial console installation :)
  3. Voyage Linux: 1-shot copy-to-CF (no PXE needed) && boot'it && apt-get'em =)

After some back&forth, I finally kept Voyage Linux, mostly because of
  • debian versatility
  • apt-get install screen ;)
  • fully tuned for flash => root filesystem is booted readonly, with all the writable noise kept in memory by using aufs (union fs) and tmpfs
  • smaaaaall (merely less than ~150Mb after install)
  • openssl/OCF by default
  • hardware watchdog, rng, aes support by default
Hardware info:
  • /proc/cpuinfo
    processor       : 0
    vendor_id : AuthenticAMD
    cpu family : 5
    model : 10
    model name : Geode(TM) Integrated Processor by AMD PCS
    stepping : 2
    cpu MHz : 498.056
    cache size : 128 KB
    fdiv_bug : no
    hlt_bug : no
    f00f_bug : no
    coma_bug : no
    fpu : yes
    fpu_exception : yes
    cpuid level : 1
    wp : yes
    flags : fpu de pse tsc msr cx8 sep pge cmov clflush mmx mmxext 3dnowext 3dnow
    bogomips : 997.25
    clflush size : 32
    power management:
  • lspci
    00:01.0 Host bridge: Advanced Micro Devices [AMD] CS5536 [Geode companion] Host Bridge (rev 33)
    00:01.2 Entertainment encryption device: Advanced Micro Devices [AMD] Geode LX AES Security Block
    00:09.0 Ethernet controller: VIA Technologies, Inc. VT6105M [Rhine-III] (rev 96)
    00:0a.0 Ethernet controller: VIA Technologies, Inc. VT6105M [Rhine-III] (rev 96)
    00:0b.0 Ethernet controller: VIA Technologies, Inc. VT6105M [Rhine-III] (rev 96)
    00:0f.0 ISA bridge: Advanced Micro Devices [AMD] CS5536 [Geode companion] ISA (rev 03)
    00:0f.2 IDE interface: Advanced Micro Devices [AMD] CS5536 [Geode companion] IDE (rev 01)
    00:0f.4 USB Controller: Advanced Micro Devices [AMD] CS5536 [Geode companion] OHC (rev 02)
    00:0f.5 USB Controller: Advanced Micro Devices [AMD] CS5536 [Geode companion] EHC (rev 02)
  • lsusb
    Bus 002 Device 002: ID 1058:0704 Western Digital Technologies, Inc.
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
  • lsmod | egrep geode (special hardware)
    geodewdt                4500  2             ## watchdog
    geode_rng 1920 0 ## random number generator
    rng_core 3716 1 geode_rng
    geode_aes 5508 0 ## aes cipher
Some measurements/stats:
  • HDD /USB 2.0 throughput:
    jjolix:~# hdparm  -t /dev/sda

    /dev/sda:
    Timing buffered disk reads: 56 MB in 3.04 seconds = 18.40 MB/sec
  • The CPU/chipset/RAM/netw are nice enough to run things like rtorrent/mlnet and serve NFS.
    This is top output at the alix box whilst doing a tar cf - /mnt/Fotos/ > /dev/null (~2K photos, ~3MB each) from a LAN NFS client:
    top - 20:51:47 up 18 days, 22:41,  1 user,  load average: 5.65, 2.39, 0.90
    Tasks: 60 total, 1 running, 58 sleeping, 0 stopped, 1 zombie
    Cpu(s): 4.0%us, 23.1%sy, 0.0%ni, 8.9%id, 31.7%wa, 21.5%hi, 10.9%si, 0.0%st
    Mem: 256860k total, 252860k used, 4000k free, 604k buffers
    Swap: 0k total, 0k used, 0k free, 197128k cached

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    30635 p2p 20 0 57232 36m 5196 S 9.2 14.4 3:00.93 mlnet
    11028 root 20 0 0 0 0 S 4.0 0.0 0:06.09 nfsd
    11030 root 20 0 0 0 0 S 4.0 0.0 0:08.98 nfsd
    11024 root 20 0 0 0 0 D 3.6 0.0 0:06.20 nfsd
    11025 root 20 0 0 0 0 S 3.6 0.0 0:06.21 nfsd
    11027 root 20 0 0 0 0 S 3.6 0.0 0:06.16 nfsd
    11026 root 20 0 0 0 0 D 3.3 0.0 0:06.06 nfsd
    11029 root 20 0 0 0 0 S 3.3 0.0 0:06.11 nfsd
    11031 root 20 0 0 0 0 D 3.3 0.0 0:06.84 nfsd
    30349 root 15 -5 0 0 0 D 2.6 0.0 0:05.58 usb-storage
    3 root 15 -5 0 0 0 S 1.6 0.0 3:44.10 ksoftirqd/0
    88 root 15 -5 0 0 0 S 1.0 0.0 2:55.14 kswapd0


  • for above, iftop shows >70Mbit/s, ++enough to do a remote DVD toasting session :)
  • a full-steam-ahead rtorrent download at 1.5MBytes/sec makes it use ~25% CPU.


Previously I had a conventional , fanfull, noisy, old desktop (P4 1.5Ghz) for doing 24x7 stuff @home, as you can imagine it won't be missed =)

Monday, January 12, 2009

e2fsprogs utils for Android (EABI ARM)

I've been playing around with my brand new Android (cool Christmas gift from my employer ;).
Because of the security model by default you cannot store apps into /sdcard (only at /data/apps, which is mounted from the internal MTD device), and this is something you'll eagerly want for freakin'ly installing bunch of cool applications.

After some hacking around I could get it to like /data/app as a loop-mount:

/ # df
Filesystem 1k-blocks Used Available Use% Mounted on
tmpfs 49564 0 49564 0% /dev
tmpfs 4096 0 4096 0% /sqlite_stmt_journals
/dev/block/mtdblock3 69120 57248 11872 83% /system
/dev/block/mtdblock5 76544 58596 17948 77% /data
/dev/block/mtdblock4 69120 1256 67864 2% /cache
/dev/block/mmcblk0p1 991488 950448 41040 96% /sdcard
/dev/block/loop0 128949 19098 103186 16% /data/app
, where /dev/block/loop0 is actually a loop mount on /sdcard/data-extra.img ext2 image file.

I will post a more detailed mini-howto about this hack, but the 1st thing you'll need (and I couldn't find out there before) are the e2fsprogs utils built for Android.
So I went ahead, changed some e2fsprogs src bits and compiled with my android sdk arm gcc toolchain (built @my workstation from the Android git repo).

You can find them at:
http://sites.google.com/site/juanjosec/android , namely:
e2fsprogs-android.diff, e2fsprogs-base_arm-eabi.tar.gz, e2fsprogs-xtra_arm-eabi.tar.gz.

15 years have passed since I first touched my 1st Linux, 13 so far since I hacked the Linux kernel for ip aliasing support ... been a long trip, and now I can finally carry it in my pocket ;-)