Montag, 30. April 2012

[Dreamplug] DebianSqueeze_TBConfig_V0.2 released

This Debian 6.0 configuration runs on sheeva.with-linux.com's 3.3.4 Kernel and comes with preinstalled
- Apache 2 (PHP5 and MySQL + phpMyAdmin included)
- Mono 2.10 Framework
- Support for diverse USB2Serial / USB2RS485 converters such as FTDI-Chips

Kernel Files (uploaded on my server for persistence, originally via Bashscript from www.sheeva.with-linux.com)
  • uImage (Kernel Version 3.3.4 from www.sheeva.with-Linux.com)
  • Sysconfig stuff 
OS Files
  • Debian 6.0 TBConfiguration V 0.2 (30.04.2012)

Sonntag, 29. April 2012

[Dreamplug] Getting FTDI-Converters to work

[Note]:  Equipment is Dreamplug with NewIT-2.6.?-dirty Kernel, installed Debian 6.0 (NewIT-Edition) and Mono 2.10 / Apache 2 installed.

Currently I'm desperately working on getting an FTDI-USB-to-RS485-Converter operating on my Dreamplugs (using Debian 6.0).

I found out NewIT-Dreamplug-Kernel is not supporting USB-Serial Converters, so I have to find alternatives where these modules are included or compileable.

I stumbled upon  http://sheeva.with-linux.com/, where a myriad of kernels is located.

The Author was so kind as to supply a shellscript doing all the work for you.

Just download the Script from the Website using wget and make it executable


  root@debian:~# wget http://sheeva.with-linux.com/sheeva/README-DREAM-UPDATE.sh  
  root@debian:~# chmod 777 README-DREAM-UPDATE.sh  

Afterwards you just have to execute the Shellscript and giving the desired kernel Version as a parameter

  ./README-DREAM-UPDATE.sh 3.3.4  

The update process terminates with the following lines:

 Extracting modules  
 Writing kernel to /boot  
 ****************************************************************  
  update your bootcmd to load dream-3.3.4-uImage  
  or create a link from /boot/dream-3.3.4-uImage to /boot/uImage  
 ****************************************************************  

I ignored that hints and attached my bootable Ubuntu-Stick (9.04 dreamplug version), i usually use for updates, and copied the content from /boot to the stick's /home folder after mounting.

 mount /dev/sdc2 /mnt/dp_system  
 cd dp_system/home  
 cp -r /boot ./  
 cd /  
 sync  
 umount /dev/sdc2  

Afterwards I booted from this USB-Stick (don't forget to change uBoot Environment accordingly) and copied the new uImage and sheeva-sysfile to /dev/sda1 (fat16 file system of internal SD)

See also: http://semicolon-expected.blogspot.com/2012/04/dreamplug-backup-your-system-from.html

After successful reboot from freshly updated internal SD you could run uname -a command and should see your new kernel version number.

 root@debian:~# uname -a  
 Linux debian 3.3.4 #1 PREEMPT Fri Apr 27 16:11:35 MDT 2012 armv5tel GNU/Linux  


Because this kernel comes with serial-usb-converter modules  you simply can plug in your FTDI-Chip and you should get some output like that

 root@debian:~# usb 1-1.3: new full-speed USB device number 6 using orion-ehci  
 ftdi_sio 1-1.3:1.0: FTDI USB Serial Device converter detected  
 usb 1-1.3: Detected FT232RL  
 usb 1-1.3: Number of endpoints 2  
 usb 1-1.3: Endpoint 1 MaxPacketSize 64  
 usb 1-1.3: Endpoint 2 MaxPacketSize 64  
 usb 1-1.3: Setting MaxPacketSize 64  
 usb 1-1.3: FTDI USB Serial Device converter now attached to ttyUSB0  

If not, run the following command (which "enables" the ftdi_sio module manually)

 root@debian:~# modprobe ftdi_sio  
 usbcore: registered new interface driver usbserial  
 USB Serial support registered for generic  
 usbcore: registered new interface driver usbserial_generic  
 usbserial: USB Serial Driver core  
 USB Serial support registered for FTDI USB Serial Device  
 usbcore: registered new interface driver ftdi_sio  
 ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver  

You may then finally test the command and send out something (1st command) and/or read the response (second command)

 root@debian:~# echo "hello world!" > /dev/ttyUSB0  
 root@debian:~# tail -f /dev/ttyUSB0  


Sonntag, 15. April 2012

Exchange files with Virtual Machine (Ubuntu Server)

I've written a little gothrough for exchanging files with VM (Ubuntu Server) for my OS-classes.

Available as PDF-Document here

Cheers

Dienstag, 10. April 2012

[Dreamplug] Backup your System from internal SD

When working on a system, you may want to make a snapshot of the whole thing. Luckily that's quite easy when using Linux.

First of all, create a bootable USB-Stick (see different Dreamplug-Manuals for OS-Installation) with enough free space on it.

Then boot your Dreamplug from this USB-Stick by changing environment variables in Marvell Bootloader accordingly.

After your System from stick has started (I use Ubuntu 9.04 because it comes with more tools installed), mount the root filesystem of internal SD-Card.

 root@ubuntu~: mkdir /mnt/dp_system  
 root@ubuntu~: mount /dev/sda2 /mnt/dp_system  
 root@ubuntu~: cd /mnt/dp_system  

When you list this directory you should see the whole filesystem of your internal SD-card. After executing these commands you are located "inside" the filesystem, now simply use tar to pack and compress the whole filesystem (use * here) to a single file, I stored that at the /home of currently running Ubuntu on the USB-Stick.

 ubuntu:/mnt/dp_system# tar -cvzf /home/dreamplug_debianSqueeze_Mono2.10.tar.gz * 

After that, safely unmount the sda2 partition of internal SD-card and your snapshot of internal installed OS is successfully done. Quite easy right?

Samstag, 7. April 2012

[Dreamplug] Debian Squeeze Mono 2.10

Because installing mono-complete via apt-get fails (there are problems with xpath while installing monodoc), I decided to build Mono 2.10 from source directly on Dreamplug running Debian Squeeze (Initial Distro got from downloadsnewit.co.uk/)

First of all, you have to make sure you're using latest compiler and header stuff:

 root@debian:~# apt-get update   
 root@debian:~# apt-get install gcc libtool bison pkg-config libglib2.0-dev gettext make bzip2 g++  

Afterwards create a working directory, I created /src and download Mono Sources there. Mono 2.10 Source is available at http://origin-download.mono-project.com/sources/mono/mono-2.10.tar.bz2 (07.04.2012)

 root@debian:~# mkdir /src  
 root@debian:~# cd /src  
 root@debian:/src# wget http://origin-download.mono-project.com/sources/mono/mono-2.10.tar.bz2  

Now we have to create a directory where we can extract the source files to. I created monoSource and extracted the Sourcefiles from mono-2.10.tar.bz2 there. This works best (in my opinion) through unzipping to stdout (option -cd stands for decompress to stdout) and pipe this output into tar (option -xv stands vor extract verbose).

The extraction process may take a few minutes as there are loads of files...

 root@debian:/src# mkdir monoSource  
 root@debian:/src# cd monoSource  
 root@debian:/src/monoSource# bzip2 -cd ../mono-2.10.tar.bz2 | tar -xv  

Last step before compiling is to configure the source package. To do so, move to the folder tar made for you and run configure with long option --prefix=/usr. This defines the installation path of the whole mono package, it'll be located in /usr/mono respectivly /usr/lib/mono mostly then.

Further the configure process checks if all building utilities that'll be used later on are available on your system. If not, something went wrong in the first step when updating/installing build tools. Further it builds a lot of makefiles and does some other things for you in order to prepare the compilation process.

 root@debian:/src/monoSource# cd mono-2.10  
 root@debian:/src/monoSource/mono-2.10# ./configure --prefix=/usr  

After configuration is done, you simply type make to start compilation. After that it's time for a cup of coffee, some outdoor activity (if the weather is better than whilst writing this) or other stuff. Dreamplug will be busy for several hours with compiling Mono...

 root@debian:/src/monoSource/mono-2.10# make  

If you get a glimps every now and then at the terminal output while compiling framework files (*.cs, compiling here is already done with mono-compiler!) you may recognize a lot of warnings of unreachable code and unused variables... That's nothing you should worry about too much.

When compilation succeeded finally, type make install to transplant the fresh compiled mono framework into your system. The Installation process shouldn't take too long, just long enough to make me nervous whether this whole thing may be successful or not.

 root@debian:/src/monoSource/mono-2.10# make install  

After this last step has completed, Mono is successfully installed on your operating system. You may check installation by checking mono --version or executing some .NET applications.


 root@debian:/src/monoSource/mono-2.10# mono -- version  


Please note, .NET applications couldn't be started like normal executables, but have to be passed to mono as a parameter, e.g. if you want to start an executable named "testMono.exe", you type

 root@debian:~# mono testMono.exe 

Also note, Console.ReadLine() or Console.ReadKey does not work as you may expect it to. With these methods you read something else, but not the input from BASH. If your programm contains such lines, you are going to freeze complete BASH, because everything you enter (include CTRL+C) and stuff is "absorbed" by the mono application and the application get's stuck with it's not existing virtual Console.

I'm planning to do an article on that next week... Link may be found here soon

[Dreamplug] Mono 2.6

As I developed a pretty bad-ass (IMHO) DLL in C# for RS485 communication and other funny things, I want to use that on my dreamplug for some industrial application.

Big problem: The provided Ubuntu and Debian distributions don't come with suitable mono-framework installed. So I had to get Mono working.

1. Problem: with Debian: Debian Squeeze for Dreamplug is available and also apt-get install mono-complete seems to be working - as long as the installation doesn't reach the point where monodoc is installed. There seems to be something in XPath missing. I cancelled installation there but I don't think that was a good idea...

2. Problem: because I was frustrated by Debian I gave Ubuntu 9.04 a try. Because this distribution is a few years old, it isn't longer supported by ubuntu.com and also the latest available Framework for this distribution is Mono 2.0, which is also ooooold! So I downloaded sources for Mono 2.6 and compiled the framework on my own.


It seemed the only way out was to compile Mono Framework on the dreamplug from source to get an working copy of the framework running.


Before starting compilation you should make sure you use the latest available tools.

 root@ubuntu:~# apt-get update   
 root@ubuntu:~# apt-get install gcc libtool bison pkg-config libglib2.0-dev gettext make bzip2 g++  



After update was done I performed the compilation itself according to an entry in plugcomputers.org-Forum by profnimrod:
1. Make sure the following package are already installed: bison, gcc, gettext, pkg-config glib-2.0.  There may be others required.  If the configuration step (4) fails the error message will indicate what package is missing;
2. Use 'wget' to download the mono-2.6.1.tar.gz from the Mono website;
3. Unzip with 'bzip2 -cd mono-2.6.1.tar.gz' | tar xvf -' in a directory of your choosing;
4. 'cd' into the Mono folder that is created, and execute './configure --prefix=/usr';
5. Execute 'make'.  This may take several hours;
6. Execute 'make install'.  All done.  Check version with 'mono -V' to make sure you are up to date.

Sources are available there: http://origin-download.mono-project.com/archive/2.6/sources/

After make install succeeded and initial checks were done, you may delete the sources and buildfiles in Folder /src. They aren't needed anymore.

Note #1: You can't run mono-applications from bash with ./executable.exe , you have to call a Mono-Application, let's say initialTest.exe as shown below:

 mono initialTest.exe  

Note #2: (later a post will follow...): Mono-Framework is a bit tricky if you want to read from bash. The C# System.ReadlLine() and System.ReadKey() is NOT linked to the GNU-Readline(). So for initial tests you should use console-applications without reading from C# console.

 namespace InitialTestMono  
 {  
      class Program  
      {  
           public static void Main(string[] args)  
           {  
                Console.WriteLine("Hello World!");  
                // TODO: Implement Functionality Here  
                Console.Write("Press any key to continue . . . ");  
                Console.ReadKey(true);  
           }  
      }  
 }  

This piece of code doesn't work, because there's the Console.ReadKey(true); If you run that program you freeze your Dreamplug because it get's stuck somewhere in Mono.Console.ReadKey(). If you attempt to terminate by pressing CTRL+C that's lost somewhere in Mono and not redirected to Bash, so you have no chance to get back to bash-prompt again. You have to cycle power on your Dreamplug...

Freitag, 6. April 2012

[Dreamplug-Ubuntu] apt-get won't work

ARM-Processors only are supported by Ubuntu jaunty (9.04 is standard with Dreamplug) and Ubuntu no longer supports Jaunty, you have to alter the Sources for apt-get, otherwise you won't be able to update or install new things.

To do so you have to edit /etc/apt/sources.list

 root@ubuntu:~# vi /etc/apt/sources.list  

Replace the ubuntu.com/ubuntu with http://old-release.ubuntu.com/ubuntu/
Your file should now look like this:


 deb http://old-releases.ubuntu.com/ubuntu/ jaunty main restricted universe multi  
 verse  
 deb http://old-releases.ubuntu.com/ubuntu/ jaunty-updates main restricted univer  
 se multiverse  
 deb http://old-releases.ubuntu.com/ubuntu/ jaunty-security main restricted unive  
 rse multiverse  


After you saved the file you should be able to successfully run apt-get update. Afterwards installation should work as expected.

[Dreamplug] Deaktivate AccessPoint and Bluetooth

When using Ubuntu 9.04 on Dreamplug standard configuration is WLAN-Access Point. I experienced networking issues because the AP was configured with the same IP as my Router (192.168.1.1), so it's quit obvious this network wouldn't work as desired.

I found out when looking at ifconfig when I saw the uap8 entry with the IP and I stumbled over some Internet stuff saying Dreamplug comes with AccessPoint-configuration.

To deactivate you have to edit /root/init_setup.sh

 root@ubuntu:~# vi /root/init_setup.sh  

I excluded all lines from modprobe uab8xxx towards /etc/init.d/bluetooth start. This shellscript is called whilst startup and initializes the Access Point. If excluded, the initialization isn't done and therefore no IP conflict will happen again.

Altered init_setup.sh:

 #!/bin/sh  
   
 # This is called from /etc/rc.local to perform the initial setup.  
   
 # We always bootup in AP mode. Delete any stale files  
   
 rm -f /etc/wlanclient.mode  
 SSID=DreamPlug-uAP-`ifconfig uap0 | awk -F ":" '/HWaddr/ {print $6$7}'`  
   
 #modprobe uap8xxx  
 #ifconfig uap0 192.168.1.1 up  
 #/usr/bin/uaputl sys_cfg_ssid $SSID  
 #/usr/bin/uaputl bss_start  
 #iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  
 #iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE  
 #echo 1 > /proc/sys/net/ipv4/ip_forward  
 #/etc/init.d/udhcpd start  
 #/etc/init.d/dnsmasq start  
 #iptables -A INPUT -i uap0 -p tcp -m tcp --dport 80 -j ACCEPT  
   
 # Re-enable bluetooth. In the earlier case, it didn't find the firmware.  
 # rmmod libertas_sdio libertas btmrvl_sdio btmrvl bluetooth 2>/dev/null  
 rmmod btmrvl_sdio btmrvl  
   
 #/etc/init.d/bluetooth start  
   
 modprobe btmrvl_sdio  
 hciconfig hci0 up  
 hciconfig hci0 piscan  
   
 blinkled >> /dev/null  
   
 # Set leds  
 echo 1 > `eval ls /sys/class/leds/guruplug\:green\:wmode/brightness`  
 echo 0 > `eval ls /sys/class/leds/guruplug\:red\:wmode/brightness`  

Now just save the file and and restart the dreamplug. The accesspoint shouldn't be setup any more.