Obtaining an iConnect: 1. I purchased mine at Frys (Sunnyvale) for $89.99 + tax. GPL Source Code: 1. IOmega does provide a downloadable image of the source code associated with the iConnect. It is currently located at: 2. The user manual is currently located at: Getting inside the iConnect: 1. The front of the iconnnect has 3 USB ports and the back has 1 USB port, 1 RJ45 Ethernet port, and female power plug. 2. The bottom of the box has 4 rubber feet. Remove the front two rubber feet to gain access to two screws. 3. Unscrew the two screws. 4. There are three plastic snap clips along the front bottom edge of the case. Using a flat blade screw driver, tease the free snap clips loose. 5. On each side, there are two snap clips. Again, using a screwdriver, tease these 4 clips loose. 6. The two clam shells should now separate. The WiFi antenna is taped to the inside of the top shell. Everything else is attached to the bottom shell. Bringing up a serial connection: 1. Purchase an TTL-RS232-3.3 USB to serial cable. There are four versions of this product: TTL-RS232-3.3: Terminates with a 6x1 .1" female connector TTL-RS232-3.3-PCB: Terminates with a printed circuit board TTL-RS232-3.3-AJ: Terminates with 3 conductor male audio jack TTL-RS232-3.3-WE: Terminates with 6 bare wires FindChips.Com can be used to find vendors that sell these products. I personally use the TTL-RS232-3.3. Using a small screw driver I rearrange the connectors to be in the desired order. 2. Inside the 6x1 connector are six wires. The three wires we care about are: Black: Ground Yellow: Receive data (input to cable) Orange: Transmit data (output from cable) 3. Inside the iConnect there is a 4 pin connector that has the following pins: Closest to back A: 3.3V B. Transmit data (output from iconnect) C. Ground D. Receive data (input to iconnect) 4. The TTL-RS232-3.3 comes with the cables wires plugged into the 1x6 .1" connector as follows: 1. Black 2. Brown 3. Red 4. Orange 5. Yellow 6. Green I reorganize the cables using a very small "jewlers" screw driver to lift the plastic tab and pull a pin out. My pins are now arranged as follows: 1. Green (used to be 6) 2. Brown 3. Red 4. Orange 5. Black (used to be 1) 6. Yellow (used to be 5) 5. I plug the connector on the onto the iConnect as follows: iConnect Cable ============================================= 3.3V: A> blank iConnect Transmit B> -- <6 cable receive, yellow iConnect Ground C> -- <5 cable ground, black iConnect Receive D> -- <4 cable transmit, orange blank <3 cable red blank <2 cable brown blank <1 cable green Initial Power Up: 1. Plug the USB cable into a computer. 2. Using a terminal emulator connect to the cable. For Linux, most people use the "minicom" program. The cable is likely to show up as /dev/ttyUSB0. 3. Configure the terminal emulator at 115200 baud, in 8N1 mode (1 start bit, 8 data bits, no parity bit, and 1 stop bit.) Turn off all flow control (i.e. neither hardware nor software flow control.) 4. Power up the iConnect by plugging in the AC adaptor transformer into a wall outlet and the other end into the iConnect. 5. The terminal emulator should start to output boot information. This what shows up on my machine: __ __ _ _ | \/ | __ _ _ ____ _____| | | | |\/| |/ _` | '__\ \ / / _ \ | | | | | | (_| | | \ V / __/ | | |_| |_|\__,_|_| \_/ \___|_|_| _ _ ____ _ | | | | | __ ) ___ ___ | |_ | | | |___| _ \ / _ \ / _ \| __| | |_| |___| |_) | (_) | (_) | |_ \___/ |____/ \___/ \___/ \__| ** MARVELL BOARD: RD-88F6281A LE U-Boot 1.1.4 (Feb 2 2010 - 10:13:16) Marvell version: 3.4.25 Mapower version: iConnect 2.1 (512MB) (2010/02/02) U-Boot code: 00600000 -> 0067FFF0 BSS: -> 006CFB00 Soc: 88F6281 A0 (DDR2) CPU running @ 1000Mhz L2 running @ 333Mhz SysClock = 333Mhz , TClock = 200Mhz DRAM CAS Latency = 5 tRP = 5 tRAS = 18 tRCD=6 DRAM CS[0] base 0x00000000 size 256MB DRAM Total size 256MB 16bit width Addresses 8M - 0M are saved for the U-Boot usage. Mem malloc Initialization (8M - 7M): Done NAND:512 MB Flash: 0 kB CPU : Marvell Feroceon (Rev 1) Streaming disabled Write allocate disabled Module 0 is RGMII Module 1 is TDM USB 0: host mode PEX 0: PCI Express Root Complex Interface PEX interface detected Link X1 Net: egiga0 [PRIME], egiga1 Hit any key to stop autoboot: 0 NAND read: device 0 offset 0x100000, size 0x300000 Reading data from 0x3ff800 -- 100% complete. 3145728 bytes read: OK NAND read: device 0 offset 0x540000, size 0x300000 Reading data from 0x83f800 -- 100% complete. 3145728 bytes read: OK ## Booting image at 02000000 ... Image Name: Linux-2.6.30.9 Created: 2010-01-25 19:00:21 UTC Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1990916 Bytes = 1.9 MB Load Address: 00008000 Entry Point: 00008000 Verifying Checksum ... OK OK ## Loading Ramdisk Image at 04500000 ... Image Name: Created: 2010-02-05 4:13:55 UTC Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 1777868 Bytes = 1.7 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Starting kernel ... Uncompressing Linux............................................................................................ Linux version 2.6.30.9 (soho@bsoho084.lss.emc.com) (gcc version 4.3.2 (crosstool-NG-1.3.1) ) #1 PREEMPT Mon Ja0 CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=00053977 CPU: VIVT data cache, VIVT instruction cache Machine: Marvell RD-88F6281 Reference Board Memory policy: ECC disabled, Data cache writeback Built 1 zonelists in Zone order, mobility grouping on. Total pages: 65024 Kernel command line: console=ttyS0,115200 mtdparts=orion_nand:0xc0000@0x0(uboot),0x20000@0xa0000(env),0x300000) NR_IRQS:114 PID hash table entries: 1024 (order: 10, 4096 bytes) Console: colour dummy device 80x30 Dentry cache hash table entries: 32768 (order: 5, 131072 bytes) Inode-cache hash table entries: 16384 (order: 4, 65536 bytes) Memory: 256MB = 256MB total Memory: 253056KB available (3632K code, 901K data, 124K init, 0K highmem) SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 Calibrating delay loop... 992.87 BogoMIPS (lpj=4964352) Mount-cache hash table entries: 512 CPU: Testing write buffer coherency: ok net_namespace: 520 bytes NET: Registered protocol family 16 Kirkwood: MV88F6281-A0, TCLK=200000000. Feroceon L2: Enabling L2 Feroceon L2: Cache support initialised. PCI: bus0: Fast back to back transfers disabled bio: create slab at 0 SCSI subsystem initialized usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb cfg80211: Using static regulatory domain info cfg80211: Regulatory domain: US (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) (2402000 KHz - 2472000 KHz @ 40000 KHz), (600 mBi, 2700 mBm) (5170000 KHz - 5190000 KHz @ 40000 KHz), (600 mBi, 2300 mBm) (5190000 KHz - 5210000 KHz @ 40000 KHz), (600 mBi, 2300 mBm) (5210000 KHz - 5230000 KHz @ 40000 KHz), (600 mBi, 2300 mBm) (5230000 KHz - 5330000 KHz @ 40000 KHz), (600 mBi, 2300 mBm) (5735000 KHz - 5835000 KHz @ 40000 KHz), (600 mBi, 3000 mBm) cfg80211: Calling CRDA for country: US NET: Registered protocol family 2 IP route cache hash table entries: 2048 (order: 1, 8192 bytes) TCP established hash table entries: 8192 (order: 4, 65536 bytes) TCP bind hash table entries: 8192 (order: 3, 32768 bytes) TCP: Hash tables configured (established 8192 bind 8192) TCP reno registered NET: Registered protocol family 1 Trying to unpack rootfs image as initramfs... rootfs image is not initramfs (no cpio magic); looks like an initrd Freeing initrd memory: 1736K msgmni has been set to 498 alg: No test for stdrng (krng) io scheduler noop registered io scheduler anticipatory registered io scheduler deadline registered io scheduler cfq registered (default) Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled serial8250.0: ttyS0 at MMIO 0xf1012000 (irq = 33) is a 16550A console [ttyS0] enabled brd: module loaded loop: module loaded Driver 'sd' needs updating - please use bus_type methods MV-643xx 10/100/1000 ethernet driver version 1.4 mv643xx_eth smi: probed net eth0: port 0 with MAC address 00:d0:b8:0c:a5:8c NAND device: Manufacturer ID: 0xad, Chip ID: 0xdc (Hynix NAND 512MiB 3,3V 8-bit) Scanning device for bad blocks Bad eraseblock 151 at 0x0000012e0000 Bad eraseblock 153 at 0x000001320000 Bad eraseblock 155 at 0x000001360000 Bad eraseblock 157 at 0x0000013a0000 Bad eraseblock 159 at 0x0000013e0000 Bad eraseblock 161 at 0x000001420000 Bad eraseblock 163 at 0x000001460000 Bad eraseblock 165 at 0x0000014a0000 5 cmdlinepart partitions found on MTD device orion_nand Creating 5 MTD partitions on "orion_nand": 0x000000000000-0x0000000c0000 : "uboot" 0x0000000a0000-0x0000000c0000 : "env" 0x000000100000-0x000000400000 : "zImage" 0x000000540000-0x000000840000 : "initrd" 0x000000980000-0x00001fd80000 : "boot" ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver orion-ehci orion-ehci.0: Marvell Orion EHCI orion-ehci orion-ehci.0: new USB bus registered, assigned bus number 1 orion-ehci orion-ehci.0: irq 19, io mem 0xf1050000 orion-ehci orion-ehci.0: USB 2.0 started, EHCI 1.00 usb usb1: configuration #1 chosen from 1 choice hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver uhci_hcd: USB Universal Host Controller Interface driver Initializing USB Mass Storage driver... usbcore: registered new interface driver usb-storage USB Mass Storage support registered. usbcore: registered new interface driver ums-datafab usbcore: registered new interface driver ums-freecom usbcore: registered new interface driver ums-jumpshot usbcore: registered new interface driver ums-sddr09 usbcore: registered new interface driver ums-sddr55 usbcore: registered new interface driver ums-usbat mice: PS/2 mouse device common for all mice input: gpio-keys as /class/input/input0 rtc-mv rtc-mv: rtc core: registered rtc-mv as rtc0 i2c /dev entries driver Registered led device: led_level Registered led device: power_blue_led Registered led device: power_red_led Registered led device: usb_1_led Registered led device: usb_2_led Registered led device: usb_3_led Registered led device: usb_4_led Registered led device: otb_led mv_xor_shared mv_xor_shared.0: Marvell shared XOR driver mv_xor_shared mv_xor_shared.1: Marvell shared XOR driver mv_xor mv_xor.0: Marvell XOR: ( xor cpy ) mv_xor mv_xor.1: Marvell XOR: ( xor fill cpy ) mv_xor mv_xor.2: Marvell XOR: ( xor cpy ) mv_xor mv_xor.3: Marvell XOR: ( xor fill cpy ) oprofile: using timer interrupt. TCP cubic registered NET: Registered protocol family 17 lib80211: common routines for IEEE802.11 drivers rtc-mv rtc-mv: setting system clock to 2010-07-30 22:02:18 UTC (1280527338) RAMDISK: gzip image found at block 0 VFS: Mounted root (ext2 filesystem) on device 1:0. usb 1-1: new high speed USB device using orion-ehci and address 2 USB Device node is /dev/sda1 Checking if there is an attached EMC Imager usb 1-1: configuration #1 chosen from 1 choice hub 1-1:1.0: USB hub found hub 1-1:1.0: 4 ports detected mount: mounting /dev/sda1 on /usb_drive failed: No such device or address UBI: attaching mtd4 to ubi0 UBI: physical eraseblock size: 131072 bytes (128 KiB) UBI: logical eraseblock size: 129024 bytes UBI: smallest flash I/O unit: 2048 UBI: sub-page size: 512 UBI: VID header offset: 512 (aligned 512) UBI: data offset: 2048 UBI: attached mtd4 to ubi0 UBI: MTD device name: "boot" UBI: MTD device size: 500 MiB UBI: number of good PEBs: 3992 UBI: number of bad PEBs: 8 UBI: max. allowed volumes: 128 UBI: wear-leveling threshold: 4096 UBI: number of internal volumes: 1 UBI: number of user volumes: 1 UBI: available PEBs: 0 UBI: total number of reserved PEBs: 3992 UBI: number of PEBs reserved for bad PEB handling: 39 UBI: max/mean erase counter: 2/1 UBI: background thread "ubi_bgt0d" started, PID 486 UBI device number 0, total 3992 LEBs (515063808 bytes, 491.2 MiB), available 0 LEBs (0 bytes), LEB size 129024) UBIFS: recovery needed UBIFS: recovery completed UBIFS: mounted UBI device 0, volume 0, name "boot" UBIFS: file system size: 507580416 bytes (495684 KiB, 484 MiB, 3934 LEBs) UBIFS: journal size: 25417728 bytes (24822 KiB, 24 MiB, 197 LEBs) UBIFS: media format: w4/r0 (latest is w4/r0) UBIFS: default compressor: lzo UBIFS: reserved for root: 4952683 bytes (4836 KiB) Found Valid EMC Image in disk... Mounting apps image... Mounting config image... Check config filesystem e2fsck 1.41.3 (12-Oct-2008) ext2fs_check_if_mount: No such file or directory while determining whether /dev/loop1 is mounted. Constructing root filesystem... Bootstrapping ... rootdir=/ table='/usr/local/cfg/device_table.txt' makedevs: line 42: chown failed for /bin/busybox: Read-only file system makedevs: line 49: regular file '/usr/share/udhcpc/default.script' does not exist: No such file or directory warning: can't open /etc/mtab: No such file or directory mount: unknown filesystem type 'nfsd' Loading ufsd... ufsd: module license 'Commercial product' taints kernel. Disabling lock debugging due to kernel taint ufsd: driver 8.1 (013_A) LBD=OFF with ioctl loaded at bf000000 NTFS read/write support included Hfs+/HfsX read/write support included Loading isofs... Loading udf... Loading msdos... Loading rt3090sta... === pAd = d1512000, size = 478904 === <-- RTMPAllocAdapterBlock, Status=0 pAd->CSRBaseAddress =0xd1500000, csr_addr=0xd1500000! ra0 (): not using net_device_ops yet Loading usbhid... usbcore: registered new interface driver hiddev usbcore: registered new interface driver usbhid usbhid: v2.6:USB HID core driver Loading usblp... usbcore: registered new interface driver usblp Initialization complete. Freeing init memory: 124K INIT: version 2.86 booting Running file /etc/init.d/rcS Running file /etc/init.d/rc RX DESC ffc18000 size = 2048 <-- RTMPAllocTxRxRingMemory, Status=0 Running file /etc/rcS.d/S01glibc.sh PhyMode=9, DesiredPhyMode=9 Key1Str is Invalid key length(0) or Type(0) Key2Str is Invalid key length(0) or Type(0) Key3Str is Invalid key length(0) or Type(0) Key4Str is Invalid key length(0) or Type(0) 1. Phy Mode = 9 2. Phy Mode = 9 NVM is Efuse and its size =2d[2d0-2fc] RTMPSetPhyMode: channel is out of range, use first channel=1 3. Phy Mode = 9 MCS Set = ff 00 00 00 01 <==== rt28xx_init, Status=0 0x1300 = 00064300 AUX_CTRL = 0x c02 ====> rt30xx Read PowerLevelMode = 0x1. ====> rt30xx F Write 0x83 Command = 0x1. Running file /etc/rcS.d/S02hostname.sh Running file /etc/rcS.d/S02mountkernfs.sh Running file /etc/rcS.d/S04mountdevsubfs.sh Running file /etc/rcS.d/S05bootlogd Running file /etc/rcS.d/S07hdparm Setting parameters of disc: (none). Running file /etc/rcS.d/S08hwclockfirst.sh Setting the system clock. Running file /etc/rcS.d/S11hwclock.sh Setting the system clock. Running file /etc/rcS.d/S12mtab.sh mount: according to mtab, tmpfs is already mounted on /lib/init/rw Running file /etc/rcS.d/S18ifupdown-clean Cleaning up ifupdown.... Running file /etc/rcS.d/S20module-init-tools Loading kernel modules...done. Running file /etc/rcS.d/S30checkfs.sh Checking file systems...fsck 1.41.3 (12-Oct-2008) done. Running file /etc/rcS.d/S30procps Setting kernel variables (/etc/sysctl.conf)...Running file /etc/rcS.d/S35mountall.sh Mounting local filesystems...mount: unknown filesystem type 'nfsd' failed. Activating swapfile swap...done. Running file /etc/rcS.d/S36mountall-bootclean.sh Running file /etc/rcS.d/S37mountoverflowtmp cp: cannot stat `/etc/network/dhcp3/*': No such file or directory Running file /etc/rcS.d/S39ifupdown Setting up networking.... Running file /etc/rcS.d/S40networking Configuring network interfaces...done. Running file /etc/rcS.d/S45mountnfs.sh Running file /etc/rcS.d/S46mountnfs-bootclean.sh Running file /etc/rcS.d/S55bootmisc.sh Running file /etc/rcS.d/S55urandom Running file /etc/rcS.d/S99stop-bootlogd-single INIT: Entering runlevel: 2 Running file /etc/init.d/rc Running file /etc/rc2.d/S10rsyslog Starting enhanced syslogd: rsyslogd. Running file /etc/rc2.d/S20postfix Running file /etc/rc2.d/S20smartmontools Not starting S.M.A.R.T. daemon smartd, disabled via /etc/default/smartmontools (warning). Running file /etc/rc2.d/S23ntp Starting NTP server: ntpdStarting Network Interface Plugging Daemon: eth0. ln: creating symbolic link `/etc/samba/smb.conf': File exists Starting sshd: OK hostnamed begin to start... hostnamed finished Starting executord Done. Running file /etc/rc2.d/S99rc.local Running file /etc/rc2.d/S99rmnologin Running file /etc/rc2.d/S99stop-bootlogd Running file /etc/init.d/bootlogd Welcome to CenterPoint. storage login: root Password: root@storage:/# 6. Login into the system. The login user is "root" with a password of "soho". By the way, "soho" stands for "Small Office Home Office". 7. The prompt is: root@storage:/# ELDK: These are my terse notes for how I downloaded ELDK: sudo apt-get install rpm # I think that is what I did cd ~/download # Someplace where you play around mkdir eldk cd eldk wget http://ftp-stud.hs-esslingen.de/pub/Mirrors/eldk/4.2/arm-linux-x86/iso/arm-2008-11-24.iso # Wait while the .iso image downloads... wget http://ftp-stud.hs-esslingen.de/pub/Mirrors/eldk/4.2/arm-linux-x86/iso/arm-2008-11-24.md5 openssl dgst -md5 arm-2008-11-24.iso cat arm-2008-11-24.md5 # Make sure that MD5 checksums match. sudo mkdir /mnt/eldk sudo mount mount -o loop ~/download/uboot/arm-2008-11-24.iso /mnt/eldk cd ~/download mkdir eldk /mnt/eldk/install -d /home/wayne/download/eldk arm # Answer "y" to question: export PATH=$PATH:~/download/eldk/usr/bin:~/download/eldk/bin export CROSS_COMPILE=arm-linux-gnueabi # create hello.c file: $CROSS_COMPILE-gcc -o hello hello.c file hello # Should show up as a 32-bit ARM ELF file. # Sneakernet: 1. Compile your program on the host machine using the ELDK cross comiler. 2. Plug a USB thumb drive into your host machine and copy the file into it. Unmount the drive and unplug. 3. Plug the thumb drive into the iConnect. It shows up at the following location: /mnt/soho_storage/samba/shares/USB_{name of drive} 4. Execute the program. Bring up the wireless interface (broken): 1. Run "/sbin/ifup ra0" to bring up the wireless port. 2. Run "/sbin/ifconfig" to verify that the eth0, lo, and ra0 interfaces are present. 3. Configure using iwconfig. {This is not working for me yet.} Install tftp server: We will need the TFTP server to transfer the kernel to the iconnect. 1. Install the packages: sudo apt-get install tftp-hpa tftpd-hpa # (for Debian) 2. Edit /etc/default/tftpd-hpa: sudo vi /etc/default/tftpd-hpa # Use your favorite editor Change: RUN_DAEMON="no" to RUN_DAEMON="yes" 3. Start the tftp daemon: cd /etc/init.d ./tftpd-hpa start 4. The place to stuff files for TFTP downloading to the iConnect is: /var/lib/tftpboot Compiling the kernel: 1. Grab the tarball from IOmega: cd Downloads # Someplace to work on things mkdir iconnect cd iconnect wget http://download.iomega.com/english/gpl/iconnect/iomegaiconnect-gpl-source-d31543.zip # This takes a while, since it is 777MB. 2. Start the unpacking: unzip iomegaiconnect-gpl-source-d31543400.zip # Creates Debian5.0.zip and EMCLifelineOEMSW-2.2-GPL.zip rm Debian5.0.zip unzip EMCLifelineOEMSW-2.2-GPL.zip # Creates EMCLifelineOEMSW-2.2-GPL directory: cd EMCLifelineOEMSW-2.2-GPL # Lots of tar.gz files and a directory named kernel: cd kernel # There should be config_iconnect, linux-2.6.30.9.tar.bz2 and a patches directory: bunzip2 -v linux-2.6.30.9.tar.bz2 # You should now have linux-2.6.30.9.tar: tar xvf linux-2.6.30.9.tar # Now you should have a linux-2.6.30.9 directory: 3. Apply patches: cd linux-2.6.30.9 # Now in linux kernel top level direcory: for p in ../patches/*.patch ; do echo $p ; patch -p1 -t < $p ; done # Applied 4 patches in patch mode (-t) with one level of file prefix # removed (-p1): 4. Reconfigure the kernel: # Get a kernel config file to start with: cp ../config_iconnect .config # Reconfigure the kernel: make ARCH="arm" menuconfig # Use up and down arrow keys to Now go down to # "Device Drivers --->" and type carriage return # Now go down to "Multimedia devices --->" [cr] # Now go to "< > Video for Linux" and hit the Space # bar until it says "<*> Video for Linux". We want # this driver compiled into the kernel rathar than # done as a loadable module. Do not accept # " Video for Linux". # Go to "[*] Video capture adaptors (NEW) --->" [cr] # Go to "[*] V4L USB devices (NEW) --->" [cr] # Go to "< > USB Video Class (UVC) (NEW)" and hit the # space bar [sp] until you get "<*> ...". Again, # we want this compiled into the kernel and not a # loadable module. # Go up the to type level using [Esc][Esc] to go # up one level at a time. # Exit out of menuconfig and say "Yes" to writing # out "new kernel configuration". 5. Compile the kernel # Make sure you know where your cross compiler is. # Mine is "/home/wayne/download/eldk/usr/bin/arm-linux-gnueabi-" # Fire off the compile: make ARCH="arm" CROSS_COMPILE="/home/wayne/download/eldk/usr/bin/arm-linux-gnueabi-" uImage # uImage is down in arch/arm/boot/uImage. 6. Copy uImage to the tftp server area: sudo cp arch/arm/boot/uImage /var/lib/tftpboot uImage Setup host for TFTP transfers: For this exercise, the host is going to get IP address of 192.168.101.5 and the iConnect is going to get an IP address of 192.168.101.10 1. Create an alias for the ethernet: sudo ifconfig eth0:1 192.168.101.5 2. Add route to iconnect to routing table. sudo route add -host 192.168.101.10 dev eth0:1 Transfer the kernel to the iconnect: 1. Plug a Cat5/6 cable between the host and the iConnect. 2. Using minicom and a USB to serial cable go over to the iConnect. 3. Power up the iConnect and log in as root (password "soho"). 4. Assign an IP address to the iConnect: ifconfig eth0 192.168.101.10 5. Add a route to the host machine: route add -host 192.168.101.5 dev eth0 6. Verify connectivity with ping: ping 192.168.101.5 # need to see some packet traffic here. 7. Reboot the iconnect down into U-Boot reboot # Wait until the machine restarts and prompts # for a character a U-Boot. Type a carriage return. # You need to get the "Marvell>> " prompt. 8. Set the environment variables: set serverip 192.168.101.5 set ipaddr 192.168.101.10 9. Verify connectivity again: ping $(serverip) # Should get a message saying server is alive. 10. Transfer the kernel image: tftp $(loadaddr) uImage # Should get a whole bunch of hash marks followed by "done". 11. Flash the kernel: run load2 12. Make the boot arguments: run make_boot_args 12.1 Write the kernel to flash: run b c 13. Reboot: run boot # Should reboot with new kernel 14. Verify that the kernel got loaded: Log in as "root" (password "soho") and do a uname -a uname -a The date should match the kernel build time. 15. Create /dev/vidoe0 by hand: mknod /dev/video0 c 81 0 Load kernel from USB thumb drive: 1. usb start fatload usb 0:1 $(loadaddr) uImage run load2 run make_boot_args run boot To turn on SSH support (from James who got it from Bob Smith): 1. Visit the page http://192.168.101.10/support.html James' notes on the cram FS: The follow steps will guide you through creating a file that will reflash the iConnect. It updates EVERYTHING, including the kernel. 1. Copy the files in /boot/images from the iConnect to a Linux machine. The directory contains 'apps', 'config', 'initrd', 'oem', 'zImage'. Lets say you put the files in a directory called 'backup' in the current directory on the Linux machine. 2. Update the 'apps' image ======================= 2a. Mount the 'apps' file: mount -o loop backup/apps /mnt/tmp 2b. Copy everything from /mnt/tmp to a working directory: mkdir /tmp/apps cp -a /mnt/tmp /tmp/apps You can unmount now, if you wish: umount /mnt/tmp 2c. Make whatever changes you want to the files in /tmp/apps. 2d. Create the new CRAMFS: mkcramfs /tmp/apps apps-new 3. Create the update tarball ========================= 3a. Copy the original files to a working directory: mkdir /tmp/images cp backup/* /tmp/images 3b. Copy the new 'apps' file over the original: cp apps-new /tmp/images/apps 3c. Copy any updates to the other files, like the kernel: cp zImage-new /tmp/images/zImage 3d. Create a 'md5' file for each file in /tmp/images: cd /tmp/images for i in *; do md5sum $i|cut -f1 -d' ' >$i.md5; done 3e. Make the tarball. The exact name does't matter because the iConnect looks for '*.tgz'. We'll call it 'update.tgz': tar czf update.tgz * 4. Copy the update tarball to a USB stick. The destination directory is the special directory the startup scripts look for: mkdir -p {USB stick}/emctools/iconnect_images cp update.tgz {USB stick}/emctools/iconnect_images 5. Plug the USB stick into the iConnect and reboot/power-up the iConnect. 6. The iConnect should see the update tarball when it boots and reflash everything. It will stop and tell you to remove the USB stick before rebooting. 7. You're done! # Cross-compiling libv4l: # Cross-compiling opencv: 1. Grab opencv 2. Unpack: cd {someplace}download OpenCV-2.1.0.tar.bz2 mkdir opencv cd opencv wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.1/OpenCV-2.1.0.tar.bz2/download mv download OpenCV-2.1.0.tar.bz2 bunzip2 -c OpenCV-2.1.0.tar.bz2 | tar xvf - 3. Create a CMake toolchain file. cat > eldk.cmake # the name of the target operating system SET(CMAKE_SYSTEM_NAME Linux) # which C and C++ compiler to use SET(CMAKE_C_COMPILER /home/wayne/download/eldk/usr/bin/arm-linux-gnueabi-gcc) SET(CMAKE_CXX_COMPILER /home/wayne/download/eldk/usr/bin/arm-linux-gnueabi-g++) # here is the target environment located SET(CMAKE_FIND_ROOT_PATH /home/wayne/download/eldk) # adjust the default behaviour of the FIND_XXX() commands: # search headers and libraries in the target environment, search # programs in the host environment set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) {control-D} 4. Fire up cmake-gui: Where is the source code: .../opencv/OpenCV-2.1.0 Where to build the binarys: .../opencv/arm-build Click on [create new directory] Click on [Unix Makefiles] Click on o Specify file for cross-compiling Click on [Next>] Specify the Toolchain file: .../opencv/eldk.cmake Click on [Finish] Unclick all check marks except [X] BUILD_SHARED_LIBS [X] WITH_V4L Click on [Configure] Click on [Generate] 5. Make sure that libv4l is installed in the toolchain. 6. Type "make" Some additional setup instructions from James: I started with my stock iConnect which I plugged into the Linksys router and let it get a DHCP address. I connected to the web admin interface on the iConnect and made the following changes: Settings -> Network Services -> Network Settings Click on the wrench icon in the Action column of the wireless interface (Network ID 2 with the wireless icon) A new dialog box will open called "Wireless Network Configuration" Check "Enable Wireless Network" Click on "Apply" There will be a delay as the iConnect searches for networks Pick 'RoboNet' in "Select Network" Click on "Apply" At this point the wireless interface is configured and ready to go, but it will be set to use DHCP. If you want to switch to a static address, also make the following changes: You should still be on the "Settings -> Network Services -> Network Settings" page: Uncheck "Automatically configure all network settings" Uncheck "DHCP" on the wireless interface (Network ID 2) Enter a static address in the "IP address" column Click on "Apply" The iConnect will want to reboot now While the iConnect is rebooting, disconnect the ethernet cable. When the iConnect is done, you should be able to connect to it wirelessly. [Additional notes from Wayne] It is necessary to configure the LinkSys to do a port forward from some port on the Linksys to the iConnect on port 22. Thus, ssh -p {port_forward} wayme@{LinkSysIP} should punch through the LinkSys to the iConnect and allow a SSH login. Likewise scp. iconnect network configuration: Plug the iConnect into the internet and power it up. When it first boots up, it has a default IP address of 192.168.1.1. Many internet devices start up at this address, which can be a problem. So the first thing I do is move the IP address to somewhere else. In my case my gateway is 192.168.1.51. My Linksys wireless up is at 192.168.1.52. I put the iConnect at 192.168.1.53. Using a web browser, I visit http://192.168.1.1/ . I log in (user=root, password=soho). Somewhere along the line I redid the password to be (user=wayme password=myusualpassword) (Note that it is wayme with an "M".) Now I go to Settings -> Network Services -> Network Settings: For the first interface, I unclick DHCP and put in a static IP address of 192.168.1.53. Netmask is 255.255.255.0. I leave the gateway blank. I click on [Apply] and let the machine reboot. Now I can visit the iConnect at http://192.168.1.53/ . Now it is time to bring up wireless. Go to Settings -> Network Services -> Network Settings again. My Linksys wireless has LAN address of 10.10.10.1 with a netmask of 255.255.0.0 . It has a WAN address of 192.168.1.52 with a netmask of 255.255.255.0 . It is attached to the rest of my home network and uses a gateway at 192.168.1.51. Now the next trick is to get the iConnect configured with a static wireless address. I visit http://192.168.1.53/ and go to Settings -> Network Services -> Network Settings . Unclick DHCP on interface 3 and fill in a static IP address of 10.10.10.10 with a net mask of 255.255.0.0. The Gateway is 10.10.10.1 . Click on the wrench icon and select a the correct wireless internet. For me it is "726HenriettaLR" with my usual password. Also, click on Automatically log in. Click [Apply] and let the iConnect reboot. Now, I would like log in via SSH. Visit http://192.168.1.53/support.html and enable SSH. Now visit the Linksys router and find the port forwarding page. I think it is under Games. Forward ports 22 through 22 to device 10.10.10.10 and click [Apply]. Great fun. After all of this I can log into the iConnect via: ssh root@192.168.1.52 Password: {myusualpassword} storage# All done.