Android 下通过jni读取i2c数据
Linux 平台:ubuntu 10.04(x86)
Android平台:AML18726-M3(Android4.0, linux kernel2.6.34)
JNI: Java Native Interface
原理:JNI允许在Java虚拟机上运行的Java代码操作其他语言编写的应用程序和本地库方法,从而能够直与接特定的操作系统和硬件平台进行交互。
方法:(这里是在linux下编译so库的方式)
一. Linux下jni编译环境搭建
1. 安装ndk.
a. 将c文件编译成so库的时候需要用到ndk-build命令,必须安装ndk
下载android-ndk-r6-linux-x86.tar,拷贝到ubuntu下,解压到/home/tony/sda6/m3tools目录
b. 添加ndk环境变量:
export PATH="$PATH:/home/tony/sda6/m3tools/android-ndk-r6"
添加完成后可以用ndk-build –v查看是否成功
二. Linux kernel 内核添加i2c设备
1. 根据原理图,i2c的mcu为i2c B, mcu芯片地址为0xa0
2. 在kernel中将设备注册到i2c B总线上,这样才能通过i2c访问到mcu上的数据。
修改kernel/inch/arch/arm/mach-meson3/board-m3-reff17.c,在i2c_board_info __initdata aml_i2c_bus_info_1[]结构体中注册设备(若是i2c A,则在i2c_bus_info_0[]中注册)
static struct i2c_board_info __initdata aml_i2c_bus_info_1[] = {
//elevator
{
I2C_BOARD_INFO("elevator ", 0xa0),
},
};