sunny底层android,Android 底层开发例子一

伟研科技 S5PV210 开发板实验一  Android底层开发Led控制实验

一、代码讲解

1、 编写HAL层代码

一般来说HAL moudle需要涉及的是三个关键结构体:

struct hw_module_t;

struct hw_module_methods_t;

struct hw_device_t;

下面结合代码说明这3个结构的用法

文件:/hardware/modules/include/weiyan/led.h

a4c26d1e5885305701be709a3d33442f.png

文件:led.c

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

2.JNI层文件:/frameworks/base/service/com_mokoid_server_LedService.cpp

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

3.Framework层的service,文件:/frameworks/base/service/java/com/weiyan/server

a4c26d1e5885305701be709a3d33442f.png

4.APP 测试程序 (属于APP层)

APP层两种调用模式

(1)Android的app可以直接通过service调用.so格式的jni

a4c26d1e5885305701be709a3d33442f.png

(2)经过Manager调用service

a4c26d1e5885305701be709a3d33442f.png

Manager (属于Framework层)

a4c26d1e5885305701be709a3d33442f.png

因为LedService和LedManager在不同的进程,所以要考虑到进程通讯的问题。Manager通过增加一个aidl文件来描述通讯接口

文件:weiyan/frameworks/base/core/java/weiyan/hardware/ILedService.aidl

package mokoid.hardware;

interface ILedService

{

boolean

setOn(int led);

boolean

setOff(int led);

} 系统的aidl工具会将ILedService.aidl生成ILedService.java文件,实现IledService

SystemServer (属于APP层)文件:

/apps/LedTest/src/com/weiyan/LedTest/LedSystemServer.java

a4c26d1e5885305701be709a3d33442f.png

二、APP 测试程序

文件:weiyan/apps/LedTest/src/com/weiyan/LedTest/LedTest.java

加载方法

1、把光盘提供的weiyan.tar.gz解压到/opt/ android_froyo_smdk

$ cd /opt/

android_froyo_smdk

$ tar -jxvf

weiyan.tar.bz2

2、修改build/core/config.mk文件防止编译找不到led.h头文件

$cd /opt/

android_fsroyo_smdk

$gedit build/core/config.mk

找到SRC_HEADERS := \

$(TOPDIR)system/core/include \

在后面加入

$(TOPDIR)weiyan/hardware/modules/include

a4c26d1e5885305701be709a3d33442f.png

3、编译工程

$ source /opt/android_froyo_smdk/build/envsetup.sh

$ export TARGET_PRODUCT=sec_smdkv210

$mmm /opt/android_froyo_smdk/weiyan

编译成功后会如下路径生成apk文件,库文件,jar包等

/opt/android_froyo_smdk/out/target/product/smdkv210/system/app/LedClient.apk

/opt/android_froyo_smdk/out/target/product/smdkv210/system/app/LedTest.apk

/opt/android_froyo_smdk/out/target/product/smdkv210/system/framework/ledctl.jar

/opt/android_froyo_smdk/out/target/product/smdkv210/system/lib/hw/led.smdkv210.so

/opt/android_froyo_smdk/out/target/product/smdkv210/system/lib/libled.so

/opt/android_froyo_smdk/out/target/product/smdkv210/system/lib/libmokoid_runtime.so

把LedClient.apk,

LedTest.apk放到android的system/app目录,把ledctl.jar放到system/framework目录,把led.smdkv210.so放到system/lib/hw目录,把ibled.so,

libmokoid_runtime.so放到system/lib目录下

4、为了android桌面能显示我们的LedClient.apk,

LedTest.apk程序,把weiyan/frameworks/base/service/com.weiyan.server.xml放到android的

system/etc/permissions目录下

5、加载led驱动模块

把leds.ko复制到android

的system目录下,执行

#insmod leds.ko

#chmod 666 /dev/leds

6、运行LedClient.apk, LedTest.apk

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值