上野家のホームページ
ナーマル,マリン,ココ
[
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
携帯電話/HT-03A/Android/kernelのコンパイル
のソース
資料室
携帯電話
/
HT-03A
/
Android
/
kernelのコンパイル
のソース
[
差分
|
バックアップ
|
リロード
]
[ ]
差分
を表示
携帯電話/HT-03A/Android/kernelのコンパイル
へ行く。
« Prev
#contents *kernelのコンパイル [#n214438c] Androidのkernelをソースからコンパイルしてみる。 **Android repoの設定~ [#obf27ee9] -自分のホームにbinディレクトリが必要~ mkdir -p ~/bin -androidのgitリポジトリを設定~ curl http://android.git.kernel.org/repo > ~/bin/repo chmod a+x ~/bin/repo ログインし直すと,$PATHにbinが設定されているのを確認する。~ **AndroidのソースコードをDownloadする [#ga97b195] -ワークディレクトリを作る~ mkdir -p ~/android/system cd ~/android/system -ソースをダウンロードする(CyanogenModのソースにしてみる)~ repo init -u git://github.com/CyanogenMod/android.git -b gingerbread repo sync -コンパイラ環境を設定する~ export CCOMPILER=${HOME}/android/system/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- **実際にkernelをコンパイル [#d87a30ed] -ワークディレクトリを作る~ mkdir -p ~/android/kernel cd ~/android/kernel -カーネルのソースコードをgitでDownloadする~ git clone git://github.com/CyanogenMod/cm-kernel.git -その後,kernel .configをHT-03Aから持ってくるか,menuconfigなんかで作成する。~ --端末から持ってくる場合~ cd cm-kernel adb pull /proc/config.gz /home/user_name/androkern/cm-kernel/config.gz gunzip config.gz && mv config .config --kernel.imgから抜き出す場合~ scripts/extract-ikconfig boot.img > .config --configし直す場合~ 用意した.confgファイルを元に適当に設定する。.configがないと最初から設定しなおしになる。 make ARCH=arm CROSS_COMPILE=$CCOMPILER oldconfig もしくは, make ARCH=arm CROSS_COMPILE=$CCOMPILER menuconfig とかして,.configを作成する。~ -kernelをコンパイルする~ make ARCH=arm CROSS_COMPILE=$CCOMPILER -j`grep 'processor' /proc/cpuinfo | wc -l` 結構時間がかかる。~ kernelは,~/android/kernel/cm-kernel/arch/arm/boot/zImage に保存される。~ **WiFi kernelモジュールのコンパイル [#r49724ff] なぜかこの状態だとwifiが不安定になるらしい。~ wifiドライバーをモジュールとしてコンパイルして,それをリンクするようにする。 +cd ~/android/system/system/wlan/ti/sta_dk_4_0_4_32~ +KERNEL_DIR=~/android/kernel/cm-kernel CROSS_COMPILE=$CCOMPILER ARCH=arm make -j`grep 'processor' /proc/cpuinfo | wc -l`~ でコンパイルする~ +できたモジュールのファイルを上書きして変更する。 adb shell mount -o remount,rw /system~ adb shell cp /system/lib/modules/wlan.ko /system/lib/modules/wlan.ko.backup~ adb push wlan.ko /system/lib/modules/wlan.ko~ リブートすれば,新しいwlan.koをkernelが使うようになる。 *boot.imgの作成 [#m7e8073d] **filesystem [#wb787241] HT-03AにはFlash ROM上に,以下のようなROMパーテーションが作られている。 cat /proc/mtd dev: size erasesize name mtd0: 00040000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 05a00000 00020000 "system" mtd4: 05000000 00020000 "cache" mtd5: 127c0000 00020000 "userdata" mtd3=/system,mtd4=cache,mtd5=/dataにそれぞれmountされる。~ mtd2はboot時使われるファイルで,mtd1はリカバリーモードで使われる。 一応,"recovery"と"boot"をバックアップしておく #cat /dev/mtd/mtd1 > /sdcard/mtd1.img #cat /dev/mtd/mtd2 > /sdcard/mtd2.img 端末の/system/recovery.imgは,毎回シャットダウンする時にmtd1(recoveryパーテーション)に,自動的に焼かれる。この理由は, -まちがってmtd1を変に書き換えちゃった時に,文鎮化するのを防ぐ為~ -mtd1を入れ替えたい場合などに,/system/recovery.imgに入れておくことで,安全に変更できる~ と思われる。通常は,/system/recovery.imgを入れておかないようにする。 **bootイメージ [#i1df0efb] bootイメージは,linuxのブート時に使用されていて, +2kのAndroid用ヘッダー +gzip圧縮されたkernel +システムを初期化するためなどに使用される,基本的なコアファイルを入れてあるramdisk +2ndステージローダー(オプション) がbootイメージに入っている。~ kernelをコンパイルした後,kernelファイルとこれらのファイルをマージしてboot.imgを作成する。~ これをmtd2にflashすると,bootloaderがkernelを起動してくれる。 boot.img用のアンパックとマージには,&ref(unpack-bootimg.zip);&ref(repack-bootimg.zip);を使うことが出来る。 ***boot.imgの分解 [#q862084e] とりあえず今あるboot.imgを分解して,kernelとramdiskにわける。~ 最初の2kbyteを飛ばして0x1F8B(gzipのヘッダー)を見つける,次の0x1F8Bまでがkernelになる。~ その次の0x1F8Bまでがramdiskになる。バイナリエディター等やddなんかで書き出せば取り出せる。ファイルはgzip圧縮されているんで解凍すれば,ramdiskに中にあるファイルを編集できるようになる。 gunzip -c ../your-ramdisk-file | cpio -i 上の,unpack-bootimgを使うほうが簡単だけど・・・ ramdiskを編集したら,コンパイルしたkernelと共に再度パッキングする。~ まず,ramdiskをgzipで圧縮する。 find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz 新しいkernelとマージする。 mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel 新しいkernel --ramdisk newramdisk.cpio.gz -o myboot.img 上の,repack-bootimgを使うほうが簡単だけど・・・ もしくは,&ref(split_bootimg.zip);も使える。 分解するときは, % ./split_bootimg.pl boot.img % mkdir ramdisk % cd ramdisk % gzip -dc ../boot.img-ramdisk.gz | cpio -i % cd .. とやって,作業後マージするには, % mkbootfs ./ramdisk | gzip > ramdisk-new.gz % mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel boot.img-kernel --ramdisk ramdisk-new.gz -o myboot.img でマージする。 *HT-03Aに新しいboot.imgをflashする [#ua851e8c] /sdcardに新しいイメージをコピーする adb push ./myboot.img /sdcard adb shell上で, # cat /dev/zero > /dev/mtd/mtd2 で,bootパーテーションを綺麗サッパリ消してから, # flash_image boot /sdcard/myboot.img として,書き込む。 リブートして,ちゃんとブートすればOK。ダメだったら,リカバリモードで前に戻す。
« Prev
携帯電話/HT-03A/Android/kernelのコンパイル のバックアップ一覧
携帯電話/HT-03A/Android/kernelのコンパイル のバックアップソース(No. All)
1: 2010-08-30 (月) 05:55:18
yuji
2: 2010-08-30 (月) 07:46:55
yuji
Attached file: unpack-bootimg.zip, Attached file: repack-bootimg.zip, Attached file: split_bootimg.zip
現: 2020-12-26 (土) 16:08:16
yuji
Counter: 714, today: 1, yesterday: 0
Copyright©2008 Yuji Ueno All Rights Reserved.
ログイン
ユーザ名:
パスワード:
IDとパスワードを記憶
パスワード紛失
メインメニュー
ホーム
でぶlog
資料室
最新ページ一覧
全ページ一覧
ヘルプ
» 関連ページ
» Wikiソース
» 編集履歴
» バックアップ一覧
» 添付ファイル一覧
フォーラム
お問い合わせ