2015年3月30日 星期一

Creating cscope and ctags database for vim

Here is a guide how to establish cscope and ctags database for tracing Android codebase, you can apply the code to any other project in C/C++ or Java. I wrote a script for creating the database with following functions

  • Creating cscope database
  • Creating ctags database
  • Update cscope or ctags databse if they exist
  • Clean cscope and ctags database

Usage under shell after the script is included

  • run run_cscope_ctags to create database
  • run clean_cscope_ctags to clean database
  • run run_cscope_ctags while database exists to update database


Following are steps for using the script, enjoy it.

I. Install related tools
  1. sudo apt-get install cscope
  2. sudo apt-get install ctags
II. Include script for cscope and ctags into .bashrc
  1. vim ~/.bashrc
    append following script for establishing cscope and ctags databse
    #
    # Including cscope ctags script
    #
    source $HOME/path/you/place/run_cscope_ctags.sh
    
  2. vim run_cscope_ctags.sh
    paste following code in the script
    #!/bin/bash
    tags_update="n"
    tags_create="n"
    cscope_update="n"
    cscope_create="n"
    
    function make_ctags()
    {
     ctags_option="-R    \
      --exclude=.git  \
      --exclude=out   \
      --c++-kinds=+p  \
      --fields=+iaS   \
      --extra=+q ."
    
     ctags_option2="-R   \
      --exclude=.git  \
      --exclude=out   \
      --extra=+q ."
    
     if [ $1 == "update" ]; then
      ctags -o newtags $ctags_option2
      rm -f tags
      mv newtags tags
     elif [ $1 == "create" ]; then
      ctags $ctags_option2
     else
      echo Error: wrong ctags option, check the code
      exit 1
     fi  
    }
    
    function make_cscope()
    {
     find `pwd` -path ./out -prune               \
      -o -name "*.aidl"   -exec echo \"{}\" \;\
      -o -name "*.asm"    -exec echo \"{}\" \;\
      -o -name "*.s"      -exec echo \"{}\" \;\
      -o -name "*.S"      -exec echo \"{}\" \;\
      -o -name "*.h"      -exec echo \"{}\" \;\
      -o -name "*.c"      -exec echo \"{}\" \;\
      -o -name "*.cpp"    -exec echo \"{}\" \;\
      -o -name "*.cc"     -exec echo \"{}\" \;\
      -o -name "*.java"   -exec echo \"{}\" \;\
      -o -name "*.xml"    -exec echo \"{}\" \;\
      -o -name "*.dtsi"   -exec echo \"{}\" \;\
      -o -name "*.dts"    -exec echo \"{}\" \;\
      -o -name "*.rc"     -exec echo \"{}\" \;\
      -o -name "*.mk"     -exec echo \"{}\" \;\
      -o -name "*.sh"     -exec echo \"{}\" \;\
      -o -name "*.kl"     -exec echo \"{}\" \;\
      > cscope.files
    
     if [ $1 == "update" ]; then
      cscope -bkq -i cscope.files -f newcscope.out
      rm -f cscope.out cscope.out.in cscope.out.po
      mv newcscope.out cscope.out
      mv newcscope.out.in cscope.out.in
      mv newcscope.out.po cscope.out.po
     elif [ $1 == "create" ]; then
      cscope -bkq -i cscope.files -f cscope.out
     else
      echo Error: wrong cscope option, check the code
      exit 1
     fi
    
     return 0
    }
    
    #
    # Check ctags
    #
    function check_ctags()
    {
     if [ -f "tags" ]; then
      read -p "tags file exists, update it? (y/n) " tags_update
    
     if [ $tags_update = "y" ] || [ $tags_update = "Y" ]; then
      echo "tags is to update"
     elif [ $tags_update = 'n' ] || [ $tags_update = 'N' ]; then
      echo "tags not updated"
     else
      echo "wrong option, quit"
      exit 1
     fi
     else
      read -p "tags does not exist, create new tags? (y/n) " tags_create
     fi
    }
    
    #
    # Check cscope
    #
    function check_cscope()
    {
     if [ -f "cscope.out" ]; then
      read -p "cscope.out exists, update it? (y/n) " cscope_update
    
      if [ $cscope_update = "y" ] || [ $cscope_update = "Y" ]; then
       echo "cscope files is to update"
      elif [ $cscope_update = 'n' ] || [ $cscope_update = 'N' ]; then
       echo "cscope files not updated"
      else
       echo "wrong option, quit"
       exit 1
      fi
     else
      read -p "cscope.out does not exist, create new cscope.out? (y/n) " cscope_create
     fi
    }
    
    #
    # Create ctags and cscope
    #
    function create_ctags_cscope()
    {
     if [ $tags_create = "y" ] || [ $tags_create = "Y" ]; then
      echo "creating tags file"
      make_ctags "create";
      echo "tags created"
     fi
    
     if [ $cscope_create = "y" ] || [ $cscope_create = "Y" ]; then
      echo "creating cscope.out"
      make_cscope "create";
      echo "cscope.out created"
     fi
    }
    
    #
    # Update ctags and cscope
    #
    function update_ctags_cscope()
    {
     if [ $tags_update = "y" ] || [ $tags_update = "Y" ]; then
      echo "updating tags file"
      make_ctags "update";
      echo "tags updated"
     fi
    
     if [ $cscope_update = "y" ] || [ $cscope_update = "Y" ]; then
      echo "updating cscope files"
      make_cscope "update";
      echo "cscope.out updated"
     fi
    }
    
    #
    # Clean current database
    #
    function clean_ctags_cscope()
    {
     rm -f cscope.* ncscope.* tags
    }
    
    #
    # Main function
    #
    function run_cscope_ctags()
    {
     check_ctags;
     check_cscope;
     create_ctags_cscope;
     update_ctags_cscope;
    }
Another options for C++ tagging
http://stackoverflow.com/questions/1932396/c-source-tagging

2015年1月9日 星期五

Making Raspberry Pi a Torrent Box

Installing and setting transmission-daemon

http://wwssllabcd.github.io/blog/2013/04/22/how-to-setup-transmission-deamon-in-raspberry-pi/


http://choorucode.com/2014/07/05/how-to-torrent-on-raspbmc-using-transmission/

Permission settings for download folders

http://www.robertsetiadi.net/installing-transmission-in-raspberry-pi/

Upgrade Ubuntu 13.04 to 14.04 LTS

1. Follow steps in 

http://www.tuxtrix.com/2014/03/upgrade-from-ubuntu-1304-to-ubuntu-1404.html
This is gonna take hours.
There are prompts you need to select when installing new packages, don't leave.

2. If Ubuntu 14.04 LTS boots to tty1

sudo apt-get update 
sudo apt-get install aptitude
sudo aptitude reinstall lightdm
reboot and see if it works, else
sudo aptitude install gdm
reboot

2014年9月6日 星期六

Control Raspberry Pi via VNC and setup virtual server on router/AP

The setup concept is like following diagram

VNC client<-->Internet<-->router<-->Raspberry Pi
  1. Setup VNC server
    • sudo apt-get install tightvncserver
    • vncserver -geometry 1024x768 -depth 24 and set password, this password is only used for VNC login
    • You will require a password to access your desktops.

      Password: 
      Warning: password truncated to the length of 8.
      Verify:   
      Would you like to enter a view-only password (y/n)? n

      New 'X' desktop is raspberrypi:1

      Creating default startup script /home/pi/.vnc/xstartup
      Starting applications specified in /home/pi/.vnc/xstartup
      Log file is /home/pi/.vnc/raspberrypi:1.log
    • :1 is desktop number which stands for VNC port is 5901
  2. Setup virtual server on router/AP
    • Enter virtual server settings in router
    • Name: RPi
    • IP address: loca network address of RPi, 192.168.x.y for example
    • Public port: choose a valid port number, 8899 for example
    • Private port: 5901
    • Protocol: choose both TCP and UDP
  3. Connect to Raspberry Pi
    • Check your worldwide IP address on Internet, w.x.y.z
    • Open VNC client and enter address like w.x.y.z:8899
    • Connect and it should work

2013年7月6日 星期六

風迷藏

孟堯的取樣我真的滿喜歡的
而且他一直在進化

這麼好聽的團
因為鼓手貝斯離開停團還是有點難過
志翔太強了我沒自信能彈出那種tone跟動態
期待他從澳洲回來之後
重新出發的風迷藏

2013年6月9日 星期日

Remote debugging EDK2 BeagleBoardPkg on qEmu

Get ARM none EABI toolchain

arm-none-eabi-gdb included
http://www.codesourcery.com/sgpp/lite/arm/portal/package7813/public/arm-none-eabi/arm-2010.09-51-arm-none-eabi-i686-pc-linux-gnu.tar.bz2

Get module symbol information

Check Build/BeagleBoard/DEBUG_ARMGCC/FV/FVMAIN_COMPACT.Fv.map
Get .textbaseaddress and .databaseaddress

Load symbol information

arm-none-eabi-gdb
(gdb) add-symbol-file <BEAGLEROOT>/Build/BeagleBoard/DEBUG_ARMGCC/ARM/ArmPlatformPkg/PrePi/PeiUniCore/DEBUG/ArmPlatformPrePiUniCore.dll 0x0080008180 -s data 0x008001b5e4

add symbol table from file <BEAGLEROOT>/Build/BeagleBoard/DEBUG_ARMGCC/ARM/ArmPlatformPkg/PrePi/PeiUniCore/DEBUG/ArmPlatformPrePiUniCore.dll" at
.text_addr = 0x80008180
data_addr = 0x8001b5e4
(y or n) y

Reading symbols from <BEAGLEROOT>/Build/BeagleBoard/DEBUG_ARMGCC/ARM/ArmPlatformPkg/PrePi/PeiUniCore/DEBUG/ArmPlatformPrePiUniCore.dll...warning: section data not found in <BEAGLEROOT>/Build/BeagleBoard/DEBUG_ARMGCC/ARM/ArmPlatformPkg/PrePi/PeiUniCore/DEBUG/ArmPlatformPrePiUniCore.dll
done.

Start ARM qEmu

qemu-system-arm -M beagle -s -S -serial stdio -sd beagle.img
-s for waiting for gdb connection
-S for stopping execution when qEmu starts up

Connecting qEmu using GDB

(gdb) target remote :1234
Remote debugging using :1234
0x40014000 in ?? ()

Example

(gdb) b _ModuleEntryPoint
Breakpoint 1 at 0x80008188: file /home/kurt/programming/edk2/src/beagle/Build/BeagleBoard/DEBUG_ARMGCC/ARM/ArmPlatformPkg/PrePi/PeiUniCore/OUTPUT/Arm/ModuleEntryPoint.iii, line 39.

Connecting qEmu using DDD

sudo apt-get install ddd
ddd --debugger arm-none-eabi-gdb

In DDD using GDB command line

Get module symbol information
Load symbol information
Connecting qEmu using GDB




2013年6月7日 星期五

Build EDK2 BeagleBoardPkg on Mac OS X

Install XCode


Install MacPorts


Install ARM toolchain 

sudo port install arm-none-eabi-gcc 

Within Darwin section in  BeagleBoardPkg/build.sh

Change XCODE32 to ARMGCC

Build

./build.sh

Linaro image tools for Mac OS X

Not available yet
https://bugs.launchpad.net/linaro-image-tools
My workaround is making image on the Ubuntu and load it to Mac
Looking forward tools for Mac OS X
Temporarily switch back to Ubuntu