Samsungで,ソースコードが公開されている。このソースから,Kernelをコンパイルしてみる。
https://opensource.samsung.com/にソースコードが公開されている。(SC-02BOMKF2のKernel)
ファイル名は,Gingerbread ver2.3.3のKF2がSC-02B_OpenSource.zipで,ver2.3.6のKL4がSC-02B_GB_Opensource_Update.zip。
適当なディレクトリを作成して,
$ unzip SC-02B_OpenSource.zip $ tar xvfz SC-02B_Kernel.tar.gz
のようにしてzipファイルを解凍すると,kernelのソースコードが展開される。
通常のLinuxだと,kernel+initramfs=boot.imgなんだけど,Samsungの場合はなぜかkernel+initramfs=zImageみたい。
たぶん,kernelをコンパイル後zImageを作成する時にinitramfsが必要になる。
とりあえず,SC-02BからバックアップしておいたzImageから,unpack-initramfsコマンドを使ってinitramfsを抜き出したファイルを使用することにする。
$ unpack-initramfs zImage
これで,ファイルがinitramfsの中のファイルが復元されるんで,ディレクトリをKernelディレクトリがある所にinitramfsというディレクトリを作成して,そこに移動しておく。
mkdir /data # SEC_DMCRYPT crypt flag added data # mount rfs /dev/block/mmcblk0p2 /data nosuid nodev check=no mount rfs /dev/block/mmcblk0p2 /data nosuid nodev crypt check=no mount ext4 /dev/block/mmcblk0p2 /data noatime data=ordered nodelalloc chown system system /data chmod 0771 /data
mkdir /data #mount rfs /dev/block/mmcblk0p2 /data nosuid nodev check=no mount rfs /dev/block/mmcblk0p2 /data nosuid nodev crypt check=no mount ext4 /dev/block/mmcblk0p2 /data noatime data=ordered nodelalloc
# create mountpoints mkdir /mnt 0775 root system mkdir /mnt/sdcard 0000 system system mkdir /mnt/sd-ext 0000 system system : # Backwards Compat - XXX: Going away in G* symlink /mnt/sdcard /sdcard symlink /mnt/sd-ext /sd-ext
# Define the oom_adj values for the classes of processes that can be # killed by the kernel. These are used in ActivityManagerService. setprop ro.FOREGROUND_APP_ADJ 0 setprop ro.VISIBLE_APP_ADJ 1 setprop ro.PERCEPTIBLE_APP_ADJ 1 setprop ro.HEAVY_WEIGHT_APP_ADJ 2 setprop ro.SECONDARY_SERVER_ADJ 2 setprop ro.BACKUP_APP_ADJ 2 setprop ro.HOME_APP_ADJ 4 setprop ro.HIDDEN_APP_MIN_ADJ 7 setprop ro.CONTENT_PROVIDER_MEM 14 setprop ro.EMPTY_APP_ADJ 15 : # Define the memory thresholds at which the above process classes will # be killed. These numbers are in pages (4k). setprop ro.FOREGROUND_APP_MEM 2560 setprop ro.VISIBLE_APP_MEM 4096 setprop ro.PERCEPTIBLE_APP_MEM 4096 setprop ro.HEAVY_WEIGHT_APP_MEM 4096 setprop ro.SECONDARY_SERVER_MEM 6144 setprop ro.BACKUP_APP_MEM 6144 setprop ro.HOME_APP_MEM 6144 setprop ro.HIDDEN_APP_MEM 10240 setprop ro.CONTENT_PROVIDER_MEM 11264 setprop ro.EMPTY_APP_MEM 12288 : # classes will still be killed first. write /sys/module/lowmemorykiller/parameters/adj 0,1,2,7,14,15 write /proc/sys/vm/overcommit_memory 1 write /proc/sys/vm/min_free_order_shift 4 write /sys/module/lowmemorykiller/parameters/minfree 2560,4096,6144,10240,11264,12288
空き容量が,12288ページ(49152KB)以下で,adjが15以上のプロセスはkill 空き容量が,11264ページ(45056KB)以下で,adjが14以上のプロセスはkill 空き容量が,10240ページ(40960KB)以下で,adjが7以上のプロセスはkill :
# echo "1536,2048,4096,5120,15360,23040" > /sys/module/lowmemorykiller/parameters/minfree
#!/system/bin/sh if /sbin/busybox [ /res/misc/lights.s5pc110.so -nt /system/lib/hw/lights.s5pc110.so ] then if /sbin/busybox [ ! -f /system/lib/hw/lights.s5pc110.so.backup ] then # make backup cat /system/lib/hw/lights.s5pc110.so > /system/lib/hw/lights.s5pc110.so.backup fi # setup liblights cat /res/misc/lights.s5pc110.so > /system/lib/hw/lights.s5pc110.so #set permissions chmod 755 /system/lib/hw/lights.s5pc110.so fi
start setbln : : service setbln /sbin/init_bln.sh user root oneshot disabled
このようにして,rootが使えるようにした。
ここに,Galaxy S(2.6.35.7)用のOC/UV対応パッチがあったんで,入れてみた。ただOCのMaxは1.2GHz
SetCPU等を使って各クロック毎にコア電圧を設定できる。低くするとちょこっと電池持ちがよくなるかも。*1
$ cd Kernel $ patch -p1 -i ../patch/oc/oc120v400-source.patch
SC-02Bはインジケーター用のLEDが搭載されていない。メニューと戻るボタンのタッチパネルのバックライトをインジケーターLEDのように使用する為の変更を入れてみた。 これをダウンロードして,パッチを当てる。
$ cd Kernel $ patch -p1 -i ../patch/bln/bln_i9000_linux-2.6.35_gingerbread.patch
コンパイルしてSC-02Bに出来たkernelを焼いて使ってみたら,電話の音がブチブチブチとかいう音になって電話として使えなかった JJ1から焼き直したりしてみたけど,結局自分で作ったkernelだとダメになっちゃうと言うことがわかった。*2
kernelのソースの音関連を調べていたら,sound/soc/codecsの中にあるファイルで,コンパイルすべきファイルがコンパイルされていないのを見つけた。本来は,たぶんなんだけどwm8994_s1ntt.cをコンパイルすべきところなのだが,wm8994_aries.cをコンパイルしていた。
どうも,sound/soc/codecs/Makefileに問題がある。53行目あたりをとりあえず以下のように変更した,
ifeq ($(SEC_PROJECT_REGION_OPERATOR),S1_JPN_NTT) ↓ ifeq ($(CONFIG_ARIES_NTT),y)
これで改めてコンパイルしたら,ちゃんと電話の音が鳴った これってSC-02Bのソースなんだよね,Samsungさん。
CONFIG_SWAP=y
# cat /sys/block/mmcblk0/queue/scheduler noop deadline cfq bfq [sio]
# echo cfq > /sys/block/mmcblk0/queue/scheduler
コンパイラー環境は,HT-03Aの時と同じ。(そのままでOK)か,CodeSourceryのサイトからSourcery G++ Lite Edition GNU Toolchain for ARM ProcessorsのEABI用Ver.2009q3-68を*3,ダウンロードして使う。
$ export LOCALVERSION="-SC02BOMKF2-CL271364" (KF2) $ export LOCALVERSION="-SC02BOMKL4-CL793915" (KL4) $ export KBUILD_BUILD_VERSION="xxxx" (日付など・・・)
として環境変数をセット。
設定ファイルの.configを,
$ make mrproper $ make aries_jpn_defconfig
で,SC-02B用の.configを作成する。
使うコンパイラ設定を,Makefileを変更して記述する。(上記の2009q3-68の場合の例)
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="../initramfs"
に変更する。(編集したinitramfsがある場所を設定する。)
必要なら通常のLinux設定のように,
$ make menuconfig
でkernel設定を変更する。 これで,準備OK。
$ make
でコンパイルする。
うまくコンパイルできると,arch/arm/bootにzImageが作成される。
module化したものがある場合は,initramfs/lib/modulesに*.koファイルを追加して,再度makeしてinitramfsを統合化してzImageを作ようにする。
$ cp `find ./ -name "*.ko"` ../initramfs/lib/modules/ $ make
odin3で書き込めるように,zImageをtarファイルにする。
$ cd arch/arm/boot $ tar cvf sc02bomkf2_yujixxxx.tar zImage
とかしてodin3で書き込めるファイルsc02bomkf2_yuji0201.tarを作成する。
SC-02Bをdownloadモードで立ち上げて,odin3で出来たファイルをPDAに指定してflashすれば,SC-02Bに書き込める。
純正ソースから,
と,純正からあまりいじってないのもあって,動作は安定している。(KL4はまだ試していない・・・)電池持ちもSetCPUを使って,スリープ時のCPU Clockを下げるのと電圧調整で,いろいろ使っても16時間以上は使えている 予備バッテリを最初購入して交換しながら使っていたんだけど,もう使わなくなった。
あれ,suとSuperuser.apkがコピーされていない
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バックアップ出来た
KL4は,KernelをKF2と同じ内容でいじってコンパイルとinitramfsも作成してみたんだけど,なんかなぜか/systemがマウント出来ない。しょうがないんでKF2に戻して使っている
コメント一覧
投稿ツリー
(未承認) ((未承認), 2012/1/5 12:25)
Re: Re: 携帯電話/SC-02B/Android/kernelのコンパイル (yuji, 2011/11/10 1:35)
(未承認) ((未承認), 2011/11/8 9:11)
Re: Re: 携帯電話/SC-02B/Android/kernelのコンパイル (yuji, 2011/9/30 3:27)
(未承認) ((未承認), 2011/9/29 17:40)
Re: Re: 携帯電話/SC-02B/Android/kernelのコンパイル (yuji, 2011/9/27 0:05)
Re: 携帯電話/SC-02B/Android/kernelのコンパイル (fujjita, 2011/9/22 2:45)
新しくコメントをつける
CWMですが,sc02bomkf2_yuji0915.tarにはCWM3.0.5が組み込んで有ります。普通にVOL_UP+PowerでCWM Recoveryになるようにしているんですか,動かないですか? 私の所ではHT-03Aと同じようにnandroid backupも使えています。SC-02B(Galaxy S)では,Recoveryを専用のパーテーションから起動するのではなくて,initramfs内にあるrecovery.rcに記述された/sbin/recovery.shをinitにより実行されるようにしています。このような起動の仕方なんで,Recovery時にCWMを実行しないKernel(実際はKernelではなくinitramfsですが)の場合は,nandroid backupしたデータからRestore出来なくなっちゃいます。このへんのところは,やっぱりHT-03Aが良いですね。SC-02B(Galaxy S)でもRecovery用のパーテーションは予約されているんで,ブートローダーが対応すればHT-03Aと同じに出来るんですけどね・・・
もしかして,/cache/recovery/commandが残っているのかもしれませんね,この場合だと標準のRecoveryを起動するようにしています。(/cache/recovery/commandを削除削除すればCWMが動くと思います。)
SD-EXTについては,ここを参考に,/system/etc/init.dにマウントスクリプトを入れてください。05mountsdextを入れると,MicroSDに作成したEXT3を/sd-extにマウントします。
はい,自動で/system/app/にSuperuser.apkをコピーします。(suは/system/xbin/にコピー)
私のSC-02Bでは問題ないのですが・・・ adbが使えるのであれば,/res/miscにSuperuser.apkとsuがあるんで,それぞれのディレクトリにコピーしてみてください。
こんばんわ。コメントありがとうございます。回答が遅れてすいません。
インフラストラクチャーでのテザリングですが,だいぶ前のビルドしたものから可能になっています。sc02bomkf2_yuji0915.tarでも可能です。(PCにIP Address割り当ても行われます。)
Androidの設定メニューでテザリングの設定メニューを表示するには,別途framework-res.apkとSetting.apkの差し替えが必要になります。ここを参照してみてください。差し替え後は,Settings>無線とネットワーク>Mobile APからデザリングを使用する設定が出来るようになります。
USB接続でのテザリングも出来るようにしてありますが,今のところこの設定をするには,マーケットからTethering Shortcutをインストールして,そこから使用するようになります。
SC-02BのインフラファクチャテザリングでPC接続が作動しなくてなぜだろうと思って検索していたら辿り着きました。
こちらにアップされているsc02bomkf2_yuji0915.tarはDHCPが正常に作動するのでしょうか。
どうぞ宜しくお願い致します。