Beim Erstellen von iw Version 3.11 (die bereits eine Android.mk Datei hat), stieß ich auf einige Probleme aufgrund fehlender/falscher Header und Bibliotheken. Da es eine Android.mk-Datei hat, kann das NDK verwendet werden.
Im Folgenden werde ich folgendes annehmen:
- Vorrichtung Bild vor gebaut wurde (die Kernel-Header und libnl-2 statische Bibliothek mindestens verfügbar sein sollte). Ich habe CyanogenMod 10 (mit Kernel 3.0.etwas) für den i9300 gebaut, aktualisieren Sie die Pfade unten, um das zu reflektieren.
- Der NDK wird unter
~/android/system/ndk
installiert.
- Das NDK verfügt über geeignete Plattformen und Toolchains.
Vorbereitung nach iw-3.11.tar.xz
Extrahieren und die Änderung meines Verzeichnisses in ihm:
ln -s . jni
ln -nsv ~/android/system/external ./
Die nächste Ausgabe ist die netlink Bibliothek:
In file included from external/libnl-headers/netlink/genl/genl.h:15:0,
from /tmp/and/iw/jni/iw.c:17:
external/libnl-headers/netlink/netlink.h:27:29: fatal error: linux/genetlink.h: No such file or directory.
einfach einen Link zu den android/system/out/target/product/i9300/obj/KERNEL_OBJ/usr/include/linux
brechen andere Header schlecht Erstellen was zu Fehlern wie:
Compile thumb : iw <= iw.c
In file included from /home/user/android/system/ndk/platforms/android-14/arch-arm/usr/include/net/if.h:28:0,
from /tmp/and/iw/jni/iw.c:10:
/tmp/and/iw/jni/linux/if.h:178:19: error: field 'ifru_addr' has incomplete type
/tmp/and/iw/jni/linux/if.h:179:19: error: field 'ifru_dstaddr' has incomplete type
/tmp/and/iw/jni/linux/if.h:180:19: error: field 'ifru_broadaddr' has incomplete type
/tmp/and/iw/jni/linux/if.h:181:19: error: field 'ifru_netmask' has incomplete type
/tmp/and/iw/jni/linux/if.h:182:20: error: field 'ifru_hwaddr' has incomplete type
In file included from external/libnl-headers/netlink/netlink.h:20:0,
from external/libnl-headers/netlink/genl/genl.h:15,
from /tmp/and/iw/jni/iw.c:17:
/home/user/android/system/ndk/platforms/android-14/arch-arm/usr/include/sys/socket.h:74:44: warning: 'struct msghdr' declared inside parameter list [enabled by default]
/home/user/android/system/ndk/platforms/android-14/arch-arm/usr/include/sys/socket.h:74:44: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
/home/user/android/system/ndk/platforms/android-14/arch-arm/usr/include/sys/socket.h:75:38: warning: 'struct msghdr' declared inside parameter list [enabled by default]
In file included from external/libnl-headers/netlink/netlink.h:25:0,
from external/libnl-headers/netlink/genl/genl.h:15,
from /tmp/and/iw/jni/iw.c:17:
/tmp/and/iw/jni/linux/netlink.h:33:2: error: unknown type name 'sa_family_t'
In file included from external/libnl-headers/netlink/genl/genl.h:15:0,
from /tmp/and/iw/jni/iw.c:17:
external/libnl-headers/netlink/netlink.h:51:16: warning: 'struct msghdr' declared inside parameter list [enabled by default]
external/libnl-headers/netlink/netlink.h:54:19: warning: 'struct iovec' declared inside parameter list [enabled by default]
make: *** [/tmp/and/iw/obj/local/armeabi/objs/iw/iw.o] Error 1
führt
Eine Abhilfe ist das linux
Verzeichnis und legen Sie einen symbolischen Link zu ~/android/system/out/target/product/i9300/obj/KERNEL_OBJ/usr/include/linux/genetlink.h
darin zu erstellen:
mkdir -p linux
ln -svn ~/android/system/out/target/product/i9300/obj/KERNEL_OBJ/usr/include/linux/genetlink.h linux/
Schließlich Android.mk
Patch zu beenden Anbindung an die netlink Bibliothek:
sed "/LOCAL_LDFLAGS/s#\$# -L$HOME/android/system/out/target/product/i9300/obj/STATIC_LIBRARIES/libnl_2_intermediates -lnl_2#" -i Android.mk
Nun ist die gebaut werden kann gestartet:
NDK_PROJECT_PATH=$PWD ~/android/system/ndk/ndk-build TARGET_PLATFORM=android-14
Es wird nicht abgeschlossen, da netlink /genl/genl.h kann nicht gefunden werden, aber die iw
Binärdatei ist in libs/armeabi verfügbar!
Haben Sie die Binärdatei auf dieser Seite getestet? Wenn Sie es vom Gerät selbst kompilieren wollen, wird es viel schwieriger. Natürlich ist Git nicht standardmäßig installiert. – kabuko
@kabuko was meinst du mit binary? Auch wenn ich versuche, ubuntu auf seinem terminal zu arbeiten ich muss android sdk installieren, aber wie wird das gerät diese funktion unterstützen, wenn ich es nur auf dem ubuntu-maschine für kompilieren Android SDK ? – Hana90