写LED驱动遇到的问题
分为led_test.cAndroid.mk
led.c
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<asm/types.h>
#include<linux/fb.h>
#include<linux/kernel.h>
#include<linux/fs.h>
#include<fcntl.h>
#include<string.h>
#include<unistd.h>
#include<sys/mman.h>
#include<sys/poll.h>
#defineDEV_FILE_NAME "/dev/led" //驱动提供
/*应用程序执行ioctl(fd,cmd, arg)时的第2个参数*/
#defineIOCTL_GPIO_ON 1 //驱动提供,表示亮
#defineIOCTL_GPIO_OFF 0 //驱动提供,表示灭
#defineLED1 1 //对应硬件上的led1,驱动提供
#defineLED2 2 //对应硬件上的led2,驱动提供
intmain(void)
{
intdevfd;
inti,err;
devfd= open(DEV_FILE_NAME,O_RDWR); //打开设备,权限是谱写,对应会调用驱动跌tq210_gpio_open
if(devfd< 0) //失败返回小于0,成功返回大于0,这只是一个句柄,无须太多关心它的实际意义
{
printf("can'topen dev (%s)",DEV_FILE_NAME);
return0;
}
for(i=0;i<10;++i)
{
err=ioctl(devfd,IOCTL_GPIO_ON,LED2);//控制LED1亮,ioctl与tq210_gpio_ioctl中的第2,3个参数是对应的
if(err<0)
printf("GPIO_ONfaild! (%d)\n",err);
sleep(1); //休眠1S
err= ioctl(devfd,IOCTL_GPIO_OFF,LED2);//关闭LED1。
if(err<0)
printf("GPIO_OFFfaild! (%d)\n",err);
sleep(1); //休眠1S
}
close(devfd);//关闭设备。对应驱动中的tq210_gpio_close
return0;
}
android.mk
LOCAL_PATH:=$(call my-dir)
include$(CLEAR_VARS)
#使用的源文件
LOCAL_SRC_FILES:=\
led_test.c
LOCAL_CFLAGS:=-O2-g
#LOCAL_CFLAGS+=-DLINUX
LOCAL_MODULE_TAGS:= eng
LOCAL_MODULE_PATH:= $(TARGET_OUT_OPTIONAL_EXECUTABLES)
#生成的对像
LOCAL_MODULE:=ledapp
include$(BUILD_EXECUTABLE)
接着使用mmm命令编译 在out里边找到ledapp
a在 PC的终端中运行命令:sourcebuild/envsetup.sh 建立环境
b运行命令:exportTARGET_PRODUCT=full_tq210 设置平台,注意这个名字要与编译文件系统时的名
字是一样的。(这里是full_tq210)
c运 行 命令 :mmm ( 模块 所 在 的 目 录 ), 就 可以 编 译 出 您 所 需 要 的 模 块 了 。 这 里 使 用 目录 是
external/ledApi,所以应该是mmmexternal/ledApi
在win7下打不开可移动磁盘我用的是360软件助手把ledapp放入对应路径。
下载安卓终端模拟器
#cdSystem/xbin
chmod777 ledapp(给ledapp权限)
#./ledapp