ヤること
- 無線 dongle
- wpa_supplicant
- GPS
- libfreerunner_gps
両方が微妙に関係しているあたりが微妙なんですが。
gcj が邪魔をしているみたいなのでパケジ削除。
# apt-get remove java-gcj-compat java-gcj-compat-headless Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: ttf-devanagari-fonts ttf-punjabi-fonts ttf-indic-fonts ttf-kannada-fonts ttf-gujarati-fonts ttf-telugu-fonts ttf-tamil-fonts tzdata-java ttf-arphic-uming ttf-malayalam-fonts rhino ttf-oriya-fonts ttf-baekmuk ttf-bengali-fonts Use 'apt-get autoremove' to remove them. The following packages will be REMOVED: java-gcj-compat java-gcj-compat-headless openoffice.org-gcj 0 upgraded, 0 newly installed, 3 to remove and 149 not upgraded. After this operation, 11.9MB disk space will be freed. Do you want to continue [Y/n]? (Reading database ... 202524 files and directories currently installed.) Removing openoffice.org-gcj ... Removing java-gcj-compat ... Removing java-gcj-compat-headless ... #
で、ようやくコンパイルが正常終了している臭いコトを確認。現時点で以下なカンジ。
$ ~/bin/repo status # on branch a500fx project external/webkit/ branch a500fx -m Android.jsc.mk -- Android.jsc.mk.orig -m JavaScriptCore/Android.mk -- JavaScriptCore/Android.mk.orig project frameworks/base/ branch a500fx -m graphics/jni/Android.mk -- graphics/jni/Android.mk.orig -m libs/rs/Android.mk -- libs/rs/Android.mk.orig project packages/providers/CalendarProvider/ branch a500fx -m src/com/android/providers/calendar/CalendarSyncAdapter.java -- src/com/android/providers/calendar/CalendarSyncAdapter.java.orig project system/core/ branch a500fx -m init/devices.c -- init/devices.c.orig -m init/logo.c -- init/logo.c.orig $
とりあえずこの状態で commit してさらに branch する形で動作を見てみる方向で。
$ ~/bin/repo status # on branch a500fx nothing to commit (working directory clean) $ ~/bin/repo branches * a500fx | in all projects master | in all projects $
で、a500fx を基に branch すれば良いのか。
$ ~/bin/repo start freerunner --all Starting freerunner: 100% (152/152), done. $
で、mm とか mmm のナニをソレ。とりあえず
$ cd $ANDROID/external $ git clone git://gitorious.org/android-on-freerunner/freerunner_platform_hardware_hw.git $ cd freerunner_platform_hardware_hw
ええと、mm が_Builds all of the modules in the current directory._ってコトなので何も考えずにここで mm してみるか。
$ . /home/rms/armadillo500fx/build/envsetup.sh $ mm ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=2.1-update1 TARGET_PRODUCT=a500fx TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= TARGET_BUILD_TYPE=release TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ERE27 ============================================ make: ディレクトリ `/home/rms/armadillo500fx' に入ります target thumb C: lights.gta02 <= external/freerunner_platform_hardware_hw/lights/lights_freerunner.c target SharedLib: lights.gta02 (out/target/product/a500fx/obj/SHARED_LIBRARIES/lights.gta02_intermediates/LINKED/lights.gta02.so) target Non-prelinked: lights.gta02 (out/target/product/a500fx/symbols/system/lib/lights.gta02.so) target Strip: lights.gta02 (out/target/product/a500fx/obj/lib/lights.gta02.so) Install: out/target/product/a500fx/system/lib/hw/lights.gta02.so target thumb C: sensors.gta02 <= external/freerunner_platform_hardware_hw/sensors/sensors_freerunner.c external/freerunner_platform_hardware_hw/sensors/sensors_freerunner.c:438: warning: initialization from incompatible pointer type target SharedLib: sensors.gta02 (out/target/product/a500fx/obj/SHARED_LIBRARIES/sensors.gta02_intermediates/LINKED/sensors.gta02.so) target Non-prelinked: sensors.gta02 (out/target/product/a500fx/symbols/system/lib/sensors.gta02.so) target Strip: sensors.gta02 (out/target/product/a500fx/obj/lib/sensors.gta02.so) Install: out/target/product/a500fx/system/lib/hw/sensors.gta02.so make: ディレクトリ `/home/rms/armadillo500fx' から出ます $
gps/Android.mk がこうなっているので、gps 配下は完全スルー。
$ cat gps/Android.mk # hardware/libfreerunner_gps/Android.mk ifeq ($(strip $(BOARD_HAVE_FREERUNNER_GPS)),true) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := \ gps_freerunner.c LOCAL_MODULE := libfreerunner_gps LOCAL_SHARED_LIBRARIES := \ libutils \ libcutils \ libdl \ libc include $(BUILD_SHARED_LIBRARY) endif $
$ANDROID/vendor/sola/a500fx/BoardConfig.mk に
BOARD_HAVE_FREERUNNER_GPS := true
を追加して再度 mm してみます。
$ echo "BOARD_HAVE_FREERUNNER_GPS := true" >> $ANDROID/vendor/sola/a500fx/BoardConfig.mk $ cat $ANDROID/vendor/sola/a500fx/BoardConfig.mk # config.mk # # Product-specific compile-time definitions. # # The generic product target doesn't have any hardware-specific pieces. USE_CAMERA_STUB := true TARGET_NO_BOOTLOADER := true TARGET_NO_KERNEL := true TARGET_CPU_ABI := armeabi HAVE_HTC_AUDIO_DRIVER := false BOARD_USES_GENERIC_AUDIO := true BOARD_HAVE_FREERUNNER_GPS := true $ LANG=C mm ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=2.1-update1 TARGET_PRODUCT=a500fx TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= TARGET_BUILD_TYPE=release TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ERE27 ============================================ make: Entering directory `/home/rms/armadillo500fx' target thumb C: libfreerunner_gps <= external/freerunner_platform_hardware_hw/gps/gps_freerunner.c external/freerunner_platform_hardware_hw/gps/gps_freerunner.c:1290: warning: initialization from incompatible pointer type external/freerunner_platform_hardware_hw/gps/gps_freerunner.c:1291: warning: initialization from incompatible pointer type external/freerunner_platform_hardware_hw/gps/gps_freerunner.c:1292: warning: initialization from incompatible pointer type target SharedLib: libfreerunner_gps (out/target/product/a500fx/obj/SHARED_LIBRARIES/libfreerunner_gps_intermediates/LINKED/libfreerunner_gps.so) target Prelink: libfreerunner_gps (out/target/product/a500fx/symbols/system/lib/libfreerunner_gps.so) build/tools/apriori/prelinkmap.c(168): library 'libfreerunner_gps.so' not in prelink map make: *** [out/target/product/a500fx/symbols/system/lib/libfreerunner_gps.so] Error 1 make: Leaving directory `/home/rms/armadillo500fx' $
む、build/tools/apriori/prelinkmap.c って何だ。
と言いつつ
build/core/prelink-linux-arm.map というテキストを発見。中身を見るに、こっちに情報を登録すべきなのか、AndroidでJNIを使う方法にある通り
LOCAL_PRELINK_MODULE := false
を Android.mk に追加するべきなのかが微妙。
下記を確認したら
末端に追加されているな。という事は以下で良いのだろうか。
# libraries for specific apps or temporary libraries --中略-- libcerttool_jni.so 0x9A100000 libfreerunner_gps.so 0x9A000000
これで再度 mm 実行してみたらどうか。
$ LANG=C mm ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=2.1-update1 TARGET_PRODUCT=a500fx TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= TARGET_BUILD_TYPE=release TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ERE27 ============================================ make: Entering directory `/home/rms/armadillo500fx' target Prelink: libfreerunner_gps (out/target/product/a500fx/symbols/system/lib/libfreerunner_gps.so) libelfcopy: Warning: Range lists in .debug_info section aren't in ascending order! libelfcopy: Warning: Range lists in .debug_ranges section start at 0x530 target Strip: libfreerunner_gps (out/target/product/a500fx/obj/lib/libfreerunner_gps.so) Install: out/target/product/a500fx/system/lib/libfreerunner_gps.so make: Leaving directory `/home/rms/armadillo500fx' $
を、system/lib に入ったな。これでコンパイルから導入は大丈夫なので次は中身を触らないといけません。あ、良く考えたら BoardConfig.mk に以下も追加が必要なのかな。
BOARD_GPS_LIBRARIES := libfreerunner_gps
上記追加して mm してみたらどうなるのかな。
$ echo "BOARD_GPS_LIBRARIES := libfreerunner_gps" >> $ANDROID/vendor/sola/a500fx/BoardConfig.mk $ cat $ANDROID/vendor/sola/a500fx/BoardConfig.mk # config.mk # # Product-specific compile-time definitions. # # The generic product target doesn't have any hardware-specific pieces. USE_CAMERA_STUB := true TARGET_NO_BOOTLOADER := true TARGET_NO_KERNEL := true TARGET_CPU_ABI := armeabi HAVE_HTC_AUDIO_DRIVER := false BOARD_USES_GENERIC_AUDIO := true BOARD_HAVE_FREERUNNER_GPS := true BOARD_GPS_LIBRARIES := libfreerunner_gps $
で、mm したらどうなるか。
$ LANG=C mm ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=2.1-update1 TARGET_PRODUCT=a500fx TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= TARGET_BUILD_TYPE=release TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ERE27 ============================================ make: Entering directory `/home/rms/armadillo500fx' target SharedLib: libhardware_legacy (out/target/product/a500fx/obj/SHARED_LIBRARIES/libhardware_legacy_intermediates/LINKED/libhardware_legacy.so) target Prelink: libhardware_legacy (out/target/product/a500fx/symbols/system/lib/libhardware_legacy.so) libelfcopy: Warning: DW_FORM_data8 is unsupported when sizeof (unsigned long) != 8 libelfcopy: Warning: Location lists in .debug_info section aren't in ascending order! libelfcopy: Warning: Range lists in .debug_info section aren't in ascending order! target Strip: libhardware_legacy (out/target/product/a500fx/obj/lib/libhardware_legacy.so) Install: out/target/product/a500fx/system/lib/libhardware_legacy.so make: Leaving directory `/home/rms/armadillo500fx' $
なんとなく gps.cpp がリコンパイルされた風では無さげに見えるのは気のせいかなぁ。ライブラリを消してみて再度 mm してみます。
$ rm -f $ANDROID/out/target/product/a500fx/system/lib/libhardware_legacy.so $ LANG=C mm ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=2.1-update1 TARGET_PRODUCT=a500fx TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= TARGET_BUILD_TYPE=release TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ERE27 ============================================ make: Entering directory `/home/rms/armadillo500fx' Install: out/target/product/a500fx/system/lib/libhardware_legacy.so make: Leaving directory `/home/rms/armadillo500fx' $
げ。オブジェクトはどこにあるんだ、ってか clean するにはどうすりゃ良いのやら。ガイキチ技を発動させて以下をナニ。
$ mm clean ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=2.1-update1 TARGET_PRODUCT=a500fx TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= TARGET_BUILD_TYPE=release TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ERE27 ============================================ make: ディレクトリ `/home/rms/armadillo500fx' に入ります make: `files' に対して行うべき事はありません. Cleaning out/target/product/a500fx... Cleaning out/target/common... Cleaning out/host/linux-x86... Cleaning out/host/common... Clean. make: ディレクトリ `/home/rms/armadillo500fx' から出ます $
うーん。再度 mm してみる。つい LANG=C をつけるのを忘れるなぁ。
$ LANG=C mm ============================================ PLATFORM_VERSION_CODENAME=REL PLATFORM_VERSION=2.1-update1 TARGET_PRODUCT=a500fx TARGET_BUILD_VARIANT=eng TARGET_SIMULATOR= TARGET_BUILD_TYPE=release TARGET_ARCH=arm HOST_ARCH=x86 HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID=ERE27 ============================================ make: Entering directory `/home/rms/armadillo500fx' Target buildinfo: out/target/product/a500fx/root/default.prop Target buildinfo: out/target/product/a500fx/system/build.prop make: *** No rule to make target `out/host/linux-x86/bin/acp', needed by `out/target/product/a500fx/system/etc/apns-conf.xml'. Stop. make: Leaving directory `/home/rms/armadillo500fx' $
これ、全部が clean されちゃったクサいんですが (とほほ
という事でリコンパイル実施
駄目すぎる。なんとなく全部コンパイルしてそげに見えるんで今日はもう駄目かな。
追記
良く考えたら branch 作り直せば良いんだった。なるべく全コンパイルを避けるために branch 作る事にしたんだからこのあたりは上手に使わんとの。
とりあえず branch の削除の方法は分からんが作り直し。
$ ~/bin/repo branches a500fx | in all projects * freerunner | in all projects master | in all projects $ ~/bin/repo checkout a500fx Checkout a500fx: 100% (152/152), done. $ ~/bin/repo branches * a500fx | in all projects freerunner | in all projects master | in all projects $ ~/bin/repo start freerunner2 --all Starting freerunner2: 100% (152/152), done. $
元に戻せたんですが、どうするか考え中。
- BOARD_HAVE_FREERUNNER_GPS := true を BoardConfig.mk に追加
- build/core/prelink-linux-arm.map 末端にエントリ追加
- BOARD_GPS_LIBRARIES := libfreerunner_gps を BoardConfig.mk に追加
で、今日の敗因は libhardware_legacy で mm しなかったのが悪かったのかなぁ。ターゲットを削除するだけではなくて .o なソレを削除しないと駄目、って事なのか。
あら?
新たに作成させて頂いた branch で mm できん。なんとなく out 配下が微妙だったので make し直してみます。若干 repo って微妙だなぁ。
とりあえず、あるプロジェクトのみリコンパイルって無理なのかどうなのか。