Tuesday, October 27, 2009
Thursday, September 17, 2009
Fix syntax highlighter in the blogger template
Sep-17th - It seems syntax highlighter has updated, so my code snippet is in a mess again:(
Sep-30th:
Revert to R92. Change the template as following:
Sep-30th:
Revert to R92. Change the template as following:
<link href='http://flash-host.com.br/blog/sh/SyntaxHighlighter.css' rel='stylesheet' type='text/css'/>
<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn-history/r92/trunk/Scripts/shCore.js'/>
<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn-history/r92/trunk/Scripts/shBrushCSharp.js'/>
<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn-history/r92/trunk/Scripts/shBrushXml.js'/>
<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn-history/r92/trunk/Scripts/shBrushPython.js'/>
<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn-history/r92/trunk/Scripts/shBrushJScript.js'/>
<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn-history/r92/trunk/Scripts/shBrushCpp.js'/>
<script language='javascript' src='http://syntaxhighlighter.googlecode.com/svn-history/r92/trunk/Scripts/shBrushBash.js'/>
<script language='javascript'>
dp.SyntaxHighlighter.BloggerMode();
dp.SyntaxHighlighter.HighlightAll('code');
</script>
Tuesday, July 7, 2009
Opencore logs and releases
1. Enable Opencore 2.0x logs:
1)At compilation time, add the marco ENABLE_PV_LOGGING=1
$ cd <android_home>
$ touch external/opencore/oscl/oscl/osclbase/src/pvlogger.h
$ make ENABLE_PV_LOGGING=1
2)At runtime, /sdcard/pvlogger.txt is used to specify enabled log level and related tags. (write 8 alone in it will enable all pv logs.) Below is extracted from external/opencore/android/android_logger_config.h:
/*
To configure logging at runtime, a file pvlogger.txt must be located in the sdcard.
The format for log level and logger tag in the file should be: "level,node". Note that there should be no space between log level and logger tag.
For example, pvlogger.txt can look like:
1,PVPlayerEngine
8,PVSocketNode
Above example means log the message level PVLOGMSG_ALERT for PVPlayerEngine and PVLOGMSG_DEBUG for PVSocketNode. See pvlogger.h for log level values.
*/
2. Enable Opencore 1.0 logs:
1)Change external/opencore/oscl/pvlogger/src/pvlogger.h:
/* Release mode-- No logging */
#define PVLOGGER_INST_LEVEL 0 ---- Change this value to 5
2)Change external/opencore/android/thread_init.cpp:
#if 0 --------- Change this value to 1
PVLoggerAppender *appender = new
AndroidLogAppender();
...
...
#endif
3)Rebuild android source.
PV Releases:
PV2.04: http://groups.google.com/group/android-framework/browse_thread/thread/ccec12e4fe876149/17254e4a88875a6b
PV2.02: http://groups.google.com/group/android-framework/browse_thread/thread/8b72bdad6ca508e/33033406a6b2e0d0
PV2.01: http://groups.google.com/group/android-framework/browse_thread/thread/5712f642dbee9398/f943ebc7ec02bb18
PV2.0: http://groups.google.com/group/android-framework/browse_thread/thread/92e10684c6f09e16/8df445f867c19f2e
1)At compilation time, add the marco ENABLE_PV_LOGGING=1
$ cd <android_home>
$ touch external/opencore/oscl/oscl/osclbase/src/pvlogger.h
$ make ENABLE_PV_LOGGING=1
2)At runtime, /sdcard/pvlogger.txt is used to specify enabled log level and related tags. (write 8 alone in it will enable all pv logs.) Below is extracted from external/opencore/android/android_logger_config.h:
/*
To configure logging at runtime, a file pvlogger.txt must be located in the sdcard.
The format for log level and logger tag in the file should be: "level,node". Note that there should be no space between log level and logger tag.
For example, pvlogger.txt can look like:
1,PVPlayerEngine
8,PVSocketNode
Above example means log the message level PVLOGMSG_ALERT for PVPlayerEngine and PVLOGMSG_DEBUG for PVSocketNode. See pvlogger.h for log level values.
*/
2. Enable Opencore 1.0 logs:
1)Change external/opencore/oscl/pvlogger/src/pvlogger.h:
/* Release mode-- No logging */
#define PVLOGGER_INST_LEVEL 0 ---- Change this value to 5
2)Change external/opencore/android/thread_init.cpp:
#if 0 --------- Change this value to 1
PVLoggerAppender *appender = new
AndroidLogAppender
...
...
#endif
3)Rebuild android source.
PV Releases:
PV2.04: http://groups.google.com/group/android-framework/browse_thread/thread/ccec12e4fe876149/17254e4a88875a6b
PV2.02: http://groups.google.com/group/android-framework/browse_thread/thread/8b72bdad6ca508e/33033406a6b2e0d0
PV2.01: http://groups.google.com/group/android-framework/browse_thread/thread/5712f642dbee9398/f943ebc7ec02bb18
PV2.0: http://groups.google.com/group/android-framework/browse_thread/thread/92e10684c6f09e16/8df445f867c19f2e
Friday, April 24, 2009
World Reading Day
Below is a list of good software books:
Top 100 Best Software Engineering Books, Ever
Personally, I am a little surprised that Eric Evans' "Domain-Driven Design" ranks so low. And "Object Design: Roles Responsibilities and Collaborations" by Rebecca Wirfs-Brock is not on the list which is also worth reading:)
As someone commented, the list is more likely to be based on the popularity (good or not is really a subjective judgment which lacks the objective criteria:), but still, a good reference for reading.
(BTW: The original creator of the list has published another list of Top 50 New Software Development Books which may still need time proven:)
Top 100 Best Software Engineering Books, Ever
Personally, I am a little surprised that Eric Evans' "Domain-Driven Design" ranks so low. And "Object Design: Roles Responsibilities and Collaborations" by Rebecca Wirfs-Brock is not on the list which is also worth reading:)
As someone commented, the list is more likely to be based on the popularity (good or not is really a subjective judgment which lacks the objective criteria:), but still, a good reference for reading.
(BTW: The original creator of the list has published another list of Top 50 New Software Development Books which may still need time proven:)
Saturday, April 4, 2009
Tips for debugging mediaserver
1. Add symbol file for dynamically loaded so, e.g. libopencore_asflocal.so
(1) Find where the module was loaded:
#cat /proc/<pid>/maps
a7c26000-a7c52000 r-xp 00000000 1f:06 1060 /system/lib/libopencore_asfloca
l.so
a7c52000-a7c54000 rw-p 0002c000 1f:06 1060 /system/lib/libopencore_asfloca
l.so
(2) Get the text section's offset within the module:
$objdump --section-headers out/target/product/generic/symbols/system/lib/libopencore_asflocal.so |grep text
6 .text 0001679c 0000e3c8 0000e3c8 0000e3c8 2**3
(3) Add this offset to the load address of the module to obtain the relocation address for the module's code: (0xa7c26000+0x0000e3c8 = 0xa7c343c8)
(gdb)add-symbol-file out/target/product/generic/symbols/system/lib/libopencore_asflocal.so 0xa7c343c8
2. Switch between threads inside mediaserver process
(gdb) info threads
(gdb) thread <id>
[1]Debugging with GDB
[2]Debugging Loadable Modules Using GDB
[3]Debugging programs with multiple threads
(1) Find where the module was loaded:
#cat /proc/<pid>/maps
a7c26000-a7c52000 r-xp 00000000 1f:06 1060 /system/lib/libopencore_asfloca
l.so
a7c52000-a7c54000 rw-p 0002c000 1f:06 1060 /system/lib/libopencore_asfloca
l.so
(2) Get the text section's offset within the module:
$objdump --section-headers out/target/product/generic/symbols/system/lib/libopencore_asflocal.so |grep text
6 .text 0001679c 0000e3c8 0000e3c8 0000e3c8 2**3
(3) Add this offset to the load address of the module to obtain the relocation address for the module's code: (0xa7c26000+0x0000e3c8 = 0xa7c343c8)
(gdb)add-symbol-file out/target/product/generic/symbols/system/lib/libopencore_asflocal.so 0xa7c343c8
2. Switch between threads inside mediaserver process
(gdb) info threads
(gdb) thread <id>
[1]Debugging with GDB
[2]Debugging Loadable Modules Using GDB
[3]Debugging programs with multiple threads
Saturday, March 14, 2009
3. Debug native process via ssh tunnel on Windows
By leveraging SSH tunnel, we can setup a gdb session from remote linux workstation to the connected device on Windows following below steps:
1. Config a Putty session with SSH tunnel enabled, adding a forwarded port from remote <port> -> <device ip>:<port> (e.g. R5039->192.168.16.2:5139)

2. Connect to the device on Windows via adb shell, then start gdb server to attach the specified native process.
$gdbserver <port> --attach <pid> #(e.g. $gdbserver :5139 --attach 65)
$gdbserver <port> --attach <pid> #(e.g. $gdbserver :5139 --attach 65)
3. Connect to remote linux workstation with the session defined in step 1
$cd ~/repo/android_root
$./mygdb.sh <executable> <port>
$cd ~/repo/android_root
$./mygdb.sh <executable> <port>
Below is the source code of mygdb.sh:
#!/bin/sh
#This script is used to setup gdb to debug native processes on the device
if [ ! -f .repo/manifest.xml ]; then
echo "Please run gdb under android repo root directory!"
exit 1;
fi
rootdir=`pwd`
product="generic"
scriptdir=`dirname $0`
if [ $1 = "-p" ]; then
shift
product=$1
shift
elif [ -f $rootdir/product.cfg ]; then
product=`cat $rootdir/product.cfg`
elif [ -f $scriptdir/product.cfg ]; then
product=`cat $scriptdir/product.cfg`
fi
gdbtool="./codesourcery/toolchain/bin/arm-none-linux-gnueabi-gdb"
#gdbtool="./prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gdb"
exename="$1"
if [ -z "$exename" ] ; then
exename="mediaserver"
fi
portnum="$2"
if [ -z "$portnum" ] ; then
portnum=":5039"
fi
OUT_UNSTIPPED_DIR=$rootdir/out/target/product/$product/symbols/
if [ ! -z "$OUT_DIR" ]; then
OUT_UNSTIPPED_DIR=$OUT_DIR/target/product/$product/symbols/
fi
OUT_SO_SYMBOLS=$OUT_UNSTIPPED_DIR/system/lib/
OUT_BIN_SYMBOLS=$OUT_UNSTIPPED_DIR/system/bin/
echo >"$rootdir/gdbclient.cmds" "set solib-search-path $OUT_SO_SYMBOLS"
echo >>"$rootdir/gdbclient.cmds" "target remote $portnum"
echo >>"$rootdir/gdbclient.cmds" "set auto-solib-add on"
echo >>"$rootdir/gdbclient.cmds" "set sysroot $OUT_UNSTIPPED_DIR"
#echo >>"$rootdir/gdbclient.cmds" "set solib-absolute-prefix $OUT_UNSTIPPED_DIR"
echo >>"$rootdir/gdbclient.cmds" ""
$gdbtool -x "$rootdir/gdbclient.cmds" "$OUT_BIN_SYMBOLS/$exename"
[1]SSH tunnel explained
[2]Tunneling protocol
[3]gdbclient in envsetup.sh
Wednesday, March 4, 2009
Subscribe to:
Posts (Atom)