なにもわからん!
完全に個人用なので読みやすさ度外視してます。こんなのでも読んでくれて間違いを指摘してくれる神がいるなら泣いて喜びますのでコメントでお願いします。
移植関係
Linuxカーネル関係
デバッグ
kgdbを使うらしい(未検証、参考サイト(訳、原文))コードリーディング
Eclipseだと便利そう?(参考サイト)今使ってるVSCodeだとIntelliSenceだよりっぽい(参考サイト)
ドライバ/Device Tree
Device Treeはここのサイトがわかりやすかった。Androidポート
kernel/configs以下にandroid-*.cfgというファイルがあるが、これをデバイス固有のdefconfigに混ぜることによってできる。kernel/configs/android-fetch-configs.sh で最新の泥defconfigの元がもらえる。
scripts/kconfig/merge_config.sh で複数のconfigを混ぜて.configにしてくれる。
参考サイト:公式ドキュメント
HAL(HIDL込)
Default HAL(*.default.soのソースコード)は/hardware/libhardware/modules以下にある。
HIDLはFrameworkとHALを繋ぐもの。Oreo以降に実装されている。動作モードは/system/manifest.xmlで記述する。
hwbinderモード:FrameworkとHALを別プロセスで動作させる。/system側に*-impl.so、/vendor側に*-service.soが必要。Treble化する(/systemと/vendorを分ける)場合はこのモード。
passthroughモード:FramoworkとHALを同じプロセスで動作させる。/systemに-impl.soが必要。泥ポートするときTreble化しないならこっちで開発を進めた方が良さそう。
参考サイト:公式ドキュメント、 スライド
HIDLはFrameworkとHALを繋ぐもの。Oreo以降に実装されている。動作モードは/system/manifest.xmlで記述する。
hwbinderモード:FrameworkとHALを別プロセスで動作させる。/system側に*-impl.so、/vendor側に*-service.soが必要。Treble化する(/systemと/vendorを分ける)場合はこのモード。
passthroughモード:FramoworkとHALを同じプロセスで動作させる。/systemに-impl.soが必要。泥ポートするときTreble化しないならこっちで開発を進めた方が良さそう。
参考サイト:公式ドキュメント、 スライド
ビルド関係
Oreo以降は/system(Trebleなら/vendorも)のearly mountが必要。Linux KernelのDevice Treeで記述する(こんな感じ)。
HIDLは上記の必要なのを記述してあげる(こんな感じ)。
BoardConfig.mkでandroidboot.hardware=<ハードウェア名> でro.hardwareを指定すると、init.<ハードウェア名>.rcが読み込めるようになる。
BOARD_<パーティション名>IMAGE_PARTITION_SIZEはbyte換算。
PRODUCT_DEVICEはdevice configurationのフォルダ名と同じくする
HIDLは上記の必要なのを記述してあげる(こんな感じ)。
BoardConfig.mkでandroidboot.hardware=<ハードウェア名> でro.hardwareを指定すると、init.<ハードウェア名>.rcが読み込めるようになる。
BOARD_<パーティション名>IMAGE_PARTITION_SIZEはbyte換算。
AOSP系のみ
AndroidProducts.mk にaosp_なんちゃら.mkを書く(aospじゃなくても可)PRODUCT_DEVICEはdevice configurationのフォルダ名と同じくする
りばーすえんナントカ
smali弄り
ここにはるろいど氏がいい感じにまとめてくれてます、感謝。
invoke系の違いは
invoke-static:staticメソッド呼ぶ
invoke-direct:privateメソッド呼び出し、コンストラクタ呼び出し(<init>って書いてあるやつ)で使われる
invoke-virtual:publicメソッド呼ぶ
なのかなって思ってる。これ考えて1からsmali書くよりアプリ書いてばらして移植が手っ取り早いと思う。
あと引数レジスタp0はthisで、p1から引数になる。引数レジスタを通常レジスタのように使いまわすことも可能。
iget-objectのレジスタは宛先、呼び元の順
invoke系の違いは
invoke-static:staticメソッド呼ぶ
invoke-direct:privateメソッド呼び出し、コンストラクタ呼び出し(<init>って書いてあるやつ)で使われる
invoke-virtual:publicメソッド呼ぶ
なのかなって思ってる。これ考えて1からsmali書くよりアプリ書いてばらして移植が手っ取り早いと思う。
あと引数レジスタp0はthisで、p1から引数になる。引数レジスタを通常レジスタのように使いまわすことも可能。
iget-objectのレジスタは宛先、呼び元の順
ダークELF
Part.0 ~事前調査編~Part.1 ~各セクションの分割~
ツイート
0 件のコメント:
コメントを投稿