上野家のホームページ
ナーマル,マリン,ココ
[
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
携帯電話/SC-02B/Android/kernelのコンパイル
をテンプレートにして作成
資料室
携帯電話/SC-02B/Android/kernelのコンパイル をテンプレートにして作成
[
差分
|
バックアップ
|
リロード
]
[ ]
開始行:
*kernelのコンパイル
Samsungで,ソースコードが公開されている。このソースから,...
**ソースコードのダウンロード
https://opensource.samsung.com/にソースコードが公開されて...
ファイル名は,Gingerbread ver2.3.3のKF2がSC-02B_OpenSourc...
適当なディレクトリを作成して,
$ unzip SC-02B_OpenSource.zip
$ tar xvfz SC-02B_Kernel.tar.gz
のようにしてzipファイルを解凍すると,kernelのソースコード...
**initramfsを準備する
通常のLinuxだと,kernel+initramfs=boot.imgなんだけど,Sam...
たぶん,kernelをコンパイル後zImageを作成する時にinitramfs...
とりあえず,SC-02BからバックアップしておいたzImageから,&...
$ unpack-initramfs zImage
これで,ファイルがinitramfsの中のファイルが復元されるんで...
***init.rcの変更
-ファイルシステムにrfs以外にext4でもマウント出来るように...
SC-02Bのオリジナルのままだと,/system,/data,/dbdata等は...
init.rcを以下のように変更する。(/data部分)
mkdir /data
# SEC_DMCRYPT crypt flag added data
# mount rfs /dev/block/mmcblk0p2 /data nosuid nodev ...
mount rfs /dev/block/mmcblk0p2 /data nosuid nodev cr...
mount ext4 /dev/block/mmcblk0p2 /data noatime data=o...
chown system system /data
chmod 0771 /data
他の部分(/system,/data,/dbdata)も適当に変更する。~
fota.rcも同様に変更(何に使うんだろ?)
mkdir /data
#mount rfs /dev/block/mmcblk0p2 /data nosuid nodev c...
mount rfs /dev/block/mmcblk0p2 /data nosuid nodev cr...
mount ext4 /dev/block/mmcblk0p2 /data noatime data=o...
他の部分(/system,/data,/dbdata)も適当に変更する。~
mountコマンドのオプションには,すこしでも早くするために,...
--noatimeをつける~
この場合,ファイルにアクセスした時にタイムスタンプを更新...
--relatimeをつける~
noatimeで問題が出るような場合は,relatimeがいいみたい。re...
-sd-ext用のマウントポイントを作っておく~
init.rcになくてもイイんだけど,ついでに入れておく。
# 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
-SDカードに作ったext3パーテーションをマウントする~
上で作ったマウントポイントに,[[このようにして>../sd-ext...
-プロセスがkillされる設定の確認~
AndroidのLinuxカーネルには,メモリの空き容量が少なく(ある...
カーネルには,その仕組みが2種類のものが実装されていて,一...
initramfsにいれるinit.rcを見てみると,
# Define the oom_adj values for the classes of processes...
# killed by the kernel. These are used in ActivityManag...
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 proces...
# 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...
write /proc/sys/vm/overcommit_memory 1
write /proc/sys/vm/min_free_order_shift 4
write /sys/module/lowmemorykiller/parameters/minfree...
adjは,プロセスの優先順位みたいで数字が小さいほど優先して...
minfreeは,最低限の空きページ数を示していて,1ページは4kB...
空き容量が,12288ページ(49152KB)以下で,adjが15以上のプ...
空き容量が,11264ページ(45056KB)以下で,adjが14以上のプ...
空き容量が,10240ページ(40960KB)以下で,adjが7以上のプロ...
:
FOREGROUND_APP: 前面で動作中のアプリ~
VISIBLE_APP: ユーザから見えているアプリ~
PERCEPTIBLE_APP: ユーザから認識可能なアプリ。例)バックグ...
HEAVY_WEIGHT_APP: ?~
SECONDARY_SERVER: ?~
BACKUP_APP: ?~
HOME_APP: ホームアプリ~
HIDDEN_APP: たぶん裏に回ったアプリ~
EMPTY_APP: ?~
プロセスチェックは常に行われていて,kernel/drivers/stagin...
# echo "1536,2048,4096,5120,15360,23040" > /sys/module/l...
とかして,動作中に変更することも出来る。~
適当に好きな値にしておく。
-BLN用にライブラリをコピーするようにしておく~
/sbin/init_bln.shを作成する。
#!/system/bin/sh
if /sbin/busybox [ /res/misc/lights.s5pc110.so -nt /syst...
then
if /sbin/busybox [ ! -f /system/lib/hw/lights.s5pc11...
then
# make backup
cat /system/lib/hw/lights.s5pc110.so > /system/l...
fi
# setup liblights
cat /res/misc/lights.s5pc110.so > /system/lib/hw/lig...
#set permissions
chmod 755 /system/lib/hw/lights.s5pc110.so
fi
実行権をつけておく。
init.rcに,
start setbln
:
:
service setbln /sbin/init_bln.sh
user root
oneshot
disabled
で/sbin/init_bln.shが自動起動するようにしておく。
***rootが使えるようにしておく
[[このようにして>../root化]],rootが使えるようにした。
***その他の変更
-Recoveryの変更~
どうもSC-02B(Galaxy S)だとRecoveryはinitramfsに入れてお...
HT-03Aだと,bootパーテーションとrecoveryパーテーション(...
このおかげで?,initramfsに入っているrecoveryを入れ替える...
~
recoveryを[[Clockworkmod:http://www.clockworkmod.com/]]の...
**Kernelの変更
***OverClock
[[ここ:https://github.com/existz/galaxys-i9000-OC-kernel-...
SetCPU等を使って各クロック毎にコア電圧を設定できる。低く...
$ cd Kernel
$ patch -p1 -i ../patch/oc/oc120v400-source.patch
***BLN対応
SC-02Bはインジケーター用のLEDが搭載されていない。メニュー...
[[これ:https://raw.github.com/neldar/backlightnotificatio...
$ cd Kernel
$ patch -p1 -i ../patch/bln/bln_i9000_linux-2.6.35_ginge...
***電話の音がおかしくなるのを修正(KF2のみ)
コンパイルしてSC-02Bに出来たkernelを焼いて使ってみたら,...
kernelのソースの音関連を調べていたら,sound/soc/codecsの...
どうも,sound/soc/codecs/Makefileに問題がある。53行目あた...
ifeq ($(SEC_PROJECT_REGION_OPERATOR),S1_JPN_NTT)
↓
ifeq ($(CONFIG_ARIES_NTT),y)
これで改めてコンパイルしたら,ちゃんと電話の音が鳴った :-...
***その他の変更
-テザリング出来るように変更~
.configをmake menuconfigでルーティングとNAT関連を有効にす...
USB tethering出来ないようになっている部分をコメント化して...
-swapパーテーションとzram対応~
swapは,MicroSDのSwapパーテーションとzramを使えるようにし...
swapを使えるようにするには,kernel設定を変更するだけ。
CONFIG_SWAP=y
ただ,実際にスワップパーテーションを使ってみたらサクサク...
MicroSDを早いやつにすれば良いのかもしれない。~
CPUパワーがあるんで,compcacheの方が良い結果が出るかも。...
-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,user...
**コンパイル
***コンパイラtoolchain
コンパイラー環境は,HT-03Aの時と同じ。(そのままでOK)か...
***コンパイルしてみる
$ 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を変更して記述する。(上記の...
CROSS_COMPILE ?= /opt/toolchains/arm-2009q3/bin/arm-non...
↓
CROSS_COMPILE ?= /opt/toolchains/arm-2009q3/bin/arm-no...
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...
$ cp `find ./ -name "*.ko"` ../initramfs/lib/modules/
$ make
**odin3でflash出来るようにする。
odin3で書き込めるように,zImageをtarファイルにする。
$ cd arch/arm/boot
$ tar cvf sc02bomkf2_yujixxxx.tar zImage
とかしてodin3で書き込めるファイル&ref(sc02bomkf2_yuji0201...
SC-02Bをdownloadモードで立ち上げて,odin3で出来たファイル...
純正ソースから,
-1.2GまでのOC~
-BLN対応~
-ext4パーテーション対応と高速化(高速化はKF2のみ)~
-sd-ext使用とuserinit.d対応~
-swapパーテーションでのswap対応
-zram(compcache)での拡張ram対応~
-tether(USB,WLAN)対応
-IOスケジュールに,sio,bfqを追加してデフォルトをsioに~
-root化~
-CWMリカバリー搭載~
と,純正からあまりいじってないのもあって,動作は安定して...
あれ,%%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
ディレクトリが無いのが原因みたい。このディレクトリを作成...
KL4は,KernelをKF2と同じ内容でいじってコンパイルとinitram...
終了行:
*kernelのコンパイル
Samsungで,ソースコードが公開されている。このソースから,...
**ソースコードのダウンロード
https://opensource.samsung.com/にソースコードが公開されて...
ファイル名は,Gingerbread ver2.3.3のKF2がSC-02B_OpenSourc...
適当なディレクトリを作成して,
$ unzip SC-02B_OpenSource.zip
$ tar xvfz SC-02B_Kernel.tar.gz
のようにしてzipファイルを解凍すると,kernelのソースコード...
**initramfsを準備する
通常のLinuxだと,kernel+initramfs=boot.imgなんだけど,Sam...
たぶん,kernelをコンパイル後zImageを作成する時にinitramfs...
とりあえず,SC-02BからバックアップしておいたzImageから,&...
$ unpack-initramfs zImage
これで,ファイルがinitramfsの中のファイルが復元されるんで...
***init.rcの変更
-ファイルシステムにrfs以外にext4でもマウント出来るように...
SC-02Bのオリジナルのままだと,/system,/data,/dbdata等は...
init.rcを以下のように変更する。(/data部分)
mkdir /data
# SEC_DMCRYPT crypt flag added data
# mount rfs /dev/block/mmcblk0p2 /data nosuid nodev ...
mount rfs /dev/block/mmcblk0p2 /data nosuid nodev cr...
mount ext4 /dev/block/mmcblk0p2 /data noatime data=o...
chown system system /data
chmod 0771 /data
他の部分(/system,/data,/dbdata)も適当に変更する。~
fota.rcも同様に変更(何に使うんだろ?)
mkdir /data
#mount rfs /dev/block/mmcblk0p2 /data nosuid nodev c...
mount rfs /dev/block/mmcblk0p2 /data nosuid nodev cr...
mount ext4 /dev/block/mmcblk0p2 /data noatime data=o...
他の部分(/system,/data,/dbdata)も適当に変更する。~
mountコマンドのオプションには,すこしでも早くするために,...
--noatimeをつける~
この場合,ファイルにアクセスした時にタイムスタンプを更新...
--relatimeをつける~
noatimeで問題が出るような場合は,relatimeがいいみたい。re...
-sd-ext用のマウントポイントを作っておく~
init.rcになくてもイイんだけど,ついでに入れておく。
# 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
-SDカードに作ったext3パーテーションをマウントする~
上で作ったマウントポイントに,[[このようにして>../sd-ext...
-プロセスがkillされる設定の確認~
AndroidのLinuxカーネルには,メモリの空き容量が少なく(ある...
カーネルには,その仕組みが2種類のものが実装されていて,一...
initramfsにいれるinit.rcを見てみると,
# Define the oom_adj values for the classes of processes...
# killed by the kernel. These are used in ActivityManag...
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 proces...
# 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...
write /proc/sys/vm/overcommit_memory 1
write /proc/sys/vm/min_free_order_shift 4
write /sys/module/lowmemorykiller/parameters/minfree...
adjは,プロセスの優先順位みたいで数字が小さいほど優先して...
minfreeは,最低限の空きページ数を示していて,1ページは4kB...
空き容量が,12288ページ(49152KB)以下で,adjが15以上のプ...
空き容量が,11264ページ(45056KB)以下で,adjが14以上のプ...
空き容量が,10240ページ(40960KB)以下で,adjが7以上のプロ...
:
FOREGROUND_APP: 前面で動作中のアプリ~
VISIBLE_APP: ユーザから見えているアプリ~
PERCEPTIBLE_APP: ユーザから認識可能なアプリ。例)バックグ...
HEAVY_WEIGHT_APP: ?~
SECONDARY_SERVER: ?~
BACKUP_APP: ?~
HOME_APP: ホームアプリ~
HIDDEN_APP: たぶん裏に回ったアプリ~
EMPTY_APP: ?~
プロセスチェックは常に行われていて,kernel/drivers/stagin...
# echo "1536,2048,4096,5120,15360,23040" > /sys/module/l...
とかして,動作中に変更することも出来る。~
適当に好きな値にしておく。
-BLN用にライブラリをコピーするようにしておく~
/sbin/init_bln.shを作成する。
#!/system/bin/sh
if /sbin/busybox [ /res/misc/lights.s5pc110.so -nt /syst...
then
if /sbin/busybox [ ! -f /system/lib/hw/lights.s5pc11...
then
# make backup
cat /system/lib/hw/lights.s5pc110.so > /system/l...
fi
# setup liblights
cat /res/misc/lights.s5pc110.so > /system/lib/hw/lig...
#set permissions
chmod 755 /system/lib/hw/lights.s5pc110.so
fi
実行権をつけておく。
init.rcに,
start setbln
:
:
service setbln /sbin/init_bln.sh
user root
oneshot
disabled
で/sbin/init_bln.shが自動起動するようにしておく。
***rootが使えるようにしておく
[[このようにして>../root化]],rootが使えるようにした。
***その他の変更
-Recoveryの変更~
どうもSC-02B(Galaxy S)だとRecoveryはinitramfsに入れてお...
HT-03Aだと,bootパーテーションとrecoveryパーテーション(...
このおかげで?,initramfsに入っているrecoveryを入れ替える...
~
recoveryを[[Clockworkmod:http://www.clockworkmod.com/]]の...
**Kernelの変更
***OverClock
[[ここ:https://github.com/existz/galaxys-i9000-OC-kernel-...
SetCPU等を使って各クロック毎にコア電圧を設定できる。低く...
$ cd Kernel
$ patch -p1 -i ../patch/oc/oc120v400-source.patch
***BLN対応
SC-02Bはインジケーター用のLEDが搭載されていない。メニュー...
[[これ:https://raw.github.com/neldar/backlightnotificatio...
$ cd Kernel
$ patch -p1 -i ../patch/bln/bln_i9000_linux-2.6.35_ginge...
***電話の音がおかしくなるのを修正(KF2のみ)
コンパイルしてSC-02Bに出来たkernelを焼いて使ってみたら,...
kernelのソースの音関連を調べていたら,sound/soc/codecsの...
どうも,sound/soc/codecs/Makefileに問題がある。53行目あた...
ifeq ($(SEC_PROJECT_REGION_OPERATOR),S1_JPN_NTT)
↓
ifeq ($(CONFIG_ARIES_NTT),y)
これで改めてコンパイルしたら,ちゃんと電話の音が鳴った :-...
***その他の変更
-テザリング出来るように変更~
.configをmake menuconfigでルーティングとNAT関連を有効にす...
USB tethering出来ないようになっている部分をコメント化して...
-swapパーテーションとzram対応~
swapは,MicroSDのSwapパーテーションとzramを使えるようにし...
swapを使えるようにするには,kernel設定を変更するだけ。
CONFIG_SWAP=y
ただ,実際にスワップパーテーションを使ってみたらサクサク...
MicroSDを早いやつにすれば良いのかもしれない。~
CPUパワーがあるんで,compcacheの方が良い結果が出るかも。...
-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,user...
**コンパイル
***コンパイラtoolchain
コンパイラー環境は,HT-03Aの時と同じ。(そのままでOK)か...
***コンパイルしてみる
$ 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を変更して記述する。(上記の...
CROSS_COMPILE ?= /opt/toolchains/arm-2009q3/bin/arm-non...
↓
CROSS_COMPILE ?= /opt/toolchains/arm-2009q3/bin/arm-no...
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...
$ cp `find ./ -name "*.ko"` ../initramfs/lib/modules/
$ make
**odin3でflash出来るようにする。
odin3で書き込めるように,zImageをtarファイルにする。
$ cd arch/arm/boot
$ tar cvf sc02bomkf2_yujixxxx.tar zImage
とかしてodin3で書き込めるファイル&ref(sc02bomkf2_yuji0201...
SC-02Bをdownloadモードで立ち上げて,odin3で出来たファイル...
純正ソースから,
-1.2GまでのOC~
-BLN対応~
-ext4パーテーション対応と高速化(高速化はKF2のみ)~
-sd-ext使用とuserinit.d対応~
-swapパーテーションでのswap対応
-zram(compcache)での拡張ram対応~
-tether(USB,WLAN)対応
-IOスケジュールに,sio,bfqを追加してデフォルトをsioに~
-root化~
-CWMリカバリー搭載~
と,純正からあまりいじってないのもあって,動作は安定して...
あれ,%%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
ディレクトリが無いのが原因みたい。このディレクトリを作成...
KL4は,KernelをKF2と同じ内容でいじってコンパイルとinitram...
ページ名:
Counter: 0, today: 0, yesterday: 0
Copyright©2008 Yuji Ueno All Rights Reserved.
ログイン
ユーザ名:
パスワード:
IDとパスワードを記憶
パスワード紛失
メインメニュー
ホーム
でぶlog
資料室
最新ページ一覧
全ページ一覧
ヘルプ
フォーラム
お問い合わせ