Hallo,
ich möchte eine UserSpace-Lib, die auf ein Char-Dev zugreift, für ein
embedded Linux bauen.
Ich habe in der Richtung aber wenig Erfahrung und weiß nicht, wie ich
ioctl() richtig einbinden muss.
Laut Doku. muss ich nur die "drv_ioctl.h" einbinden und dann ioctl()
verwenden.
1 | #include "drv_ioctl.h"
|
2 |
|
3 | int getPortSize(int fd)
|
4 | {
|
5 | int size, err;
|
6 | err = ioctl(fd, DRV_GET_PORT_SIZE, &size);
|
7 | if (err == 0)
|
8 | return size;
|
9 | return -1;
|
10 | }
|
Die "drv_ioctl.h" bindet wiederum keine weiteren Header ein.
1 | #ifndef _DRV_IOCTL_H_
|
2 | #define _DRV_IOCTL_H_
|
3 |
|
4 | /* IOCTLs to retrieve information of the related drivers */
|
5 |
|
6 | #define DRV_MAGIC 0x42
|
7 |
|
8 | #define DRV_GET_PORT_SIZE _IOR(DRV_MAGIC, 0, unsigned int)
|
9 | #define DRV_IOCTL _IOWR(DRV_MAGIC, 0x12, uint8_t[140])
|
10 | ...
|
Kann das überhaupt so funktionieren?
Dem Compiler jedenfalls fehlen noch Informationen.
Muss ich ioctl() noch irgendwie initiieren? Oder fehlt da eine
Header-Datei?
1 | src/devClient.c:6:2: warning: implicit declaration of function 'ioctl' [-Wimplicit-function-declaration]
|
2 | err = ioctl(fd, DRV_GET_PORT_SIZE, &size);
|
3 | ^
|
4 | src/devClient.c:6:2: warning: implicit declaration of function '_IOR' [-Wimplicit-function-declaration]
|
5 | In file included from src/devClient.c:279:0:
|
6 | /opt/linux/drivers/drv_ioctl.h:22:51: error: expected expression before 'unsigned'
|
7 | #define DRV_GET_PORT_SIZE _IOR(DRV_MAGIC, 0, unsigned int)
|
8 | ^
|
9 | src/devClient.c:6:18: note: in expansion of macro 'DRV_GET_PORT_SIZE'
|
10 | err = ioctl(fd, DRV_GET_PORT_SIZE, &size);
|
11 | ^
|