19 Feb 2009

Trying to use QEMU and GDB to debug GRUB 2

I made some modifications to GRUB 2 that seems to cause crashing somewhat early in boot process. So I wondered how to debug this. One obivious solution was to see what is happening on the system. So I planned to try out QEMU's GDB support.

First I was running QEMU from Ubuntu 7.10 to try it out, but it crashed the whole QEMU when my problemous code was executed so it wasn't so nice :). Next I went to get newest QEMU from their SVN, compiled it and tested it out. This newest version doesn't crash anymore so I continued my trek.

As there didn't seem to be any good front ends matching my requirements for this case I turned to last resort; gdb text console itself.

I have never liked the gdb text console interface so it took a bit time to remember (and google) how it works.

To start QEMU I used following command:

qemu -cdrom grub2.iso -s -S


And then in GDB:

target remote localhost:1234

; as we start in 16bit real mode
set arch i8086

; set breakpoint in entry point, at begining of GRUB2's CD-ROM boot sector code.
break *0x7c00

Then I just entered 'c' to start execution until it hit the break point.

After that it said:

Program received signal SIGTRAP, Trace/breakpoint trap.
0x00000000 in ?? ()

This message was a bit confusing and QEMU manual provide a bit advice in here.

To see where I really was I had to use following command:

x/10i $cs*16+$eip

And there was the boot sector code.

Now in order to step one instruction forward there is stepi command in gdb. However it seems that I first have to delete previous breakpoint:

; to see list of breakpoints
info b

; and to delete one I just set
delete 1

After this stepi worked fine.

Now I just need to figure out a bit more user friendlier way to debug :|

1 Dec 2007

New beta release for YDL's kernel for PS3

I tested out today new beta kernel released for PS3. It indeed seems that some progress was done with firmware 2.00. I can nicely see that access point scan shows better values for my WPA1+2 network. Actually it shows now new WPA2 values.

Now everything would had been nice if YDL had also updated this aspect on their kernel update... Now it tells that we have this new type of security and this version of driver doesn't actually know how to handle it correctly... Rebooting and trying to reload network again (/etc/init.d/network restart) got it associated nicely.

In bleeding edge driver there are new encryption modes that should be settable with 'iwpriv eth0 set_alg 4' for WPA2-PSK TKIP and 'iwpriv eth0 set_alg 5' for WPA2-PSK AES. But YDL's kernel driver doesn't accept values of 4 and 5... So if you are running WPA1 only network, then your setup should work fine (haven't tested it out though), if you also have WPA2 enabled then you may have some problems making connection.

8 Nov 2007

New PS3 firmware 2.00 breaks wireless support on Linux

It seems that after upgrading to new Playstation 3 firmware (2.00) it seems hypervisors wireless support is incompatible with Yellow Dog Linux 5.0.2. This means that you can't get connected with wireless connection. Haven't tried with newest kernel from newest Cell Linux Distributors kit yet, but at least ydl is now broken. So if you need wireless support you'd better wait for either updated kernel package or next firmware release.

4 Aug 2007

Guide to get WPA-PSK working on PS3 - YDL 5.0.2

There were some requests for easier guide on how to get WPA working on Playstation 3 for Yellow Dog Linux 5.0.2. I looked around and found some free webspace for prebuilt binaries and for modified source RPMs. Please note that you will need your YDL root account in order to complete steps below.

This guide was last updated on: 4.8.2007

1. Update your wireless tools package

Yellow Dog Linux 5.0.2 comes with wireless tools package compiled for PowerPC-32. While this may work for other systems with Playstation 3 this is a bit problematic as ioctl32 wireless interface is a bit broken. So easiest workaround for this is to compile wireless tools as PowerPC-64 binaries. You can get modified source RPMs and pre-built binaries for easier installation from my packages website. Most users just need to download wireless-tools-28-1.ppc64.rpm and install it. You can use USB Flash Memory or any other medium to transfer files.

rpm -Uvh wireless-tools-28-1.ppc64.rpm

If it complains for conflicts add --force to command line (usually don't do this, but I didn't want to update release numbers in case Yellow Dog Linux releases updated packages to replace this). Please note that this is modification of YDL's source RPM package so it is a bit older that what kernel would like to use. It will generate some warnings, but you can ignore those.

2. Test that wireless tools works

Next step is to test out that wirless tools works. Tools needed in this experiment are ifconfig, iwconfig, iwpriv, iwlist, and dhclient.

First lets test out that you can wireless module loaded correctly. For this we will use iwconfig:

iwconfig eth0

This will display something like (your details may be different):

eth0 radio off ESSID:off/any
Mode:Managed Frequency:2.462 GHz Access Point: Not-Associated
Bit Rate:54 Mb/s
Encryption key:off
Link Quality:0 Signal level:0 Noise level:0
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Next let's make sure you have clean configuration for your wireless connection, command eth0 down and up:

ifconfig eth0 down

ifconfig eth0 up

Next you can try to search for access point to connect to using iwlist.

iwlist eth0 scanning

This will display something like (your details will be different):

eth0 Scan completed :
Cell 01 - Address: 77:88:99:AA:BB:CC
ESSID:""
Protocol:IEEE 802.11bg
Mode:Managed
Channel:11
Encryption key:on
Quality=100/100 Signal level=-42 dBm
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
24 Mb/s; 36 Mb/s; 54 Mb/s; 6 Mb/s; 9 Mb/s
12 Mb/s; 48 Mb/s
Extra:bcn_int=100
Extra:ap_sec=0201

You should note last line per entry Extra:ap_sec=. This number will tell what encryption algorithm is needed for your connection. 0201 means WPA-PSK - TKIP and 0202 would mean WPA2-PSK - AES. I have not been able to test out WPA2-PSK - AES, but it might work for you. For me 0100 shows up for WPA2-PSK - AES which is incorrect as that would mean WEP encryption.

Next lest try manually connecting to Access Point. For this you will need to know your access point's ESSID, used encryption algorithm (WPA-PSK (TKIP), WPA2-PSK (AES)) and passphrase to access network.

iwpriv eth0 set_alg 2

iwconfig eth0 key s:passphrase

iwconfig eth0 essid ESSID

If you have WPA2-PSK replace set_alg 2 with set_alg 3. For WEP this would be set_alg 1. After that you can observe output of iwconfig eth0 to see if you have been associated to access point (Access Point field changes from Not-Associated to MAC address of your AP).

Next you can check out if you can get an IP address with dhclient.

dhclient eth0

If it gives you an IP address you are free to test out your internet connection with your web browser or any other tool that needs connection.

3. Setting it up automatically on boot

Now that you have Wireless connection working it would be nice that it would work automatically after being rebooted.

There are only two files to be modified.

First, lets modify /etc/sysconfig/networking/devices/ifcfg-eth0.

Set following fields to values shown below (of course change your ESSID) (other fields can be left empty):

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
ESSID=ESSID
TYPE=Wireless

Next we need to store your passphrase so it will be automatically configured.

Edit /etc/sysconfig/networking/devices/keys-eth0 to contain following:

KEY=s:passphrase
IWPRIV="set_alg 2"

Please not that those values are the same that you used during testing.

After this you can try it, first bring eth0 down and then back to up:

ifdown eth0

ifup eth0

Thats all!

20 Jul 2007

How to get YDL 5.0.2 + PS3 + WPA working

First you need to recompile wireless-tools package as PowerPC64. Currently there is a bug in kernel (or feature) that does not allow ioctl32 calls to be used correctly. Therefore this causes ydl's default wireless-tools package not to work as it is compiled as PowerPC32.

To recompile it you need source RPM for wireless tools package: wireless-tools-28-1.src.rpm. Install it. It should extract some files under /usr/src/yellowdog/*/*. Unfortunely this package has problems compiling for ppc64 so this needs to be fixed first. I have made a patch for it which can be found from yellowdog-devel mailing list. Basicly you need to copy that new makefile patch file over older makefile patch file and then you can build it. After that just run "rpmbuild -bb wireless-tools.spec --target=ppc64" and it builds could of RPMs to /usr/src/yellowdog/RPMS/ppc64/. Install wireless-tools-28-1.ppc64.rpm package (rpm -ivh <pkg>). After that you can use iwconfig, iwpriv tools nicely and configure WPA.

To get it working automatically you must modify two files:
/etc/sysconfig/networking/devices/ifcfg-eth0
/etc/sysconfig/networking/devices/keys-eth0

For ifcfg-eth0:

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
ESSID=<your ESSID>
TYPE=Wireless

(others can be left empty)

If you don't use DHCP for some reason configure rest how you like.

For keys-eth0:

KEY=s:<your passphrase>
IWPRIV="set_alg 2"

Change "set_alg 2" to "set_alg 3" if you have WPA2-PSK (AES). I didn't get WPA2 working and I think it is hypervisor's firmware issue (as it works correcly in GameOS). This might be relative you Wireless Accesspoint in use or your PS3 hardware & firmware version. Check how it works, and tell us if you have success.

Oh. YDL's wireless kernel driver is a bit old, so AP scan might not work correctly. It is possible to compile newer driver for YDL but I won't go to details this time.

15 Jul 2007

Serving mp4 files to PS3

Playstation 3's webbrowser seems to be quite picky on what it accepts to be downloadable. On net there was some hints to rename filenames as avi. But at least for me it downloaded them but at least my mp4 trailer was reported as corrupt. Perhaps there should be correct AVI container data present for that trick to work. However that made me think. Perhaps my local server was just missing correct MIME type. Googled a bit and it seems that mp4 files should be recognized as video/mp4. Reconfigured apache to recognize this and voilá! mp4 files downloads nicely from my home server. And as extension was correct PS3's video player played that mp4 trailer nicely.

3 Jul 2007

Mylyn looks great!

With recent release of new Eclipse Europa there was new tools introduced or at least new to me. One of them was Mylyn, a task based workflow integration to Eclipse. I saw some web presentations with demonstration how nicely it integrated with Java work. It looked promising but there wasn't any info how it integrates with CDT or with other stuff. So I wanted to test it out. And yes, it looks like its source listing feature also works with CDT! Yay! This looks really promising and useful feature when working with large sets of code. It just needs a trac or bugzilla so it can share those filtering settings. Something to bake on my development server ;).