1: 2010-08-30 (月) 05:55:18 yuji ソース 現: 2020-12-26 (土) 15:08:16 yuji ソース
Line 1: Line 1:
 +#contents
 +
*kernelのコンパイル [#n214438c] *kernelのコンパイル [#n214438c]
Androidのkernelをソースからコンパイルしてみる。 Androidのkernelをソースからコンパイルしてみる。
Line 14: Line 16:
 cd ~/android/system  cd ~/android/system
-ソースをダウンロードする(CyanogenModのソースにしてみる)~ -ソースをダウンロードする(CyanogenModのソースにしてみる)~
- repo init -u git://github.com/CyanogenMod/android.git -b froyo+ repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
 repo sync  repo sync
-コンパイラ環境を設定する~ -コンパイラ環境を設定する~
Line 26: Line 28:
 git clone git://github.com/CyanogenMod/cm-kernel.git  git clone git://github.com/CyanogenMod/cm-kernel.git
-その後,kernel .configをHT-03Aから持ってくるか,menuconfigなんかで作成する。~ -その後,kernel .configをHT-03Aから持ってくるか,menuconfigなんかで作成する。~
---持ってくる場合~+--端末から持ってくる場合~
 cd cm-kernel  cd cm-kernel
 adb pull /proc/config.gz /home/user_name/androkern/cm-kernel/config.gz  adb pull /proc/config.gz /home/user_name/androkern/cm-kernel/config.gz
 gunzip config.gz && mv config .config  gunzip config.gz && mv config .config
 +--kernel.imgから抜き出す場合~
 + scripts/extract-ikconfig boot.img > .config
--configし直す場合~ --configし直す場合~
 +用意した.confgファイルを元に適当に設定する。.configがないと最初から設定しなおしになる。
 make ARCH=arm CROSS_COMPILE=$CCOMPILER oldconfig  make ARCH=arm CROSS_COMPILE=$CCOMPILER oldconfig
 もしくは,  もしくは,
Line 36: Line 41:
とかして,.configを作成する。~ とかして,.configを作成する。~
-kernelをコンパイルする~ -kernelをコンパイルする~
- make ARCH=arm CROSS_COMPILE=$CCOMPILER+ make ARCH=arm CROSS_COMPILE=$CCOMPILER -j`grep 'processor' /proc/cpuinfo | wc -l`
結構時間がかかる。~ 結構時間がかかる。~
kernelは,~/android/kernel/cm-kernel/arch/arm/boot/zImage に保存される。~ 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] *boot.imgの作成 [#m7e8073d]
**filesystem [#wb787241] **filesystem [#wb787241]
 +HT-03AにはFlash ROM上に,以下のようなROMパーテーションが作られている。
 cat /proc/mtd  cat /proc/mtd
 dev:    size  erasesize  name  dev:    size  erasesize  name
Line 52: Line 70:
mtd3=/system,mtd4=cache,mtd5=/dataにそれぞれmountされる。~ mtd3=/system,mtd4=cache,mtd5=/dataにそれぞれmountされる。~
mtd2はboot時使われるファイルで,mtd1はリカバリーモードで使われる。 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イメージ [#i1df0efb]
bootイメージは,linuxのブート時に使用されていて, bootイメージは,linuxのブート時に使用されていて,
Line 59: Line 87:
+2ndステージローダー(オプション) +2ndステージローダー(オプション)
がbootイメージに入っている。~ がbootイメージに入っている。~
 +
kernelをコンパイルした後,kernelファイルとこれらのファイルをマージしてboot.imgを作成する。~ kernelをコンパイルした後,kernelファイルとこれらのファイルをマージしてboot.imgを作成する。~
これをmtd2にflashすると,bootloaderがkernelを起動してくれる。 これを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。ダメだったら,リカバリモードで前に戻す。


トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 613, today: 1, yesterday: 0