tag:blogger.com,1999:blog-62738186848314543062024-03-18T11:48:25.542+02:00cat **/*Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.comBlogger21125tag:blogger.com,1999:blog-6273818684831454306.post-79255085777980890912010-01-20T13:04:00.003+02:002010-01-20T13:16:09.785+02:00nut & ipponIt was tricky to make nut 2.4.1 work with IPPON Power PRO 1000 using USB interface.<br /><br />Any driver (blazer_usb, megatec_usb) failed with the message:<br />Can't claim USB device [xxxx:yyyy]: could not detach kernel driver from interface 0: Operation not permitted<br /><br />It turned out, that nut came with the broken configuration for udev 150 (on debian). To fix the problem, I commented out all lines in /etc/udev/rules.d/52-nut-usbups.rules, and created a new file with the name /etc/udev/rules.d/46-ippon.rules and the following content:<pre><br />SUBSYSTEM=="usb", ATTR{idVendor}=="0665", ATTR{idProduct}=="5161", MODE="0664", GROUP="nut"</pre><ad></ad><br />This helped. Required product id and vendor id are discovered from the output of lsusb program.<br /><br />PS. The following alias is very useful when configuring something with udev:<br />alias udevinfo="udevadm info -a -n"<br />and it can be used like:<br />udevinfo /dev/sdaAkshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0tag:blogger.com,1999:blog-6273818684831454306.post-62216434609220577422009-11-26T14:27:00.003+02:002009-11-26T14:32:14.087+02:00Upgrade of FirefoxAfter apt-get dist-upgrade I got this "Could not initialize the browser's security component. The most likely cause is problems with files in your browser's profile directory. Please check that this directory has no read/write restrictions and your hard disk is not full or close to full. It is recommended that you exit the browser and fix the problem. If you continue to use this browser session, you might see incorrect browser behavior when accessing security features."<br /><br />I tried many possible solutions discovered in internet, but the only thing helped was removing of secmod.db file from my profile directory of firefox. I have no idea what this file is for, but it works. If you are having the same problem, backup your ~/.mozilla directory first before trying this or other solution which involves removing of files.Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0tag:blogger.com,1999:blog-6273818684831454306.post-3631944728026534222009-10-02T18:53:00.003+03:002009-10-02T19:09:42.351+03:00Auto-mount with halevthalevt is good piece of software but by default it mounts disks in a way very inconvenient for me - that is mount points are like '/media/disk' '/media/disk-1/ '/media/disk-2' and so on. In order to help myself find disks more easily I've reconfigured halevt and created a script. Now I have /media/Cruzer-d4ba-1 and /media/Cruzer-a5e1-1 mountpoints for my two Sandisk USB sticks. And there are SD_Reader-a6a1-1, SD_Reader-a6a1-2, SD_Reader-a6a1-3 (three partitions) for the SD card I've inserted into a reader. A mountpoint name is composed by concatenating storage model name, short version of storage serial id and partition number. This is done by the following script (~/bin/halevt-mount-helper):<pre>#!/bin/sh<br /><br />STORAGE=`hal-get-property --udi "$1" --key block.storage_device`<br />PARTITION=`hal-get-property --udi "$1" --key volume.partition.number`<br />UUID=`hal-get-property --udi "$STORAGE" --key storage.serial | md5sum | head -c 4`<br />MODEL=`hal-get-property --udi "$STORAGE" --key storage.model | sed 's/ /_/g' | sed 's/^USB_//g'`<br /><br />MPOINT="$MODEL-$UUID-$PARTITION"<br /><br />halevt-mount -u "$1" -p "$MPOINT" -o sync -m 007</pre><ad></ad>The script is used by configuring halevt with the following line instead of the default "halevt:insertion" line in halevt configuration file (/etc/halevt/halevt.xml or ~/.halevt/halevt.xml):<pre> <halevt:insertion exec="halevt-mount-helper $hal.udi$"></pre>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0tag:blogger.com,1999:blog-6273818684831454306.post-8160793863540759232009-03-22T13:49:00.004+02:002009-03-22T14:41:01.532+02:00CeBootLin - Linux autoloader for WinCE on Loox 5XX (560/550)Here is the "bootloader" for wince to boot linux automatically on startup of PDA. It is not real bootloader because it has nothing to do with boot sectors, it is just a wince program which is able to boot linux as soon as possible. I have implemented it in this way because I didn't want to brick my PDA meddling with boot sectors or something. Also I wanted to have a way to skip loading of linux and let wince load itself. So here we are. It works. The code is based on haret (thanks guys!) but I cut off the parts I not used. Because the laoder uses hardware registers (GPIO/CPLD for leds and keybaord) of Fujitsu Siemens Loox N560/C550, it will not work for other PDAs. When CeBootLin is installed and PDA is turned on, wince begins boot process loading applications defined under the HKEY_LOCAL_MACHINE\init registery key. This way it loads CeBootLin. CeBootLin waits for 1 second, blinking with keyboard led. During the keyboard blinking, user can press any button to stop CeBootLin from loading Linux. If no button has been pressed during keyboard blinking, CeBootLin will search for \CeBootLin\default.txt and use this haret script to load Linux.<br /><br />So, in essence, you should complete the following steps in order to install CeBootLin:<br />1. <a href="http://downloads.akshaal.info/linux-n560-c550/CeBootLin-1.zip?attredirects=0">Download</a> CeBootLin.<ad2></ad2><br />2. Unpack the downloaded archive into the PDA root. The CeBootLin.exe must be reachable with the path \CeBootLin\CeBootLin.exe.<br />3. Place default.txt under the \CeBootLin directory. The default txt might looks like this (if the Andorid is what you are going to load with CeBootLin):<pre><br />set MTYPE 1454<br />set KERNEL "\CeBootLin\zImage"<br />set CMDLINE "root=179:3 mem=62M rootdelay=3 boot_delay=0 init=/init console=tty0 fbcon=rotate:0 androidboot.console=tty0 android.checkjni=1"<br />set RAMADDR 0xA0200000<br />bootlinux<br /></pre><br />4. Place zImage under the directory \CeBootLin\.<br /><a href="http://picasaweb.google.com/lh/photo/11wJSVlZKWbWAN3DhaJXSw?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdZkRMSUr62jBL1ImUfJijSiLy1sAyMvuJweLyHjt__DZsgJGu3IqK5XugDSAFD9l-l4zwYkF-8SaGBN1MbhWh_3YJ23B4ZGo3nbAyIhIdP1IlmqViNyvkn3I-d-Vw9pPYk3_yyxivlpuZ/s400/CeBootEdit-1.png" /></a><br />5. Modify HKEY_LOCAL_MACHINE\init adding Launch82 ="CeBootLin.exe" and Depend82 = 14 00.<br /><a href="http://picasaweb.google.com/lh/photo/00DSupXz9qiOXs43h5f5cA?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2MZwhAf19ZPkhV9j-m4gtQF_cMBrMeznzwFzLQii9YHqoEQLPJ2QIoPoWIgLtUmbsYoQGmC8xRLQRHzTwy9OFEujuzUHD8VnPJh0Q5ktDlcnN6x3wrJRYUCU8DU2qXOSmE9Yy5YE0LFZA/s400/CeBootEdit-3.png" /></a><br /><a href="http://picasaweb.google.com/lh/photo/0Rc2C1G2xiQKk5R0RmvaZg?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3JQlgO-EaIaUIakTQIDY5USc81MrvtjKqNvlzHD-V4FGNw4h5HspvDoC7xL1k1TpHvhnt0kIXfuMvYQtXBIvRDFsJ7oEhjdG9WarTWBdSnylug8LHyxB2I9zGXyw2-HDaCYjm6M92cFyE/s400/CeBootEdit-4.png" /></a><br />6. Modify HKEY_LOCAL_MACHINE\Loader\SystemPath adding a new directory \CeBootLin\ to the multi-string list.<br /><a href="http://picasaweb.google.com/lh/photo/hbLfmcNrlr6RpUPvLX_-5A?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpiM0VaWjfzE7Bi5tf1yqRESsPgvTNPywQqJID1Kra0bws22Ch58GrCupZo-lPHO4ygmXhyphenhyphenrjO6ABQTE0C08ywidwkle-WHwSpiDRAOFGGc8L2VSK-LJjVQ85oNe4Z2EHuMOHiCuhape5N/s400/CeBootEdit-2.png" /></a><br />7. Wait for 5 minutes (WinCE needs time to persist changes to registry).<br />8. Feel free to reboot your PDA<br /><br />To test that CeBootLin is able to boot linux at all, run CeBootLin.exe manually.<br /><br />It looks little bit complicated but later, setup program might be created to ship automatically bootable Andorid on Loox550. But before, Andorid must be polished.<br /><br /><a href="http://downloads.akshaal.info/linux-n560-c550/CeBootLin-1.tar.gz?attredirects=0">Here</a> is the source code of CeBootLinux. CeBootLinux is licensed with GNU GPL.<ad></ad>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com10tag:blogger.com,1999:blog-6273818684831454306.post-15534963780288953562009-03-15T16:01:00.004+02:002010-01-26T22:49:23.339+02:00Pictures of Linux and Android on Fujitsu-Siemens Loox N560<a href="http://picasaweb.google.com/lh/photo/CUrNwUv_XICGqKQKeMx6rA?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHPipxiFLXQ3xA743U47IXU9nsVCefgZ6PkBymR9Slh8R4zp_OxWYogjirzfPkFNXwxAcVaRG24YK41gGn_b5Teiz5Q4c2kHRe22nVyG4nUhuketzY80Eq-vN05xt43ypMj55bmjR3IFHb/s400/n560-1s.jpg" /></a><br />Today the desteny of WM5 is only to be replaced with Linux<br /><br /><a href="http://picasaweb.google.com/lh/photo/Wdt450DQpEcjKa1aIu3iUA?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2Le3lTgew4AIitvwoxRLGr5jN4qeqbuZLlD1pfpZjH2BWk1bnmtPjRGY06TPgop4floQgz4d7T0ypVo1CidHyzvsew5TQgFC8V8wNPn-HHxSo6nFLBD4dm8z4x5GjJA66ewNmyK1oqzYQ/s400/n560-2s.jpg" /></a><br />Haret.. all you need is to press Run<br /><br /><a href="http://picasaweb.google.com/lh/photo/LQ7LXZhb1hXw6cwFARC4pg?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlozCBxeDrqz9830_QbHaFo8LYsPSVMfPVX8OkHm5EDtV4XNzNGyxxvGTiFiSVbnlrNHlfJxFQfIKdcMi8MCdUUhxJ0jFayy5tc3duNbGf0U15jwKKqIhlLjTbujUyze8f-EFzlZAg-dnC/s400/n560-3s.jpg" /></a><br />Android on Loox N560<br /><br /><a href="http://picasaweb.google.com/lh/photo/K2EytIW2FJWybumV11UTRg?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOvmMjWCSe0-jN7MRxqKGadD47YvQYMYoTeyAp8CLJdSUzrIbDNn2fAt-w-FNAilCIpearZx66_aqIQSVPCGUBG1MbJxtAVqEmt3TIkYW2F-D9XBR1n8pe23RKy5lEFrHZZ4am1KKQH_Rb/s400/n560-4s.jpg" /></a><br /><a href="http://www.akshaal.info/2009/03/install-emdebian-on-arm-device.html">Installation of debian</a> on Loox N560<br /><br /><a href="http://picasaweb.google.com/lh/photo/ReuuEUcxhZ4y-Es7lRGneQ?authkey=Gv1sRgCMTt-MKs5cTh6wE&feat=embedwebsite"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-6d-XniFGV7jx94znOxlRg-IvxPhHIWAdr7EH4bYrhvQcidLbdGgb2h9-J-VokNJLJ-86sDHr0CAoovBf2sLMqwhcVnUTevuzsF6mxGs1pXMAkAGPjn_G7o-G9XIaoZMyog1CoQxiVUMQ/s400/n560-5s.jpg" /></a><ad></ad><br /><a href="http://www.akshaal.info/2009/03/install-emdebian-on-arm-device.html">Installation of debian</a> on Loox N560Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com21tag:blogger.com,1999:blog-6273818684831454306.post-45732315800437811542009-03-15T15:05:00.003+02:002009-03-15T15:28:00.981+02:00Memory tester for Loox N560/C550Recently I've created a way to test memory for defects on Fujitsu-Siemens Loox N560/C550. Only one who upgraded (or wants to upgrade) PDA's memory from 64M to 128M needs this utility. Using this "util" it is possible to test memory immediately right after memory has been upgraded, without re-flushing WM5/WM6.<br /><br />So do the following to test your PDA's memory:<br />1. Download either <a href="http://downloads.akshaal.info/other-soft-for-pda">LooxMem128-v0.zip</a> (to test 128Mb of memory) or <a href="http://downloads.akshaal.info/other-soft-for-pda">LooxMem64-v0.zip</a> (to test 64Mb of memory).<br />2. Unpack the downloaded archive onto SD.<br />3. Insert SD into your Loox and reboot it.<br />4. Don't let PDA fall asleep, start haret.exe which is in the directory where unpacked the archive to.<br />5. When haret.exe is started press Run.<br />6. Read the caution when Linux is booted.<br />7. Make up your mind and then either press RESET (insert a stylus into a hole on the bottom side of the PDA, if you don't want to test memory) or press enter..<ad2></ad2><br />WARNING: Poor memory chips might be damaged during the test (that is why you want to test your PDA's memory, isn't it?). None will be responsible for your actions except yourself!!<br /><br />Note: You have to press any button during the testing process once per 5 or so minutes.<br />(<i>In a case you need to port the utility on the other platform (not Loox C550/N560) the only thing you have to do is to replace zImage and modify default.txt to let the linux for your platform boot on the target device).</i>)<ad2></ad2>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0tag:blogger.com,1999:blog-6273818684831454306.post-20849940761418588312009-03-14T20:36:00.004+02:002009-03-14T21:22:42.397+02:00Linux Kernel for Fujitsu-Siemens Loox N560/C550 with support for CPLD and builtin ledsI've implemented support for CPLD and leds. htc-gpio driver is used with a custom list of CPLD registers/resources for Fujitsu-Siemens Loox 5XX (N560/C550). Now CPLD interface is available for all other drivers (existing and planned) of the linux/android kernel.<br /><br />It is interesting how CPLD is implemented in the linux kernel. Actually CPLD is a chip that supports very simple custom logic (and that is the reason why it is much faster than CPU). CPLD chip has a set of input pins and output pins. All these pins are mapped to a region of memory address space. The most important work with CPLD is that modifying values of pins to control devices. This is done setting a value to 0 or 1. In fact, programming of GPIO (general purpose input/output of CPU) is done in the same way: a programmer writes code that sets a GPIO pin to either 0 or 1. Linux kernel already has support for GPIO which provides a set of functions for platform drivers. In addition, GPIO driver provides a way to map any virtual GPIO pin to some custom code that is responsible for handling of setters and getters for the mapped pins. And indeed, that is how htc-egpio driver does the job. The driver leverages gpiolib mapping CPLD registers to GPIO pins. Thanks to this approach, no addition functions are required to work with CPLD. It is enough to use gpio_set_value/.. methods.<ad2></ad2><br />After the CPLD driver had been implemented, it was possible to implement a driver for the leds of Loox N560/C550. The leds driver, I implemented, exports a set of functions that other drivers (wifi, gps, bluetooth, pm, ...) are supposed to use to control the leds. Also, the leds driver makes it possible to control the leds from userspace (shell scripts, java program, ...) using files under sysfs filesystem.<br /><br />The following is the list of files exported by the leds driver and the possible content values for the each file:<br /><b>/sys/devices/platform/loox5xx-leds.1/keyboard</b>: on, off, any<br />- backlight for keyboard<br /><br /><b>/sys/devices/platform/loox5xx-leds.1/left_green</b>: on, off, any<br />- green led on the left side. WM5 indicates WiFi activity with this led<br /><br /><b>/sys/devices/platform/loox5xx-leds.1/left_blue</b>: on, off, any<br />- blue led on the left side. WM5 indicates Bluetooth activity with this led<br /><br /><b>/sys/devices/platform/loox5xx-leds.1/left_orange</b>: on, off, any<br />- orange led on the left side. WM5 indicates GPS activity with this led on Loox N560<br /><br /><b>/sys/devices/platform/loox5xx-leds.1/right_green</b>: on, off, any<br />- green led on the right side. WM5 allows programs to control this led using winapi.<br /><br /><b>/sys/devices/platform/loox5xx-leds.1/right_orange</b>: on, off, blink, any<br />- orange led on the left side. WM5 indicates charging activity with this led<br /><br />Where:<br /><b>on</b> - the led is on regardless of the kernel activity,<br /><b>off</b> - the led is off regardless of the kernel activity,<br /><b>blink</b> - the led is blinking regardless of the kernel activity,<br /><b>any</b> - the led is controlled by the kernel.<br /><br />For instance, if the content of the right_orange file is set to 'on', then the orange led (on right side of PDA) will be on no matter what you do: plug or unplug your device to/from a cradle. The driver will hold on the state of the led until, you write 'any' into the file right_orange. With 'any' value in file, the first 'power' event will change state of the led. The interface of the driver makes it possible to implement any notification (low battery, new mail..) effects you can imagine involving all leds of the device. The following script demonstrates how to blink with the keyboard backlight led:<pre><br />while true;<br /> do echo on > /sys/devices/platform/loox5xx-leds.1/keyboard;<br /> sleep 0.1;<br /> echo off > /sys/devices/platform/loox5xx-leds.1/keyboard;<br /> sleep 0.1;<br /> # Condition for break...<br />done<br />echo any > /sys/devices/platform/loox5xx-leds.1/keyboard;</pre><br />The current patch for the android cupcake kernel is located <a href="http://downloads.akshaal.info/linux-n560-c550/c550-android-kernel-2009-03-14.patch.gz?attredirects=0">here</a>.<br /><ad></ad>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com1tag:blogger.com,1999:blog-6273818684831454306.post-28696361298205727202009-03-10T10:19:00.004+02:002009-03-10T10:40:15.155+02:00Cross-Packaging On DebianDebian/Emdebian already has tons of packages. But sometimes you have a need to package or repackage a piece of software yourself. The following may be helpful if a platform you build for is not the platform you build on.<br /><br />Use the following command to build a package from a repository of apt:<pre>emsource --arch armel -b memtester</pre><br />If you need to install a package for target on your host:<pre><br />dpkg-cross -a armel -i zlib1g-dev_1.2.3.3.dfsg-13em1_armel.deb<br /></pre>The command <i>dpkg -l | grep zlib1g</i> will show you:<pre><br />ii zlib1g-dev-armel-cross 1:1.2.3.3.dfsg-13em1<br /></pre><ad2></ad2><br />(dpkg-cross automatically converts package names and moves content under the /usr/arm-linux-gnueabi (for armel target))<br /><br />You need to configure <i>~/.apt-cross/emsource</i> to use <i>emsource</i> without privileges of root. The content of the file may look like:<pre><br />workingdir: /home/akshaal/.apt-cross-working-dir<br /></pre><br />In a case you need to build a package from sources that have already been downloaded, use the following command:<pre><br />dpkg-buildpackage -aarmel</pre>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0tag:blogger.com,1999:blog-6273818684831454306.post-91371300565794869242009-03-08T22:11:00.005+02:002009-03-08T22:44:54.171+02:00Install emdebian on ARM deviceHere is how I've successfully installed emdebian on my Fujitsu-Siemens Loox N560. I assume there is an already installed emdebian-tools package and cross-compilers. Next thing is to run the following commands:<pre>cd /tmp;<br />mkdir grip/<br />sudo debootstrap --arch=arm --foreign lenny grip/ http://www.emdebian.org/grip/<br />cd grip/<br />sudo tar -czf /tmp/emdebian-grip-arm-debootstrap.tgz .</pre><br />Then SD card is to be partitioned with fdisk. For example it could be:<pre><br />cfdisk /dev/sdX<br />mkfs.ext3 /dev/sdXy</pre><br />where sdX - is a device for an SD card. And sdXy is a partition that is supposed to be used for linux on the SD card. Then mount the linux partition and untar the emdebian-grip-arm-debootstrap.tgz:<pre><br />mount /dev/sdXy /mnt<br />cd /mnt<br />tar zxpvf /tmp/emdebian-grip-arm-debootstrap.tgz<br />ln -s bin/sh init<br />cd /tmp<br />umount /mnt<br /></pre><br />Now we can boot linux from the partition. When linux has booted and a command line appeared, run the following commands step by step:<pre>cd /debootstrap<br />export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin<br />run ./debootstrap --second-stage<br />dpkg --configure -a<br />rm /init<br />cd /<br />ln -s sbin/init init<br /></pre><ad2></ad2><br />Now it is time to reboot linux again. This time a login prompt should work. Use root login and no password. Then configure basic settings:<pre><br />echo 'nameserver 1.1.1.1' > /etc/resolv.conf<br />echo '127.0.0.1 localhost' > /etc/hosts<br />echo '172.16.0.2 myhost 172.16.0.2' >> /etc/hosts<br />echo 'myhost' > /etc/hostname<br /></pre><br />use actual nameserver IP instead of 1.1.1.1. Reboot PDA one more time. Then configure network:<pre><br />ifconfig usb0 172.16.0.1 netmask 255.255.255.0<br />route add default gw 172.16.0.1</pre>Make sure network is up and running. Then upgrade your installation:<pre><br />echo 'deb http://www.emdebian.org/grip/ sid main' > /etc/apt/sources.list<br />apt-get update<br />apt-get dist-upgrade<br />apt-get install ...whateveryoulike...</pre><br />And configure network properly.<pre>cat > /etc/network/interfaces<br />auto lo<br />iface lo inet loopback<br />allow-hotplug usb0<br />iface usb0 inet static<br /> address 172.16.0.2<br /> netmask 255.255.255.0<br /> network 127.16.0.0<br /> broadcast 172.16.0.255<br /> gateway 172.16.0.1<br /> dns-nameservers 1.1.1.1<br /> dns-search your.domain<br /></pre><ad></ad>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com4tag:blogger.com,1999:blog-6273818684831454306.post-82714583204525958002009-03-08T12:56:00.004+02:002009-03-08T13:29:41.873+02:00Linux Kernel for Fujitsu-Siemens Loox N560/C550 with usbnet workingAfter 3 days of struggle I am finally able to build a linux kernel for my PDA Fujitsu-Siemens Loox N560. The kernel has been downloaded from <a href="http://www.asm32.ru">http://www.asm32.ru</a> and patched (pxa27x_udc.c) to support for usbnet (host-to-PDA networking through a usb coard). Also I've made a diff file with differences between the current cupcake kernel and the kernel (by date 02-mar-2009) from asm32.ru site. That will be useful later when I need to apply support for Loox to a new upstream cupcake kernel. <a href="http://downloads.akshaal.info/linux-n560-c550/c550-android-kernel-2009-03-07.patch.gz?attredirects=0">Here is the patch</a> which also includes support for usbnet on Loox C550/N560. The patch already contains a kernel configuration file (.config), but usbnet support is not enabled there. <a href="http://downloads.akshaal.info/linux-n560-c550/linux-config-2009-03-07?attredirects=0">Here is the other .config file</a> which is differ from that included in the patch by supporting usbnet, having power management switched off and configuration for larger fonts in console.<br /><br />It is possible to build the kernel with any toolchain for arm of your choice. I've tried crosstool-ng, emdebian and the one that is included in the android repo. I have decided to leverage emdebian toolchain for I use debian on my PC. The following is the command to build the kernel using emdebian toolchain:<pre>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-</pre>Of course you have to have emdebian toolchain installed. You can install emdebian something like it is shown below:<pre><br />apt-get install emdebian-tool<br />emsetup --arch arm</pre>Then add:<pre><br />deb http://www.emdebian.org/debian/ unstable main</pre><br />into your /etc/apt/sources.list and run:<br /><pre>apt-get install linux-kernel-headers-arm-cross gcc-4.2-arm-linux-gnu</pre><br />When the kernel is built and ready you can copy it on an SD card and run it with haret with the following default.txt:<pre><br />set MTYPE 1454<br />set KERNEL zImage<br />set CMDLINE "root=179:2 mem=60M rootdelay=3 boot_delay=0 init=/init console=tty0 fbcon=rotate:0 androidboot.console=tty0 android.checkjni=1"<br />set RAMADDR 0xA0200000<br />bootlinux</pre><ad></ad>That is important! When you've placed zImage on an SD card, you will insert the card in your PDA. And then you must reboot your PDA! And only after you have rebooted your PDA with the SD card inside, you should ask haret to boot linux. That is very important because a linux kernel will not be loaded correctly (or it will but with only 10% chances) if one of the following conditions is true:<br />1. PDA has fallen asleep or suspended.<br />2. You have just inserted an SD card in your PDA and not rebooted it yet.<br />It looks like it is a bug in wince...<br /><br />P.S. There you can download cupcake kernel <a href="http://source.android.com/download"> http://source.android.com/download</a><br /><br />P.P.S. When you build kernel with usbnet, don't set CONFIG_USB_ETH_RNDIS to 'y'! Or your PC kernel (2.6.x) will not find your PDA... neither cdc_ether nor cdc_subset will claim your PDA.Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com5tag:blogger.com,1999:blog-6273818684831454306.post-37990931841970975022009-02-28T12:27:00.004+02:002009-03-01T12:04:57.685+02:00Remove Solid BorderIf you want to crop a picture stripping it from a border of some solid color, in linux you can use <b>convert</b> command which is a part of <b>ImageMagick</b> package:<pre><br />convert <i>original.jpg</i> -trim <i>modified.jpg</i><br /></pre><ad2></ad2><br />In a case you have a set of pictures, use <b>find</b> command to execute <b>convert</b>:<pre>find *.jpg -exec convert {} -trim <i>out</i>/{} \;<br /></pre><br />Where <b>out</b> is a directory for converted images.Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com1tag:blogger.com,1999:blog-6273818684831454306.post-5526625546282287412009-02-23T11:24:00.006+02:002009-02-23T11:54:51.885+02:00Extract Config from zImageIt was hard for me to find this simple thing in internet, so I gonna make life for someone a little bit easier.<br /><br />If you want to extract config file from existing linux image, zImage or bzImage, do the following:<br /><ul><li>Download archive file with linux <b>sources</b>. </li><li>Unpack linux kernel sources</li><li>Go into root directory of the kernel sources</li><li>Run chmod 755 ./scripts/extract-ikconfig</li><li>Run ./scripts/extract-ikconfig /tmp/zImage > /tmp/config</li></ul>Where /tmp/zImage is a file you want to extract a config from. And /tmp/config it is a filename for the extracted config.<ad2></ad2>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com4tag:blogger.com,1999:blog-6273818684831454306.post-49576341316304748242008-05-19T14:26:00.005+03:002009-02-22T17:44:37.321+02:00OWFS 2.7p4From OWFS site: <i>OWFS is an easy way to use the powerful 1-wire system of Dallas/Maxim.</i><br /><br />I've found a bug in OWFS 2.7p4. A badly written lock results in access to already freed memory region. In my case it usually shows itself in 1sec to 5 minutes of working in heavily simultaneous mode with many 1-wire devices. With this bugs OWFS ends up in a crash in a random place (usually tsearch complains about damaged list). GDB was not of much help here. But Valgrind (a really great tool) helped a lot.<br /><pre>==16965== Thread 9:<br />==16965== Invalid read of size 4<br />==16965== at 0x405F7A5: LockGet (ow_locks.c:142)<br />==16965== by 0x4066195: FS_r_given_bus (ow_read.c:229)<br />==16965== by 0x40663B2: FS_read_distribute (ow_read.c:191)<br />==16965== by 0x40668AD: FS_read_postparse (ow_read.c:106)<br />==16965== by 0x4066AEA: FS_read (ow_read.c:58)<br />==16965== by 0x409E26D: fuse_fs_read (in /usr/lib/libfuse.so.2.7.3)<br />==16965== by 0x40A2A12: (within /usr/lib/libfuse.so.2.7.3)<br />==16965== by 0x40A5F48: (within /usr/lib/libfuse.so.2.7.3)<br />==16965== by 0x40A6EAF: (within /usr/lib/libfuse.so.2.7.3)<br />==16965== by 0x40A86D5: fuse_session_process (in /usr/lib/libfuse.so.2.7.3)<br />==16965== by 0x40A4AD4: (within /usr/lib/libfuse.so.2.7.3)<br />==16965== by 0x40C8382: start_thread (in /lib/libpthread-2.7.so)<br />==16965== Address 0x43b8dc8 is 0 bytes inside a block of size 16 free'd<br />==16965== at 0x402465C: free (vg_replace_malloc.c:323)<br />==16965== by 0x41B281A: tdelete (in /lib/libc-2.7.so)<br />==16965== by 0x405F62B: LockRelease (ow_locks.c:164)<br />==16965== by 0x40662AD: FS_r_given_bus (ow_read.c:236)<br />==16965== by 0x40663B2: FS_read_distribute (ow_read.c:191)<br />==16965== by 0x40668AD: FS_read_postparse (ow_read.c:106)<br />==16965== by 0x4066AEA: FS_read (ow_read.c:58)<br />==16965== by 0x409E26D: fuse_fs_read (in /usr/lib/libfuse.so.2.7.3)<br />==16965== by 0x40A2A12: (within /usr/lib/libfuse.so.2.7.3)<br />==16965== by 0x40A5F48: (within /usr/lib/libfuse.so.2.7.3)<br />==16965== by 0x40A6EAF: (within /usr/lib/libfuse.so.2.7.3)<br />==16965== by 0x40A86D5: fuse_session_process (in /usr/lib/libfuse.so.2.7.3)</pre><ad></ad><br />It has already been working for 2 hours, but I will wait a little bit more before send this patch to mailing list of OWFS.<br /><br /><a href="http://toril.ru/soft/owfs-2.7p4-locksfix.patch.gz">Here is the patch.</a><br /><br />P.S. Also Valgrind shows total memory leaks of 4kb.<br /><br />(<b>update 19 feb 2009: now it has been in work for nearly one year without any crash</b>)Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com1tag:blogger.com,1999:blog-6273818684831454306.post-50296846490904596432008-04-28T14:04:00.006+03:002009-02-22T17:43:06.897+02:00Java's Thread Priorities in LinuxAs I told yesterday, Sun Java 5/6 has a "broken" priority policy for linux. There is <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4813310">a related bug</a> in java's bugtracking system. So if to mention it briefly, there are two thread priority policies for linux. The first one, with code 0, specifies to ignore all thread priorities at all making all threads equal for linux scheduler. The second policy model, with code 1, maps java priorities to calls to the system setpriority function. By default java uses thread priority policy 0. You can say java to use policy 1 by invoking it with -XX:ThreadPriorityPolicy=1 command line argument. Unfortunately, this will work only if you start java with root privileges because the setpriority function sets nice level for processes and a process can't lower a nice level. <ad2></ad2>This is a bad news. The good news is that Sun's java has another bug (I hope this bug will not be fixed). Look at the following code from the java 6 update 3 (build 105) sources (os_linux.cpp):<br /><pre> if (ThreadPriorityPolicy == 1) {<br /> // Only root can raise thread priority. Don't allow ThreadPriorityPolicy=1<br /> // if effective uid is not root. Perhaps, a more elegant way of doing<br /> // this is to test CAP_SYS_NICE capability, but that will require libcap.so<br /> if (geteuid() != 0) {<br /> if (!FLAG_IS_DEFAULT(ThreadPriorityPolicy)) {<br /> warning("-XX:ThreadPriorityPolicy requires root privilege on Linux");<br /> }<br /> ThreadPriorityPolicy = 0;<br /> }<br /> }<br /></pre><br />It is meant to reset command line argument from 1 to 0 if the effective user is not root.<br /><br />Look here:<br /><pre>OSReturn os::set_native_priority(Thread* thread, int newpri) {<br /> if ( !UseThreadPriorities || <b>ThreadPriorityPolicy == 0</b> ) return OS_OK;<br /><br /> int ret = setpriority(PRIO_PROCESS, thread->osthread()->thread_id(), newpri);<br /> return (ret == 0) ? OS_OK : OS_ERR;<br />}<br /><br />OSReturn os::get_native_priority(const Thread* const thread, int *priority_ptr) {<br /> if ( !UseThreadPriorities || <b>ThreadPriorityPolicy == 0</b> ) {<br /> *priority_ptr = java_to_os_priority[NormPriority];<br /> return OS_OK;<br /> }<br />...<br />}</pre><br />I've highlighted the interesting code. Do you see how it checks for policy? It means that if we set ThreadPriorityPolicy to ... say to 666, java will still work like the policy is set to 1. And the check that resets ThreadPriorityPolicy from 1 to 0 for non-root users will not be triggered. Whee! So in fact we can use the policy 1 for non-root users running java with the command line argument -XX:ThreadPriorityPolicy=666. But stop would say you, what will it give us if the system's setpriority function fails for non-root user? It gives us enough if we can run our lovely java initially with nice level -5. A level -5 is the nice level used for HIGHEST priority threads in java as you can see from the following code snippet:<br /><pre>int os::java_to_os_priority[MaxPriority + 1] = {<br /> 19, // 0 Entry should never be used<br /><br /> 4, // 1 MinPriority<br /> 3, // 2<br /> 2, // 3<br /><br /> 1, // 4<br /> 0, // 5 NormPriority<br /> -1, // 6<br /><br /> -2, // 7<br /> -3, // 8<br /> -4, // 9 NearMaxPriority<br /><br /> -5 // 10 MaxPriority<br />};</pre><br />Though this looks not fair and totally unholy, I think it is still better then running java with priorities ignored or under root. Thus you can run your java safely and well-scheduled with the command like this:<br /><pre>nice -n -5 su -c 'java -XX:ThreadPriorityPolicy=666 ThreadTester' akshaal</pre><br />There is other way if you have no access to root user.<br /><pre>java -XX:ThreadPriorityPolicy=666 \<br /> -XX:JavaPriority10_To_OSPriority=0 \<br /> -XX:JavaPriority9_To_OSPriority=1 \<br /> -XX:JavaPriority8_To_OSPriority=2 \<br /> -XX:JavaPriority7_To_OSPriority=3 \<br /> -XX:JavaPriority6_To_OSPriority=4 \<br /> -XX:JavaPriority5_To_OSPriority=5 \<br /> -XX:JavaPriority4_To_OSPriority=6 \<br /> -XX:JavaPriority3_To_OSPriority=7 \<br /> -XX:JavaPriority2_To_OSPriority=8 \<br /> -XX:JavaPriority1_To_OSPriority=9 \<br /> ThreadTester</pre><ad></ad>The drawbacks of this method is that your normal priority threads will run with nice level 5 (although threads with the highest level will run with nice level 0 and lowest priority thread with nice level 9). That is it. Enjoy while these bugs (or features) are not fixed yet :).Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com2tag:blogger.com,1999:blog-6273818684831454306.post-53783912650830139242008-02-02T16:00:00.001+02:002009-02-22T17:41:26.802+02:00Debian + Eclipse + Java + AMD64This is for those who use debian on amd64 with java from package . If you have a problem running eclipse (exit code=13 or alike) just install sun's java and enjoy! There is a something wrong with the java package in debian (sun-java6-*). I've spent two days trying get it to work.<ad2></ad2>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0tag:blogger.com,1999:blog-6273818684831454306.post-68221439311028134022007-06-04T17:57:00.001+03:002009-02-22T17:25:57.602+02:00Recent Upgrade of Debian (intel's video driver problem)Yesterday I did <b>apt-get dist-upgrade</b>. ion3 as usually rejected to work properly for its API changes. I was not surprised and fixed this technically. But next, what I had noticed right after upgrade, was the large fonts in opposite to ones before upgrade. Quickly I discovered that DPI was incorrect due to a wrong display size. But it took me an enormous amout of time to fix. At first, I tried obvious DisplaySize declaration in a Monitor section of xorg.conf file, yet with no luck. Reading forums, I found one mentioning xrandr util that controls X's RandR extension that, in turn, responsible for DPI. I modified my ~/.xsession adding "xrandr --screen 0 --fbmm 300x225" as the first command. Most of the fonts became smaller, yet fonts of GTK remanined the same. And only today I found out why. I had been using GDM. GTK (GDM relied on it) loaded DPI values before an execution of ~/.xsession took place. So, I added xrandr command into /etc/gdm/Init/Default. It helped.<br /><ad></ad><br />Next I discovered XV was not working now (no picture, just blue rectangle instead), becouse of bug in intel's driver. This bug exists in xserver-xorg-video-intel-2.0.0-1, and it has been definitely fixed in xserver-xorg-video-intel-2.0.0-3.Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0tag:blogger.com,1999:blog-6273818684831454306.post-34041073821500199512007-05-26T17:58:00.003+03:002009-02-22T17:27:43.683+02:00Recovering of Encfs PasswordWhew. I've found all forgotten passwords for encfs with a help of the perl script:<br /><br /><pre><br />#!/usr/bin/perl<br /><br />use strict;<br />use warnings;<br /><br /># these words are used as password components<br />my @words = (<br /> "example", " ", "word", "123", "666", "pwd", "part1"<br /> );<br /><br />my @l = ();<br /><br />sub mindex {<br /> my $x = shift;<br /><br /> for (my $i = 0; $i <= $#words; $i++) {<br /> if ($words[$i] eq $x) {<br /> return $i;<br /> }<br /> }<br /><br /> return -1;<br />};<br /><br />sub inc {<br /> my $p = shift;<br /> my $v = $l[$p];<br /><br /> unless (defined $v) {<br /> $l[$p] = $words[0];<br /> } else {<br /> my $i = mindex ($v);<br /> if ($i == $#words) {<br /> $l[$p] = $words[0];<br /> inc ($p+1);<br /> } else {<br /> $l[$p] = $words[$i+1];<br /> }<br /> }<br />};<br /><br />while (1) {<br /> inc (0);<br /> my @ll = reverse @l;<br /> my $pwd = join '', @ll;<br /><br /> open F, ">/tmp/1233";<br /> print F "pwd\n";<br /> close F;<br /><br /> print "$pwd\n";<br /> system "encfs -S /tmp/encfsdir /tmp/mountpoint < /tmp/1233";<br />}</pre><br /><ad></ad><br />You may use it if you still know a vague shape of password you have lost.Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com1tag:blogger.com,1999:blog-6273818684831454306.post-86010680093591338192007-04-04T21:34:00.001+03:002009-02-22T17:29:05.168+02:00DreamboxAfter two days of using I broke my dreambox 500 (receiver for sat tv). It loops on booting. I have no ideas how to repair it, so I've chosen it to reflash. It is flashing now. Linux rocks.<br /><br />The following crap appears on boot:<ad2></ad2><br /><pre>[...]<br />Multiplex thread got Data<br />Command='ZAP'<br />Zap data ,<br />Multiplex thread got Data<br />Dropping connection<br />active count=0<br />rc=0 '0,'<br /> ------------> changed! 0<br />no transponder 1 444<br />[TUNE] tune failed<br />Segmentation fault</pre>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0tag:blogger.com,1999:blog-6273818684831454306.post-75684145353816219892007-03-25T17:35:00.002+03:002009-02-22T17:29:37.753+02:00mmcI've made <a href="http://toril.ru/soft/mmc-4.1-key-color256.diff.gz">a patch</a> for MMC (mud client). With this patch, mmc supports 256 color space of xterm/rxvt/putty/..., broken terminals (no more "terminal cannot insert/delete characters") and keypad characters. <a href="http://toril.ru/lj/mmc-patch.png">Screenshort</a>.<ad2></ad2>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0tag:blogger.com,1999:blog-6273818684831454306.post-40543587694149508352007-03-13T14:46:00.001+02:002009-02-22T17:30:12.723+02:00OSD DesktopYet Another Long Deferred (for years) Post. At last I've recorded how a working upon my desktop looks like (<a href="http://toril.ru/lj/akdesk1.avi">640x480 10fps 2mb</a> or <a href="http://toril.ru/lj/akdesk2.avi">1024x768 10fps 6mb</a>). The idea concerning osd'ish desktop had floated around for long, before I sat and wrote first lines of code. Due to a logical evolution of my desktop I had gotten used to work with any application in fullscreen mode. Things like clocks, bars and meters had quickly been rid from my desktop. Although I found myself in a world without notifications. I was happy. Then, OSD came to me as a solution to keep fullscreenness and be aware of events. Using python and osd library for it, I've implemented an events daemon. The daemon reads lines from the ~/log/events file and parses them using one of the following patterns:<ll><br /><li> <b>string</b> - add this string into a list of displaying strings.<br /><li> <b>[][][]\d\d\d\d: string</b> - the same as previous case, but the string is visible for the \d\d\d\d (four digits) ms.<br /><li> <b>\d\d\:\d\d:\d\d: string</b> - the same as first case, but with a date preceeding string. The date is not visible on OSD.<br /><li> <b>\d\d\:\d\d:\d\d: [][][]\d\d\d\d: string</b> - The same as second case with the mark as in third case.</ll><ad></ad><br />Now it was a time to implement programs that would write to the ~/log/events file. First such program became <i>aktimelog</i> that writes time into the events log every 25 minutes. Others I've made: plugin for irssi to see either public, private or both messages, monitoring of keyboard layout changes, workspace switching, mail notifications, shell notifications. Also it is not needless to say that workspace switching is driven by shortcuts. For instance, if you press the MOD-e shortcut, in addition to switching workspace, ion3 checks whether emacs is runned and run it if it is not yet and you confirmed it for. I usually know where I have to switch to, and don't waste my time running through the list of open programs. So MOD-e is for emacs, MOD-p -- revelation, MOD-c -- eclipse, MOD-b -- browser, MOD-1 -- first terminal, MOD-2 -- second terminal... and so on. That is how my desktop works. But how does yours work? :)<br /><br /><a href="http://toril.ru/soft/akdesk.tar.gz">Sources</a>.Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0tag:blogger.com,1999:blog-6273818684831454306.post-74388699343575636112007-02-09T23:08:00.001+02:002009-02-22T17:34:11.806+02:00Synce & Linux & WM5 & PasswordIn a time I developed for WM5 under linux, I found that it was hard and tiresome to copy executable file to PDA for testing. Files were copied to PDA either by using of MMC card or by mounting of PDA as USB Storage. Both ways are not convenient at all when you do such actions every five minutes. In addition, the executable had to be executed to see how it did its job. I executed it by my hands. <ad></ad>Indeed, there is no need to say that after I had developed in windows and such actions had been done by batch files there, I was annoyed in linux enough. Then when I tried to find a better solution for testing process, I came to <a class="snap_shots" href="http://www.synce.org/">synce</a> project. At first, it seemed that <a class="snap_shots" href="http://www.synce.org/index.php/Connecting_your_Windows_Mobile_2005_device_via_USB_%28usb-rndis%29">usb-rndis</a> driver for kernel had to be downloaded, compiled and installed. I did it, but it failed on compilation. Short studies of site were needed to found out that there was the new driver <a class="snap_shots" href="http://www.synce.org/index.php/Connecting_your_Windows_Mobile_2005_device_via_USB_%28usb-rndis-lite%29">"usb-rndis-lite"</a> It did well this time. As the result of installation I got new network device: rndis0. Then it was needed to setup synce utils and libs. It was hardest thing to complete. I tried to follow to the instruction from <a class="snap_shots" href="http://www.synce.org/index.php/Building_SynCE_with_Windows_Mobile_2005_support_from_Subversion">the wiki</a>. But odccm gave me errors about d-bus, hal and so on. Error were dumb.. i.e. they were without any meaning of what really happened wrong. Then I tried vdccm... and it seemed that success was not even near to partitial... There was only one good thing - vdccm started without errors :). It was silent and sad. I started to google for the word vdccm and after a while I found out that one had used triggerconnection util to notify ActiveSync. But in my hands triggerconnection had no effect neither on vdccm nor on ActiveSync. I had walked through sources of the triggerconnection, it looked like it sends a pocket to the port 5679 of PPC. Then PPC was scanned by nmap. And nmap told me that there was no open ports on PPC!! I had no idea why port 5679 was not opened while ActiveSync had been started. I was exhausted and tired. Alas, I had spent a lot of time trying to figure out why port 5679 had been closed, although, at last, it came to me that the port could stay open for a few seconds after a device was plugged into a cradle. Indeed, vdcomm detected plug-event when I had started triggerconnection right after a PPC was plugged into a cradle. This time it made clear that one problem hid another one. At once, vdccm was able to detect a plugged PDA, but it was unable to hold connection more than a several seconds. And none of synce utils worked while it was connected these seconds. Again I googled. Somewhere someone wrote that vdccm doesn't work when device is protected by password. "@!#%@#%*#$!!!" cried me. I didn't wish to have device unprotected or to unlock it each time I plug it into my cradle. I made <a class="snap_shots" href="http://toril.ru/pda/vdccm-password.patch.gz">this patch for vdccm</a>, when I had done reverse engineering of ActiveSync authorization protocol and synce sources had been explored enough for it. And ourtime time had came, patched vdccm worked great! Wheee! So, what I have done at last:<br />1. Installed usb-rndis-lite.<br />2. Installed libs: librapi2, libsynce.<br />3. Patched vdccm.<br />4. Installed ifplugd. It runs ifup/ifdown for rndis0 as needed.<br />5. Appended to /etc/network/interfaces:<pre>iface rndis0 inet static<br /> address 169.254.2.2<br /> netmask 255.255.255.0<br /> post-up /usr/local/bin/triggerconnection-delayed local-pda</pre><br />6. Added line '169.254.2.1 local-pda' into /etc/hosts.<br />7. Wrote /usr/local/bin/triggerconnection-delayed:<div style="margin-left: 30px;"><wbr><pre>#!/bin/sh<br /><br />sleep 2<br />exec /usr/local/bin/triggerconnection $@</pre><br />8. Following lineds added to ~/.xsession:<br /><pre>vdccm -d 3 -f -t -p `cat ~/.pda-pwd` 1>>~/logs/vdccm 2>>~/logs/vdccm &</pre><br />9. Wrote my secret password into ~/.pda-pwd file (chmod 0600).<br /><br />Now I could enjoy with all useful utils like pls, pstatus..., install cabs and etc.<br /><br />It is all. Please, leave a comment if it was useful for you, or you have something to say about. Fell free to leave any kind of comment.<br /><ad2></ad2><br />P.S. The patch I made is not fully featured. I wrote it in a very straightforward way. It does not support pending of password, so you must specify your password with the -p key-option. I really have no time to implement it well, sorry.</div>Akshaalhttp://www.blogger.com/profile/05677582369584740657noreply@blogger.com0