★Building kernel for Sony Ericsson mini(S51SE)

                                                    今さらなネタになってしまうかもしれないが、<br />自分でビルドしたKernelを導入してみた。<br /><br /><br /><br /><img itemprop="image" src="https://iwiz-chie.c.yimg.jp/im_sigg.C1nmGGRGWtY5CnaSCpjXw---exp5m-n1/d/iwiz-chie/note-131280-i1-sp4z_kernel.PNG" alt="sp4z_kernel" /><br /><br /><br />ぁ、WiFiが使えん&hellip;(汗)<br /><br />そうだった&hellip;<br /><br />元々DooM Kernelをベースにビルドされた<br />xKernelを導入していたからWiFiモジュールが<br />Stockのものではないんだった&hellip;(苦笑)<br /><br />/system/lib/modulesのバックアップを<br />作っておいてよかた。<br /><br />WiFiモジュールのみをビルドし直して、<br />Flashable zip作ればおk。<br /><br /><br /><br /><br /><br /><br /><br />さて、スマートフォンのカスタマイズをしていて、<br />Kernelを自分でビルドして使っている人って<br />たくさんいるのだろうか&hellip;?<br /><br /><br /><br />Windows環境の人が大多数であるから、<br />わざわざLinux環境を用意してまで<br />Kernelを何とかしたい&hellip;なんていう人は<br />少ないんだろうなぁ&hellip;と想像。<br /><br />vmwareやVirtual Boxなどを導入して<br />Windows上にLinux環境を構築してやれば、<br />できないことではないとは思うけど、<br />動作させるのにある程度のPCスペックがないと、<br />ビルドに時間がかかって大変だろうから<br />そもそもWindowsユーザーには敷居が高いと<br />考えている。<br /><br /><br /><br />でもさ、やっぱり自分でビルドしたKernelを<br />導入してカスタマイズしたいじゃない。(笑)<br /><br /><br /><br />単純な動機から、やってみようと思い立った。<br /><br /><br /><br />元々、自宅のPC環境でWindowsが占める領域は<br />ほんの20GBしかなく、Debian / Ubuntuを<br />メインに利用していたこともあって、<br />開発環境さえ作ればすぐにできることだった。<br /><br />自宅のPC環境(8台)はDesktop / Laptopともに<br />Ubuntu(12.04)の64bit環境だったので<br />Ginger BreadのKernelをビルドできることも<br />織り込み済みだったし、そもそもadbやFlashTool<br />などを使いたかったこともあってある程度の<br />環境(JDK/SDKの導入)くらいは整っていた。<br /><br />あと必要だったのは、ビルドするためのコンパイラを<br />導入することくらい。<br /><br /><br /><br />Officialな情報として、こちら、Developer Worldに<br /><br />「How to build a Linux kernel and flash it to the phone」<br /><br />なんていうものがあって、ソニエリ時代からも<br />感じていたけど、オープンな感覚は現在のSonyに<br />なってもスタンスは変わらないようですね。<br /><br />この情報を参考にCode Sourceryを導入することに。<br /><br />KernelソースはDeveloper Worldから最新FWを<br />ダウンロードして適当な場所に展開。<br /><br /><br /><br />Terminalから展開したファイルのkernelディレクトリへ<br />----------------------------------<br /><em><strong>$ cd kernel&nbsp;</strong></em><br />----------------------------------<br /><br />端末の設定からmakeする<br />----------------------------------<br /><em><strong>$ ARCH=arm make semc_smultron_defconfig</strong></em><br />----------------------------------<br /><br />※ST15もS51SEも同じコードネーム『smultron』<br /> スウェーデン語でイチゴだって&hellip;<br /><br /> ちなみに「〜_〜_defconfig」&nbsp;のファイルは<br /> /kernel/arch/arm/configs<br /> に格納されていまする<br /><br />----------------------------------<br /><em><strong>$&nbsp;ARCH=arm CROSS_COMPILE=/opt/arm-2010q1/bin/arm-none-eabi- make</strong></em><br />----------------------------------<br /><br />これで、/kernel/arch/arm/boot/zImage<br />が生成されてます。<br /><br />zImageというと、このまま焼けるんじゃないかと<br />思ったのですが&hellip;焼けません。(笑)<br /><br /><br /><br />ま、これができたらmenuconfigでゴニョればおk。<br /><br /><br /><br /><img src="https://iwiz-chie.c.yimg.jp/im_siggB60d37StF2lsrnspXdHyNw---exp5m-n1/d/iwiz-chie/note-131280-i2-menuconfig.PNG" alt="menuconfig" /><br /><br /><br />&uarr;これがmenuconfig画面。<br />Kernelを弄る理由。<br /><br />・Over Clock<br />・zramの導入<br /><br />などが主な理由である。<br /><br />Stock ROMではOFFになっているswapやらzram、<br />ext4やらを使えるように設定変更。<br /><br />zramについてはモジュールやdriverをパク&hellip;(ry<br />いや、ocモジュールだとか、I/O scheduler、governor<br />などとともにxKernelのソースから拝借。(笑)<br /><br />xKernelもDooM Kerelからの移植なんだから、<br />オレも同じようなものでしょ&hellip;<br /><br /><br /><br /><br /><br /><br /><br />さて、初めにmakeしたzImageはそのままでは<br />何の役にも立たないので、ramdiskと一緒にして<br />最終的にflashできるboot.imgを作るのだけど&hellip;<br /><br />ramdiskって&hellip;?<br /><br /><br /><br />DooMLoRD氏やkrizky82氏のgithubでkernelソースを<br />眺めていた時にramdiskってあったなぁ&hellip;<br /><br />なんて思いながら調べてみると、どうもSEUSで<br />できる例の「FILE*********」という3つのうちの<br />1つをDecryptしたkernel〜〜〜.sinというファイル&hellip;<br /><br />あれ?<br /><br />それって、FlashToolでROMを焼く時に、FTの<br />firmwareディレクトリ内に生成されるアレじゃん。<br /><br />それをsin2img.exeでkernel.sinを作るんだって。<br /><br />をを。<br /><br />てか、kernel.sinは持ってるし。<br /><br />----------------------------------<br /><strong><em>$ perl split_bootimg.pl<br /></em></strong>----------------------------------<br /><br />ぅぉ。<br /><br />perlスクリプトが必要なんだ&hellip;ということで<br />急ぎperlを入れてやる。<br /><br />これで生成されるkernel.sin-ramdisk.cpio.gzが<br />欲しかったものだ。<br /><br />同時に生成されるkernel.sin-ramdiskフォルダに<br />必要なモジュールやら、Superuser.apk、su binaryも<br />突っ込んだり、default.propのro.secure=0に<br />したりして&hellip;<br /><br /><br /><br />ん?<br /><br />zImageとramdiskからboot.imgを作るのに<br />mkbootimgも必要なんだと。<br /><br />あれこれ必要なのね。(笑)<br /><br /><br /><br />----------------------------------<br /><em><strong>$&nbsp;mkbootfs ./kernel.sin-ramdisk | gzip -9 &gt; kernel.sin-ramdisk2.gz</strong></em><br />----------------------------------<br /><br />configして&uarr;で固めたramdiskを使ってzImageと合わせる。<br /><br />----------------------------------<br /><em><strong>$&nbsp;mkbootimg &ndash;base 0&times;00200000 &ndash;kernel&nbsp;kernel/arch/arm/boot/zImage&nbsp;&ndash;ramdiskramdisk.img&nbsp;-o&nbsp;boot.img</strong></em><br />----------------------------------<br /><br />できた。<br /><br />スゲー。<br /><br />オレでもできるのね。<br /><br /><br /><br />ま、あるべきものがなくてzramが全然<br />機能してなかったり、修正がまだまだ<br />必要だとは思ったけど、案外あっさり<br />ビルドできたのには一安心。<br /><br /><br /><br />自前のKernelで動作する自分の端末に満足。<br /><br /><br /><br />さて、細かい修正しなきゃ。(汗)