2010-05-04 5 views
3

Je voudrais compiler un programme c développé pour linux en utilisant cc sous os x. Il inclut l'en-tête sys/io.h. Lors de la compilation j'obtiens l'erreur que ce fichier n'a pu être trouvé? N'existe-t-il pas de fichier d'en-tête sys/io.h sous os x?osx sys/io.h pas trouvé

Toute aide serait vraiment appréciée!

Merci!

+0

Qu'essayez-vous de compiler? – WhirlWind

Répondre

0
$ ls /usr/include/sys/io.h 
ls: /usr/include/sys/io.h: No such file or directory 

Cela ne ressemble pas à ça. Vous devrez peut-être faire du portage.

Linux a ce fichier d'en-tête. En général, les éléments de/usr/include/sys vont être spécifiques au système d'exploitation, donc vous devrez porter vers une nouvelle architecture si elle n'est pas déjà portée.

+0

Merci pour votre réponse! Le programme utilise des fonctions telles que outb() pour écrire des valeurs dans certains registres. Existe-t-il un fichier d'en-tête équivalent pour os x me fournissant de telles fonctions? – ioh

+0

J'ai découvert que si je veux utiliser le niveau bas io sous osx, je devrai avoir le noyau mod priv. en d'autres termes je vais devoir écrire un kext? – ioh

+0

Je suppose que vous devrez écrire un kext, même si cela dépend de l'appareil exact. OS X prend en charge certains périphériques de l'espace utilisateur. – WhirlWind

8

A la place, ajoutez <sys/uio.h>.

ou pourquoi pas les deux?

#ifdef __APPLE__ 
     #include <sys/uio.h> 
#else 
     #include <sys/io.h> 
#endif 

Dans le cas d'Apple OS (OSX/iOS) le code SAUREZ compiler avec <sys/uio.h>

+1

Cela ne peut pas être aussi simple; ces fichiers d'en-tête ne déclarent-ils pas des fonctions différentes, etc.? – trojanfoe

+0

Cela devrait être le ** accepté **. – gsamaras

0

Vous pouvez ajouter manuellement à votre projet, et il devrait compiler.

https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/+/master/sysroot/usr/include/sys/io.h

Edit: Vous avez besoin features.h aussi bien

https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/+/master/sysroot/usr/include/features.h

Enfin a obtenu le soutien du curseur dans mon noyau, bien que les fonctions io.h ne travaillaient pas pour moi. Ils ont bien compilé et peuvent aider quelqu'un d'autre. C'est le code que j'avance avec ...

static inline void outb(unsigned short port, unsigned char value) 
{ 
    __asm__ __volatile__ ("outb %1, %0" : : "dN" (port), "a" (value)); 

} 
static inline unsigned char inb(unsigned short port) 
{ 
    unsigned char value; 
    __asm__ __volatile__ ("inb %1, %0" : "=a"(value) : "Nd"(port)); 
    return value; 
} 

void update_cursor(int row, int col) 
{ 
    unsigned short position=(row*80) + col; 

    // cursor LOW port to vga INDEX register 
    outb(0x3D4, 0x0F); 
    outb(0x3D5, (unsigned char)(position&0xFF)); 
    // cursor HIGH port to vga INDEX register 
    outb(0x3D4, 0x0E); 
    outb(0x3D5, (unsigned char)((position>>8)&0xFF)); 
} 
+0

Donc, vous ajoutez le fichier d'en-tête, et ... ça fonctionne comme par magie, oui? – trojanfoe

+0

Oui, la fonction dont j'avais besoin est outb() et tout est en train de compiler. Essayer d'ajouter le support du curseur à un petit noyau ... Je vais admettre que je ne l'ai pas encore fonctionné, mais je suis tout nouveau à cela. – scubasteve623

1

Ce que le bibor a écrit est parfait. Bien que mon fichier ressemble à ceci et fonctionne bien.

#ifdef __linux 

#include <io.h> 

#elseif __apple 

#include<uio.h>