• «
  • 1
  • 2
  • 3
  • »
  • Pages: 2/3     Go
主题 : 请教i2c驱动测试 复制链接 | 浏览器收藏 | 打印
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
10楼  发表于: 2009-09-24 11:56
EINVAL是I2C设备驱动返回的错误,和代码本身逻辑有关,和编译器无关。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 2177
精华: 0
发帖: 70
金钱: 620 两
威望: 463 点
综合积分: 140 分
注册时间: 2008-10-30
最后登录: 2015-01-12
11楼  发表于: 2009-09-30 12:42
谢谢版主。在版主的指导下,我现在已经把pcf8574的测试程序调通了,我用的是arm-linux-2.95.3版本的编译器,用3.4.1一直报错。报错信息如9楼所示。
而我的qt界面程序是用的是3.4.1版本的编译器,用2.95.3又编译不通过。
现在我的问题是如果我将pcf8574的代码融入qt程序里面,这样不管用哪个版本的编译器都会有问题了,这问题不知道如何解决呢?
-
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
12楼  发表于: 2009-09-30 15:15
看起来是测试程序include了内核源代码才会使用的头文件,比如<linux/i2c.h>.你最好把源代码全部贴出来.
另外,交叉编译器的选择取决于你使用的内核版本.
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 2177
精华: 0
发帖: 70
金钱: 620 两
威望: 463 点
综合积分: 140 分
注册时间: 2008-10-30
最后登录: 2015-01-12
13楼  发表于: 2009-10-04 09:38
源代码如下:
1 #include <stdio.h>
  2 #include <fcntl.h>
  3 #include <unistd.h>
  4 #include <stdlib.h>
  5 #include <linux/fs.h>
  6 #include <sys/types.h>
  7 #include <sys/ioctl.h>
  8 #include <errno.h>
  9 #include <string.h>
10 #include <linux/i2c.h>
11 #include <linux/i2c-dev.h>
12
13 struct i2c
14 {
15     char *dev;
16     int addr;
17     int fd;
18 };
19
20 static inline __s32 i2c_smbus_access(int file, char read_write, __u8 command, int size, union i2c_smbus_data *data)
21 {
22     struct i2c_smbus_ioctl_data args;
23
24     args.read_write = read_write;
25     args.command = command;
26     args.size = size;
27     args.data = data;
28     return ioctl(file,I2C_SMBUS,&args);
29 }
30
31
32 static inline __s32 i2c_smbus_write_quick(int file, __u8 value)
33 {
34     return i2c_smbus_access(file,value,0,I2C_SMBUS_QUICK,NULL);
35 }
36
37 static inline __s32 i2c_smbus_read_byte(int file)
38 {
39     union i2c_smbus_data data;
40     if (i2c_smbus_access(file,I2C_SMBUS_READ,0,I2C_SMBUS_BYTE,&data))
41         return -1;
42     else
43         return 0x0FF & data.byte;
44 }
45
46 static inline __s32 i2c_smbus_write_byte(int file, __u8 value)
47 {
48     return i2c_smbus_access(file,I2C_SMBUS_WRITE,value,
49                             I2C_SMBUS_BYTE,NULL);
50 }
51
52 #define CHECK_I2C_FUNC( var, label ) \
53     do {    if(0 == (var & label)) { \
54         fprintf(stderr, "\nError: " \
55             #label " function is required. Program halted.\n\n"); \
56         exit(1); } \
57     } while(0);
58
59 int i2c_open(char *dev_fqn, int addr, struct i2c* e)
60 {
61     int funcs, fd, r;
62     e->fd = e->addr = 0;
63     e->dev = 0;
64
65     fd = open(dev_fqn, O_RDWR);
66     if(fd <= 0)
67     {
68         fprintf(stderr, "Error eeprom_open: %s\n", strerror(errno));
69         return -1;
70     }
71
72     // get funcs list
73     if((r = ioctl(fd, I2C_FUNCS, &funcs) < 0))
74     {
75         fprintf(stderr, "Error eeprom_open: %s\n", strerror(errno));
76         return -1;
77     }
78
79
80     // check for req funcs
81     CHECK_I2C_FUNC( funcs, I2C_FUNC_SMBUS_READ_BYTE );
82     CHECK_I2C_FUNC( funcs, I2C_FUNC_SMBUS_WRITE_BYTE );
83     CHECK_I2C_FUNC( funcs, I2C_FUNC_SMBUS_READ_BYTE_DATA );
84     CHECK_I2C_FUNC( funcs, I2C_FUNC_SMBUS_WRITE_BYTE_DATA );
85     CHECK_I2C_FUNC( funcs, I2C_FUNC_SMBUS_READ_WORD_DATA );
86     CHECK_I2C_FUNC( funcs, I2C_FUNC_SMBUS_WRITE_WORD_DATA );
87
88     // set working device
89     if( ( r = ioctl(fd, I2C_SLAVE_FORCE, addr)) < 0)
90     {
91         fprintf(stderr, "Error eeprom_open: %s\n", strerror(errno));
92         return -1;
93     }
94     e->fd = fd;
95     e->addr = addr;
96     e->dev = dev_fqn;
97     return 0;
98 }
99
100 int i2c_close(struct i2c *e)
101 {
102     close(e->fd);
103     e->fd = -1;
104     e->dev = 0;
105     return 0;
106 }
107
108
109 int main (int argc, char ** argv)
110 {
111     struct i2c e;
112     if (i2c_open("/dev/i2c/0",0x21,&e) < 0)
113     {
114         exit(1);
115     }
116
117     i2c_smbus_write_byte(e.fd, 0xaa);
118
119     i2c_close(&e);
120 }
  用arm-linnux-2.95.3编译通过,但用3.4.1编译不通过,我编译内核是采用3.4.1版本的。
错误信息如下所示:
   In file included from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/timex.h:186,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/sched.h:11,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/module.h:10,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:31,
                 from pcf8574_test.c:10:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/time.h:9: error: redefinition of `struct timespec'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/time.h:15: error: redefinition of `struct timeval'
In file included from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/sched.h:12,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/module.h:10,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:31,
                 from pcf8574_test.c:10:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/jiffies.h:16: error: parse error before "jiffies_64"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/jiffies.h:20: error: parse error before "get_jiffies_64"
In file included from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/sched.h:18,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/module.h:10,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:31,
                 from pcf8574_test.c:10:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm/semaphore.h:18: error: parse error before "wait_queue_head_t"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm/semaphore.h: In function `sema_init':
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm/semaphore.h:46: error: dereferencing pointer to incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm/semaphore.h:47: error: dereferencing pointer to incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm/semaphore.h:48: error: dereferencing pointer to incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm/semaphore.h: In function `sema_count':
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm/semaphore.h:66: error: dereferencing pointer to incomplete type
In file included from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/signal.h:4,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/sched.h:25,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/module.h:10,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:31,
                 from pcf8574_test.c:10:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/list.h:682:2: warning: #warning "don't include kernel headers in userspace"
In file included from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/signal.h:6,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/sched.h:25,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/module.h:10,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:31,
                 from pcf8574_test.c:10:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm/signal.h: At top level:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm/signal.h:27: error: conflicting types for 'sigset_t'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/sys/select.h:38: error: previous declaration of 'sigset_t' was here
In file included from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm/siginfo.h:4,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/signal.h:7,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/sched.h:25,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/module.h:10,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:31,
                 from pcf8574_test.c:10:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/siginfo.h:75: error: parse error before "clock_t"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/siginfo.h:92: error: parse error before '}' token
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/siginfo.h:93: error: parse error before '}' token
In file included from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/sched.h:29,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/module.h:10,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:31,
                 from pcf8574_test.c:10:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/completion.h:15: error: parse error before "wait_queue_head_t"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/completion.h: In function `init_completion':
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/completion.h:26: error: dereferencing pointer to incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/completion.h:27: error: dereferencing pointer to incomplete type
In file included from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/sched.h:30,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/module.h:10,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:31,
                 from pcf8574_test.c:10:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/pid.h: At top level:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/pid.h:18: error: field `task_list' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/pid.h:19: error: field `hash_chain' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/pid.h:24: error: field `pid_chain' has incomplete type
In file included from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/sched.h:31,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/module.h:10,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:31,
                 from pcf8574_test.c:10:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/percpu.h: In function `__alloc_percpu':
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/percpu.h:45: error: `GFP_KERNEL' undeclared (first use in this function)
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/percpu.h:45: error: (Each undeclared identifier is reported only once
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/percpu.h:45: error: for each function it appears in.)
In file included from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/sched.h:102,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/module.h:10,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:31,
                 from pcf8574_test.c:10:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/timer.h: At top level:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/timer.h:12: error: field `entry' has incomplete type
In file included from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm/local.h:1,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/module.h:21,
                 from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:31,
                 from pcf8574_test.c:10:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/local.h: In function `local_inc':
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/local.h:65: error: invalid type argument of `->'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/local.h:65: error: invalid type argument of `->'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/local.h: In function `local_dec':
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/local.h:72: error: invalid type argument of `->'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/local.h:72: error: invalid type argument of `->'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/local.h: In function `local_add':
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/local.h:79: error: invalid type argument of `->'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/local.h:79: error: invalid type argument of `->'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/local.h: In function `local_sub':
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/local.h:86: error: invalid type argument of `->'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/asm-generic/local.h:86: error: invalid type argument of `->'
In file included from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:34,
                 from pcf8574_test.c:10:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h: At top level:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:53: error: field `subsys' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:54: error: field `drivers' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:55: error: field `devices' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:61: error: parse error before "u32"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:87: error: field `attr' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:106: error: field `unload_sem' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:107: error: field `kobj' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:108: error: field `devices' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:113: error: parse error before "u32"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:114: error: parse error before "u32"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:128: error: field `attr' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:150: error: field `subsys' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:151: error: field `children' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:152: error: field `interfaces' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:169: error: field `attr' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:186: error: field `node' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:188: error: field `kobj' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:193: error: `KOBJ_NAME_LEN' undeclared here (not in a function)
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:221: error: field `attr' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:240: error: field `node' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:261: error: field `node' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:262: error: field `bus_list' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:263: error: field `driver_list' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:264: error: field `children' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:267: error: field `kobj' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:276: error: field `power' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:277: error: parse error before "u32"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:283: error: parse error before "detach_state"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:286: error: parse error before '*' token
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:287: error: parse error before "coherent_dma_mask"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:296: error: parse error before '}' token
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h: In function `list_to_dev':
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:301: error: parse error before "struct"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h: In function `dev_get_drvdata':
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:307: error: dereferencing pointer to incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h: In function `dev_set_drvdata':
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:313: error: dereferencing pointer to incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h: At top level:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:339: error: field `attr' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:379: error: parse error before "u32"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:381: error: parse error before "num_resources"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:383: error: parse error before '}' token
In file included from pcf8574_test.c:10:
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:74: error: parse error before "i2c_smbus_xfer"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:74: error: parse error before "u16"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:82: error: parse error before "i2c_smbus_write_quick"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:82: error: parse error before "u8"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:83: error: parse error before "i2c_smbus_read_byte"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:84: error: parse error before "i2c_smbus_write_byte"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:84: error: parse error before "u8"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:85: error: parse error before "i2c_smbus_read_byte_data"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:85: error: parse error before "u8"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:86: error: parse error before "i2c_smbus_write_byte_data"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:87: error: parse error before "u8"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:88: error: parse error before "i2c_smbus_read_word_data"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:88: error: parse error before "u8"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:89: error: parse error before "i2c_smbus_write_word_data"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:90: error: parse error before "u8"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:91: error: parse error before "i2c_smbus_process_call"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:92: error: parse error before "u8"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:94: error: parse error before "i2c_smbus_read_block_data"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:95: error: parse error before "u8"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:96: error: parse error before "i2c_smbus_write_block_data"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:97: error: parse error before "u8"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:99: error: parse error before "i2c_smbus_read_i2c_block_data"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:100: error: parse error before "u8"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:101: error: parse error before "i2c_smbus_write_i2c_block_data"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:102: error: parse error before "u8"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:141: error: field `list' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:167: error: field `dev' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:168: error: field `list' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:170: error: field `released' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:207: error: parse error before "u16"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:219: error: parse error before "u32"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:239: error: field `bus_lock' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:240: error: field `clist_lock' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:244: error: field `dev' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:253: error: field `clients' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:254: error: field `list' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:256: error: field `dev_released' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:257: error: field `class_dev_released' has incomplete type
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:385: error: parse error before "i2c_get_functionality"
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:388: error: parse error before "u32"
pcf8574_test.c:33: error: conflicting types for 'i2c_smbus_write_quick'
pcf8574_test.c:33: note: an argument type that has a default promotion can't match an empty parameter name list declaration
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:82: error: previous declaration of 'i2c_smbus_write_quick' was here
pcf8574_test.c:33: error: conflicting types for 'i2c_smbus_write_quick'
pcf8574_test.c:33: note: an argument type that has a default promotion can't match an empty parameter name list declaration
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:82: error: previous declaration of 'i2c_smbus_write_quick' was here
pcf8574_test.c:38: error: conflicting types for 'i2c_smbus_read_byte'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:83: error: previous declaration of 'i2c_smbus_read_byte' was here
pcf8574_test.c:38: error: conflicting types for 'i2c_smbus_read_byte'
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:83: error: previous declaration of 'i2c_smbus_read_byte' was here
pcf8574_test.c:47: error: conflicting types for 'i2c_smbus_write_byte'
pcf8574_test.c:47: note: an argument type that has a default promotion can't match an empty parameter name list declaration
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:84: error: previous declaration of 'i2c_smbus_write_byte' was here
pcf8574_test.c:47: error: conflicting types for 'i2c_smbus_write_byte'
pcf8574_test.c:47: note: an argument type that has a default promotion can't match an empty parameter name list declaration
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/i2c.h:84: error: previous declaration of 'i2c_smbus_write_byte' was here
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:293: error: storage size of `dma_pools' isn't known
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/sys-include/linux/device.h:380: error: storage size of `dev' isn't known
              
-
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
14楼  发表于: 2009-10-04 12:16
很遗憾,3.4.1工具链里的i2c.h和i2c-dev.h的写法是错的,不能用来编译i2c应用程序。目前mini2440已经升级到EABI工具链,如果没有特殊的原因,建议你用基于2.6.29的EABI内核 + 4.3.2版本的工具链
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 2177
精华: 0
发帖: 70
金钱: 620 两
威望: 463 点
综合积分: 140 分
注册时间: 2008-10-30
最后登录: 2015-01-12
15楼  发表于: 2009-10-04 16:35
谢谢版主了。
因为我一开始使用的是qq2440,开发环境用的是red-hat 9,qt4、驱动等都是基于2.6.13内核的,交叉编译器用的是3.4.1。后来买了mini2440,发现2.6.29内核在red-hat 9中编译不通过,ad驱动编译也有问题。因此,为了不作过多的改动,所以就继续使用原来的开发环境了。
如果改用基于2.6.29的EABI内核 + 4.3.2版本的工具链,很多东西都要重新做了,包括qt库的编译,驱动的编写等等。
能否通过修改工具链里的i2c.h和i2c-dev.h的写法,使其能够用来编译i2才应用程序呢?谢谢了。
-
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
16楼  发表于: 2009-10-04 19:02
我试了一下,好像打上下面这个patch之后可以编译了。但我没有运行过,因为我没有i2c设备的硬件。
使用方法:
$cd /usr/local/arm/3.4.1
$bunzip2 -dc /path/to/i2c_fix_compile.patch.bz2 |patch -p1 (以root权限运行)

i2c_fix_compile.patch清单:
复制代码
  1. ---
  2. arm-linux/sys-include/linux/i2c-dev.h |    1 +
  3. arm-linux/sys-include/linux/i2c.h     |   11 ++++++++++-
  4. 2 files changed, 11 insertions(+), 1 deletion(-)
  5. Index: 3.4.1/arm-linux/sys-include/linux/i2c.h
  6. ===================================================================
  7. --- 3.4.1.orig/arm-linux/sys-include/linux/i2c.h    2004-07-28 22:38:40.000000000 +0800
  8. +++ 3.4.1/arm-linux/sys-include/linux/i2c.h    2009-10-04 18:50:00.000000000 +0800
  9. @@ -28,8 +28,10 @@
  10. #ifndef _LINUX_I2C_H
  11. #define _LINUX_I2C_H
  12. -#include <linux/module.h>
  13. #include <linux/types.h>
  14. +
  15. +#ifdef __KERNEL__
  16. +#include <linux/module.h>
  17. #include <linux/i2c-id.h>
  18. #include <linux/device.h>    /* for struct device */
  19. #include <asm/semaphore.h>
  20. @@ -387,6 +389,8 @@
  21. /* Return 1 if adapter supports everything we need, 0 if not. */
  22. extern int i2c_check_functionality (struct i2c_adapter *adap, u32 func);
  23. +#else /* !__KERNEL__ */
  24. +
  25. /*
  26.   * I2C Message - used for pure i2c transaction, also from /dev interface
  27.   */
  28. @@ -532,6 +536,9 @@
  29.                  /* written byte (except address)    */
  30. #define I2C_MDELAY    0x0706    /* millisec delay between written bytes */
  31. +#endif
  32. +
  33. +#ifdef __KERNEL__
  34. /* ----- I2C-DEV: char device interface stuff ------------------------- */
  35. #define I2C_MAJOR    89        /* Device major number        */
  36. @@ -601,4 +608,6 @@
  37. #define i2c_is_isa_adapter(adapptr) \
  38.          ((adapptr)->algo->id == I2C_ALGO_ISA)
  39. +#endif
  40. +
  41. #endif /* _LINUX_I2C_H */
  42. Index: 3.4.1/arm-linux/sys-include/linux/i2c-dev.h
  43. ===================================================================
  44. --- 3.4.1.orig/arm-linux/sys-include/linux/i2c-dev.h    2009-10-04 18:50:50.000000000 +0800
  45. +++ 3.4.1/arm-linux/sys-include/linux/i2c-dev.h    2009-10-04 18:53:41.000000000 +0800
  46. @@ -24,6 +24,7 @@
  47. #ifndef _LINUX_I2C_DEV_H
  48. #define _LINUX_I2C_DEV_H
  49. +#include <linux/compiler.h>
  50. #include <linux/types.h>
  51. /* Some IOCTL commands are defined in <linux/i2c.h> */
附件: i2c_fix_compile.patch.bz2 (1 K) 下载次数:20
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 2177
精华: 0
发帖: 70
金钱: 620 两
威望: 463 点
综合积分: 140 分
注册时间: 2008-10-30
最后登录: 2015-01-12
17楼  发表于: 2009-10-05 09:02
非常感谢版主,程序可以编译并正常运行了!
-
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
18楼  发表于: 2009-10-05 10:19
呵呵,把你的程序设计原理和大家分享一下吧。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 2177
精华: 0
发帖: 70
金钱: 620 两
威望: 463 点
综合积分: 140 分
注册时间: 2008-10-30
最后登录: 2015-01-12
19楼  发表于: 2009-10-05 12:35
我也是仿照光盘上带的例子写的。我之前看了好一段时间i2c驱动的内容,对里面相关内容还是一知半解,后来还是在版主的指导下,才知道如何在应用程序上进行测试。等我再认真看一下,将思路理清楚后我再将自己的理解发上来。
-
  • «
  • 1
  • 2
  • 3
  • »
  • Pages: 2/3     Go