Android 4.0.3 "Nexus S" proprietary binaries

前回のブログでは4.0.3をソースからコンパイルしてNexus Sにインストールしたあとで、公式版4.0.3からコピーした/system/vendor以下のファイル(ほとんどがシェアードライブラリ)を追加したのですが、今回はcode.google.comからproprietary binariesをダウンロードしてソースコードのルートの下に展開してから、makeコマンドでターゲットを生成してみました。
(ソースは外部USBディスクに置いて、プロセッサ Intel Core2 Duo P8600(動作周波数:2.40GHz)、メモリー4GBのノートPCでコンパイルしました。ホストOSはScientific Linux 6.1(32ビット版)です。)
コンパイル(make -j2)に要した時間は約2時間半から3時間くらいでした。

手順は以下の通りです。(source.android.comの"Building for devices"の手順に従いました)

http://source.android.com/source/building-devices.html

Extracting the proprietary binaries
Each set of binaries comes as a self-extracting script in a compressed archive. After uncompressing each archive, run the included self-extracting script from the root of the source tree, confirm that you agree to the terms of the enclosed license agreement, and the binaries and their matching makefiles will get installed in the vendor/ hierarchy of the source tree.

ダウンロードのリンクのあるページは以下
http://code.google.com/intl/ja/android/nexus/drivers.html#crespoiml74k

1. "Nexus S binaries for Android 4.0.3 (IML74K)"から以下の5つのファイルをダウンロードする

akm-crespo-iml74k-48d943ee.tgz, broadcom-crespo-iml74k-4b0a7e2a.tgz, imgtec-crespo-iml74k-33420a2f.tgz, nxp-crespo-iml74k-9f2a89d1.tgz, samsung-crespo-iml74k-0dbf413c.tgz

2. 上記ファイルをtarコマンドで解凍、展開し、できた以下の5つのシェルスクリプトをソースコードのルートディレクトリの直下にコピーする

extract-akm-crespo.sh, extract-broadcom-crespo.sh, extract-imgtec-crespo.sh, extract-nxp-crespo.sh, extract-samsung-crespo.sh

3. ソースコードのルートディレクトリの直下で、5つのシェルスクリプトを実行するとvendorディレクトリの下にファイルが展開される →参考1)

4. makeコマンドを実行すると、プロプライエタリなバイナリが out/target/product/crespo/system/vendor の下にコピーされる →参考2),参考3)

[5種類のプロプライエタリ バイナリについて]
・akm-crespo-iml74k-48d943ee.tgz:

ASAHI KASEI MICRODEVICES CORP、3軸電子コンパスチップ AK8973用のライブラリなど
http://www.japancorp.net/japan/article.asp?Art_ID=37022

・broadcom-crespo-iml74k-4b0a7e2a.tgz:

BROADCOM CORPORATION、BCM4329(WiFi,Bluetooth,FM)用のライブラリなど
http://ja.broadcom.com/docs/press/localized_press/ja/PR081211JPN.pdf

・imgtec-crespo-iml74k-33420a2f.tgz:

IMAGINATION TECHNOLOGIES LTD、POWERVR_SGX540_120チップセット用のライブラリなど
http://en.wikipedia.org/wiki/PowerVR

・nxp-crespo-iml74k-9f2a89d1.tgz:

NXP Semiconductors Netherlands B.V、NFC controller PN544のライブラリなど
http://www.nxp.com/documents/leaflet/75016890.pdf

・samsung-crespo-iml74k-0dbf413c.tgz:

Samsung Electronics、RIL(Radio Interface Library)? 不明

[参考]
1)
5つのシェルスクリプトの実行により<ソースのルート>/vendorディレクトリの下に展開されるファイル

$ ls -R vendor/
vendor/:
akm  broadcom  imgtec  nxp  samsung

vendor/akm:
crespo

vendor/akm/crespo:
BoardConfigCrespo.mk  device-crespo.mk  proprietary

vendor/akm/crespo/proprietary:
libakm.so

vendor/broadcom:
crespo

vendor/broadcom/crespo:
BoardConfigCrespo.mk  device-crespo.mk  proprietary

vendor/broadcom/crespo/proprietary:
bcm4329.hcd  gps.s5pc110.so  gpsd

vendor/imgtec:
crespo

vendor/imgtec/crespo:
BoardConfigCrespo.mk  device-crespo.mk  proprietary

vendor/imgtec/crespo/proprietary:
gralloc.s5pc110.so                  libIMGegl.so            libpvrANDROID_WSEGL.so  pvrsrvinit
libEGL_POWERVR_SGX540_120.so        libPVRScopeServices.so  libsrv_init.so
libGLESv1_CM_POWERVR_SGX540_120.so  libglslcompiler.so      libsrv_um.so
libGLESv2_POWERVR_SGX540_120.so     libpvr2d.so             libusc.so

vendor/nxp:
crespo

vendor/nxp/crespo:
BoardConfigCrespo.mk  device-crespo.mk  proprietary

vendor/nxp/crespo/proprietary:
libpn544_fw.so

vendor/samsung:
crespo

vendor/samsung/crespo:
BoardConfigCrespo.mk  BoardConfigVendor.mk  device-crespo.mk  device-vendor.mk  proprietary

vendor/samsung/crespo/proprietary:
libsec-ril.so  libsecril-client.so

2)
プロプライエタリなバイナリが out/target/product/crespo/system/vendor の下にコピーされるまでのシーケンスは次のようになっているようです。
ファイルの行頭の数字は行番号です。
(BoardConfigVendor.mkを呼び出すシーケンスとdevice-vendor.mkを呼び出すシーケンスとの2パターンありのようなのですが、今回は後者でした。)

Makefile

2 build/core/main.mk

             ↓
build/core/main.mk

69 include $(BUILD_SYSTEM)/config.mk

             ↓
build/core/config.mk

125 include $(BUILD_SYSTEM)/envsetup.mk

             ↓
build/core/envsetup.mk

107 include $(BUILD_SYSTEM)/product_config.mk

             ↓
build/core/product_config.mk

180 include $(BUILD_SYSTEM)/product.mk

183 ifneq ($(strip $(TARGET_BUILD_APPS)),)
184 # An unbundled app build needs only the core product makefiles.
185 $(call import-products,$(call get-product-makefiles,\
186 $(SRC_TARGET_DIR)/product/AndroidProducts.mk))
187 else
188 # Read in all of the product definitions specified by the AndroidProducts.mk
189 # files in the tree.
190 #
191 #TODO: when we start allowing direct pointers to product files,
192 # guarantee that they're in this list.
193 $(call import-products, $(get-all-product-makefiles))
194 endif # TARGET_BUILD_APPS

             ↓
build/core/product.mk

25 define _find-android-products-files
26 $(shell test -d device && find device -maxdepth 6 -name AndroidProducts.mk) \
27 $(shell test -d vendor && find vendor -maxdepth 6 -name AndroidProducts.mk) \
28 $(SRC_TARGET_DIR)/product/AndroidProducts.mk
29 endef

36 define get-product-makefiles
37 $(sort \
38 $(foreach f,$(1), \
39 $(eval PRODUCT_MAKEFILES :=) \
40 $(eval LOCAL_DIR := $(patsubst %/,%,$(dir $(f)))) \
41 $(eval include $(f)) \
42 $(PRODUCT_MAKEFILES) \
43 ) \
44 $(eval PRODUCT_MAKEFILES :=) \
45 $(eval LOCAL_DIR :=) \
46 )
47 endef

54 define get-all-product-makefiles
55 $(call get-product-makefiles,$(_find-android-products-files))
56 endef

             ↓
device/samsung/crespo/AndroidProducts.mk

28 PRODUCT_MAKEFILES := \
29 $(LOCAL_DIR)/full_crespo.mk

             ↓
device/samsung/crespo/full_crespo.mk

40 $(call inherit-product, device/samsung/crespo/device.mk)

             ↓
device/samsung/crespo/device.mk

52 $(call inherit-product-if-exists, vendor/samsung/crespo/device-vendor.mk)

             ↓
vendor/samsung/crespo/device-vendor.mk

15 LOCAL_STEM := crespo/device-crespo.mk
16
17 $(call inherit-product-if-exists, vendor/akm/$(LOCAL_STEM))
18 $(call inherit-product-if-exists, vendor/broadcom/$(LOCAL_STEM))
19 $(call inherit-product-if-exists, vendor/cypress/$(LOCAL_STEM))
20 $(call inherit-product-if-exists, vendor/imgtec/$(LOCAL_STEM))
21 $(call inherit-product-if-exists, vendor/nxp/$(LOCAL_STEM))
22 $(call inherit-product-if-exists, vendor/samsung/$(LOCAL_STEM))

3)
out/target/product/crespo/system/vendor の下にコピーされたファイル

$ ls -RF vendor
vendor:
bin/  etc/  firmware/  lib/

vendor/bin:
gpsd*  pvrsrvinit*

vendor/etc:
gps.xml*

vendor/firmware:
bcm4329.hcd     fw_bcm4329_apsta.bin  libpn544_fw.so  samsung_mfc_fw.bin
fw_bcm4329.bin  hdcp.keys@            nvram_net.txt*

vendor/lib:
egl/          libPVRScopeServices.so  libpvr2d.so             libsrv_init.so
hw/           libakm.so               libpvrANDROID_WSEGL.so  libsrv_um.so
libIMGegl.so  libglslcompiler.so      libsec-ril.so           libusc.so

vendor/lib/egl:
libEGL_POWERVR_SGX540_120.so        libGLESv2_POWERVR_SGX540_120.so
libGLESv1_CM_POWERVR_SGX540_120.so

vendor/lib/hw:
gps.s5pc110.so  gralloc.s5pc110.so