android 移植笔记有感

type:文字博文

topic:Android 应用程序开发经验

contest logo:第二届 Google 暑期大学生博客分享大赛 - 2011 Android 成长篇

  2011-08-15_001517

一.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 移植(持续中)

Android-tools

      1.关于 android init程序的调试

      其实这个可以归结为android native c的调试。

      Androidinit进程调试为例,

      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

 

 

原文地址:https://www.cnblogs.com/titer1/p/2138606.html