上野家のホームページ
ナーマル,マリン,ココ
[
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
携帯電話/HT-03A/Android/kernelのコンパイル
をテンプレートにして作成
資料室
携帯電話/HT-03A/Android/kernelのコンパイル をテンプレートにして作成
[
差分
|
バックアップ
|
リロード
]
[ ]
開始行:
#contents
*kernelのコンパイル
Androidのkernelをソースからコンパイルしてみる。
**Android repoの設定~
-自分のホームにbinディレクトリが必要~
mkdir -p ~/bin
-androidのgitリポジトリを設定~
curl http://android.git.kernel.org/repo > ~/bin/repo
chmod a+x ~/bin/repo
ログインし直すと,$PATHにbinが設定されているのを確認する。~
**AndroidのソースコードをDownloadする
-ワークディレクトリを作る~ mkdir -p ~/android/system
cd ~/android/system
-ソースをダウンロードする(CyanogenModのソースにしてみる)~
repo init -u git://github.com/CyanogenMod/android.git -b...
repo sync
-コンパイラ環境を設定する~
export CCOMPILER=${HOME}/android/system/prebuilt/linux-x...
**実際にkernelをコンパイル
-ワークディレクトリを作る~
mkdir -p ~/android/kernel
cd ~/android/kernel
-カーネルのソースコードをgitでDownloadする~
git clone git://github.com/CyanogenMod/cm-kernel.git
-その後,kernel .configをHT-03Aから持ってくるか,menuconf...
--端末から持ってくる場合~
cd cm-kernel
adb pull /proc/config.gz /home/user_name/androkern/cm-ke...
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 'processo...
結構時間がかかる。~
kernelは,~/android/kernel/cm-kernel/arch/arm/boot/zImage...
**WiFi kernelモジュールのコンパイル
なぜかこの状態だとwifiが不安定になるらしい。~
wifiドライバーをモジュールとしてコンパイルして,それをリ...
+cd ~/android/system/system/wlan/ti/sta_dk_4_0_4_32~
+KERNEL_DIR=~/android/kernel/cm-kernel CROSS_COMPILE=$CCO...
でコンパイルする~
+できたモジュールのファイルを上書きして変更する。
adb shell mount -o remount,rw /system~
adb shell cp /system/lib/modules/wlan.ko /system/lib/mod...
adb push wlan.ko /system/lib/modules/wlan.ko~
リブートすれば,新しいwlan.koをkernelが使うようになる。
*boot.imgの作成
**filesystem
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は,毎回シャットダウンする時にm...
-まちがってmtd1を変に書き換えちゃった時に,文鎮化するのを...
-mtd1を入れ替えたい場合などに,/system/recovery.imgに入れ...
と思われる。通常は,/system/recovery.imgを入れておかない...
**bootイメージ
bootイメージは,linuxのブート時に使用されていて,
+2kのAndroid用ヘッダー
+gzip圧縮されたkernel
+システムを初期化するためなどに使用される,基本的なコアフ...
+2ndステージローダー(オプション)
がbootイメージに入っている。~
kernelをコンパイルした後,kernelファイルとこれらのファイ...
これをmtd2にflashすると,bootloaderがkernelを起動してくれ...
boot.img用のアンパックとマージには,&ref(unpack-bootimg.z...
***boot.imgの分解
とりあえず今あるboot.imgを分解して,kernelとramdiskにわけ...
最初の2kbyteを飛ばして0x1F8B(gzipのヘッダー)を見つける...
その次の0x1F8Bまでが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' ...
上の,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...
でマージする。
*HT-03Aに新しいboot.imgをflashする
/sdcardに新しいイメージをコピーする
adb push ./myboot.img /sdcard
adb shell上で,
# cat /dev/zero > /dev/mtd/mtd2
で,bootパーテーションを綺麗サッパリ消してから,
# flash_image boot /sdcard/myboot.img
として,書き込む。
リブートして,ちゃんとブートすればOK。ダメだったら,リカ...
終了行:
#contents
*kernelのコンパイル
Androidのkernelをソースからコンパイルしてみる。
**Android repoの設定~
-自分のホームにbinディレクトリが必要~
mkdir -p ~/bin
-androidのgitリポジトリを設定~
curl http://android.git.kernel.org/repo > ~/bin/repo
chmod a+x ~/bin/repo
ログインし直すと,$PATHにbinが設定されているのを確認する。~
**AndroidのソースコードをDownloadする
-ワークディレクトリを作る~ mkdir -p ~/android/system
cd ~/android/system
-ソースをダウンロードする(CyanogenModのソースにしてみる)~
repo init -u git://github.com/CyanogenMod/android.git -b...
repo sync
-コンパイラ環境を設定する~
export CCOMPILER=${HOME}/android/system/prebuilt/linux-x...
**実際にkernelをコンパイル
-ワークディレクトリを作る~
mkdir -p ~/android/kernel
cd ~/android/kernel
-カーネルのソースコードをgitでDownloadする~
git clone git://github.com/CyanogenMod/cm-kernel.git
-その後,kernel .configをHT-03Aから持ってくるか,menuconf...
--端末から持ってくる場合~
cd cm-kernel
adb pull /proc/config.gz /home/user_name/androkern/cm-ke...
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 'processo...
結構時間がかかる。~
kernelは,~/android/kernel/cm-kernel/arch/arm/boot/zImage...
**WiFi kernelモジュールのコンパイル
なぜかこの状態だとwifiが不安定になるらしい。~
wifiドライバーをモジュールとしてコンパイルして,それをリ...
+cd ~/android/system/system/wlan/ti/sta_dk_4_0_4_32~
+KERNEL_DIR=~/android/kernel/cm-kernel CROSS_COMPILE=$CCO...
でコンパイルする~
+できたモジュールのファイルを上書きして変更する。
adb shell mount -o remount,rw /system~
adb shell cp /system/lib/modules/wlan.ko /system/lib/mod...
adb push wlan.ko /system/lib/modules/wlan.ko~
リブートすれば,新しいwlan.koをkernelが使うようになる。
*boot.imgの作成
**filesystem
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は,毎回シャットダウンする時にm...
-まちがってmtd1を変に書き換えちゃった時に,文鎮化するのを...
-mtd1を入れ替えたい場合などに,/system/recovery.imgに入れ...
と思われる。通常は,/system/recovery.imgを入れておかない...
**bootイメージ
bootイメージは,linuxのブート時に使用されていて,
+2kのAndroid用ヘッダー
+gzip圧縮されたkernel
+システムを初期化するためなどに使用される,基本的なコアフ...
+2ndステージローダー(オプション)
がbootイメージに入っている。~
kernelをコンパイルした後,kernelファイルとこれらのファイ...
これをmtd2にflashすると,bootloaderがkernelを起動してくれ...
boot.img用のアンパックとマージには,&ref(unpack-bootimg.z...
***boot.imgの分解
とりあえず今あるboot.imgを分解して,kernelとramdiskにわけ...
最初の2kbyteを飛ばして0x1F8B(gzipのヘッダー)を見つける...
その次の0x1F8Bまでが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' ...
上の,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...
でマージする。
*HT-03Aに新しいboot.imgをflashする
/sdcardに新しいイメージをコピーする
adb push ./myboot.img /sdcard
adb shell上で,
# cat /dev/zero > /dev/mtd/mtd2
で,bootパーテーションを綺麗サッパリ消してから,
# flash_image boot /sdcard/myboot.img
として,書き込む。
リブートして,ちゃんとブートすればOK。ダメだったら,リカ...
ページ名:
Counter: 0, today: 0, yesterday: 0
Copyright©2008 Yuji Ueno All Rights Reserved.
ログイン
ユーザ名:
パスワード:
IDとパスワードを記憶
パスワード紛失
メインメニュー
ホーム
でぶlog
資料室
最新ページ一覧
全ページ一覧
ヘルプ
フォーラム
お問い合わせ