kernel関連

kernel全般について

現在テスト中の kernel ソースコードについて

wikiに貼り付けると大量になるので github にすべてをアップしている。
私自身がkernel側コードは素人の為、
  • DEBUGメッセージの有効化
  • 大量の日本語コメントの追加
  • 元々のkernel では出力されない情報を printk にて追加
している。
間違いがあれば、Twitterかコメント欄にてお知らせ頂けると幸いです。
github にアップしているae2drv(音源周りドライバ)はトレース可能にしたもののエラー処理を所々省いているため、長時間運用はできないので注意の事。

実機拡張部分

仙石氏のサイトを参考にして、DECKARD LSM Support と Enable different security models を外した。
Security options  ---> 
    [ ] Enable access key retention support
    [*] Enable different security models
    [ ] Enable the securityfs filesystem
    [ ] Socket and Networking Security Hooks
    [*] Security hooks for pathname based access control
    [ ] File POSIX Capabilities
    [*] DECKARD LSM Support
    (/dev/block/mtdblock5) block device driver name for /system
    chroot() enable PATH  

swapするならここで有効にする。(デフォルトkernelなのでcompcacheは独自に入れないといけない。)
General setup  ---> 
    [ ] Support for paging of anonymous memory (swap) 



Android独自拡張部分

kernel menuconfigにて
Device Drivers  --->
 [*] Misc devices  --->    
    [*]   Android pmem allocator
    [ ]     Android pmem debug
    <M>     Simple module to test Android pmem kernel API
 [*] Staging drivers  --->                  
    Android  --->            
      [*] Android Drivers
      [*] Android Binder IPC Driver  
      <*> Android log driver 
      <M>   Simple module to test Android log driver
      [*] Android RAM buffer console   
      [*]   Enable verbose console messages on Android RAM console  
      [ ]   Android RAM Console Enable error correction  --->
      [ ]   Start Android RAM console early
      [*] Timed output class driver
      <*>   Android timed gpio driver
      [*] Android Low Memory Killer
      [*] Android for Engineering

他にも見落としがあると思います。

kernel の debugfs を利用する

# mount -t debugfs none /sys/kernel/debug

pmem の debug を有効にする

Device Drivers  --->
 [*] Misc devices  --->    
    [*]     Android pmem debug
pmem の debug メッセージが出ないと思ったら、
kernel/dirveres/misc/pmem.c
に次のような設定がされていた。
#define PMEM_DEBUG_MSGS 0
#if PMEM_DEBUG_MSGS
#define DLOG(fmt,args...) \
	do { printk(KERN_INFO "[%s:%s:%d] "fmt, __FILE__, __func__, __LINE__, \
		    ##args); } \
	while (0)
#else
#define DLOG(x...) do {} while (0)
#endif
の PMEM_DEBUG_MSGS 定義を次のように変更する。
#define PMEM_DEBUG_MSGS 1

I2Cのdebugを有効にする

Device Drivers  --->
    -*- I2C support  --->
         --- I2C support
         <*>   I2C device interface
         [*]   Autoselect pertinent helper modules
         I2C Hardware Bus support  --->
         Miscellaneous I2C Chip support  --->
         [*]   I2C Core debugging messages
         [*]   I2C Algorithm debugging messages
         [*]   I2C Bus debugging messages
         [*]   I2C Chip debugging messages     

Audio関連

現状どういう状態かよく分かっていない。
しかし、下記オプションは有効になっていたため、debugも有効にした。
Device Drivers  ---> 
    <*> Sound card support  --->
        <*>   Advanced Linux Sound Architecture  --->  
            --- Advanced Linux Sound Architecture
            [*]   Support old ALSA API
            [*]   Verbose procfs contents
            [*]   Verbose printk
            [*]   Debug
                [*]     More verbose debug

パワー・マネージメント

  • 主に /sys/power 以下のこと
/sys/power
は、kernelソースにおいて、
kernel/kernel/power/main.c
ファイル内
static int __init pm_init(void)
{
	power_kobj = kobject_create_and_add("power", NULL);
	if (!power_kobj)
		return -ENOMEM;
	return sysfs_create_group(power_kobj, &attr_group);
}
で作成されている(と思う^^;)
/sys/power/* は上記ディレクトリに複数関数があるためその辺で追加されているのかもしれないし、
追加する標準的手続きがあるのかもしれない。(個人的に分かっていない…orz)
ひとまず、追ってみようと思う。

kernelのパワーマネージメントのDEBUGを有効にする。

Power management options  --->      
[*]   Power Management Debug Spport
[*]     Verbose Power Management debugging

ソースコード内でのdebugレベルを指定する。

以前、手動で diff を取っていたが、現在 git を使っているので、gitで diff を取得してみた。
diff --git a/kernel/power/userwakelock.c b/kernel/power/userwakelock.c
index d7242d9..f4b64ce 100755
--- a/kernel/power/userwakelock.c
+++ b/kernel/power/userwakelock.c
@@ -26,7 +26,7 @@ enum {
        DEBUG_ACCESS    = BIT(3),
        DEBUG_LOOKUP    = BIT(4),
 };
-static int debug_mask = DEBUG_FAILURE;
+static int debug_mask = DEBUG_FAILURE|DEBUG_ERROR|DEBUG_NEW|DEBUG_ACCESS|DEBUG_LOOKUP;
 module_param_named(debug_mask, debug_mask, int, S_IRUGO | S_IWUSR | S_IWGRP);
 
 static DEFINE_MUTEX(tree_lock);

diff --git a/kernel/power/wakelock.c b/kernel/power/wakelock.c
index a452377..0fb3ad7 100755
--- a/kernel/power/wakelock.c
+++ b/kernel/power/wakelock.c
@@ -31,7 +31,7 @@ enum {
        DEBUG_EXPIRE = 1U << 3,
        DEBUG_WAKE_LOCK = 1U << 4,
 };
-static int debug_mask = DEBUG_EXIT_SUSPEND | DEBUG_WAKEUP;
+static int debug_mask = DEBUG_EXIT_SUSPEND | DEBUG_WAKEUP | DEBUG_WAKE_LOCK;
 module_param_named(debug_mask, debug_mask, int, S_IRUGO | S_IWUSR | S_IWGRP);
 
 #define WAKE_LOCK_TYPE_MASK              (0x0f)



まだ、自分で試していないので、fi01さんのをそのままコピーしています
334 :fi01 ◆w.f0Q9VCUk :2011/02 /15(火) 17:36:04 ID:+ZuucmDA
   SDカードがマウント出来るようになってからAngryBirdsが
   インストール出来なくなっていたが、SDカードへ
   インストールしようとして失敗していた模様。

   カーネルにdevice-mapperとtwofish暗号の追加で解決した。
   コンフィグの差分は下記の通り。

   CONFIG_MD=y
   CONFIG_BLK_DEV_DM=y
   CONFIG_DM_DEBUG=y
   CONFIG_DM_CRYPT=y
   CONFIG_DM_SNAPSHOT=y
   CONFIG_DM_MIRROR=y
   CONFIG_DM_ZERO=y
   CONFIG_DM_MULTIPATH=y
   CONFIG_DM_DELAY=y
   CONFIG_DM_UEVENT=y
   CONFIG_CRYPTO_CBC=y
   CONFIG_CRYPTO_TWOFISH=y
   CONFIG_CRYPTO_TWOFISH_COMMON=y 

936 :fi01 ◆w.f0Q9VCUk :2011/03 /02(水) 19:14:56.46 ID:G7Nf29Ov
   DevRenaxさんが公開されたファイルをベースにRO178さん、RO215さん達の成果を
   マージしたCyanogenmod(froyo-stableブランチ)をビルドしましたが、なかなか良いです。
   build.propを変更しなくてもマーケットからFlash Playerがダウンロード出来ました。

   Spaghetti Marshmallows Liteが楽しいです。
   hwアクセラレータが使えないのでNightモードにしないとキツイですが、一応遊べます。

   カーネルオプションのVMSPLIT_2GをVMSPLIT_3Gに変更するとprelink-mapを修正しなくても
   動作する様になったのですが、VMSPLIT_2Gにする理由って何だろう?
   VMSPLIT_3Gで問題無ければprelinkのアドレスで悩む必要が無くなると思うのですが。 

menuconfig 該当部分
Kernel Features  ---> 
 Memory split (1G/3G user/kernel split)  ---> 
   ( ) 3G/1G user/kernel split
   (X) 2G/2G user/kernel split
   ( ) 1G/3G user/kernel split      

何かお気づきの点が有りましたら、Twitterか下記まで。
コメント
名前:
コメント:

すべてのコメントを見る
最終更新:2011年03月10日 03:56
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。