Categories
Android Linux Posts Ubuntu

Flashing Samsung Galaxy S (I9000) ROMs with Heimdall

This Tutorial is just a documentation of how I flashed my Samsung Galaxy S (I9000) using heimdall with Darky’s Rom v10.1, follow the steps at your own risk. I am in no way liable for any damage caused to your phone following these steps. I would advise reading up on flashing before proceeding along with pre-reading the guide first.

If you don’t know what you’re doing, you should probably not do it.

For more information, help and most anything check out xdadevelopers forum and DarkysRom.com

This guide is using a fresh install of Ubuntu 11.04 on a memory stick, I was unable to get heimdall installed on Fedora 15 or Ubuntu 10.04.
For this guide I will use Darkys Rom v10.1, however it should work for all ROMs that come with the correct files, as shown below.

Installing Heimdall

First install the Qt Gui libraries:

 sudo apt-get install libqtgui4

Once that’s installed head over to the heimdall website and download heimdall and the frontend for it, here I went for version 1.1.1 as the latest version (as of writing this guide 1.2.0 does not have a frontend).

Here simply download the .deb file and run it once it’s downloaded, you should be able to install them no problem.

(direct links for the version used in this guide)
Heimdall – https://github.com/downloads/Benjamin-Dobell/Heimdall/heimdall_1.1.1-1_i386.deb
Heimdall-frontend – https://github.com/downloads/Benjamin-Dobell/Heimdall/heimdall-frontend_1.1.1-1_i386.deb

Getting The Files

Download the ROM you wish to flash your phone with, for example download Darky’s Ressurection v10.1.

Extract Darky_Resurrection_10.1_i9000.zip
Inside also extract Darky_Resurrection_10.1.tar

You should have the following files:

Darky_Resurrection_10.1_i9000 (folder)

  • Darky_Resurrection_10.1 (folder)
    • boot.bin
    • cache.rfs
    • dbdata.rfs
    • factoryfs.rfs
    • modem.bin
    • param.lfs
    • Sbl.bin
    • zImage
  • Odin3 v1.3,exe
  • Odin3 v1.7.exe
  • s1_odin_20100512.pit

Preparing Your Phone

Make sure you have full battery and disabled all lagfixes.

Flashing The Phone

Press Alt+F2 and then type “heimdall-frontend” and hit enter.

Add the files to the correct heidmall options as so:

Repartition

PIT : s1_odin_20100512.pit

PDA/Code

FactoryFS : factoryfs.rfs
Kernel(zImage) : zImage
Param.lfs : param.lfs
Primary BootLoader : boot.bin
Secondary Bootloader : Sbl.bin

CSC

Cache : cache.rfs
Database Data : dbdata.rfs

Other

Modem : modem.bin
Recovery :

Finally put your phone into download mode.

Once your phone is in downloadd mode, make sure it’s connected via USB and then press start on Heimdall.

After a few minutes your Heimdall will say Finished. Boom you’re done. Just wait for your phone to finish doing whatever it’s doing and you should end up back at the home screen soon enough.

Categories
Blog Kinect Machine Vision Posts Programming Robotics

Kinect Development – Day 1

Head over to this page if you want some tutorials on getting started with the Kinect and libfreenect, I’ll update more as time goes on and I have free time.

I’ve been meaning to grab myself an Xbox 360 Kinect for a while, not because I’m a big motion controlled game fan but for machine vision development. Within the first month of the Kinect open source drivers being released the coolest things were seen, from motion controlled media centres to 3D modelling. I’ll admit, I’m a little late to the game, mostly due to the amount of work in my final year at university and other general business. Over the summer I’ll have plenty of time to do a couple of projects and hopefully come up with something cool and contribute to the scene.

Anyway enough of the small talk, I’ve decided to blog in as much detail the journey through the development, from the installation of the libraries to writing the first and last bit of code as a sort of a set of tutorials for anyone else who wants to get into it.

There are currently two main sets of drivers/libraries out there libfreenect and OpenNI both sporting hip, cool, open source names. So which one do you choose? Well, here’s a brief description of both.

Let’s start with OpenNI, these are the Official PrimeSense (the people that Microsoft paid to actually create the Kinect) these allow access to audio, video and depth with the addition of PrimeSense’s NITE Middleware. NITE is the software library used for skeletal tracking, hand gesture recognition and scene analyzer (used to separate figures in the foreground from the background) .

Alternatively there is the libfreenect libraries, from the community over at openkinect.org. While these are admittedly lacking slightly in features such as skeletal tracking and hand gesture recognition they much make up for it in the dedication to open source and the creation of the best suite available. These have access to video, microphones, motors and LED with speakers currently being worked on. They work under a variety of language wrappers for most OS’s and will of course by my personal library of choice.

Fortunately, you won’t have to decide which one you’d prefer ’cause you can run them both on the same machine but you’ll have to look into licencing information for releasing projects with OpenNI so it’s unlikely you’ll want to combine them (or even allowed?).

libfreenect Installation:

OpenKinect’s getting started page provides a well enough documented installation guide that anyone should be able to get them up and running under Windows/Linux or OSX. With Ubuntu being the distro of choice for installation guide. – http://openkinect.org/wiki/Getting_Started

If you’re running Arch, there are a few AUR packages available however they all seem to have lacked updates for a few months but the manual build is pretty simple on the getting started page, I’ve also added a quick list of commands to get you there:

Grab the git copy of the libraries:

git clone https://github.com/OpenKinect/libfreenect.git
cd libfreenect/

Make, install:

mkdir build
cd build/
cmake ..
make
sudo make install
sudo ldconfig /usr/local/lib64/

Add your user to allow access to the connect by creating a group called video and adding your user to it:
note: this can be skipped if you don’t mind running as root/sudo

sudo nano /etc/udev/rules.d/66-kinect.rules
sudo usermod -G video username

Test the kinect with the example program:

bin/glview

If all went well you should have seen a sight similar to the screenshot above, if not check out the OpenKinect page for more information and see if the problems you’re having haven’t already been resolved.

Categories
Linux Posts Ubuntu

Error: “end_request: I/O error, dev sr0, sector xxxxx” – Linux

Error:

end_request: I/O error, dev sr0, sector 537392

If you’re getting a similar error filling your screen once you’ve installed Ubuntu, don’t panic. It’s pretty common which is basically because Ubuntu (or any other Linux distro) can’t control your CD/DVD drive properly, it’s probably trying to open/close it but doesn’t know if it has or not. The problem is that you don’t get to see what Ubuntu wrote before because it’s filled your screen up with this error.

If you’ve just installed Ubuntu this probably happened when it wanted you to take the disc out and close the cd tray (if there is one) then hit Enter to finish the installation, so just do that and ignore this error.

Categories
Kindle Linux Posts Ubuntu

Auto Sync Kindle in Ubuntu

For Christmas I got a Kindle 3 and it was instantly filled with Free eBooks (http://www.gutenberg.org/wiki/Main_Page) and research papers (PDFs). I found myself wanting to be able to automatically synchronize it with a folder on my desktop when it was plugged in and found no one else had posted online how to do this, so I began researching into udev and rsync to get something working.

Setting up udev rules to run a script when the Kindle is plugged in.

Firstly, we need to find some parameters of the Kindle which are unique to it so that udev can identify that it is the Kindle being plugged in and not another USB mass storage device. We’ll need to find out where the device is mounted in /dev/ which can be a little tricky because this folder is pretty full.

An easier way to do this is to first, without the Kindle plugged in do the following command (list the directory and pipe the output to a file called dev1 in the home dir):

ls /dev/ > ~/dev1

Now plug the Kindle in and redo the command, changing the destination output:

ls /dev/ > ~/dev2

The difference between the two files will show what has changed in the /dev/ directory:

 sdiff ~/dev1 ~/dev2

The output for mine (show in the image below) shows that 3 things changed when I plugged in the Kindle, sdb, sdb1 and sg2 directorys were added (shown by the > sign to the left). The folder I am looking for is the sdb1, this is where the mass storage device is found.

Write down where it’s found in /dev/ and then you can clean up those two files you previously made:

rm ~/dev1 | rm ~/dev2

The next thing we want to do is use udevadm to collect some useful information about the device which we can do by the following command (I have chosen to pipe the output to a file called kindle in the home dir, because the output was pretty big. If you don’t want to remove the > ~/kindle from the end of the command):

udevadm info -a -p $(udevadm info -q path -n /dev/sdb1) > ~/kindle

WARNING: This can look pretty daunting but, (in the words of Douglas Adams) Don’t Panic.

  looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/host21/target21:0:0/21:0:0:0/block/sdb/sdb1':
    KERNEL=="sdb1"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{partition}=="1"
    ATTR{start}=="16"
    ATTR{size}=="6410672"
    ATTR{alignment_offset}=="0"
    ATTR{discard_alignment}=="4294959104"
    ATTR{stat}=="     151     3389     4239     3776        0        0        0        0        0     2424     3776"
    ATTR{inflight}=="       0        0"

  looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/host21/target21:0:0/21:0:0:0/block/sdb':
    KERNELS=="sdb"
    SUBSYSTEMS=="block"
    DRIVERS==""
    ATTRS{range}=="16"
    ATTRS{ext_range}=="256"
    ATTRS{removable}=="1"
    ATTRS{ro}=="0"
    ATTRS{size}=="6410688"
    ATTRS{alignment_offset}=="0"
    ATTRS{discard_alignment}=="0"
    ATTRS{capability}=="51"
    ATTRS{stat}=="     156     3389     4279     3808        0        0        0        0        0     2456     3808"
    ATTRS{inflight}=="       0        0"

  looking at parent device '/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/host21/target21:0:0/21:0:0:0':
    KERNELS=="21:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="3"
    ATTRS{vendor}=="Kindle  "
    ATTRS{model}=="Internal Storage"
    ATTRS{rev}=="0100"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0xe1"
    ATTRS{iodone_cnt}=="0xe1"
    ATTRS{ioerr_cnt}=="0x1"
    ATTRS{modalias}=="scsi:t-0x00"
    ATTRS{evt_media_change}=="0"
    ATTRS{dh_state}=="detached"
    ATTRS{queue_depth}=="1"
    ATTRS{queue_type}=="none"
    ATTRS{max_sectors}=="240"

While this many look daunting, what you want to do if find some attributes from the output which mean only your Kindle will be found when looking for them all, the problem I have found is that, with udev rules you cannot go too far down in the parent tree which stops me being able to use the Kindles serial to identify it. This could mean that my computer will sync any Kindle that’s plugged into it but I don’t have 2 to check. The following are the attributes I chose:

KERNEL=="sd?", ATTRS{vendor}=="Kindle  ", ATTRS{modalias}=="scsi:t-0x00"

Now you’ll want to write the udev rule in /etc/udev/rules.d/

cd /etc/udev/rules.d/

According to the readme the numbers represent the priority of the rule (higher overriding lower) followed by a descriptive name and it must end in .rules eg (xx-description.rules).

sudo gedit 81-kindle-sync.rules

The following is the whole line I used for the udev rule, the only addition to the above is the RUN+=”/home/alex/.scripts/kindlesync.sh” which will run the script in that directory, this script contains the rsync command.

KERNEL=="sd?", ATTRS{vendor}=="Kindle  ", ATTRS{modalias}=="scsi:t-0x00", RUN+="/home/alex/.scripts/./kindlesync.sh"

Save and close the file and then restart the udev service:

sudo service udev restart

Writing a script to sync a folder on the Desktop with a folder on the Kindle using rsync:
Change the first directory from “/home/alex/ebooks/kindle_sync” to the directory on your computer where you want to keep the files that will be synced onto your Kindle and the second from “/media/Kindle/documents/sync/” to the location on your mounted Kindle where you want the files to be stored, save this file as kindlesync.sh. This is the script you call from the udev rules so for mine it’s saved as “/home/alex/.scripts/kindlesync.sh”.

#!/bin/bash

#Sync
rsync -av /home/alex/eBooks/kindle_sync/ /media/Kindle/documents/sync/

Go to the location of the script and make it executable with the following command:

chmod +x kindlesync.sh

Now try plugging in your Kindle and make sure it syncs up!

Problems

In the udev rule, ACTION==”add” can be used to specify when the Kindle is first plugged in, however when trying to use this Ubuntu’s auto-mounting service mounts the drive after the script is ran so the sync becomes useless. Without this it runs the script 3 times, twice before it has mounted and then once it has mounted – this is currently the best I have found but it’s extremely messy.

Categories
Blog Command Line Linux Posts Ubuntu

A More Elegant Solution to Ubuntu Wi-Fi Reconnecting Issue

Previously I was having problems with Ubuntu dropping wifi connections and failing to reconnect, to solve this I wrote a script which would kill the network-manager and then connect using iwconfig commands (here). While this works fine, it felt a little hacky, having to have a script running as sudo constantly in the background checking for a dropped connection. After a little searching I came across cron (the time based job scheduler ) and /etc/rc.local (a script which is run after all other initialization scripts have ran, allowing for scripts to be ran on startup) so from this I decided to split the old script up into connection and checking scripts which could be ran from init.d/local and cron, respectively.

Firstly my startup script in /etc/init.d/local which sets up and connects to the wireless network, open the file as sudo:

 sudo gedit /etc/rc.local

Paste in the following:

#! /bin/sh

service network-manager stop && service networking stop

iwconfig wlan0 essid NETWORKNAME
iwconfig wlan0 key WEPKEY
ifconfig wlan0 up
dhclient3 wlan0

sleep 10

if iwconfig wlan0 | grep -o "Access Point: Not-Associated"
then
	ifconfig wlan0 down
	sleep 10
	ifconfig wlan0 up

fi

exit 0

Next the script for checking the network is still connected, if not attempt to reconnect (named wirelesscheck.sh):

#!/bin/bash

if iwconfig wlan0 | grep -o "Access Point: Not-Associated"
then

	ifconfig wlan0 down
	sleep 10
	ifconfig wlan0 up
	
fi

Make sure this script is executable (from the directory of the script):

 chmod +x wirelesscheck.sh 

Note: This is setup in the sudo crontab, only because this command needs root privileges – other commands could be added to a user crontab (by removing sudo from the following.)

Now, edit (-e) the crontab for sudo:

 sudo crontab -e 

If crontab has not previously been used choose an editor (I used nano – 2) and append this line to the bottom of the file and change the frequency and directory of the script. The current settings will run it every 5 minutes (*/5) every hour, day, month and year and the file is located in “/path/to/script/wirelesscheck.sh”.

*/5 * * * * /path/to/script/wirelesscheck.sh

If you have any issues, leave a comment and I will help if I can.

Categories
Linux Posts

Ubuntu Disconnecting from Wi-Fi and Failing to Reconnect.

I have an updated fix for this issue using a startup script to connect and a time scheduled script for checking the connection, rather than having one constantly running in the background, avalible here – http://alexsleat.co.uk/2011/01/09/a-more-elegant-solution-to-ubuntu-wi-fi-reconnecting-issue/

I’ve been having some trouble with my wifi on Ubuntu recently but I think it’s because I’m almost out of range of the access point. The problem is that once it disconnects it never seems to be able to reconnect unless wireless is disabled and re-enabled. No doubt there is another way of fixing this issue but it gives me a chance to write my first shell script.

In short the script disables network-manager (it was trying to do things auto which was screwing with things), sets up the connection and connects then checks for a string in the wireless card parameters which will only occur if it’s disconnected, if the string appears it’ll disable and re-enable the wireless device which seems to allow it to connect again. If it’s connected it’ll wait 3 minutes (180 seconds) before checking again where as if it does disconnect it’ll check again 30 seconds after it’s tired rebooting the device.

Here’s the script, be sure to try it if you’re having the same problem (you might need to change the wireless device ‘wlan1’ to yours) and comment if I’m doing something wrong or there’s another way around this, cheers.

#!/bin/bash

service network-manager stop

iwconfig wlan1 essid NETWORKNAME
iwconfig wlan1 key NETWORKKEY
ifconfig wlan1 up
dhclient3 wlan1

while true;
do

if (iwconfig wlan1) | grep -o "Access Point: Not-Associated"
then
	ifconfig wlan1 down
	echo "not connected, rebooting Wifi"
	ifconfig wlan1 up
	sleep 30
else
	echo "connected"
	sleep 180
fi

done
Categories
Android Posts Windows

Samsung Galaxy S – Samsung Kies Connection Error

Okay so I went to check if I could get the SGS Froyo update which seems to be getting rolled out across the UK a little earlier than expected. I booted my laptop into Windows 7 64-bit, loaded Kies and was prompted to update it and once it was done I tried connected my SGS via USB and putting it in to Kies mode. Here’s where the error came about, it’d just sit there “connecting” on the Kies software on my laptop but just switching between MTP Application and the home screen on my phone.

Browsing the net I found a few “fixes” which involved deleting applications on my phone such as Soundhound (which I have never had) or more extreme and formatting the internal SD card only to have everything wiped.

The problem here though is actually just the drivers for 64-bit Win7 cannot handle corrupt data or bad files which are pretty common (say an app is loading an image from the net and you close it half way through BAM, broken file.)

So in order to fix this most annoying of errors you’re going to have to find those corrupt files on your phones memory.

  1. Close Samsung Kies
  2. Connect your phone and select ‘Mass Storage’ mode
  3. Mount USB via the notification bar
  4. Remove any corrupt files from the phones SD cards
    1. You can use this FileSearcherforKiesFix.zip to locate corrupt files
    2. Once found, navigate to the directory and remove them
    3. Research until none are found.
  5. Unmount, disconnect and reconnect the phone
  6. Open Kies and select the Kies option, it should now boot connect without any issues.

Source: (Post #50)  http://android.modaco.com/content-page/311526/samsung-galaxy-s-problems/page/40/

Categories
Posts Web

HowTo: Make WordPress 3.0 Default Theme (Twenty Ten) Single Column Full Width

The new WordPress default theme, Twenty Ten, is awesome but one thing that annoys me about it was the fact it’s single column template isn’t full width but instead just removing the sidebar and centering the content. It’s really easy to change that though so here’s how I did it:

  1. Under Appearance click Editor to open the theme editor
  2. If it isn’t already click on “Stylesheet (style.css)” on the right hand side (somewhere near the bottom)
  3. Now look for the following section of code (Ctrl+F will come in helpful here to find it) and change the width here from 640px to 900px then hit the Update File button:
/*
LAYOUT: One column, no sidebar
DESCRIPTION: One centered column with no sidebar
*/

.one-column #content {
	margin: 0 auto;
	width: 640px;
}

Now when you view pages which use the one column template they should fill the same amount of space that both the content and sidebar usually do.