6: 2011-07-26 (火) 10:25:14 yuji ソース
Attached file: sc02bomkf2_yuji0726.tar, Deleted an attach file: sc02bomkf2_yuji0725.tar at 2011-07-26 (火) 18:25:42
現: 2020-12-26 (土) 15:07:42 yuji ソース
Attached file: sc02bomkf2_yuji0201.tar
Line 1: Line 1:
*kernelのコンパイル [#cf986eb9] *kernelのコンパイル [#cf986eb9]
-Samsungで,OMKF2のソースコードが公開されたみたいだ。このソースから,Kernelをコンパイルしてみる。+Samsungで,ソースコードが公開されている。このソースから,Kernelをコンパイルしてみる。
**ソースコードのダウンロード [#g62549cd] **ソースコードのダウンロード [#g62549cd]
https://opensource.samsung.com/にソースコードが公開されている。(SC-02BOMKF2のKernel)~ https://opensource.samsung.com/にソースコードが公開されている。(SC-02BOMKF2のKernel)~
-ファイル名は,SC-02B_OpenSource.zip~+ファイル名は,Gingerbread ver2.3.3のKF2がSC-02B_OpenSource.zipで,ver2.3.6のKL4がSC-02B_GB_Opensource_Update.zip。~
適当なディレクトリを作成して, 適当なディレクトリを作成して,
 $ unzip SC-02B_OpenSource.zip  $ unzip SC-02B_OpenSource.zip
 $ tar xvfz SC-02B_Kernel.tar.gz  $ tar xvfz SC-02B_Kernel.tar.gz
-で解凍すると,kernelのソースコードが展開される。+のようにしてzipファイルを解凍すると,kernelのソースコードが展開される。
**initramfsを準備する [#n14eb993] **initramfsを準備する [#n14eb993]
Line 14: Line 14:
たぶん,kernelをコンパイル後zImageを作成する時にinitramfsが必要になる。~ たぶん,kernelをコンパイル後zImageを作成する時にinitramfsが必要になる。~
とりあえず,SC-02BからバックアップしておいたzImageから,&ref(unpack-initramfs);コマンドを使ってinitramfsを抜き出したファイルを使用することにする。 とりあえず,SC-02BからバックアップしておいたzImageから,&ref(unpack-initramfs);コマンドを使ってinitramfsを抜き出したファイルを使用することにする。
- $ ./unpack-initramfs zImage+ $ unpack-initramfs zImage
これで,ファイルがinitramfsの中のファイルが復元されるんで,ディレクトリをKernelディレクトリがある所にinitramfsというディレクトリを作成して,そこに移動しておく。 これで,ファイルがinitramfsの中のファイルが復元されるんで,ディレクトリをKernelディレクトリがある所にinitramfsというディレクトリを作成して,そこに移動しておく。
Line 25: Line 25:
     # mount rfs /dev/block/mmcblk0p2 /data nosuid nodev check=no      # mount rfs /dev/block/mmcblk0p2 /data nosuid nodev check=no
     mount rfs /dev/block/mmcblk0p2 /data nosuid nodev crypt check=no      mount rfs /dev/block/mmcblk0p2 /data nosuid nodev crypt check=no
-     # ext4 support by Yuji 
     mount ext4 /dev/block/mmcblk0p2 /data noatime data=ordered nodelalloc      mount ext4 /dev/block/mmcblk0p2 /data noatime data=ordered nodelalloc
     chown system system /data      chown system system /data
Line 34: Line 33:
     #mount rfs /dev/block/mmcblk0p2 /data nosuid nodev check=no      #mount rfs /dev/block/mmcblk0p2 /data nosuid nodev check=no
     mount rfs /dev/block/mmcblk0p2 /data nosuid nodev crypt check=no      mount rfs /dev/block/mmcblk0p2 /data nosuid nodev crypt check=no
-     # ext4 support by Yuji 
     mount ext4 /dev/block/mmcblk0p2 /data noatime data=ordered nodelalloc      mount ext4 /dev/block/mmcblk0p2 /data noatime data=ordered nodelalloc
他の部分(/system,/data,/dbdata)も適当に変更する。~ 他の部分(/system,/data,/dbdata)も適当に変更する。~
 +mountコマンドのオプションには,すこしでも早くするために,とりあえずnoatimeをつけてみた。
 +--noatimeをつける~
 +この場合,ファイルにアクセスした時にタイムスタンプを更新しないようにするんで,更新を前提としたアプリケーションでは問題が出る可能性がある。
 +--relatimeをつける~
 +noatimeで問題が出るような場合は,relatimeがいいみたい。relatimeはatimeがcmtimeよりも古い場合にのみ,タイムスタンプを更新する。
 +
-sd-ext用のマウントポイントを作っておく~ -sd-ext用のマウントポイントを作っておく~
init.rcになくてもイイんだけど,ついでに入れておく。 init.rcになくてもイイんだけど,ついでに入れておく。
Line 81: Line 85:
 # classes will still be killed first.  # classes will still be killed first.
     write /sys/module/lowmemorykiller/parameters/adj 0,1,2,7,14,15      write /sys/module/lowmemorykiller/parameters/adj 0,1,2,7,14,15
 + 
     write /proc/sys/vm/overcommit_memory 1      write /proc/sys/vm/overcommit_memory 1
     write /proc/sys/vm/min_free_order_shift 4      write /proc/sys/vm/min_free_order_shift 4
     write /sys/module/lowmemorykiller/parameters/minfree 2560,4096,6144,10240,11264,12288      write /sys/module/lowmemorykiller/parameters/minfree 2560,4096,6144,10240,11264,12288
-adjは,プロセスの優先順位みたいで数字が小さいほど優先して実行されるという意味。adjは,プロセス毎に値を持っていて,アプリケーションのライフタイムによって変化する。~+adjは,プロセスの優先順位みたいで数字が小さいほど優先して実行されるという意味。プロセス毎にこの値を持っているみたい。~
minfreeは,最低限の空きページ数を示していて,1ページは4kB。1536では,1536x4KB=6144KB という意味になるみたい。~ minfreeは,最低限の空きページ数を示していて,1ページは4kB。1536では,1536x4KB=6144KB という意味になるみたい。~
 空き容量が,12288ページ(49152KB)以下で,adjが15以上のプロセスはkill  空き容量が,12288ページ(49152KB)以下で,adjが15以上のプロセスはkill
Line 91: Line 95:
 空き容量が,10240ページ(40960KB)以下で,adjが7以上のプロセスはkill  空き容量が,10240ページ(40960KB)以下で,adjが7以上のプロセスはkill
 :  :
-オリジナルだと12288x4=49152KBになったら,フォアグランドで動いているプロセスも殺される設定なんだと思う。~+FOREGROUND_APP: 前面で動作中のアプリ~ 
 +VISIBLE_APP: ユーザから見えているアプリ~ 
 +PERCEPTIBLE_APP: ユーザから認識可能なアプリ。例)バックグラウンドで音楽を再生するアプリ~ 
 +HEAVY_WEIGHT_APP: ?~ 
 +SECONDARY_SERVER: ?~ 
 +BACKUP_APP: ?~ 
 +HOME_APP: ホームアプリ~ 
 +HIDDEN_APP: たぶん裏に回ったアプリ~ 
 +EMPTY_APP: ?~
プロセスチェックは常に行われていて,kernel/drivers/staging/android/lowmemorykiller.cに実装されている。~ プロセスチェックは常に行われていて,kernel/drivers/staging/android/lowmemorykiller.cに実装されている。~
 # echo "1536,2048,4096,5120,15360,23040" > /sys/module/lowmemorykiller/parameters/minfree  # echo "1536,2048,4096,5120,15360,23040" > /sys/module/lowmemorykiller/parameters/minfree
-とかして,動作中に変更することも出来る。 +とかして,動作中に変更することも出来る。~ 
 +適当に好きな値にしておく。
-BLN用にライブラリをコピーするようにしておく~ -BLN用にライブラリをコピーするようにしておく~
/sbin/init_bln.shを作成する。 /sbin/init_bln.shを作成する。
Line 112: Line 124:
 fi  fi
実行権をつけておく。 実行権をつけておく。
- 
init.rcに, init.rcに,
- service bln /sbin/init_bln.sh+     start setbln 
 +     : 
 +     : 
 + service setbln /sbin/init_bln.sh 
 +     user root
     oneshot      oneshot
 +     disabled
で/sbin/init_bln.shが自動起動するようにしておく。 で/sbin/init_bln.shが自動起動するようにしておく。
 +
 +***rootが使えるようにしておく [#paf74932]
 +[[このようにして>../root化]],rootが使えるようにした。
***その他の変更 [#cedb47bc] ***その他の変更 [#cedb47bc]
Line 123: Line 142:
HT-03Aだと,bootパーテーションとrecoveryパーテーション(独立したlinuxが入っている)が生きていれば,万一Systemを壊したりしてもrecoveryからリストア出来たが,SC-02Bの場合はSystemを壊した場合はRecoveryが起動出来ないと思う。~ HT-03Aだと,bootパーテーションとrecoveryパーテーション(独立したlinuxが入っている)が生きていれば,万一Systemを壊したりしてもrecoveryからリストア出来たが,SC-02Bの場合はSystemを壊した場合はRecoveryが起動出来ないと思う。~
このおかげで?,initramfsに入っているrecoveryを入れ替えることもinitramfsを変更すれば可能になる。~ このおかげで?,initramfsに入っているrecoveryを入れ替えることもinitramfsを変更すれば可能になる。~
-この時点で,必要ならrecoveryをCWMとかに変更しておく。これで,recoveryからnandバックアップが出来るようになる。 +~ 
- +recoveryを[[Clockworkmod:http://www.clockworkmod.com/]]の[[3.0.0.5:http://forum.xda-developers.com/showthread.php?t=839640]]をinitramfsに組み込んだ。これで,HT-03AのようにrecoveryモードでSC-02Bを起動すると,nandバックアップが出来るようになる。
-***root化 [#j0d22031]+
-**Kernelソースの変更 [#b58bcd31]+**Kernelの変更 [#b58bcd31]
***OverClock [#z7e47aae] ***OverClock [#z7e47aae]
[[ここ:https://github.com/existz/galaxys-i9000-OC-kernel-source-patches]]に,Galaxy S(2.6.35.7)用のOC/UV対応パッチがあったんで,入れてみた。ただOCのMaxは1.2GHz :-( ~ [[ここ:https://github.com/existz/galaxys-i9000-OC-kernel-source-patches]]に,Galaxy S(2.6.35.7)用のOC/UV対応パッチがあったんで,入れてみた。ただOCのMaxは1.2GHz :-( ~
Line 140: Line 158:
 $ patch -p1 -i ../patch/bln/bln_i9000_linux-2.6.35_gingerbread.patch  $ patch -p1 -i ../patch/bln/bln_i9000_linux-2.6.35_gingerbread.patch
-***swapを使えるようにする [#s2f94a2c] +***電話の音がおかしくなるのを修正(KF2のみ) [#n5bdf1ce]
-.configを変更して,スワップ出来るように設定する。 +
- CONFIG_SWAP=y +
- +
-***電話の音がおかしくなるのを修正 [#n5bdf1ce]+
コンパイルしてSC-02Bに出来たkernelを焼いて使ってみたら,電話の音がブチブチブチとかいう音になって電話として使えなかった :cry:  JJ1から焼き直したりしてみたけど,結局自分で作ったkernelだとダメになっちゃうと言うことがわかった。((冷静に考えれば当たり前なんだけど・・・)) コンパイルしてSC-02Bに出来たkernelを焼いて使ってみたら,電話の音がブチブチブチとかいう音になって電話として使えなかった :cry:  JJ1から焼き直したりしてみたけど,結局自分で作ったkernelだとダメになっちゃうと言うことがわかった。((冷静に考えれば当たり前なんだけど・・・))
kernelのソースの音関連を調べていたら,sound/soc/codecsの中にあるファイルで,コンパイルすべきファイルがコンパイルされていないのを見つけた。本来は,たぶんなんだけどwm8994_s1ntt.cをコンパイルすべきところなのだが,wm8994_aries.cをコンパイルしていた。~ kernelのソースの音関連を調べていたら,sound/soc/codecsの中にあるファイルで,コンパイルすべきファイルがコンパイルされていないのを見つけた。本来は,たぶんなんだけどwm8994_s1ntt.cをコンパイルすべきところなのだが,wm8994_aries.cをコンパイルしていた。~
-どうも,sound/soc/codecs/Makefileに問題がある。とりあえず以下のように変更した,+どうも,sound/soc/codecs/Makefileに問題がある。53行目あたりをとりあえず以下のように変更した,
 ifeq ($(SEC_PROJECT_REGION_OPERATOR),S1_JPN_NTT)  ifeq ($(SEC_PROJECT_REGION_OPERATOR),S1_JPN_NTT)
   ↓    ↓
 ifeq ($(CONFIG_ARIES_NTT),y)  ifeq ($(CONFIG_ARIES_NTT),y)
これで改めてコンパイルしたら,ちゃんと電話の音が鳴った :-D  これってSC-02Bのソースなんだよね,Samsungさん。 これで改めてコンパイルしたら,ちゃんと電話の音が鳴った :-D  これってSC-02Bのソースなんだよね,Samsungさん。
 +
 +***その他の変更 [#xafe1a5a]
 +-テザリング出来るように変更~
 +.configをmake menuconfigでルーティングとNAT関連を有効にする。~
 +USB tethering出来ないようになっている部分をコメント化して使えるようにした。~
 +
 +-swapパーテーションとzram対応~
 +swapは,MicroSDのSwapパーテーションとzramを使えるようにした。
 +swapを使えるようにするには,kernel設定を変更するだけ。
 + CONFIG_SWAP=y
 +ただ,実際にスワップパーテーションを使ってみたらサクサク感がなくなっちゃうんで,使用するのはやめた。~
 +MicroSDを早いやつにすれば良いのかもしれない。~
 +CPUパワーがあるんで,compcacheの方が良い結果が出るかも。と思いcompcache(zramと名前が変わった)を使えるようにもしてみた。
 +
 +-IOディスパッチにsio,bfqを追加してデフォルトをsioにしてみた~
 +sio,bfqのIOスケジュールを追加して,選択出来るようにした。
 +IOディスパッチを変更するには,adbからか,自動実行シェルスクリプトなんかで,
 + # cat /sys/block/mmcblk0/queue/scheduler
 + noop deadline cfq bfq [sio]
 +で使用できる設定一覧と現在の設定値が表示するので,
 + # echo cfq > /sys/block/mmcblk0/queue/scheduler
 +のようにして切り替える。
 +
 +-その他~
 +--ext4ファイルシステム周りを変更(KF2)~
 +--TinyRCUに変更(KF2)~
 +--Governorをいくつか追加(interactive,conservative,userspace,powersave,ondemand,performance)~
**コンパイル [#af091748] **コンパイル [#af091748]
- $ export ARCH="arm+***コンパイラtoolchain [#l09e45db] 
- $ export LOCALVERSION="-SC02BOMKF2-CL271364+コンパイラー環境は,HT-03Aの時と同じ。(そのままでOK)か,[[CodeSourcery:http://www.codesourcery.com/]]のサイトから[[Sourcery G++ Lite Edition GNU Toolchain for ARM ProcessorsのEABI用Ver.2009q3-68:http://www.codesourcery.com/sgpp/lite/arm/portal/subscription3053]]を((Samsungでは,これでコンパイルしたと,なにかのドキュメントに書いてあった。)),ダウンロードして使う。 
- $ export KBUILD_BUILD_VERSION="01"+ 
 +***コンパイルしてみる [#jc67712d] 
 + $ export LOCALVERSION="-SC02BOMKF2-CL271364" (KF2) 
 + $ export LOCALVERSION="-SC02BOMKL4-CL793915" (KL4) 
 + $ export KBUILD_BUILD_VERSION="xxxx" (日付など・・・)
として環境変数をセット。~ として環境変数をセット。~
-コンパイラー環境は,HT-03Aの時と同じ。(そのままでOK)+設定ファイルの.configを, 
 + $ make mrproper 
 + $ make aries_jpn_defconfig 
 +で,SC-02B用の.configを作成する。
- $ cd Kernel +使うコンパイラ設定を,Makefileを変更して記述する。(上記の2009q3-68の場合の例) 
-arch/arm/configs/aries_jpn_defconfigの83行目当たりにある,+ CROSS_COMPILE  ?= /opt/toolchains/arm-2009q3/bin/arm-none-linux-gnueabi- 
 +  ↓ 
 + CROSS_COMPILE  ?= /opt/toolchains/arm-2009q3/bin/arm-none-eabi- 
 + 
 +initramfsを変更した物を使えるようにする。~ 
 +arch/arm/configs/aries_jpn_defconfigの87行目当たりにある,
 CONFIG_INITRAMFS_SOURCE=""  CONFIG_INITRAMFS_SOURCE=""
 ↓  ↓
 CONFIG_INITRAMFS_SOURCE="../initramfs"  CONFIG_INITRAMFS_SOURCE="../initramfs"
-に変更する。+に変更する。(編集したinitramfsがある場所を設定する。)
- $ make mrproper +必要なら通常のLinux設定のように,
- $ make aries_jpn_defconfig +
-で,.configを作成する。必要なら+
 $ make menuconfig  $ make menuconfig
でkernel設定を変更する。 でkernel設定を変更する。
-これで,+これで,準備OK。 
 + $ make 
 +でコンパイルする。~ 
 +うまくコンパイルできると,arch/arm/bootにzImageが作成される。 
 + 
 +module化したものがある場合は,initramfs/lib/modulesに*.koファイルを追加して,再度makeしてinitramfsを統合化してzImageを作ようにする。 
 + $ cp `find ./ -name "*.ko"` ../initramfs/lib/modules/
 $ make  $ make
-でコンパイル出来た。~ 
-うまくコンパイルできると,Kernel/arch/arm/bootにzImageが作成される。 
**odin3でflash出来るようにする。 [#n58f8476] **odin3でflash出来るようにする。 [#n58f8476]
-odin3で書き込めるようにtarファイルにする。 +odin3で書き込めるように,zImageをtarファイルにする。 
- $ tar cvf sc02bomkf2_yujixx.tar zImage + $ cd arch/arm/boot 
-とかしてodin3でPDAで出来たファイル&ref(sc02bomkf2_yuji0726.tar);を指定してflashすれば,SC-02Bに書き込める。+ $ tar cvf sc02bomkf2_yujixxxx.tar zImage 
 +とかしてodin3で書き込めるファイル&ref(sc02bomkf2_yuji0201.tar);を作成する。~ 
 +SC-02Bをdownloadモードで立ち上げて,odin3で出来たファイルをPDAに指定してflashすれば,SC-02Bに書き込める。 
 + 
 +純正ソースから, 
 +-1.2GまでのOC~ 
 +-BLN対応~ 
 +-ext4パーテーション対応と高速化(高速化はKF2のみ)~ 
 +-sd-ext使用とuserinit.d対応~ 
 +-swapパーテーションでのswap対応 
 +-zram(compcache)での拡張ram対応~ 
 +-tether(USB,WLAN)対応 
 +-IOスケジュールに,sio,bfqを追加してデフォルトをsioに~ 
 +-root化~ 
 +-CWMリカバリー搭載~ 
 + 
 +と,純正からあまりいじってないのもあって,動作は安定している。(KL4はまだ試していない・・・)電池持ちもSetCPUを使って,スリープ時のCPU Clockを下げるのと電圧調整で,いろいろ使っても16時間以上は使えている :) 予備バッテリを最初購入して交換しながら使っていたんだけど,もう使わなくなった。 
 + 
 +あれ,%%suとSuperuser.apkがコピーされていない%% &worried; 
 + cp /res/misc/su > /system/xbin/su 
 + cp /res/misc/Superuser.apk > /system/app/Superuser.apk 
 +とかして,とりあえずコピーした。そのうちinitramfsを変更しないと・・・ 
 + 
 +04/07/2012 直してみた。でもCWMのnandroidバックアップがなぜか出来ない。どうも, 
 + /sdcard/clockworkmod/backup 
 +ディレクトリが無いのが原因みたい。このディレクトリを作成したらnandroidバックアップ出来た &worried; 
 + 
 +KL4は,KernelをKF2と同じ内容でいじってコンパイルとinitramfsも作成してみたんだけど,なんかなぜか/systemがマウント出来ない。しょうがないんでKF2に戻して使っている ;)


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