CharDev Zugriff - ioctl()

Gast #4392752
Lesenswert?

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
                  ^
Persönliche Seite #4392804
Lesenswert?

bbub schrieb:
> Dem Compiler jedenfalls fehlen noch Informationen. Muss ich ioctl() noch
> irgendwie initiieren? Oder fehlt da eine Header-Datei?

Ja, da fehlt eine Headerdatei. Genau das bedeutet "implicit 
declaration". Durchsuche Deine Headerdateien nach dem Prototypen von 
ioctl() und binde die gefundene Datei in Deine Sourcedatei ein.
Oder lies Dir dir manpage von ioctl durch, da sollte eigentlich auch 
drinstehen, welche Headerdatei hier fällig ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren