fedora 10 - setup i686 environment for android (1)

Monday, June 22, 2009 | Published in | 0 comments

0. install git ($ sudo yum install git)
1. Download JDK 5.0 (jdk-1_5_0_19-linux-i586-rpm.bin) from sun

$ cd /usr/local
$ /tmp/jdk-1_5_0_19-linux-i586.bin
$ sudo updatedb
$ locate javac | grep bin
/usr/local/jdk1.5.0_19/bin/javac (the result)
$ sudo /usr/sbin/alternatives --install /usr/bin/java java /usr/local/jdk1.5.0_19/bin/java 100
$ sudo /usr/sbin/alternatives --install /usr/bin/jar jar /usr/local/jdk1.5.0_19/bin/jar 100
$ sudo /usr/sbin/alternatives --install /usr/bin/javac javac /usr/local/jdk1.5.0_19/bin/javac 100
$ sudo /usr/sbin/alternatives --config java


2 Play with curl

$ cd ~/bin (make sure ~/bin is in $PATH)
$ curl http:/android.git.kernel.org/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ cd ~/myspace/mydroid
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake
$ repo sync

mips - the next example

Wednesday, June 10, 2009 | Published in | 0 comments

This example access an array which is a block of buffer.

/* bar initialize input (or 3 to each element)
*/
int bar(int* in, int n)
{
int ret;
__asm__(
".set push \n" // save assembler option
".set noreorder\n" // suppress reordering
"lw $9, %2 \n" // $9 = n (counter end)
"li $8, 0 \n" // $8 = 0
"li $12, 0 \n" // $12 = 0
"move $4, %1\n" // $4 = in
"loop: \n"
"lw $11, ($4) \n" // $11 = *in
"ori $11, $11, 3 \n" // $11 = $11 || 3
"sw $11, ($4) \n" // *in = $11
"addi $4, $4, 4 \n" // in++ (move to next addess)
"addi $8, $8, 1 \n" // move to next sample
"bne $8, $9, loop \n" // loop
"sw $11, %0 \n" // save $12 to ret
".set pop \n" // restore assembler option
: "=m" (ret) // to return
: "r" (in),"m" (n) // the input
);
return ret;
}


Here the use of $8 is not the best, because the move the array element is by $4, soe the $8 is not most necessary, because $4 can be used to check the range for the loop.

mips - a first example

Tuesday, June 9, 2009 | Published in | 0 comments

In the following sample, it shows how to send the input (val) and the output (ret) to assembly block.


/* foo returns (val | 3)
*/
int foo(int val)
{
int ret;
__asm__(
".set push\n" // save assembler option
".set noreorder\n" // suppress reordering
"ori $2, %1, %2\n"
"sw $2, %0\n" // save $2 to ret
".set pop\n" // pop assembler option
: "=m" (ret) // ret: memory
: "r" (val), "n" (3) // val: read-only register, n: number
);
return ret;
}



The real code by dump is:

08804554 :
8804554: 27bdffd0 addiu sp,sp,-48
8804558: afbe0020 sw s8,32(sp)
880455c: 03a0f021 move s8,sp
8804560: afc40010 sw a0,16(s8)
8804564: 8fc20010 lw v0,16(s8)
8804568: 34420003 ori v0,v0,0x3
880456c: afc20000 sw v0,0(s8)
8804570: 8fc20000 lw v0,0(s8)
8804574: 03c0e821 move sp,s8
8804578: 8fbe0020 lw s8,32(sp)
880457c: 27bd0030 addiu sp,sp,48
8804580: 03e00008 jr ra
8804584: 00000000 nop

android notes - the process of development

Wednesday, May 27, 2009 | Published in | 0 comments

0 installation and setup
1 create a project

$ android create project --target 1 --path ./demo --activity demo --package com.example.demo

2 edit source code ~/myspace/demo/src/example/demo/demo.java
3 compile with ant

$ ant -debug -verbose

4 run emulator with a script

#! /bin/sh
out/host/linux-x86/bin/emulator -verbose \
-kernel prebuild/android-arm/kernel/kernel-qemu \
-ramdisk out/target/product/generic/ramdisk.img \
-system out/target/product/generic/system.img \
-init-data out/target/product/generic/userdata.img \
-avd myavd -sdcard ./sdcard.img -no-skin -no-boot-anim

5 install the application we have build

$ cd ~/myspace/demo
$ adb install bin/demo-debug.apk
$ adb install -r bin/demo-debug.apk (for reinstall)
$ adb shell
# logcat
# ps a (to get process id to kill)
# kill -9



That's on java side, on the android side,
1 setup

$ cd ~/myspace/mydroid
$ source ./build/envsetup.sh
$ lunch 1

2 build the project in android

$ cd ./frames/base/media/libmediaplayerservice
$ mm (it builds libmediaplayerservice library as an example)
$ cd ~/myspace/mydroid (go back to the root)
$ make snod (build the system image

then you can go back to run emulator with parameters specified in the script.

Calculate cpu usage in MCycles/sec

Wednesday, May 20, 2009 | Published in | 0 comments

Here is the script to calculate cpu usage in MCycles per second.
The cpu speed is 222MHz as an example, processing data rate is 44100, each block has 8192 samples, and the total calls to foo is 532.

#!/bin/bash

rate=44100
blksize=8192
cpu=222
call=532

# the following val is got from gprof as percentage cpu time, 30.11%.
pcpu_foo=30.11

duration=`echo "scale=4; $blksize * $call / $rate" | bc`
echo "duration: " $duration

secs_foo=`echo "scale=4; $duration * $pcpu_foo /100" | bc`
echo "secs_foo " $secs_foo

blksecs_foo=`echo "scale=4; $secs_foo/$call"|bc`
echo "blocksecs_foo" $blksecs_foo

cpu_foo=`echo "scale=4; $cpu * $rate / $blksize * $blksecs_foo"|bc`
echo "cpu_foo " $cpu_foo " MCycle/sec"

ubuntu notes - setup nfs server, etc

Wednesday, May 13, 2009 | Published in | 0 comments

1. setup nfs server

$ sudo apt-get install nfs-common nfs-kernel-server
$ sudo vim /etc/exports
/opt/share *(rw,sync)
$ sudo /etc/init.d/nfs-kernel-server start


2. config static ip

$ sudo vim /etc/network/interfaces, add the following lines:
auto eth0
iface eth0 inet static
address 192.168.0.9
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1
$ sudo /etc/init.d/networking restart

u8.04 - build procmeter3

| Published in | 0 comments

At last, I left Fedora Core 5 which I have used for these 2 years and move to Ubuntu. I am now running Ubuntu 8.04 which is not a very latest version, but at least it is newer than FC5.

But by default to build procmeter3, it prompts "X11/Intristic.h is missing". I have to install the following packages:

$ sudo apt-get install libxt-dev libxaw-headers libxaw7-dev
$ make
$ sudo make install