brillo の manifest で 気づくこと

# brillo の manifest で 気づくこと

[前回](http://qiita.com/hidenorly/items/3802e41de9bc101b4dd5) 、 repo sync の仕方と、通常のAndroid (Marshmallow base)の視点で追加されているgitの一覧を出しました. 

## bdk それは、Brillo Development Kit?

今回は、brillo特有の部分に目を向けていきたいと思います. 

```manifest.xml
  <!-- Brillo-specific build tooling -->
  <project path="device/generic/brillo" name="device/generic/brillo" groups="pdk,bdk" />
  <project path="tools/bdk" name="platform/tools/bdk" groups="bdk" />
  <project path="external/gentoo/integration" name="platform/external/gentoo/integration" groups="bdk" />
  <project path="external/gentoo/overlays/gentoo" name="platform/external/gentoo/overlays/gentoo" groups="bdk" clone-depth="1" />
  <project path="external/gentoo/portage" name="platform/external/gentoo/portage" groups="bdk" />
  <!-- Brillo product examples -->
  <project path="product/google/common" name="product/google/common" groups="bdk" />
  <project path="product/google/example-ledflasher" name="product/google/example-ledflasher" groups="bdk" />
```
まず、注目すべきは、groupsに "bdk"のキーワードがあることです. 隣にPDKと見えますが、以前、Google I/OでGoogleが発表したPDK (Platform Development Kit)の、Brillo版を、BDK (きっとBrillo Developement Kit...)と呼ぶのでしょう. 

## 追加されたgitが、何のソースコードなのか?

| git path | 役割 |
|:--|:--|
| device/generic/brillo | brillo **共通** の定義場所(init.brillo.rcなど). 製品固有情報はproduct/以下にある. | 
| kernel/common | Brilloの製品で使うkernel. (ただし、現在はAndroid common kernel) | 
| product/google/common | 現状はsample code置き場. 以下にbrillo_gpios, brillo_leds, sensors_example がある. | 
| product/google/example-ledflasher | brilloベースの製品固有のファイルの置き場 | 
| platform/external/libweave | Weave protocolのdevice sideの実装. See [google source](https://weave.googlesource.com/weave/libweave/) | 
| platform/system/weaved | Brillo service. デバイスの登録とリモートコマンドの送受信. | 
| platform/tools/bdk | BDKの生成スクリプトなど | 
| platform/build/blueprint | Ninjaベースの新build system. "Blueprint"と呼ぶ新makefileから、meta-buildするためのもので、[Ninja](http://martine.github.io/ninja/) manifestを生成する. Ninja manifestは、実行すべきcommandと、依存を記述するためのもの. | 
| platform/build/kati | Androidをincremental buildして、buildを高速化するためのGNU makeのcloneです.  現在はmakefileをNinjaのconvertしてそれを実現します. ```export USE_NINJA=true``` とすることで利用可能.  | 
| platform/build/soong | Androidのbuilder. Blueprint filesとNinjaをparseして、依存関係をtrackし、sub processの管理する. Soong自体はBlueprintによって読まれたmodules("build.ninja")を、build ruleに変換すること. | 
| platform/system/attestation | security絡み (認証)| 
| platform/system/ca-certificates | cacert置き場 | 
| platform/system/connectivity/apmanager | access point manager | 
| platform/system/connectivity/shill | connectivity manager, switching network devices | 
| platform/system/firewalld | firewall daemon | 
| platform/system/nativepower | power management | 
| platform/system/tools/aidl | AIDL: Android Interface Definition Language | 
| platform/system/tpm_manager | Trusted Platform Module Manager | 
| platform/system/trunks | The Trunks TPM Library (TTL). TPMのutility library. | 
| platform/system/update_engine | Software updater | 
| platform/system/webservd | Web Server. libmicrohttpdが動くprocessとはdbusで分離しているとのこと. | 
| platform/external/avahi | mDNS/DNS-SD protocolで、local network上の service discoveryするためのもの. [avahi](http://avahi.org/) | 
| platform/external/c-ares | DNSの非同期resolver [c-ares](http://github.com/bagder/c-ares) | 
| platform/external/cros/system_api | lite protobufベースのIPCの定義 | 
| platform/external/curl | ご存知のhttp client curl | 
| platform/external/dbus | A IPC. | 
| platform/external/dbus-binding-generator | D-BUS向けのbindingの生成 | 
| platform/external/dhcpcd-6.8.2 | dhcp client daemon| 
| platform/external/fec | FEC (forward error correction)のアルゴリズムの実装と、DSP向けに有用なlow level routine. | 
| platform/external/gentoo/integration | 不明. gentoo linuxの一部っぽい.| 
| platform/external/gentoo/overlays/gentoo | 不明. gentoo linuxの一部っぽい. | 
| platform/external/gentoo/portage | 不明. gentoo linuxの一部っぽい. | 
| platform/external/gmock | jmockのC++版. C++向けのmockを使うコード向けのframework | 
| platform/external/google-breakpad | client-server構成のcrash-reporting system | 
| platform/external/iw | nl80211のtool (iwtools) | 
| platform/external/libbrillo | brilloのlibrary (後で分析). dbus/binder/minijail/stream/httpでIPC可能. | 
| platform/external/libcap | POSIX.1eのcapabilityのset/get library | 
| platform/external/libchrome | | 
| platform/external/libdaemon | daemon共通実装を実装するlibrary (Avahiで使われている) | 
| platform/external/libdivsufsort | 軽量なsuffix arrayを構築するlibrary [code google](https://code.google.com/p/libdivsufsort/) | 
| platform/external/libevent | file descriptorでのイベントが発生した時に、callbackを行うための実装を提供するlibrary. [libevent.org](http://libevent.org/) | 
| platform/external/libmicrohttpd | HTTP 1.1 web server library [gnu.org(https://www.gnu.org/software/libmicrohttpd/) | 
| platform/external/libunwind_llvm | libunwindのLLVM対応版. [libunwind?](http://www.nongnu.org/libunwind/) | 
| platform/external/minijail | chromiumで使っている簡易カスタムlauncher. namespace, group control, chrootによるsandboxingなどを処理. [chromium(dead)](https://chromium.googlesource.com/chromiumos/platform/minijail/) | 
| platform/external/modp_b64 | base64 decoder [stringencoders](http://code.google.com/p/stringencoders/) | 
| platform/external/rootdev | Chromium OS version of rootdev | 
| platform/external/tlsdate | secure parasitic rdate replacement. | 
| platform/external/xmlrpcpp | py-xmlrpcのC++版 [source forge](http://xmlrpcpp.sourceforge.net/) | 
| platform/prebuilts/android-emulator | android-emulator | 
| platform/prebuilts/clang/host/linux-x86 | clang (C compiler for LLVM) | 
| platform/prebuilts/gdb/linux-x86 | gnu debugger | 
| platform/prebuilts/go/darwin-x86 | go language | 
| platform/prebuilts/go/linux-x86 | go language | 
| platform/prebuilts/ninja/darwin-x86 | ninja (new build system) [ninja-build.org](http://ninja-build.org/) |
| platform/prebuilts/ninja/linux-x86 |  ninja (new build system) [ninja-build.org](http://ninja-build.org/) |
| platform/prebuilts/qemu-kernel | kernel for android emulator | 

次回はもう少し中に入っていきたいと思います。