Android 智能手机企业项目

原创作品:http://write.blog.csdn.net/postedit/7956383    

欢迎大家一起交流学习,知识在与分享。

希望结交一些志同道和之士 

QQ: 474530676

longguopeng168@163.com



Android 智能手机企业项目


一、 安卓系统的组成
a. 应用层
b. 应用程序框架
c. 库和运行环境
d. 内核
e. 硬件

二、 移植的主要步骤


/*************************************************************************************/
  1)安装sun JDK
开发环境:ubuntu 12.04 32位
a. 卸载系统中的open JDK,为了标准我们先把系统中的open JDK卸载掉,

把从网上下载的jdk-1_5_0_22-linux-i586.bin(47M)安装下就可以了.

b. 软件放在" /home/up6410/android/jdk-1_5_0_22-linux-i586.bin "目录下
//    root@ubuntu-longguopeng:/home/up6410/android# ./jdk-1_5_0_22-linux-i586.bin


   一直按回车,到底输入"yes" 安装好后,接下来就是要对这个配置文件进行配置。
配置的路径是/etc/profile.d/java.sh (这里要说明的一点是java.sh要临时创建),
里面配置的信息是:
// root@ubuntu-longguopeng:/# gedit /etc/profile.d/java.sh       //ubuntu
// root@ubuntu-longguopeng:/# vim /etc/bashrc                    //rehl6
// root@ubuntu-longguopeng:/# sudo gedit ~/.bashrc


/*---------------------------------------------------------
//添加如下内容:
export JAVA_HOME=/home/up6410/android/jdk1.5.0_22
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
----------------------------------------------------------*/

c. 如何检测是否安装好jdk 在命令行输入:java  –version
// root@ubuntu-longguopeng:/home/up6410/android# source ~/.bashrc
// root@ubuntu-longguopeng:/home/up6410/android# java -version

/*--------------------------------------------------------------------
//显示如下:
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) Server VM (build 1.5.0_22-b03, mixed mode)


            注意:
root@longguopeng:~/桌面# java -version
root@longguopeng:~/桌面# java –version // –号错了
Exception in thread "main" java.lang.NoClassDefFoundError: –version


---------------------------------------------------------------------*/
若看到这个则说明成功。

d. 查看环境变量修改成功与否
在命令行中输入:
// root@ubuntu-longguopeng:/home/up6410/android# echo $JAVA_HMOE
// root@ubuntu-longguopeng:/home/up6410/android# echo $CLASSPATH  







2) 编译android 2.2 froyo
  文件存放在:/home/up6410/android/android-2.2_froyo
  
a. 对其进行解压:
// root@ubuntu-longguopeng:/home/up6410/android# tar –xvf android-2.2_froyo.tar.gz    
                                             //这是把这个解压到当前目录
b. cd 进入到这个目录中去:                                              
// root@ubuntu-longguopeng:/home/up6410/android# cd android-2.2_froyo  


        c. 安装各种包
//        root@ubuntu-longguopeng:/home/up6410/android# sudo aptitude install \
//          git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev \
//          build-essential zip curl libncurses5-dev zlib1g-dev


d. 编译 
// root@ubuntu-longguopeng:/home/up6410/android/android-2.2_froyo# source build/envsetup.sh
// root@ubuntu-longguopeng:/home/up6410/android/android-2.2_froyo# lunch 
// root@ubuntu-longguopeng:/home/up6410/android/android-2.2_froyo# make -j2
                                                                                 //双核双线程编译
            
首次编译非常耗时,取决于机器配置,大约需要2-3小时。
有可能会出现:“Permission denied (权限拒绝的提示)”
请命令赋予权限:$cd 无权限文件的当前目录 回车;  $sudo chmod -R +rwx *  回车 
完成后镜像生成在/root/mydroid/out/target/product/generic下:android源码编译后得到
   system.img,ramdisk.img,userdata.img映 像文件。 
            -->ramdisk.img是emulator的文件系统,
            -->system.img包括了主要的包、库等文件,
-->userdata.img包括了一些用户数 据,emulator加载这3个映像文件后,
  会把 system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录下。
  
            主要一点是要把上步的那个JDK装好后遇到的问题就比较的少,我在编译个过程中遇到的问题也就是一些命令
            提醒说没有安装而已,我用apt-get install  xxx安装下就可以了。
编译完后再会告诉你编译的东西出来东西在哪,而且也不会报错,也不会报警告。
                                                                                                           








/*******************************************************************************************************/
// 第六章 编译完成,模拟器运行Android


1)编译完成后,模拟器的实现与运行  

a.模拟器的实现
把类文件系统目录下out/target/product/generic/system复制到out/target/product/generic/root下面去

//         root@ubuntu-longguopeng:/home/up6410/android/android-2.2_froyo# 
//                     cp -rf out/target/product/generic/root/* /home/up6410/nfsroot
// cp -rf out/target/product/generic/data   /home/up6410/nfsroot
// cp -rf out/target/product/generic/system /home/up6410/nfsroot




设置环境变量
在 /etc/profile.d/java.sh最后加入那么一句  
// root@ubuntu-longguopeng:/# vim /etc/profile.d/java.sh


/*-------------------------------------------------------------------------------------
//添加如下内容:
export JAVA_HOME=/home/up6410/android/jdk-1_5_0_22-i586.bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export PATH=$PATH:/home/up6410/android/android-2.2_froyo/out/host/linux-x86/bin //这里
--------------------------------------------------------------------------------------*/


b.模拟器运行

  命令行中输入:emulator –shell
// root@ubuntu-longguopeng:/# emulator -skin 800x600

// root@ubuntu-longguopeng:/home/up6410/android/android-2.2_froyo/out/target/product/generic# which emulator
ANDROID_PRODUCT_OUT='pwd'/out/target/product/generic emulator










4)实现编译器的静态链接
先下载一个软件:arm-none-linux-gcc的软件,先对它进行解压后进入/bin目录下就有这条命令(arm-none-linux-gnueabi-gcc),arm-none-linux-gnueabi-gcc –static test.c –o test,
Cp test out/target/product/generic/system/bin
Mkyaffs2image system system.img
Emulator –shell
#test   这就会出现刚才你新建的命令中写的东西
5)实现android自带的编译器
cd <android home>
. build/envsetup.sh //点后面记得要有空格
mmm <你想编译的目录>
在做上几步之前要先做这步:
首先要先创建Android.mk文件,里面填写内容如下:
LOCAL_PATH   := $(call my-dir)
include $(BUILD_JAVA_SHARED_LIBRARY)
LOCAL_SRC_FILE := test.c
LOCAL_MODULE   := test
LOCAL_SHARED_LIBRAYR  := libc
include $(BUILD_EXECTALE)










//=========================================================================================
// 第十四章 烧写Bootloader开发板


 编译定制 u-boot:


第一步:
//         [root@longguopeng:/#] tar -vxf /home/up6410/src/u-boot-1.1.6.tar.bz2 
// [root@longguopeng:/#] cd /home/up6410/src/u-boot-1.1.6


第二步:
    进到u-boot-1.1.6 定制u-boot 文件
        1. 删除不需要的文件
            留下:
                arm-config.mk
                config.mk
Makefile
MAKEALL
mkconfig

mknand  //没有
                mkmovi  //没有
write-sd //没有
tags     //没有

README
                rules.mk
                System.map
                                                            
                u-boot
                u-boot.map
                u-boot.bin
                u-boot.dis               
                u-boot.sre.c


                board //进到samsung,留下smdk6410,其他的全部删除
common
cpu
disk
drivers
dtt
examples
fs
                include
lib-arm
lib-generic
nand-spl
                net               
                post
                rtc
                tools               
        
         2. 删除完毕,改u-boot-1.1.6_smdk6410 下的Makefile
//         [root@longguopeng:/#] cd /home/up6410/src/u-boot-1.1.6/
//         [root@ubuntu-longguopeng:/home/up6410/src/u-boot-1.1.6#] vim Makefile
         ---------------------------------------------------------------------------
                将193行改为 
                 193:      ARCH             := arm
  CROSS_COMPILE    := arm-linux-
                                         (记得最后面不要加空格!)
-----------------------------------------------------------------------------

// [root@longguopeng:/home/up6410/src/u-boot-1.1.6#] gedit include/configs/up6410_sd.h 


         3. 增加run 命令:
  171: CFG_CMD_RUN | \   调到  165: CFG_CMD_RUN | \
 
                ubuntu@longguopeng # set wnf .......


         4. 可以修改环境变量:
---------------------------------------------------------------------------------------------
182: #define CONFIG_BOOTARGS "root=/dev/nfs rw nfsroot=10.1.0.168:/home/up6410/nfsroot    ip=10.1.0.168:10.1.0.167:10.1.0.255:255.255.255.0:www.longguopeng.com:eth0:off                           console=ttySAC0,115200 mem=128M" 
 183: #define CONFIG_ETHADDR     00:16:41:AA:90:48 //max地址
#define CONFIG_NETMASK      255.255.255.0 
#define CONFIG_IPADDR    10.1.0.167 //开发板
#define CONFIG_SERVERIP 10.1.0.168   //pc机
#define CONFIG_GATEWAYIP 10.1.0.255   //网关

 203:PTF-PROMPT  "ubuntu@longguopeng #"         改工作环境的显示的名称
---------------------------------------------------------------------------------------------
//          SD启动
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] make up6410_sd_config
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] make
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] cp  u-boot.bin /home/up6410/tftpboot/
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] cd /home/up6410/tftpboot/
[root@longguopeng:/home/up6410/tftpboot/#] cp u-boot.bin u-boot-sd.bin 

// NVND启动
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] make up6410_nand_config
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] make
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] cp u-boot.bin /home/up6410/tftpboot/
            [root@longguopeng:/#] cd /home/up6410/tftpboot/
   [root@longguopeng:/home/up6410/tftpboot#] cp u-boot.bin u-boot-nand.bin cd 

写u-boot到nand flash:
        uboot下操作:
ubuntu@longguopeng # nand erase 0 0x40000
ubuntu@longguopeng # tftp 0x50000000 u-boot-nand.bin
ubuntu@longguopeng # nand write 0x50000000 0 0x40000
//=====================================================================================================


第十五章 构建Android系统到S3C6410开发板


编译内核




修改makefile
191 ARCH           ?=   arm           //平台
      CROSS_COMPILE  ?=   ...eabi-   //交叉编译器的前缀
     
      //android-kernel-2.6.35.tar
  [root@longguopeng android-kernel-2.6.35]# rm up6410_config* //删除
  [root@longguopeng android-kernel-2.6.35]# cp .config android_config
  [root@longguopeng android-kernel-2.6.35]# make
 /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/    
   bootm 50008000  
   
构建NFS 修改方便
    
      [root@longguopeng android-kernel-2.6.35]# vim /etc/export
 --------------------------------------------------------       
//写入:           
/home/up6410/nfsroot  *(rw,no_root_squash)
       ---------------------------------------------------------

生成根文件系统
    
    //android-2.2_froyo.tar
    
  在这个文件里 /home/android/android-2.2_froyo
    [root@longguopeng /]# mkdir /home/android/nfsroot
    [root@longguopeng/]# cd /home/android-2.2_froyo/out/target/product/generic/
   
 拷贝文件
     [root@longguopeng generic]# cp -rf root/* /home/android/nfsroot
      [root@longguopeng generic]# cp -rf system /home/android/nfsroot
      [root@longguopeng generic]# cp -rf data /home/android/nfsroot
      
   下载内核
      将编译好的内核拷贝到tftpboot
      [root@longguopeng android-kernel-2.6.35]# cp arch/arm/boot/zImage  /tftpboot
      
   启动uboot (在uboot下)
      longguopeng @ # bootm   
      
      出现企俄说明内核没有问题
      filesystem could mount  //没有文件系统 死机强行启动  
     
     
     内核启动出现的问题
     ======================================================================
      Freeing init memory: 164k
      
       
      kernel panic - not syncing: no init fount..... 
      //                 同步
      // 默认启动在 [root@longguopeng nfsroot]# /sbin/init
      //                                        /etc/inittab 其他的
                                                /init.rc  安卓的
     ======================================================================  
      
      在uboot下设置
            
      setenv bootargs  console=ttySAC0 root=/dev/nfs root=/dev/nfs rw nfsroot=10.1.0.168:/home/up6410/nfsroot ip=10.1.0.167:10.1.0.168:10.1.0.1:255.255.255.0:www.longguopeng.com:eth0:off  init=/init  
                       //开发板不显示文字                                     ( 添加init进程)
      重启ip
      bootm 50008000
      
     
      在 [root@longguopeng nfsroot]# rm -f int.rc
      
      //android_patch.tar 
         [root@longguopeng nfsroot]# cp /home/android_patch/init.rc ./
         
         比较区别 
         [root@longguopeng nfsroot]# vimdiff init.rc /home/android-2.2_froyo/out/target/product/generic/root/init.rc
     
     
      重新启动内核  第一次启动比较久 ,要写数据
      
      # test
      #
      #
      #     


/**************************************************************************************************/






第十六章 视频驱动触摸屏部分


 // 在文件夹 android-2.2_froyo.tar


   LCD 分辨率 480 272 
 原始坐标
     -->公式 
        -->lcd 新的坐标
   
  现在比较常用的是: tslib  它是一个库
                        -->在 android_patch/tslib_android/
vim Android.mk
  配置 
   ./configure
 
  vim Android.mk
------------------------------------------------------- 
 去掉这行LOCAL_PRELINK_MODULE=false
  
     /system/lib/ts/plugins/input.so
    
    //打开应用程序动态库
     dlopen("input.so")
     顺序执行编译
   LOCAL_PATH:= $(call my-dir) //只能编译一次
   
   名字
   TSLIB PLUGINDIR := /system/lib/ts/plugins
   
   //存放路径 
   LOCAL_MODULE :=ts/plugins/input


  编译多个使用
    include $(CLEAR_VARS) //开始
    .......
    .......
    .......
    include $(BUILD_SHARED_LIBRARY) //结束
--------------------------------------------------------
 
 
[root@longguopeng android-2.2_froyo]# . build/envsetup.sh


[root@longguopeng android-2.2_froyo]# mmm /android/android_patch/tslib_android  //编译


//拷贝文件系统
[root@longguopeng android-2.2_froyo]# cp -rf out/target/product/generic/system /home/up6410/android/nfsroot  




启动minicom
                     
  
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/   
// android触摸屏的校正


启动起来后点击下屏却没有反应,我这个开发板用的是tft电阻屏,虽然在内核中有触摸屏驱动,
但是没校正屏幕的驱动,依然无法使用,linux中有一款开源的软件软件,名字是tslib,能够为触摸
屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。


步骤为:
首先先要从网上下载一个tslib的软件,对其进行解压。
tar –xvf xxx.tar.gz2(这是解压到当前文件夹)。
解压完之后进入到目录中:cd xxx/,
用编辑器vim打开里面的一个叫Android.mk文件,在他的第几行处加入这么一行,保存退出。
执行 ./configure,在回到<android home>目录中,把刚才解压出来的目录编译进android内核中去,执行命令:
. bulid/envsetup.sh
mmm <你所执行文件的目录>
先把/nfsroot中的system删除,在从文件系统中的system复制到删的位置。
先把<kernel home>/driver/input/touchscreen/s3c2410.c中的第几行注解掉
接着就把开发板和pc机连接起来,把android启动起来,启动后再android shell中输入ts_calibrate,
你会发现会报说没有ts.conf这个文件,接下来我们就来讲下怎样得到这个文件。


执行完后再接着做这个步骤:
cp tslib/etc/ts.conf  /nfsroot/system/etc  -rf 
这个文件复制完后在执行ts_calibrate这条命令时就不会保错了,在开发板上会出现要你校屏的界面
你就用手或其他对屏进行校正,校正完后参数保存在 system/etc/pointercal下,在把这个参数复制到
<kernel home>/driver/input/touchscreen/s3c2410.c下,把
刚才注解掉的参数中这边新复制过来的替换掉。(这里要重新编译内核,这要记得不然是没效的)。






   读取设备 
   目录 frameworks/base/libs/ui/EventHub.cpp
       -----------------------------------------------------------------------
    opend device
读取函数int EventHub::read_notify(int nfd)
       ------------------------------------------------------------------------       
   //JAVA代码 
    目录 frameworks/base/services/java/com/android/server/InputDevice.java
       --------------------------------------------------------------

//self
         783:final int pointtercal[]={
     -11996, 12, 40642976, -6, -11296,31608176, 65536
     };  // 从 /work/android/nfsroot/system/etc/pointercal 获取的
      
       generateAbsMotion() 


    -------------------------------------------------
    编译
     [root@longguopeng android-2.2_froyo]# mmm frameworks/base/services/java/   //从这里开始编译
     [root@longguopeng android-2.2_froyo]# cp out/target/product/generic/system/framework/services.jar /android/nfsroot/system/framework


   启动内核
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
   在内核里 矫正: 比较常用
   drivers/input/touchscreen/s3c2410_ts.c


  input_report_key(ts.input, BIN_TOUCH, 0)
  input_report_abs(ts.input, ABS_PRESSURE, 0)










24课 android 烧写到nandflash


查看大小
du -sh
128M


磁盘镜像
只支持yaffs文件系统


编译 busybox  --》终端命令不够用
在up6410里


在busybox里 make menuconfig




先将文件系统 nfsroot拷到/home/up6410/nfsroot
root@longguopeng:/home/up6410/#  cp nfsroot  android_nfsroot
root@longguopeng:/home/up6410/#  mv android_nfsroot nfsroot/


进入nfs文件系统里运行:
# /busybox mount -t yaffs2 /dev/block/mtdblock3 /mnt/  
# /busybox cp nfsroot/ mnt/ -rf  












链接到bosybox
拷贝到


0
1
2
代表


地址代表什么


挂载


/busybox cp -rf


错误怎么会是??


重启一下


拔掉网线--


********************************************
19课




u-boot的启动过程


分两个阶段:
1.a.硬件初始化
 b.为加载bootloader的第二阶段准备RAM空间。


要准备的东西有:汇编指令手册,uboot代码详细分析,书,makefile手册。


汇编指令:


  mrs:这条指令的意思是用来读取psr(cpsr,spsr)中的数据读到Rn中。
  str:把寄存器的值放到内存中
  ldr:把内存中的值加载到寄存器中




reset:
      mrs r0,cpsr        //这段代码的意思是把cpu的模式改为管理员模式
      bic r0,r0,#0x1f
      orr r0,r0,#0xd3
      msr cpsr,r0       //把r0中的值读回cpsr中















































第十五章 构建Android nfs文件系统到开发板






11)、内核的编译
Tar –xvf  xxx.tar.gz2
Cd xxx
在makefile中改下编译工具的路径,然后就可以开始编译了。在命令行输入make –j4
编译完就可以了。编译完后把编译出来的zImage复制到/tftproot下就行了。现在还差个android系统,之前在前面我们已将把它编译完成了。
12)、android系统的构建
<android home>/out/target/product/generic/下的root、data、
System组成一个nfsroot文件夹,操作演示如下:
cp –rf <android >/out/target/product/generic/root/* /nfsroot/
cp –rf <android >/out/target/product/generic/system /nfsroot/
cp –rf < android >/out/target/product/generic/data/ /nfsroot/
/nfsroot/这个就是类似linux中的文件系统,这个就是安卓系统。
 
在电脑与开发板之间连线和设置开发板的环境,开发板的主要环境还是先装下minicom 这个软件和tftp、nfs服务等,装好这些之后就可以开始下载了。
13)、android 系统的下载
先在命令行中输入minicom –s,设置端口参数,这里就不在多说了。在这之前要把arm板与pc电脑相连接好,进入了u-boot界面后,就要开始设置一些环境参数了。开发板的IP,电脑的IP,gatewayip,bootargs等,如下所示:
setenv bootargs console=ttySAC0 root=/dev/nfs nfsroot=2.2.2.254:/nfsroot ip=2.2.2.20
setenv serviceip=2.2.2.254
setenv ip=2.2.2.20
下载过程:
tftp 50008000 zImage bootm 50008000
在u-boot界面下输入这两条命令后就行了,系统就能启动起来了,要记得在这个期间,串口线和网线不能段,应为我们只是把内核和文件系统放到arm板的内存中去运行的还没保存到硬盘(nandflash)中,所以在运行中数据在通信是不能断开的,而且断电后又要重新烧写。
14)、android触摸屏的校正
启动起来后点击下屏却没有反应,我这个开发板用的是tft电阻屏,虽然在内核中有触摸屏驱动,但是没校正屏幕的驱动,依然无法使用,linux中有一款开源的软件软件,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值