ioctl库的制作

这个IOCTL的库,可以与驱动层通过IOCTL来通讯。编译后生产test_ioctl的可执行文档。放在/system/bin下面。

可以在adb下面使用。来验证驱动的正确性。


test_ioctl.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>


/*下面定义应该与接收端对应*/
 #define NUM                   0x58
 #define IOCTL_START         _IO(NUM, 0x01)
 #define IOCTL_STOP          _IO(NUM, 0x02)
 #define IOCTL_SET      _IOW(NUM,0x03, unsigned int)
 
 /*
 test_ioctl cmd:
 0: stop
 1: start
 other: set parameter
 */
 int main(int argc, char **argv)
 {
         int fd;
         int ret;
         int cmd = argv[2][0];


         if(argc < 2)
         {
                 printf("please enter cmd\n");
                 return 0;
         }
// fd = open("/dev/tty", O_RDWR | O_NOCTTY | O_NDELAY);
printf("test argc-->>%d\n",argc);
printf("test argv[0]-->>%s\n",argv[0]);
printf("test argv[1]-->>%s\n",argv[1]);
// printf("test argv[2]-->>%s\n",argv[2]);
// fd = open("/dev/ttyMT1", O_RDWR );
fd = open(argv[1], O_RDWR );
//         fd = open("/dev/fmtransmitter", O_RDONLY);
         if(fd <=0 )
         {
                 printf("open devices error!fd=%d\n",fd);
                 return -1;
         } else {
printf("open success!fd=%d\n",fd);
}
sleep(5);
         switch(cmd)
         {
                 case '0':
                         printf("IOCTL_STOP\n");
                         ret = ioctl(fd,IOCTL_STOP);
                         printf("ioctl return is %d\n", ret);
                         break;
                 case '1':
                         printf("IOCTL_START\n");
                         ioctl(fd,IOCTL_START);
                         break;
                 case '2':
                         if(argc < 3)
                         {
                                 printf("parameter not right\n");
                                 return -1;
                         }
                         int val = strtoul(argv[3], 0, 0);
                         printf("IOCTL_SET val = %d\n", val);
                         ioctl(fd,IOCTL_SET, &val);
                         break;
                 default:
                         break;
         }


         close(fd);
         return 0;
 }



Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)


LOCAL_SRC_FILES := test_ioctl.c


LOCAL_SHARED_LIBRARIES := \
        libcutils


LOCAL_CERTIFICATE := platform
LOCAL_MODULE := test_ioctl
include $(BUILD_EXECUTABLE)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值