la construction du noyau Linux sur Mac OS X
Je suis en train de faire un projet visant à modifier le noyau Linux. J'ai un ordinateur de bureau machine Linux et je n'ai pas de problème de construire un noyau sur elle.
Cependant, je suis allez sur un voyage, et je veux travailler sur mon chemin. Je n'ai qu'un MacBook. Quand j'ai essayé de construire le noyau Linux, il se plaint que elf.h was not found
.
- Je télécharger un elfe.h à partir d'internet. Maintenant, il se plaint: NO ELF
J'ai essayé de copier la totalité de la /usr/include
partir de mon bureau Linux, et l'a mis dans le répertoire include, et toujours avoir des erreurs étranges comme "u8" not declared
Ce qui est la façon habituelle de faire du développement du noyau sur Mac? J'ai une machine virtuelle Linux en cours d'exécution sur le même Mac, et il sera utilisé pour tester le noyau modifié. Cependant, je n'ai pas vraiment envie de construire noyau sur elle, comme elle est un peu lente.
- Cela devrait vous aider: code.google.com/p/android/issues/detail?id=2755
- Vous pouvez poster l'erreur exacte que vous obtenez?
NO ELF
ne fournit pas beaucoup de contexte. Quand est ce que vous voyez et ce qui s'est passé avant? - Je suis d'accord, c'est l'erreur exacte, après je copie un elfe.h fichier à partir d'internet et de l'ajouter pour un répertoire de sorte que faire de la trouver. Je ne sais pas comment le rendre plus informatif. Il arrive assez tôt.
- de quoi rendre cible ne vous appelez pour obtenir
NO ELF
? Avez-vous essayé d'ajouter un verbose drapeau àmake
de voir exactement ce que c'est en train de faire, je pense qu'avec Linux vous utilisezmake V=1
? Aussi, pourquoi avez-vous copié l'elfe.h à partir de l'internet? J'avais copier à partir de votre VM où la compilation d'un noyau est connue pour le travail. - fwiw, la même question s'applique à essayer de construire Yocto linux sur osx ainsi.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, je suis d'accord qu'il est généralement plus simple d'utiliser une machine virtuelle Linux. Cela dit, si vous vraiment voulez pour ce faire, j'ai compilé le noyau Linux code à l'aide de la procédure ci-dessous.
Avant même de commencer, vous devez installer la source de Linux arbre sur la casse du système de fichiers sur votre Mac. (par défaut, le système de fichiers HFS est insensible à la casse.) Je ne couvre qu'ici, mais beaucoup de gens le faire pour compiler le source Android arbre, de sorte vous pouvez utiliser Google pour trouver des instructions.
D'abord, vous aurez besoin des fichiers suivants pour cross-compiler un noyau sur un système OS X boîte (les copier à partir de votre travail machine virtuelle Linux pour votre local
/usr/include
):Ensuite, vous aurez besoin
malloc.h
être dans l'emplacement prévu pour un système Linux, donc n':Enfin, vous aurez besoin de vous soucier de savoir si ou non le compilateur installé sur votre système est adapté pour la construction du noyau Linux. J'ai utilisé cette procédure pour les noyaux compilés pour Android, en utilisant le cross-compilateur de la chaîne, mais je ne suis pas sûr si vous pouvez réussir à compiler un noyau Linux avec la valeur par défaut
gcc
compilateur sur OS X (en supposant que vous avez un seul qui est fourni avec Xcode...)MODIFIER: Vous pouvez également suivre les étapes souligné dans le bug lié dans le commentaire ci-dessus de "nmagerko", pour vous assurer d'avoir les bonnes dépendances, et la version GNU de
sed
. En particulier:C'est une question courante (bien, habituellement, c'est la construction sur Windows, mais la réponse est la même).
Il suffit de ne pas le faire. Vous allez avoir tant de peine à obtenir quoi que ce soit pour construire correctement, c'est juste pas la peine.
Utiliser une machine virtuelle, comme vous l'avez dit vous-même. C'est un peu plus lent, mais pas tant que ça, et au moins bâtiment fonctionne correctement.
De développement du noyau est assez dur sans ajouter d'autres, des problèmes inutiles.
Voici une mise à jour pour Android 6.0 Guimauve et OSX 10.10 Yosemite. J'ai fait la réussite de plusieurs la croix construit à l'aide de cette méthode. La seule limitation est que j'ai seulement fait ce avec la pleine PSBA source vérifiée.
J'ai utilisé du mélange libelf pour obtenir un joli paquet géré elfe de la bibliothèque. Cela nous mène de l'elfe fichier, nous devons comprendre,
usr/local/opt/libelf/include/libelf/gelf.h
Mais ce sera toujours générer des erreurs sur la compilation si vous symlink à
usr/local/include
car apparemment certaines définitions sont manquantes. Donc, j'ai volé le manque de définitions de la<kernel_source>/arch/arm/include/asm/elf.h
et créé une cale d'inclure le fichier:Qui devrait être suffisant pour que la compilation complète. Si quelqu'un a besoin de plus d'information sur ce, j'ai un post qui couvre une Android noyau de construire sur OSX.
De la compilation du Noyau à l'aide de PSBA de prebuilts
J'ai fait des liens symboliques de l'absence de OSX en-têtes de la machine linux et apparemment, ça a bien fonctionné! Dans ma configuration j'ai synchronisés l'ensemble de la PSBA repo, qui comprend tous les prebuilts, mais ceux que j'utilise pour construire le noyau sont:
Clone pour que l'arborescence suivante est valide:
Assurez-vous de la caisse de la branche/étiquette, selon votre Android de la version cible.
Installer les en-têtes manquantes
Ne sais pas si c'est la bonne façon de le faire, mais de la mise d'un tas de linux les en-têtes dans
/usr/local/include
résout toutes les questions. N'oubliez pas dechmod +x
le script.install_headers.sh:
De construire un noyau
Voila:
Ma configuration
AOSP
sur macmac_version.mk
dansbuild
pour permettre l'utilisation 10.12.3 sdk)Cela fonctionne de la manière de kitkat (n'essayez pas de versions antérieures) -
make -j8 ARCH=arm CROSS_COMPILE=arm-eabi- HOSTCFLAGS="-I ../external/elfutils/libelf"
Cela suppose que le reste de l'android de construire est mis en place comme d'habitude et le noyau répertoire est dans l'android construire.