カーネルをビルドする方法


113 : SIM無しさん : 2011/11/12(土) 17:43:21.32 ID:CSjruCTU [1/5回発言]
   カーネルのコンパイルはぐぐれば誰にでもできる簡単なお仕事です。
   とはいえ、この機種で初めてだって人にはちょっと敷居が高いことも事実。
   安くgetした人の入門機種になるといいと思うので、簡単にまとめてみます。

   ■Linux環境の用意
   フリーの仮想マシン(Oracle VM VirtualBoxなど)
   Linuxディストリビューションはお好みで。
   Ubuntu 10.04 LTSあたりがいいんじゃない?

   ■コンパイル環境の用意
   カーネルのビルドにはクロス開発環境があれば十分だと思うけど、
   面倒なのでL-04C用Cyanogenソースコード一式持ってきちゃう。

   1.repoのインストール
   curl http://git-repo.googlecode.com/files/repo-1.12 > ~/bin/repo
   chmod a+x ~/bin/repo
   ※curlコマンド、git-coreはLinuxのパッケージからインストールしておく。
   ※~/binにパスを通しておく。

   2.ダウンロード
   mkdir -p ~/android/src
   cd ~/android/src
   repo init -u git://github.com/y10g/android.git -b gingerbread
   repo sync -j32
   めっちゃ時間がかかるので注意。

   ■カーネルソースの取得
   適当なディレクトリを作って移動
   git clone git://github.com/y10g/elini_kernel.git

   ■カーネルconfigファイルの編集
   arch/arm/configs/elini-perf_defconfig を好きなように編集する。

   ■make
   make elini-perf_defconfig
   make CROSS_COMPILE=~/android/src/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-'

   以上でカーネルのビルド完了(arch/arm/boot/zImage)

114 : SIM無しさん : 2011/11/12(土) 17:44:05.63 ID:CSjruCTU [2/5回発言]
   つづき
   ■zImageとramdiskからboot.imgを作る。

   1.このへんを参考に、既存のboot.imgからramdiskを取り出す。
   ttp://whitesc3.blog7.fc2.com/blog-entry-250.html

   2.zImageとramdiskからboot.imgを作る
   ※カレントディレクトリにzImageとramdisk(ディレクトリ)があるものとする
   mkbootfs ./ramdisk | gzip > ramdisk.gz
   mkbootimg --cmdline 'mem=471M console=ttyMSM2,115200n8 androidboot.hardware=elini' --kernel zImage --ramdisk ramdisk.gz --base 0x12800000 -o boot.img

   ■boot.imgを実機に転送
   ※flash_imageは予め用意しておいてカレントディレクトリに置いておく。
   adb shell su -c "mount -o rw,remount /system /system"
   adb shell su -c "mkdir /system/recovery"
   adb push flash_image /system/recovery/
   adb push boot.img /system/recovery/
   adb shell chmod 755 /system/recovery/flash_image
   adb shell su -c "/system/recovery/flash_image boot /system/recovery/boot.img"
   adb shell sync

   ■参考
   LGの配布物 ttp://www.lg.com/global/support/opensource/opensource.jsp
   Mobile Phone - L04Cを選択して、REAME.txtに目を通しておこう。
   兄弟機種?のP500、P350と比較してみると、理解が早いかもしれない。
   P500のGingerbreadカーネル裏山鹿。
   xdadeveloppers
   P500 ttp://forum.xda-developers.com/showthread.php?t=946354#
   P350 ttp://forum.xda-developers.com/showthread.php?t=1293188

   いじょ

116 : SIM無しさん : 2011/11/12(土) 19:01:41.53 ID:bdDLTWnM [1/4回発言]
   >>113
   もしかして、>>33?
   なんにしろ乙。

   ちなみに、>>113 みたいに仮想環境でやるなら、kernel+cyanogenmodの
   リポジトリで10GB前後必要なんで、余裕見てディスクイメージ準備しましょう。

117 : SIM無しさん : 2011/11/12(土) 19:36:15.54 ID:CSjruCTU [3/5回発言]
   >>116
   >>33とは別人
   でも>>35の態度についカッとなって書いたw
   初心者でも通りすがりパッチとかを作れる可能性はあると思うので

   仮想環境は可変容量のディスクで、最大値を大きめ(100GBなど)確保しておけば
   スモールスタート可能だよ

118 : SIM無しさん : 2011/11/12(土) 19:52:42.66 ID:bdDLTWnM [2/4回発言]
   >>117
   > >>33とは別人
   おお、なんか地味にkernelいじる人増えてきてるってことか。

   > スモールスタート可能だよ
   可変ディスクイメージは、ビルドする時けっこう遅くなるので
   あまりオススメしないかな。

   通りすがりパッチといえば、通りすがりの人の
   githubのリポジトリどこ行っちゃったの?

127 : SIM無しさん : 2011/11/13(日) 00:32:40.49 ID:uy8gFtLI [1/1回発言]
   >>113
   ちょっとしたことだけど修正

   >■カーネルソースの取得
   >適当なディレクトリを作って移動
   >git clone git://github.com/y10g/elini_kernel.git

   これはandroid.gitにkernelも含まれてるから余分かも
   ~/android/src/kernel
   に入ってる

   あと、大したことじゃないんだけど
   それで取得したkernelってCM7向けに改変されてるから
   froyo使いたいなら素直に
   >LGの配布物 ttp://www.lg.com/global/support/opensource/opensource.jsp
   こっち使った方が良いかも

   まとめWiki作る・・・? 

310 : SIM無しさん : 2011/11/29(火) 11:06:54.02 ID:/2JuodwG [1/2回発言]
   y1logさんのCM71をGithubから落としてきてビルドしようとしたけど
   エラーが出てビルド通らない・・・

   > ackages/apps/CMParts/src/com/cyanogenmod/cmparts/activities/DisplayActivity.java:85: シンボルを見つけられません。
   > シンボル: 変数 config_enableScreenAnimation
   > 場所 : com.android.internal.R.bool の クラス
   > if (getResources().getBoolean(com.android.internal.R.bool.config_enableScreenAnimation)) {

   こんな感じのエラーがいっぱい出る。
   何が足りないんだろう…

311 : SIM無しさん : 2011/11/29(火) 11:14:37.67 ID:/2JuodwG [2/2回発言]
   ちなみにこんな感じでビルドしました。

   ★CM71を落とす
   mkdir cm71l04c
   cd cm71l04c
   repo init -u git://github.com/y10g/android.git -b gingerbread
   repo sync
   ★環境設定&ビルド
   cd device/lge/elini
   ./extract-files.sh (*)
   cd ../../..
   . build/envsetup.sh && brunch elini

   (*)"adb pull"をcpに置き換えて、バックアップからファイルコピーしました


312 : SIM無しさん : 2011/11/30(水) 15:18:18.72 ID:/yhKzvFd [1/1回発言]
   >>311
   環境は?
   JavaがOpenJavaだとコンパイルエラー出るよ。
   Sun純正のJDKでコンパイルして味噌。

313 : 310 : 2011/11/30(水) 17:41:42.30 ID:0jDhKpid [1/2回発言]
   ビルドが通らない原因がわかりました。
   android_frameworks_base が古かったようです。

   古かったというと変ですが、エラーが出ていた
   CyanogenMod/android_packages_apps_CMParts
   は、元のリポジトリを参照してるので更新されているけど
   frameworks/baseはforkされた状態で
   元のリポジトリからマージされていなかったのが原因でした。

   cd frameworks/base
   git pull https://github.com/CyanogenMod/android_frameworks_base.git

   とマージすることで、とりあえずビルドは通りました。

   さて、動くかどうか…?

314 : 310 : 2011/11/30(水) 17:43:04.33 ID:0jDhKpid [2/2回発言]
   >312
   SunのJavaを使ってます。
   ちなみにOSはUbuntu 11.10。
   unity使いづらいぜ。 

325 : 310 : 2011/12/03(土) 17:41:01.63 ID:gh5pU4ww [2/5回発言]
   誰が作ったROMか識別するのにどこ書き換えればいいんだろ?
   Modバージョン?
   ビルド番号?

   あと、yuさんのfixみたいに差分zip作る方法がわからん… 

326 : SIM無しさん : 2011/12/03(土) 19:21:34.42 ID:364Pvt6j [1/2回発言]
   作成者の識別はModバージョンがわかりやすいと思う。

   update.zipの作り方
    1. 適当な update.zipを解凍
      ※yuさんの差分zipでいいと思う
    2. 解凍した system ディレクトリ階層に必要なファイルを配置
    3. META-INF/com/google/android/updater-scriptを編集
      ※中身はそんなに難しくないから、何とかなる
    4. zipで固めた後、zipに署名する

   けっこう簡単でしょ? 

タグ:

+ タグ編集
  • タグ:
最終更新:2012年03月16日 16:13