Farsight(华清远见) s5pc100-a(A8) 开发板Android驱动开发环境搭建

转载请注明出处,作者: K_Linux_Man

 

一.将linux-2.6.29内核镜像zImage从tftp上启动. 放到/tftpboot 目录下

 

二.制作Android根文件系统,让开发板从NFS启动。(S5PC100-A光盘里有文档说明)

1、拷贝“Linux-Android\源码”目录下的“eclair_2.1_farsight.tar.gz”到目标目录下,然后解压

tar zxvf eclair_2.1_farsight.tar.gz

2、Android_2.1编译

 

初始化Android构建子系统(导出几个命令到环境变量):

~/eclair_2.1_farsight/$ . ./build/envsetup.sh

注意这里两个’.’ 之间有一个空格,第一个’.’指定用当前shell解析这个脚本,否则不能执行。

 

配置板级信息:

~/eclair_2.1_farsight/$ tapas

tapas就是上一步执行结束之后导出到环境变量里的命令,专门用来配置板级信息的。

具体配置选项如下:

Build for the simulator or the device?

     1. Device

     2. Simulator

Which would you like? [1] 1

Build type choices are:

     1. release

     2. debug

Which would you like? [1] 1

Which product would you like? [fs100] fs100

Variant choices are:

     1. user

     2. userdebug

     3. eng

Which would you like? [eng] eng

============================================

PLATFORM_VERSION_CODENAME=REL

PLATFORM_VERSION=2.1-update1

TARGET_PRODUCT=fs_s5pc100

TARGET_BUILD_VARIANT=eng

TARGET_SIMULATOR=false

TARGET_BUILD_TYPE=release

TARGET_ARCH=arm

HOST_ARCH=x86

HOST_OS=linux

HOST_BUILD_TYPE=release

BUILD_ID= ERE27

 

开始编译(如果不能找到mm,执行”source build/envsetup.sh”):

~/eclair_2.1_farsight/$ mm

系统会自动生成相关的文件系统镜像 “out/target/product/fs100/”, 可以在这里找到各个部分。

3、制作yaffs2文件系统镜像

执行:

~/eclair_2.1_farsight/$ ./make_fs100_yaffs2_image.sh

就会在Android源码根目录下生成目录“fs100_root”,这个目录就是编译生成的Android文件系统,调试时可以直接把这个目录作为NFS-Server的目录。还会生成一个“fs100_root.img”文件,这个文件就是Android的yaffs2格式的镜像,可以使用dnw工具将这个镜像烧写到Nand Flash上。

Android源码根目录下的fs100_root就是咱们已经做好的根文件系统。把他拷贝到/source

并且改名为rootfs

 

 

三.设置uboot的启动参数:

需要注意的是nfsroot后面的ip地址是你虚拟机的ip。板子的ip地址是192.168.1.180。把ipaddr改成板子的ip,serverip改成虚拟机的ip。

四.显示Android界面:

       首先得运行起来Android界面,这样以后才能开发Android驱动。

 五.在Eclipse中编写framework

 

 

主要编写beepService.java和ledService.java

编写这两个service主要是加载jni生成的库。Libxx.runtime.so

 

下面是ledservice的模板:

         import android.util.Log;

 

public class ledService {

     static {

         Log.i("ledService", "Load Native service LIB");

         System.loadLibrary("led_runtime");

     }

     public ledService() {

         Log.i ( "Java Service" , "do init Native Call" );

         _init ();

     }

     public boolean set_on(int arg) {

         if(0 == _set_on(arg)) {

              return true;

         }else {

              return false;

         }

     }

    

     public boolean set_off(int arg) {

         if(0 == _set_off(arg)) {

              return true;

         }else {

              return false;

         }

     }

    

     private static native boolean _init();

     private static native int _set_on(int arg);

     private static native int _set_off(int arg);

}

 

需要注意的是_init()  _set_on(int arg)   _set_off(int arg)   三个函数的实现是在jni层实现的,在jni层里实现java与c/c++ 函数的一一对应。

六.编译

Jni代码的实现其实很简单,Stub的实现都有框架结构。这个我再单独写个博文。。

需要注意的点:

Jni文件的名字要与eclipse下包的路径一致,对于java包中的. 换成_

比如我的framework文件在 com.farsight.server.ledService.java   对应我的jni文件名是com_farsight_server_ledService.java

  编译的时候通常会出错误:

原因第一是你没有把工程放在Android源码根目录下,第二就是没有加载环境变量

加载的方法:    

.  android源码目录下/build/envsetup.sh (第一个点是Android.mk的路径,也就是说我是在当前目录下有Android.mk才编译的,第二个参数是路径,加载环境变量的shell程序)  执行完这句话后,再执行mm (注意要写切换到root用户下)

六:编译后步骤:

把stub生成的led.default.so  放到根文件系统下的/source/rootfs/system/lib/hw下

把jni生成的libled.runtime.so放到根文件系统下的/source/rootfs/system/lib下

 

将eclipse程序打包成apk。拷贝到/source/rootfs/system/app下。

将linux驱动全部拷到根文件系统下,然后insmod驱动。

运行应用程序。测试Android驱动程序。

 

七:ADB USB 真机调试(具体没有实现,但是知道可以,把Mini6410ADB的步骤截图列出来了,大家可以尝试一下)

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值