@author : mingliang.lu
@date : 2015年12月3日 15:57:24
@e-mail : <mingllu@163.com>
1.问题背景
进来调试arm-linux应用程序时,发现调用下面的应用程序总是出现下面的错误
int fd = 0, retval = 0;
mtd_info_t mtd_info;
fd = open("/dev/mtd2", O_RDWR);
if(fd < 0){
perror("open");
return -1;
}
retval = ioctl(fd, MEMGETINFO,&mtd_info);
if(retval < 0){
perror("ioctl");//总是在这里报错了!!!!
return -1;
}
报错的错误码和类型都如下所示:
errno = 25
[root@TQ2416 ]# kernel mtd_ioctl cmd = -2144842495
[root@TQ2416 ]# Cann't ioctl /dev/mtd2 failed!
[root@TQ2416 ]# ioctl: Inappropriate ioctl for device
2.问题解决
在反复的调试和实验对比最后发现了,错误的原因在于使用的编译器在编译的时候,错误的索引了一些头文件而没有报错,这就导致了在编译器没报错的情况,无法定位问题的所在。关于编译器所默认索引的文件夹路径可以在自己的host上输入以下命令查看:
echo 'main(){}'|arm-linux-gcc -E -v -
上面的命令之中 ‘main(){}’ 是撇号不是单引号!