type:文字博文
topic:Android 应用程序开发经验
contest logo:第二届 Google 暑期大学生博客分享大赛 - 2011 Android 成长篇
一.android 基础篇:
1.配置Android编译环境
Version:android froyo (2.2)
i.安装编译工具
sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
ii.在~/.bashrc添加以下环境变量,然后使用source ~/.bashrc生效
#java 程序开发/运行的一些环境变量
JAVA_HOME=/usr/lib/jvm/java-6-sun
JRE_HOME=${JAVA_HOME}/jre
export ANDROID_JAVA_HOME=$JAVA_HOME
export CLASSPATH=.:JRE_HOME/lib:$CLASSPATH
export JAVA_PATH={JRE_HOME}/bin
export JAVA_HOME;
export JRE_HOME;
export CLASSPATH;
HOME_BIN=~/bin/
export PATH={JAVA_PATH}:${HOME_BIN};
iii.执行./build/envsetup.sh,安装环境变量
iv.编译.根据场景不同,具体有以下命令.
make ;//双核电脑加入-j2可以加快速度
mm ;//仅编译模块.
附:成功编译标志,如下
Install system fs image: out/target/product/generic/system.img
Target ram disk: out/target/product/generic/ramdisk.img
Target userdata fs image: out/target/product/generic/userdata.img
Installed file list: out/target/product/generic/installed-files.txt
2.配置Uboot烧写环境
i.配置minicom串口:
分别设置端口为ttyS0,波特率115200,无硬件数据流控制;
PS:串口的检测:
shell echo " ">/dev/ttyS0 ;//如果正常会显,说明串口0工作正常。
ii.设置网络参数并检验.
进入minicom后,为保证nfs畅通,设置以下参数ip,serverip等
检验方法:
ping serverip ;//返回alive就成功配置
iii.设置bootargs,此乃传递给内核的参数
样例:
set bootargs console=ttyAS0,115200 nwhwconf=device:eth0,hwaddr:${ethaddr} stmmaceth=msglvl:0,watchdog:5000 ide0=noprobe nfsroot=${serverip}:/opt/STM/STLinux-2.4/devkit/sh4/target/root ,nfsvers=2,rsize=4096,wsize=8192,tcp root=/dev/nfs ip=${ipaddr}:${serverip}:192.168.1.1:255.255.255.0::eth0:off bigphysarea=2000\; &&saveenv
扩展:
为了支持android fs,要修改ntfroot
为了自启动init,要添加init=/init
为了让framebuffer工作,添加 video=vfb:
iv.烧写uboot
run uboot;//
v.烧写kernel
run kernel;//成功的烧写可以引导进入fs,否则就是kernel panic等错误
3.搭建网络文件系统
首先在pc端要启动服务,
i.往/etc/export添加nfs目录:
如:/opt/STM/STLinux-2.4/devkit/sh4/target *(rw,sync,no_root_squash)
ii.在超级用户下,重启以下服务:
service portmap restart ;
service nfs-kernel-server restart
iii.检验:输入以下命令showmount -e
检验效果:
Export list for root:
/opt/STM/STLinux-2.4/devkit/sh4/target
二.android 移植(持续中)
1.关于android init程序的调试
其实这个可以归结为android native c的调试。
以Android的init进程调试为例,
i.拷贝可执行文件:修改后的init放到root下面
ii.拷贝代码 :文件夹system/core/init
iii.开启机器,进入android shell
键入gdb init;
PS:调试过程中请关注2个数据结构,
service_list,action_list;init过程中最先执行的是sevice console.
附注:直接将代码放到nfsroot下面,省去假设gdbserver。
由于gcc对代码进行优化,所以会乱序执行,所以设置断点后请键入"step",小心调试。
如果要让gcc不对代码进行优化,请找到build/core/combo/target-linux-sh.mk,
修改编译标志为o0