関数型プログラミングをする際にどう考えてコードに落とすか?

 もう数年関数型プログラミングを断続的に勉強し続けていますが、作れと言われれば作れるものの出来上がるコードが全然関数型じゃないばかりかスマートじゃありません。これはもうオブジェクト指向や手続き型に脳みそが浸食されていて、考え方の部分から関数型ではないのだろうなと思いました。

 そこでTwitterで以下のようなつぶやきをしたところ反応してくださった方々がいましたので、紹介しつつ理解したいと思います。

自分の手続き型な回答

 まずは、自分がC#で順列を順列を列挙するプログラムを組んでみました。
 C#で関数型のことは考えずに素直に書いたつもりです。

ideone.com
Ideone.com - 6uPhHY - Online C# Compiler & Debugging Tool

 考え方としては、[1, 2, 3, 4]の順列を作るには、まずは先頭の4つを先頭にしたリストを作りその先頭以外についての順列を再帰で求める、です。

・最初の呼び出し
[1] ++ 再帰 [2, 3, 4]
[2] ++ 再帰 [1, 3, 4]
[3] ++ 再帰 [1, 2, 4]
[4] ++ 再帰 [1, 2, 3]

・[1]についての再帰呼び出し
[1, 2] ++ 再帰 [3, 4]
[1, 3] ++ 再帰 [2, 4]
[1, 4] ++ 再帰 [2, 3]

・[1, 2]についての再帰呼び出し
[1, 2, 3] ++ 再帰 [4]
[1, 2, 4] ++ 再帰 [3]

 と上記を繰り返すことにより順列が全て求まります。

 先頭の4つと、それ以外のリストを作るのに破壊的代入とループを使ってしまっています。
 手続き型での素直な実装になっていると思います。

 では、他の方の関数型での回答を理解してみようと思います。

@TheorieDuDroit さんの回答

permutation.hs · GitHub
permutation.hs · GitHub
与えられたリストの順列を列挙する - Qiita

 最後のqiitaに全部まとまっているので、それを読みます。

 ふぇぇ
 なんでいきなりこんなにシンプルなコードに落ちるのか…(すごい)

 「巡回を使うヴァージョン」の方は言っていることはわかるけど、これを自分で思いつくにはどうしたら…

 「順列を頭から構成していくヴァージョン(結果は辞書順)」は僕の考え方と同じですね。ですが、シンプル。きれい。
 concatMap, 再帰, mapを使うとできるということをどうすれば自然に思いつけるのか。

 「攪乱順列を構成する(ほんのすこし発展)」、すみません。お手上げです。時間があるときに実行しながら考えます。

@nobsun さんの1回目の回答

順列列挙関数(素朴な実装) - Qiita
続・順列列挙関数 - Qiita

 これはわかりやすい!(「続・順列列挙関数」の方は難しい)
 こんなに丁寧に書いてくださって感謝感謝です。

 トップダウンで「型を考える」→「再帰停止条件を考える」のですね。

 まだ途中までしか読めてないのですが、@its_out_of_tune さんのHaskellでポーカーを作るブログ(Haskellでポーカーを作ろう〜第一回 リストのシャッフルとカードの定義〜 - Creatable a => a -> IO b)もこんな感じですね。(ちゃんと全部読もう)

 これが自然にできるにはどうしたら???
 数をこなすしかないのかな。読んでいる分にはわかるわかるなのですが、自分で書くときにこれができるかというと…

まとめ

 お二人の回答を見ていて思いました。

 「あたまのデキが違う」
 は認めたくないので、下記の2点

 「更にこれらのそれぞれをたとえば[a,b,c,d][b,c,d,a][c,d,a,b][d,a,b,c]といったように 巡回(circulate [a,b,c,d])させてやれば相異なった4*3!=4!個の順列が得られ、 」

とか、

 「次に元が整列済(考えられる順列で最小のもの)という仮定のもとで,x:xsになっているとすれば,先頭が,最小の要素,次に小さいもの,その次に小さいもの,...というぐあいに生成して,最後に連結すればよさそ.」

とかが俺には自然に思いつかない。

 これらってプログラミングや数学の基礎知識ですよね。それが俺にはない。プロのプログラマだけど。
 僕がプログラムや数学を考えるときは、まず小さな具体例を考える。それから法則を見つけ出して式やプログラムを導く。ただし、ここで使用できるのは自分の知っている知識の範囲でのみ。さらに、数をこなして知識になっていれば具体例さえ思い浮かべずに式やプログラムに落とせるはず。
 なので、まだまだまだまだ勉強が足りない。

 もうひとつ、自分は今の仕事ではC#しかほとんど使っていないし、最近はExcel, Wordとの格闘が長くプログラムすらあまり組んでいない。勉強と言っても実際に組んでいる時間が取れないので読むだけに徹している状態。やはり、Haskellなどで実際に書く、という訓練が全然足りてないんだろうなぁと感じました。

 @TheorieDuDroit さん、@nobsun さん、番外編で、@its_out_of_tune さんありがとうございました。
 自分が何がわかっていないのかがわかってきたと思います。

Scalaの関数のJavaでの型

Scalaで様々な方法で定義した関数やカリー化・部分適用した関数がJavaでどんな型になるのか調べてみた。
記憶力が皆無なのですぐに忘れちゃうのです。

1. 複数の3引数の関数定義。

Javaでも普通の関数定義になりました。

def funcUncurry1(x: Int, y: Int, z: Int) = x + y + z
static int funcUncurry1(int paramInt1, int paramInt2, int paramInt3)

2. 1と同じ関数をラムダとして変数に束縛

3引数の関数オブジェクトになりました。

val funcUncurry2 = (x: Int, y: Int, z:Int) => x + y + z
static Function3<Object, Object, Object, Object> funcUncurry2()

3. 1の関数を関数オブジェクト化

そのまま2と同じく3引数の関数オブジェクトになりました。

def funcUncurry3 = funcUncurry1 _
static Function3<Object, Object, Object, Object> funcUncurry3()

4. 1の関数を型を指定した変数に束縛

指定した型通り3引数の関数オブジェクトになりました。

val funcUncurry4: (Int, Int, Int) => Int = funcUncurry1
static Function3<Object, Object, Object, Object> funcUncurry4()

5. 4のvalをdefにしただけ

結果は4と同じでした。

def funcUncurry5: (Int, Int, Int) => Int = funcUncurry1
static Function3<Object, Object, Object, Object> funcUncurry5()

6. 2の関数オブジェクトをカリー化してみる

カリー化された関数オブジェクト"Int => Int => Int => Int"になりました。
本当にこういう変換がされるんですね…
どうしても実行効率とか考えてしまいますね。

def funcCurried1 = funcUncurry2.curried
static Function1<Object, Function1<Object, Function1<Object, Object>>> funcCurried1()

7. 6のdefをvalにしただけ

結果は6と同じでした。

val funcCurried2 = funcUncurry2.curried
static Function1<Object, Function1<Object, Function1<Object, Object>>> funcCurried2()

8. カリー化した関数の定義

defだと関数オブジェクトにはならず、1と同様の関数になりました。
もちろんカリー化されていません。

def funcCurried3(x: Int)(y: Int)(z: Int) = x + y + z
static int funcCurried3(int paramInt1, int paramInt2, int paramInt3)

9. 8と同じ関数をラムダを変数に束縛

こちらは最初からカリー化された関数オブジェクトになりました。

val funcCurried4 = (x: Int) => (y: Int) => (z: Int) => x + y + z
static Function1<Object, Function1<Object, Function1<Object, Object>>> funcCurried4()

10. 8を関数オブジェクト化

結果は9と同じです。

def funcCurried5 = funcCurried3 _
static Function1<Object, Function1<Object, Function1<Object, Object>>> funcCurried5()

11. 6のカリー化された関数オブジェクトに0個の引数を部分適用

変化なし
これは何もしていないと言うことでいいのかな???

def partialX1 = funcCurried1(_: Int)
static Function1<Object, Function1<Object, Function1<Object, Object>>> partialX1()

ちなみにただの"_"だと、下記のように"() => Int => Int => Int => Int"になりました。

def partialX1 = funcCurried1 _
static Function0<Function1<Object, Function1<Object, Function1<Object, Object>>>> partialX1()

12. 6のカリー化関数オブジェクトの引数を1つ適用してみる

引数がひとつ減った関数オブジェクトが返されましたね。

def partialX2 = funcCurried1(1)
static Function1<Object, Function1<Object, Object>> partialX2()

13. 6のカリー化された関数オブジェクトに0個の引数を部分適用??

これどういう意味かな…
"(Int, Int) => (Int = Int)"が返ってきました。

def partialXY1 = funcCurried1(_: Int)(_: Int)
static Function2<Object, Object, Function1<Object, Object>> partialXY1()

14. 6のカリー化された関数オブジェクトに1個の引数を部分適用

これは当然、カリー化された中の関数オブジェクトが返ってきました(引数がひとつ減った)

def partialXY2 = funcCurried1(1)(_: Int)
static Function1<Object, Function1<Object, Object>> partialXY2()

15. 6のカリー化された関数オブジェクトに1個の引数を部分適用

違う引数に部分適用しても14と同じ結果です。

def partialXY3 = funcCurried1(_: Int)(2)
static Function1<Object, Function1<Object, Object>> partialXY3()

16. 6のカリー化された関数オブジェクトに2個の引数を部分適用

これも当然、引数が2つ減った関数オブジェクトが返ってきます。

def partialXY4 = funcCurried1(1)(2)
static Function1<Object, Object> partialXY4()

「関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間」の解釈

はじめに

旬は過ぎてしまいましたが、「関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間」の僕なりの解釈を書いてみることにしました。僕の理解が及ばないところもまだまだ残っているのですが。
ただし、他の方のレビューと違い、以下を意識しています。

  • 著者の言いたいことを解釈することを目的とする
  • 意味の揺れや技術的間違いなどはひとまず置いておく
  • ラノベとして面白いかどうかもこの際どうでもいい

また、全部読んではいるのですが、時間的制約から全体で400ページある中のp.151までとしています。全部書こうとするといつになるかわからないので…

目次

「セキヤ」が書いたダサいコードに対し、クールなコードを書いた「サクラ」による関数型プログラミングの説明。

  • Day2 『論理世界』と『物質世界』の狭間を見据える『神の眼』レベル1…35

「物質世界」の命令型プログラミングの世界を離れ、「論理世界」の関数型プログラミング〜宣言型プログラミングへ。

  • Day3 論理を世界の中心に据える世界観 世界のすべてを見透す『神の眼』レベル2…115

宣言型のコードはイミュータブルで見透しが良い参照透過な論理の世界。

  • Day4 神はあまねく存在する 『神の眼』レベル3【最終レベル】…215

アラン・ケイが提唱したオブジェクト指向MVCに対応する「論理」「物質」「精神」の三元論に対し、関数型プログラミングは「物質」は「論理」の影であり「精神」は「物質」の一部である「論理」中心の一元論。

  • Day5 『今』が大事…379

関数型プログラミングオブジェクト指向は相いれない存在。

結論

結論から言うと、著者言いたいことは下記です。

  • 「論理」=「問題の本質」をフロー(逐次実行・条件判断・繰り返し)によらずそのままコードに表せる関数型(宣言型)プログラミングはクール

本書を読むと、「0〜9までの数をすべて足すコード」をクールに書けるようになります。すごいですね。

要旨

一般的なプログラマは「論理世界」「物質世界」などというものを考えないので、「ハードウェアモード」で「物質世界」のコンピュータのハードウェアに命令を出す命令型プログラミングを使用している。

宣言型プログラミング(関数型プログラミングをしていると自動的に宣言型プログラミングになる)として、「論理(問題の本質)」を「論理世界」のものであるソフトウェアで書けば、「フロー(繰り返しや条件判断)」に惑わされず「論理」に集中してコードを書くことができる。

「論理」は「計算」されることで人が見えるように「物質化」される。
宣言型プログラミングは「論理世界」のものであるので、イベントが発生しない限りは静止しているイベント駆動である。

※ p.151以降、「物理世界」の時刻を関数の引数としてユーザを含めた世界全体を扱う関数の話やReactの使い方と続き、著者のライブラリの説明となります。

※ 特に技術的部分について僕の理解では誤りと思われる部分が多く含まれるのですが、著者は「無知の知」を強調していますので自ら気付いていると思います。本を書いたという「権威主義」に陥らないことを期待します。

解釈

これから本書で重要であろう文章・言葉について僕の解釈について解説してみようと思います。
以下にずらずらと書きますが、基本的に「文章・言葉」「僕の解釈」「参考とした引用部分」という構成になっています。

0から9までの数をすべて足すコードを書け

これは、p.7から始まり何度も出てきます。
「セキヤ」が書いたコードは下記です。

var s = 0;
for (var n = 0; n < 10; n++)
{
  s = s + n;
}

console.log(s);

一方、「サクラ」が書いたコードが下記です。

var plus = function(a, b)
{
  return a + b;
};

var s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  .reduce(plus);
  // をすべて足す

console.log(s);

「セキヤ」が書いたコードは命令型でダサいコード、「サクラ」が書いたコードは関数型でクールなコードという意味合いです。

参考

p.14
全く同じ「サクラ」のコード

p.19〜22
全く同じ「サクラ」のコードのplus関数

p.27
全く同じ「サクラ」のコード

p.43
全く同じ「サクラ」のコード

p.46
全く同じ「サクラ」のコード

p.54
全く同じ「サクラ」のコード

p.86
全く同じ「セキヤ」と「サクラ」のコード

p.133
全く同じ「セキヤ」のコード

p.141
全く同じ「セキヤ」のコード

フロー

「フロー」とは「繰り返しや条件判断(p.11)」です。
問題の「論理」には関係のないもので、「フロー」があることでバグが紛れ込みデバッグの手間が激増します。

引用

p.10
この「フロー」があることにより、「コードにすぐバグが紛れ込む(p.10)」

p.11
「『0から9までの数をすべて足す』という問題にはフローがない。ならば、コードもそのままフローなしにかければいい」

p.12
フローなしで書くことにより「プログラミングの最大の課題であるデバッグの手間が激減する」

p.12
「フローがない、フローの設計が必要ないということは、問題の論理だけに集中している」

p.14
「これまで問題の論理を上手にフローに変換してフローを設計する作業こそがプログラミングだと勘違いしていた」

p.25,p.26
「問題の論理とは一切関係もなく、フローの中で何度も計算されて刻々と値が変化して、フローの制御に組み込まれてしまっているsとか、nみたいな変数のことを状態変数と呼ぶの。こんな、問題の論理とはまるで関係ない分際で、刻々と変化するような状態変数なんてものはなくしてしまいなさい。論理を設計する上で邪魔だわ。フローがバグの元凶であるのと同様に、状態変数もバグの元凶よ」

フローを書かずに論理をそのままコードに書き写せ

「問題の論理そのものをコードに単純に書き写す事を徹底的にやっていく」も同様の意味です。
「問題には繰り返しや条件判断が出てこないのだから、そのままコードに書き写せ」ということです。ここで「論理」というのが問題になってくるのですが、それは後述します。

引用

p.12
「問題の論理そのものを書き写しただけなんだから、バグが介入する余地なんて最初からどこにもあるはずがない」

p.14, p.15
「問題の論理そのものをコードに単純に書き写す事を徹底的にやっていく」

p.54
「問題の論理そのものをコードに単純に書き写す事を徹底的にやっていくとき、並べるものは、『計算の命令』ではなくて『論理』となる」

p.56
「問題の論理そのものをコードに単純に書き写す事を徹底的にやっていく事 → 論理の宣言=宣言型のコードを書くプログラミング」

論理

「問題の本質(数式など)」で、人間とは関係なく存在し、それを人間が明らかにする行為が「計算」です。
「計算」すれば必ず解ける問題のロジックで、人間が「計算」する前に答えは自明に決まっています。

そして、「問題の論理には結果など含まれていない」ことにより「論理」には結果は含みません。結果は「計算」の副産物です。「論理」は「論理世界」のもので、「計算」は「物理世界」のものです。

ただし、p.61では「1+1=2という『論理』」と出てきます。ここでは結果まで含めて『論理』とされているので誤りかと思います。

また、p.65以降にあるように「コードとソフトウェア」も「論理」、「論理世界」のものです。

「論理」の最小単位は関数なので、関数を組み合わせて「論理」を設計します。
「論理」と「計算」を合わせて「数学」と呼びます。
「証明」とは「論理」の「計算」のことです。

引用

p.12
「問題の論理そのものを書き写しただけなんだから、バグが介入する余地なんて最初からどこにもあるはずがない」

p.13
「論理のみで構成された、これ以上望めないほど見透しの良いクールなコードを書くことは、ダサいコードを平気で書く常人プログラマーの想像を超えた『コードを見透せる眼』を持つことに等しい」

p.14
「これまで問題の論理を上手にフローに変換してフローを設計する作業こそがプログラミングだと勘違いしていた」

p.14, p.15
「問題の論理そのものをコードに単純に書き写す事を徹底的にやっていく」

p.15
「0から9までの数という論理があるならば、フローでごちゃごちゃやることなど考えないで、単純に[0, 1, … , 9]とそのままのデータをまるごと用意してしまう」
「『をすべて足す』という論理操作をしてやるのね」
「これを合わせると『0から9までの数をすべて足す』という論理をコードに書き写したことになる」

p.17
「炊飯器というマシンOUTPUT(出力)である炊飯器(米と水)とは炊きたてのご飯なので、炊きたてのご飯=炊飯器(米と水)という論理操作の関係、論理構造になっている」

p.18
「Before(ビフォー)の『様々な問題を抱えた家』は『匠』の手が加わると、After(アフター)の『なんということでしょう!!』に『大変身』する」
「『匠』はFUNCTION・関数よ」
「『様々な問題を抱えた家』をINPUT(入力)すれば、匠がその問題を『抱える』ことになり、匠(様々な問題を抱えた家)となり、その『大変身』したAfterは『なんということでしょう!!』なので、なんということでしょう!!=匠(様々な問題を抱えた家)という論理操作の関係、論理構造になっている」

p.19
「関数は、レゴ・ブロックのような最小単位の部品なのよ。論理の最小単位としての部品。」

p.23
「問題の論理には結果など含まれていない」

p.25,p.26
「問題の論理とは一切関係もなく、フローの中で何度も計算されて刻々と値が変化して、フローの制御に組み込まれてしまっているsとか、nみたいな変数のことを状態変数と呼ぶの。こんな、問題の論理とはまるで関係ない分際で、刻々と変化するような状態変数なんてものはなくしてしまいなさい。論理を設計する上で邪魔だわ。フローがバグの元凶であるのと同様に、状態変数もバグの元凶よ」

p.26
「手順を分割して、逐一結果を小出しにしながら実行するのをプログラミングだと思い込んでいる〜それに対してクールなプログラマーは論理を分割しようとしている〜論理の最小単位である関数という論理操作を自在に組み合わせて論理を設計していく」

p.27
「『万能のスーパー匠』を組み上げることこそが問題の論理であり、それはそのまま問題の解決になる」
「『万能のスーパー匠』はすべてやり方を知っており、その行動についてこちらはいちいち口出ししない」

p.27
「reduceとplusという2つの関数が組み合わさって『//をすべて足す』という関数になっているわね?この2つの関数が、『匠』よ。これは、それぞれ逐一実行しろ、という計算の手順書ではないわ。2つの関数を組み合わせて『//をすべて足す』という『スーパー匠』を設計してやっているのよ」
「論理操作の組み合わせの設計だけで、Afterという結果や、フローも、途中の計算手順も、変化し続ける状態変数も何ひとつないんですね」
「そう。手続きを分割して結果を小出しにするループのフローを書くのではなく、論理を分割し論理だけを構成しなさい。」

p.54
「問題の論理そのものをコードに単純に書き写す事を徹底的にやっていくとき、並べるものは、『計算の命令』ではなくて『論理』となる」

p.55
・計算の命令 ではなくて ⇒ 論理
・マシン操作手順書 ではなくて ⇒ 論理の宣言書

p.58
「『論理』と『計算』は別物 『論理』は人間とは関係なくただそこにある存在、それを人間が明らかにする行為が『計算』
「この『論理』と『計算』を全部ひっくるめたものを『数学』と呼ぶ」

p.59
・式と計算
・数量関係
・比率
これこそが『計算』の背後に存在する『論理』のこと」
「『計算』の背後には『論理』が存在する」

p.61
「計算していないから、2という計算の結果としてわかる『論理』は消えてなくなってしまうのかしら?」
「もちろん、そんなことはないです。この電卓が1+1=を計算しようとしまいと、計算の結果2になるという事実は、あらかじめ決まっていることである」
「1+1=2という『論理』は、この電卓で計算しようとしまいと影響を受けません」

p.62
「実は『計算』すべき『問題』なんてものは最初からどこにも存在しない。だって『論理』っていうのは、最初からあらかじめ決まっていること、なのだから」
「『問題』というのは人間が、この『論理』は難しい!って勝手に思うから、それが『問題』になるのであって、だから『計算』して明らかにしてやる必要が生じる。それはあくまで人間の勝手な都合が発端となる行為」

p.64,65
「プログラミングっていうのはもちろん『ソフトウェア』であるわけ。『論理』の世界のおはなし。ところが『論理』を『計算』するのがコンピュータ、電卓というマシンなの。これは『ハードウェア』ね」
「プログラムのコードは、ソフトウェア。実際に『計算』してくれるハードウェアに依存している。つまり、『論理』を『物質化』してくれる『物質世界』にあるマシンが絶対に必要なのよ。『論理世界』の中だけで、ひとりで完結するような『計算』なんてものはどこにも存在しないから。さっき電卓でやったように、『計算』っていうのは人間のための人間による勝手な行為であって、そもそも『論理世界』にはどこにも存在しない概念なのよ」

p.65
「コードは、ソフトウェアであり『論理』なのよ。コンピュータというマシンは、ハードウェアであり『物質』。コンピュータでコードを実行するのが『計算』であり『論理』の『物質』化。」

p.66,67
「コンピュータは、ソフトウェアとハードウェアの複合体で、『論理』と『物質』の間をやりとりする極めて特殊な作業をするのね。それが『計算』ってことよ。『計算』するマシン。計算機=コンピュータ。論理を物質化するマシン。論理を物質化するマシン操作手順書が命令型のコードね。論理操作は、あくまで論理世界の中での仕事、計算は、物質世界での仕事、ハードウェアモードの作業よ」

p.67
「論理世界と物質世界の関係性はクールなコーディングでは重要な視点なの。だって、『論理』に集中してコーディングしていく方針ならば、もう一方の『物質』との関係を常に見極めておく必要があるから。」

p.71
関数型プログラミングでは、『論理世界』と『物質世界』と関係性を見据えるから、『物質世界』のマシンの操作手順書である命令型のコードは大昔のアセンブラでコードを書くのと大差ないと考えている。」
『物質世界』のマシン操作に労力なんて費やさないので、『論理世界』の論理操作に集中できる、ということになる。それが『論理』を組み立てる関数型プログラミングであり、宣言型プログラミングなの」

p.72
関数型プログラミングで、その筋では有名なものとしてHaskell(ハスケル)というプログラミング言語があるんだけど、もうこういうのは、最初から徹頭徹尾、『論理』そして『計算』の総称としての『数学』理論でつくられているの。

p.72
「あらゆるプログラミング・パラダイムは、関数型プログラミングパラダイム、言い換えれば純粋論理である数学に近づこうとしながら進化しているの。そして『数学』みたいな純粋論理の関数型のパラダイムであるならば、論理的にこれよりも進化したパラダイムなんてあるわけがないじゃない」

p.76
「中学校でも数学の授業で証明って習ったとおもうけど、あれはあくまで論理の計算なのね」

p.143
「『インクリメント』は『計算』で『論理』を物質化する命令」

p.144
宣言型のコードは問題の論理のみを扱い、計算結果は扱わない 問題の論理には結果など含まれていない
「確かにこれは論理ではないです。方程式の左辺と右辺の値が異なります(p.143のn=n+1のこと)」

論理世界・物質世界

「論理世界」
問題の論理、本質が存在する世界で、ソフトウェアもここに存在します。
宣言型プログラミングは「論理世界」にコードを組み上げていき、イベントが発生しない限り常に静止しています。

「物質世界」
問題の「論理」に関係ない、フロー(繰り返しや条件判断)が存在する世界で、ハードウェアはここに存在します。「計算」するということは「論理世界」の「論理」を「物質世界」に「物質化」することです。
命令型プログラミングは「物理世界」でハードウェアモードでコンピュータに命令することでコードを実行します。

引用

p.64,65
「プログラミングっていうのはもちろん『ソフトウェア』であるわけ。『論理』の世界のおはなし。ところが『論理』を『計算』するのがコンピュータ、電卓というマシンなの。これは『ハードウェア』ね」
「プログラムのコードは、ソフトウェア。実際に『計算』してくれるハードウェアに依存している。つまり、『論理』を『物質化』してくれる『物質世界』にあるマシンが絶対に必要なのよ。『論理世界』の中だけで、ひとりで完結するような『計算』なんてものはどこにも存在しないから。さっき電卓でやったように、『計算』っていうのは人間のための人間による勝手な行為であって、そもそも『論理世界』にはどこにも存在しない概念なのよ」

p.66,67
「コンピュータは、ソフトウェアとハードウェアの複合体で、『論理』と『物質』の間をやりとりする極めて特殊な作業をするのね。それが『計算』ってことよ。『計算』するマシン。計算機=コンピュータ。論理を物質化するマシン。論理を物質化するマシン操作手順書が命令型のコードね。論理操作は、あくまで論理世界の中での仕事、計算は、物質世界での仕事、ハードウェアモードの作業よ」

p.67
「論理世界と物質世界の関係性はクールなコーディングでは重要な視点なの。だって、『論理』に集中してコーディングしていく方針ならば、もう一方の『物質』との関係を常に見極めておく必要があるから。」

p.71
関数型プログラミングでは、『論理世界』と『物質世界』と関係性を見据えるから、『物質世界』のマシンの操作手順書である命令型のコードは大昔のアセンブラでコードを書くのと大差ないと考えている。」
『物質世界』のマシン操作に労力なんて費やさないので、『論理世界』の論理操作に集中できる、ということになる。それが『論理』を組み立てる関数型プログラミングであり、宣言型プログラミングなの」

関数

関数は「論理操作」であり、「関数=function=機能、動作、操作、作用」です。
著者の言葉では

f(x)…論理操作
y=f(x)…論理操作の関係、論理構造

です。
関数は論理の最小単位の部品として最上の扱いを受けます。
注意点として、著者が「コード」と呼ぶ場合、命令型の場合はコード全てを指しますが、宣言型の場合は関数の実装はコードには含まれず、関数を組み合わせて実装した部分のみをコードと呼びます。

「サクラ」のクールなコードで使用されているreduceやplusといった関数を作成するためには、ハードウェアモードで命令型のダサいコードを書かなければなりません。「物質世界」の命令型のコードは関数で包み込むことにより、再び「論理世界」の「論理」の最小単位である「関数」となります。

引用

p.15
「関数=function=機能、動作、操作、作用」

p.16
「これにxをINPUT(入力)としてやると、fが持ち合わせる機能により作用され変化したOUTPUT(出力)が出てくる」
「このOUTPUT(出力)はfで作用して変化したという印(しるし)としてf(x)と書き表す習わしになっている」

p.16
「工場にあるマシンみたいなもの」
「炊飯器、電子レンジみたいなマシンもFUNCTION・関数なの。炊飯器という名前のFUNCTIONがあるわね。これに米と水をINPUT(入力)してやると、炊飯器が持ち合わせる機能によって作用され変化した炊きたてのご飯というOUTPUT(出力)が出てくるわ。」

p.18
「Before(ビフォー)の『様々な問題を抱えた家』は『匠』の手が加わると、After(アフター)の『なんということでしょう!!』に『大変身』する」
「『匠』はFUNCTION・関数よ」
「『様々な問題を抱えた家』をINPUT(入力)すれば、匠がその問題を『抱える』ことになり、匠(様々な問題を抱えた家)となり、その『大変身』したAfterは『なんということでしょう!!』なので、なんということでしょう!!=匠(様々な問題を抱えた家)という論理操作の関係、論理構造になっている」

p.19
「関数・functionというものは、作用して変化させる、という論理操作」

p.19
「関数は論理の最小単位の部品として最上の扱いを受ける」
「関数は、レゴ・ブロックのような最小単位の部品なのよ。論理の最小単位としての部品。」

p.20, p21
「plusという変数とは、これこれこういう『足す』という論理操作の関数である!!と定義してやってる」
「この{}中括弧の中でその関数の論理操作、機能の説明、つまり論理の設計をしてやるコードを各わけ」

p.23
「ファーストクラスな部品である関数は、ファーストクラスなので第一級、最上級のクールな扱いを受ける。『足す』という論理操作は、それ自体が最小単位として独立しており、きちんとファーストクラスの最上級の扱いを受ける資格がある」

p.33
「問題の論理そのものをコードに単純に書き写す事を徹底的にやっていくときには、関数はファーストクラスの部品としてバラバラに取り扱えるし、部品としてのそれぞれの関数も、問題の論理に必要なように想定して設計していくんですね。関数単位のコードつてなんか素晴らしい」

p.70
「抜け落ちているのは、すでにその命令型のコードっていうのは誰かが書いてくれているってこと」

p.151
計算や入出力の命令というハードウェアモードのマシン操作は論理の物質化だが、関数でラッピングしてふたたび論理化せよ

手順を分割するな、論理を分割せよ

「手順の分割」として下記が例としてあげられています。

1. 匠に玄関を直させる
⇒ 結果(プチAfter)『なんということでしょう!!』
2. 匠に台所を直させる
⇒ 結果(プチAfter)『なんということでしょう!!』
3. 匠に階段を直させる
⇒ 結果(プチAfter)『なんということでしょう!!』

これは結果を小出しにしながら実行しています。

「論理の分割」の例としては下記です。

1. 『玄関の専門的なスキルをもつ匠』を設計する
2. 『台所の専門的なスキルをもつ匠』を設計する
3. 『階段の専門的なスキルをもつ匠』を設計する

「論理の分割」は「論理の最小単位である関数という論理操作を自在に組み合わせて論理を設計していく」です。

著者の考えでは、「手順の分割」とは関数を逐次実行する関数に分割すること。
「玄関の結果 + 台所の結果 + 階段の結果」であり、「論理」ではない「結果」が含まれています。

「論理の分割」とは「問題の本質」を分割すること。
「専門的なスキルを持つ匠=関数」で「論理」を組み立てています。

引用

p.26
「手順を分割して、逐一結果を小出しにしながら実行するのをプログラミングだと思い込んでいる〜それに対してクールなプログラマーは論理を分割しようとしている〜論理の最小単位である関数という論理操作を自在に組み合わせて論理を設計していく」

p.27
「『万能のスーパー匠』を組み上げることこそが問題の論理であり、それはそのまま問題の解決になる」
「『万能のスーパー匠』はすべてやり方を知っており、その行動についてこちらはいちいち口出ししない」

p.27
「reduceとplusという2つの関数が組み合わさって『//をすべて足す』という関数になっているわね?この2つの関数が、『匠』よ。これは、それぞれ逐一実行しろ、という計算の手順書ではないわ。2つの関数を組み合わせて『//をすべて足す』という『スーパー匠』を設計してやっているのよ」
「論理操作の組み合わせの設計だけで、Afterという結果や、フローも、途中の計算手順も、変化し続ける状態変数も何ひとつないんですね」
「そう。手続きを分割して結果を小出しにするループのフローを書くのではなく、論理を分割し論理だけを構成しなさい。」

p.33
「問題の論理そのものをコードに単純に書き写す事を徹底的にやっていくときには、関数はファーストクラスの部品としてバラバラに取り扱えるし、部品としてのそれぞれの関数も、問題の論理に必要なように想定して設計していくんですね。関数単位のコードつてなんか素晴らしい」

『まとまり』は美しい単一の論理構造

関数「y=f(x)」も「論理構造」だが、それとは別の「論理構造」です。
[0, 1, … , 9]は『まとまり』で極めて単純で美しい論理構造です。単一の論理構造は、これ以上分割する余地はありません。
問題に出てくるデータを表す文言をそのまま表したデータ構造です。
0〜9の場合は列挙で構いませんが、0〜999の場合には命令型のダサいコードでrange関数を実装することにより、宣言型のクールなコードを保っています。

reduce(range(1000), plus)のrange(1000)は自然数(0〜999)の『まとまり』ですが、setInterval(f, 1000)は時間軸上の毎秒間隔のイベントという『まとまり』です。

引用

p.139,140
「このsetIntervalっていうのは高階関数ですよね。〜これも『まとまり』を扱う関数ですか?」
「鋭い洞察ね。そのとおり。〜そう。reduce(range(1000), plus)っていうのは、数直線上の0から999までの数という『まとまり』を用意してまとめて操作するための関数だけれども、setInterval(f, 1000)っていうのは、時間軸上の毎秒間隔のイベントという『まとまり』を用意してまとめて操作するための関数なのよ」
「たとえば、コードが解釈実行されてからある時間後のイベント1回だけ、という『まとまり』であれば、setTimeoutということになるし、マウスポインタが動いた瞬間のイベントの『まとまり』クリックされた瞬間のイベントの『まとまり』などなど『まとまり』として処理したい時間軸上のイベントの種類のパターン」

p.149
命令前後の時間で値を変化させていくのではなく、同時に値の複数バージョンをもつ『まとまり』の論理構造を宣言し、まとめて操作する

関数型プログラミング

関数という論理の最小単位の部品を組み合わせてプログラムを作ること。
注意点として、著者は高階関数に関数を渡すことを「関数型プログラミング」と呼んでいます。
論理だけで構成しているため、バグが入り込む余地がありません。

関数型プログラミングでは「車輪の再発明」はしません。
関数型プログラミングより上のプログラミング・パラダイムは原理的に存在しません。

関数型プログラミングで使用する関数を作成(車輪の再発明)するためには、ハードウェアモードで命令型のダサいコードを書かなければなりません。

引用

p.33
「この関数という論理の最小単位で、問題の論理そのものをコードに単純に書き写す事を徹底的にやっていくというクールな方法を世間では関数型プログラミングと呼んでいる」

p.55
関数型プログラミングをやっていれば自動的に宣言型プログラミングになっていく」
「論理の最小単位の部品としての関数をレゴブロックみたいに組み上げていけば、自動的にフローではない論理の宣言の集合体になるので、勝手に宣言型のコードになっていくのよ。関数型プログラミングをやっていけば自動的に、宣言型プログラミングになっていくってことね」

p.71
関数型プログラミングでは、『論理世界』と『物質世界』と関係性を見据えるから、『物質世界』のマシンの操作手順書である命令型のコードは大昔のアセンブラでコードを書くのと大差ないと考えている。」
『物質世界』のマシン操作に労力なんて費やさないので、『論理世界』の論理操作に集中できる、ということになる。それが『論理』を組み立てる関数型プログラミングであり、宣言型プログラミングなの」

p.72
関数型プログラミングは、その意味において、あらゆるプログラミングパラダイムの極致としての存在。ハードウェアモードのアセンブリ言語から、もっとも進化した位置にある。関数プログラミングより上のプログラミング・パラダイムは存在しないわ。原理的に」

p.72
関数型プログラミングで、その筋では有名なものとしてHaskell(ハスケル)というプログラミング言語があるんだけど、もうこういうのは、最初から徹頭徹尾、『論理』そして『計算』の総称としての『数学』理論でつくられているの。

p.72
「あらゆるプログラミング・パラダイムは、関数型プログラミングパラダイム、言い換えれば純粋論理である数学に近づこうとしながら進化しているの。そして『数学』みたいな純粋論理の関数型のパラダイムであるならば、論理的にこれよりも進化したパラダイムなんてあるわけがないじゃない」

p.76
「あくまで関数型プログラミングの延長として、定理証明支援系言語っていうものが存在する」

p.90
「そう、宣言型の見透しのよいクールなコードになった。reduceがマシンに命令するハードウェアモードの作業を、完全に水面下に隠蔽してくれているの」

p.93
「実際やってみたら、reduceという『匠』のスキル=関数を設計してやるのは、あなたが最初にダサいコードでフローを書いたような手間とさほど違いなんてなかったでしょ?」

p.106
「答えが合うのは当たり前よ。全部論理だけで構成しているんだから。関数同士の組み合わせがいくら複雑になっても、バグが出る余地なんて全くないから」

p.110
『まとまり』という論理構造をまるごと操作する関数ライブラリは、『神の眼』が見透す、宣言型のコードを書くために必須の関数@ハードウェアモード大全集

p.140
「なるほどなぁ。関数型プログラミングでは、そういう時間軸上のイベントの『まとまり』を操作するという関数で宣言していくコードを書くことで、イベント駆動させていく」
「もう全部が全部『まとまり』とそれを操作する関数だけでコードができあがっていく、時間軸上のイベントの『まとまり』を操作する関数をもって駆動する、かなり一貫したやり方ですね。」
「そのとおり。クールなやり方よ。時間のフローで勝手に動く。コードの論理は静止している」

p.148
破壊的代入する命令は、関数にする

命令型プログラミング

計算の手順を並べるコード。手順通り上から下に並べたものです。
マシンに向けて計算しろという『命令』になっていて、ハードウェアモードで逐次実行されます。

命令型プログラミングのコードには同じ変数が異なる時間をもって異なる値で存在します。
参照透過性をろくに考慮しない、論理に極めて無頓着な原始的なプログラミングパラダイムです。

引用

p.50, 51
「電卓に自動的にやらせたい計算の手順を順序良く並べて、事前にまとめて電卓に受け渡しておく」
「手順通りに上から下に並べたもの」
「マシンに向けて計算しろという『命令』になっている。」
「これはマシンに順番に逐一命令していくコード」

p.52
「命令型プログラミングのコードは『マシン操作手順書』であり『フローは不要』のフローそのもの」

p.68
『物質世界』密着型の命令型プログラミングという原始的パラダイム
「命令型プログラミングというのは、コンピュータというハードウェアがソフトウェアの『論理世界』の存在ではなくて、『物質世界』に存在するマシンなのでうまく操作するために順序良く命令する、という当然の発想から出てきた歴史的な必然。つまり原始的プログラミング・パラダイムと言えるわね。」

p.132,133,134
命令型のコードは『フロー』で駆動する『フロー駆動』
「『物質世界』密着型の命令型プログラミングのコードでは、このようにフローが明確でそのとおり計算されていくハードウェアモードだってことがわかります。でも『論理世界』密着型の宣言型プログラミングのコードでは、突き詰めていくと、その計算の順番っていうのはいったいどうなるのかな?と。」

p.145
命令型プログラミングのコードの上下左右に、同じ変数が異なる時間をもって異なる値で存在している混乱
「命令型のコードでの問題は、『物質世界』の時間要素がコードの中に紛れ込んじゃうことよ。n=n+1という方程式の右辺にあるnは、命令前の値。左辺にあるnは、命令後の値。つまり『時間』が違うの。方程式という論理に『時間』が違う『同じ変数』があり、=とされてしまっている」

p.147
「命令型プログラミングは、参照透過性をろくに考慮しない、論理に極めて無頓着なプログラミングパラダイム

宣言型プログラミング

『フローのない論理の宣言書』である宣言型のコード。「論理」をそのまま書き写したものです。
関数型プログラミングをやっていれば自動的に宣言型プログラミングになっていきます。

宣言型のコードは常に静止していて、必ずイベントで駆動する「イベント駆動」です。

引用

p.55
「『フローのない論理の宣言書』である宣言型のコード『宣言型プログラミング』」

p.55
・計算の命令 ではなくて ⇒ 論理
・マシン操作手順書 ではなくて ⇒ 論理の宣言書

p.55
関数型プログラミングをやっていれば自動的に宣言型プログラミングになっていく」
「論理の最小単位の部品としての関数をレゴブロックみたいに組み上げていけば、自動的にフローではない論理の宣言の集合体になるので、勝手に宣言型のコードになっていくのよ。関数型プログラミングをやっていけば自動的に、宣言型プログラミングになっていくってことね」

p.56
「宣言型のコードこそが『コードを見透せる眼』が見透せているコード」

p.56
「『神の眼』のコードは宣言型のコード」

p.68
『論理世界』密着型の宣言型プログラミング
「宣言型プログラミングは、なによりまず『論理』を最初に考える『論理世界』密着型」

p.77
「数学の証明の形式が、そのまま宣言型のコードとなっていく。コードとして矛盾がない証明を完成させれば、それがすなわちプログラミングとなってしまう。『論理世界』密着型の宣言型プログラミング」

p.134
宣言型のコードは『イベント』で駆動する『イベント駆動』
「宣言型のコードはすべてイベントで駆動するのよ。イベント駆動」

p.137
「fはハードウェアモードを包み込む関数。現在の時刻を取得して、あるフォーマットでコンソールに表示する。『物質世界』とのやりとりで、命令型のコードね。そしてキモの部分は、もちろん、var clock = setInterval(f, 1000);で、ここが宣言型のコード」

p.137
「var clock = setInterval(f, 1000);は、単に『論理世界』の論理の宣言でしかない宣言的のコードよね?これは『物質世界』の時間軸上のイベントと結びついており、そのイベントで駆動されるわけよ。時間軸上のイベントが『論理世界』と『物質世界』の唯一の接点」

p.138
時間のフロー(流れ)が宣言型のコードを駆動するイベント駆動は、時間フロー駆動
「うーん、時間軸上のイベントが『論理世界』と『物質世界』の唯一の接点、ですか。ということはコンピュータのソフトウェアとハードウェアが、時間の流れで接点を持っているという構造になるんですかね・・・」

p.138
「ここがまさにクールなコーディングの神髄なのよ。var clock = setInternal(f, 1000);っていう宣言型コードは、『静止している』わよね?静かで静的な『論理世界』よ。ただそこでじっと『静止している』」
「『物質世界』密着型の命令型プログラミングのフローのコードに慣れてしまっていると、なかなか気付けないけど、『論理世界』密着型の宣言型プログラミングのコードでは、フローがないってことは、つまり『静止している』わけ」
「コードのほうは『静止している』。動くのは、時間の流れのほうなのよ」
「なるほど!『論理世界』ではフローは不要になって、どこにいっちゃったのか?っていうと、『物質世界』の時間のフロー(流れ)になっていて、それが宣言型のコードを駆動させるんですね!」
「そのとおり。ここで重要なのは、私達はまったく『物質世界』の時間のフロー(流れ)のことは気にする必要ないのよ。だってそれは最初から『物質世界』の一部として組み込まれているから」
「そうですよね。イベント駆動っていうのは、時間フロー駆動だ!」

p.147
宣言型プログラミングは参照透過である

p.149
命令前後の時間で値を変化させていくのではなく、同時に値の複数バージョンをもつ『まとまり』の論理構造を宣言し、まとめて操作する

ソクラテスの「無知の知

まわりの皆を、本当は何も知らないだろう?と論破していったら死刑になったそうです。
著者はそれを自分になぞらえています。

また、「無知の知」がない訳知り顔のプログラマはダサくて面倒くさい連中です。それはソクラテスを死刑にしたような連中と同類です。

『計算』とは『論理』の物質化、ハードウェアモード

すでに存在する「論理」を人間が「問題」と認識し、答えをメモリやモニタなどの物質として見える化すること。
『計算』は『論理』であるソフトウェアを『物質』であるハードウェアが実行すること。

ほとんどのプログラマは気にもせず、計算理論を勉強したプログラマでもわかったつもりの人が多い。

計算以外にも『ユーザー・インターフェース』『コンピュータの入出力』『サーバの実装方法』『並列コンピューティング』『オブジェクト指向』なども『論理』の物質化です。

引用

p.58
「『論理』と『計算』は別物 『論理』は人間とは関係なくただそこにある存在、それを人間が明らかにする行為が『計算』
「この『論理』と『計算』を全部ひっくるめたものを『数学』と呼ぶ」

p.63
「実際ここはほとんどのプログラマがまったく気にしていない部分ね」
「説明したところで、妙な顔をされるだけのパターンが多いでしょうね。チューリングマシンだのなんだの、そういう計算理論でわかったつもりの人も多いし」

p.63
「『論理』を人間が明らかにする行為が『計算』。明らかにする、っていうのは具体的にいうと『物質化』よ。『論理』を人間が『物質化』する行為が『計算』。言い換えると、『計算』とは『論理』の物質化」

p.64
「『計算』っていうのは、『論理』と『物質』の狭間にある。その証拠にコンピュータ=計算機というのは『ハードウェア』と『ソフトウェア』の2つが貼り合わされて構成されている存在よね?」

p.64,65
「プログラミングっていうのはもちろん『ソフトウェア』であるわけ。『論理』の世界のおはなし。ところが『論理』を『計算』するのがコンピュータ、電卓というマシンなの。これは『ハードウェア』ね」
「プログラムのコードは、ソフトウェア。実際に『計算』してくれるハードウェアに依存している。つまり、『論理』を『物質化』してくれる『物質世界』にあるマシンが絶対に必要なのよ。『論理世界』の中だけで、ひとりで完結するような『計算』なんてものはどこにも存在しないから。さっき電卓でやったように、『計算』っていうのは人間のための人間による勝手な行為であって、そもそも『論理世界』にはどこにも存在しない概念なのよ」

p.65
「コードは、ソフトウェアであり『論理』なのよ。コンピュータというマシンは、ハードウェアであり『物質』。コンピュータでコードを実行するのが『計算』であり『論理』の『物質』化。」

p.66,67
「コンピュータは、ソフトウェアとハードウェアの複合体で、『論理』と『物質』の間をやりとりする極めて特殊な作業をするのね。それが『計算』ってことよ。『計算』するマシン。計算機=コンピュータ。論理を物質化するマシン。論理を物質化するマシン操作手順書が命令型のコードね。論理操作は、あくまで論理世界の中での仕事、計算は、物質世界での仕事、ハードウェアモードの作業よ」

p.67
「論理世界と物質世界の関係性はクールなコーディングでは重要な視点なの。だって、『論理』に集中してコーディングしていく方針ならば、もう一方の『物質』との関係を常に見極めておく必要があるから。」

p.67
「これはなにも『計算』に限らないのよ?『論理』の物質化について、論理世界と物質世界の関係性は、コンピューティング全般にわたる非常に重要な問題なの。『ユーザー・インターフェース』『コンピュータの入出力』『サーバの実装方法』『並列コンピューティング』『オブジェクト指向』もうこういうものは全部がぜーんぶ、『論理』の物質化、『論理世界』と『物質世界』の関係の話になるのよ」

p.110
『まとまり』という論理構造をまるごと操作する関数ライブラリは、『神の眼』が見透す、宣言型のコードを書くために必須の関数@ハードウェアモード大全集

NetWalker(PC-T1)のカーネル再構築

 NetWalker(PC-T1)にはlzo_compress.ko, lzo_decompress.koというカーネルモジュールがないので、PC-Z1と同じようにcompcacheが使えません。そのため、compcacheが使えるようにカーネルを再構築しました。

以下の作業でcompcacheは使えるようになったのですが、無線LANのドライバを入れ忘れてしまったらしく無線LANが使用できない状態になります。修正して再度挑戦する予定ですので、実施する人は注意してください。
2012-02-24 無線LANも使えるようになりました。

カーネル再構築に必要なパッケージのインストール

 カーネルをビルドする際に必要なパッケージをインストールします。既にインストールされていれば必要ありません。

$ sudo aptitude install build-essential libncurses5-dev

カーネルソースのダウンロードと展開

 カーネルのソースファイルをダウンロードし、展開した後/usr/src/linuxに移動します。

$ wget http://netbook-remix.archive.canonical.com/updates/pool/public/l/linux-fsl-imx51/linux-fsl-imx51_2.6.28-19.61fsl1sendai25.tar.gz
$ tar xvzf linux-fsl-imx51_2.6.28-19.61fsl1sendai25.tar.gz
$ sudo mv build /usr/src/linux-2.6.28-19-sendai
$ cd /usr/src
$ sudo rm linux # ←初回なら必要ない
$ sudo ln -s /usr/src/linux-2.6.28-19-sendai /usr/src/linux

カーネルの設定

 今の設定をコピーし、それに追加してLZO圧縮・展開をモジュールとしてビルドするように設定します。

$ cd /usr/src/linux
$ make mrproper
$ zcat /proc/config.gz > .config
$ vi Makefile
EXTRAVERSION= .10

EXTRAVERSION= -19-sendai-20120224
$ make menuconfig
 ここで、"-*- Cryptographic API --->"の中で" LZO compression algorithm"とし、LZO圧縮・展開モジュールを使用するようにしました。

カーネルのビルド

 さて、カーネルのビルドです。かなり時間がかかります。ビルドが終わったらカーネルモジュールをインストールします。

$ make dep && make clean
$ make zImage && make modules
$ sudo make modules_install

カーネルのコピー

 今ビルドしたカーネルを起動時に実際に使われるように/bootの下とフラッシュメモリ(SSD?)にコピーします。koxudaxiさんの記事のPC-T1のカーネル書き込み方法だとうまくいかないと思われます。

$ sudo cp arch/arm/boot/zImage /boot/vmlinuz-2.6.28-19-sendai-20120224
$ sudo cp .config /boot/config-2.6.28-19-sendai-20120224
$ sudo cp System.map /boot/System.map-2.6.28-19-sendai-20120224
$ mkinitrd -f /boot/initrd.img-2.6.28-19-sendai-20120224 2.6.28-19-sendai-20120224
$ sudo mkdir /kernel # ←初回のみ必要
$ sudo mount -t vfat -o rw /dev/sda1 /kernel
$ sudo mv /kernel/zImage /kernel/zImage.20120224
$ sudo cp arch/arm/boot/zImage /kernel/zImage

無線LANドライバ(unifi_sdio)のコピー

2012-02-24追記しました。
現在使われている無線LANのドライバを新しいカーネルのモジュールディレクトリにコピーします。

$ sudo cp -R /lib/modules/2.6.28-19-sendai/extra /lib/modules/2.6.28-19-sendai-20120224/

再起動

 新しいカーネルで起動するために再起動します。

$ sudo reboot

カーネルモジュールの依存関係の更新

$ sudo depmod -a

無線LANの準備

 一度無線LANをOFF・ONすると無線LANが使えるようになります。

NetWalker(PC-T1)にcompcacheをインストールして高速化

 NetWalker(PC-T1)にcompcacheというものを使用してswap領域を圧縮した上でRAMに確保し高速化します。前回カーネルが入っていることが前提です。PC-Z1にはlzo_compress.ko, lzo_decompress.koが元から入っているようなのですが、PC-T1には入っていないためです。
 こことかここを大いに参考にさせていただきました。

ビルドに必要なパッケージのインストール

 ビルドする際に必要なパッケージをインストールします。前回のカーネル再構築を行っているはずなので既にインストールされているはずです。

sudo apt-get install build-essential

compcacheのダウンロードとビルド

 compcacheをダウンロードしてビルドします。参考ページの通りバージョンは0.5.4を使用しました。

$ wget http://compcache.googlecode.com/files/compcache-0.5.4.tar.gz
$ tar xvzf compcache-0.5.4.tar.gz
$ cd compcache-0.5.4
$ make

compcacheを使ってみる

 さて、ビルドに成功したら実際にswapとして使用してみます。

$ sudo ./use_ramzswap.sh

Loading modules ...
Setting up swap device ...
Done!

 上記のように表示されていれば成功です。

 念のため確認してみましょう。

$ swapon -s
Filename Type Size Used Priority
/dev/mmcblk0p1 partition 1060248 0 -1
/dev/ramzswap0 partition 120584 0 100
 上記のように/dev/ramzswap0が表示されていればcompcacheは動作しています。/dev/mmcblk0p1はSDカードを一部swapとして利用しているので表示されていますが、そういう設定をしていない場合は表示されません。

起動時に自動で動作するように設定

 このままではNetWalkerを再起動すると動作しません。起動時に自動的に動作するように設定します。

 カーネルモジュールをコピーします。

$ sudo cp ramzswap.ko /lib/modules/2.6.28-19-sendai-20120224/extra/
$ sudo cp sub-projects/allocators/xvmalloc-kmod/xvmalloc.ko /lib/modules/2.6.28-19-sendai-20120224/extra/
$ sudo depmod -a

 起動時に読み込まれるように設定します。

$ sudo vi /etc/modules
lzo_compress
lzo_decompress
xvmalloc
ramzswap

 オプションで確保する容量を設定します。

$ sudo vi /etc/modprobe.d/options
options ramzswap disksize_kb=102400

 起動時にswapとして動作するように設定します。

$ sudo vi /etc/fstab
/dev/ramzswap0 swap swap defaults,pri=100 0 0

再起動

 以上で設定は終了です。再起動して確認します。

$ sudo reboot

 無事に起動したら、

$ swapon -s
 /dev/ramzswap0が表示されていれば成功です。

Sharp NetWalker PC-T1購入

 最近、iPhone4を紛失しまして家に余っていたiPhone3GS無線LANだけで利用していました。古い機種なんて嫌だなぁと思っていたんですが、いざ使ってみると液晶の解像度以外は全然気にならない。速度も遜色ない気がします。ただ、その解像度が致命的でしてMacBook系も解像度のためだけにMacBook Pro 17"を持ち歩いたりしていました。
 また、最近LifeTouch Note(Android)でもiPhoneでも物足りなさを感じていました。確かに簡単にTwitterfacebookを楽しめるのはいいのですが、まともなエディタはないしgccRubyPythonは動かないしでストレスが溜まっていました。どうやら、求めているのは持ち運べる開発環境だということに気がつきました。
 そこで目を付けたのがNetWalkerです。OSがLinuxというところが大きいです。

 NetWalkerの特徴は、
・CPUはARM
・OSはUbuntu Linux 9.04
・メモリ 512M
スマホではなくPC(UMPC)
・もっさり
・Z1のキーボードもT1のソフトウェアキーボードも評判悪い
・生産終了品
と、初心者には全然お勧めできません。

 解像度はiPhone4とほぼ同じ1024x600で大きさは二回りくらい大きいです。キーボード付きのZ1とキーボードなしのT1で悩んだのですが、キーボードを使える状況ならMacBook Air 11"が使えるだろうと思いT1にしました。

 いじり倒している時間がないので、コマンドで出力した各種情報を載せておきます。Z1とはフラッシュメモリの構成が違うみたいです。


$ uname -a
Linux netwalker 2.6.28-19-sendai #61fsl1sendai25-Ubuntu PREEMPT Thu Apr 28 09:29:27 UTC 2011 armv7l GNU/Linux

$ cat /proc/cpuinfo
Processor : ARMv7 Processor rev 1 (v7l)
BogoMIPS : 159.90
Features : swp half thumb fastmult vfp edsp neon
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x2
CPU part : 0xc08
CPU revision : 1
Hardware : SHARP PC-T1
Revision : 51020
Serial : 0000000000000000

$ mount
/dev/sda2 on / type ext3 (rw)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
varrun on /var/run type tmpfs (rw,nosuid,mode=0755)
varlock on /var/lock type tmpfs (rw,noexec,nosuid,nodev,mode=1777)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/sda3 on /dic type ext3 (ro)

$ cat /etc/fstab
# UNCONFIGURED FSTAB FOR BASE SYSTEM
/dev/sda1 /kernel vfat ro,noauto 0 0
/dev/sda2 / ext3 defaults 0 0
/dev/sda3 /dic ext3 ro 1 1

$ cat /etc/apt/sources.list
deb http://old-releases.ubuntu.com/ubuntu jaunty main universe multiverse restricted


$ df -H
ファイルシステム サイズ 使用 残り 使用% マウント位置
/dev/sda2 5.3G 3.5G 1.7G 68% /
tmpfs 247M 0 247M 0% /lib/init/rw
varrun 247M 87k 247M 1% /var/run
varlock 247M 0 247M 0% /var/lock
udev 247M 70k 247M 1% /dev
tmpfs 247M 91k 247M 1% /dev/shm
/dev/sda3 2.2G 2.0G 112M 95% /dic

$ ls /dev/
apm_bios ptyc6 ptys7 ptyy8 tty63 ttypa ttyvb
audio ptyc7 ptys8 ptyy9 tty7 ttypb ttyvc
block ptyc8 ptys9 ptyya tty8 ttypc ttyvd
bus ptyc9 ptysa ptyyb tty9 ttypd ttyve
char ptyca ptysb ptyyc ttya0 ttype ttyvf
console ptycb ptysc ptyyd ttya1 ttypf ttyw0
core ptycc ptysd ptyye ttya2 ttyq0 ttyw1
cpu_dma_latency ptycd ptyse ptyyf ttya3 ttyq1 ttyw2
disk ptyce ptysf ptyz0 ttya4 ttyq2 ttyw3
dsp ptycf ptyt0 ptyz1 ttya5 ttyq3 ttyw4
fb0 ptyd0 ptyt1 ptyz2 ttya6 ttyq4 ttyw5
fb1 ptyd1 ptyt2 ptyz3 ttya7 ttyq5 ttyw6
fb2 ptyd2 ptyt3 ptyz4 ttya8 ttyq6 ttyw7
fd ptyd3 ptyt4 ptyz5 ttya9 ttyq7 ttyw8
full ptyd4 ptyt5 ptyz6 ttyaa ttyq8 ttyw9
i2c-0 ptyd5 ptyt6 ptyz7 ttyab ttyq9 ttywa
i2c-1 ptyd6 ptyt7 ptyz8 ttyac ttyqa ttywb
i2c-3 ptyd7 ptyt8 ptyz9 ttyad ttyqb ttywc
initctl ptyd8 ptyt9 ptyza ttyae ttyqc ttywd
input ptyd9 ptyta ptyzb ttyaf ttyqd ttywe
kmem ptyda ptytb ptyzc ttyb0 ttyqe ttywf
kmsg ptydb ptytc ptyzd ttyb1 ttyqf ttyx0
log ptydc ptytd ptyze ttyb2 ttyr0 ttyx1
loop0 ptydd ptyte ptyzf ttyb3 ttyr1 ttyx2
loop1 ptyde ptytf random ttyb4 ttyr2 ttyx3
loop2 ptydf ptyu0 rtc0 ttyb5 ttyr3 ttyx4
loop3 ptye0 ptyu1 sda ttyb6 ttyr4 ttyx5
loop4 ptye1 ptyu2 sda1 ttyb7 ttyr5 ttyx6
loop5 ptye2 ptyu3 sda2 ttyb8 ttyr6 ttyx7
loop6 ptye3 ptyu4 sda3 ttyb9 ttyr7 ttyx8
loop7 ptye4 ptyu5 shm ttyba ttyr8 ttyx9
mem ptye5 ptyu6 snd ttybb ttyr9 ttyxa
mixer ptye6 ptyu7 sndstat ttybc ttyra ttyxb
mmcblk0 ptye7 ptyu8 stderr ttybd ttyrb ttyxc
mmcblk0p1 ptye8 ptyu9 stdin ttybe ttyrc ttyxd
mmcblk0p2 ptye9 ptyua stdout ttybf ttyrd ttyxe
mtd0 ptyea ptyub tty ttyc0 ttyre ttyxf
mtd0ro ptyeb ptyuc tty0 ttyc1 ttyrf ttyy0
mtd1 ptyec ptyud tty1 ttyc2 ttys0 ttyy1
mtd1ro ptyed ptyue tty10 ttyc3 ttys1 ttyy2
mtd2 ptyee ptyuf tty11 ttyc4 ttys2 ttyy3
mtd2ro ptyef ptyv0 tty12 ttyc5 ttys3 ttyy4
mtdblock0 ptyp0 ptyv1 tty13 ttyc6 ttys4 ttyy5
mtdblock1 ptyp1 ptyv2 tty14 ttyc7 ttys5 ttyy6
mtdblock2 ptyp2 ptyv3 tty15 ttyc8 ttys6 ttyy7
mxc_iim ptyp3 ptyv4 tty16 ttyc9 ttys7 ttyy8
mxc_ipu ptyp4 ptyv5 tty17 ttyca ttys8 ttyy9
mxc_mem ptyp5 ptyv6 tty18 ttycb ttys9 ttyya
mxc_vpu ptyp6 ptyv7 tty19 ttycc ttysa ttyyb
net ptyp7 ptyv8 tty2 ttycd ttysb ttyyc
network_latency ptyp8 ptyv9 tty20 ttyce ttysc ttyyd
network_throughput ptyp9 ptyva tty21 ttycf ttysd ttyye
null ptypa ptyvb tty22 ttyd0 ttyse ttyyf
oj6sh ptypb ptyvc tty23 ttyd1 ttysf ttyz0
pmic ptypc ptyvd tty24 ttyd2 ttyt0 ttyz1
ppp ptypd ptyve tty25 ttyd3 ttyt1 ttyz2
psaux ptype ptyvf tty26 ttyd4 ttyt2 ttyz3
ptmx ptypf ptyw0 tty27 ttyd5 ttyt3 ttyz4
pts ptyq0 ptyw1 tty28 ttyd6 ttyt4 ttyz5
ptya0 ptyq1 ptyw2 tty29 ttyd7 ttyt5 ttyz6
ptya1 ptyq2 ptyw3 tty3 ttyd8 ttyt6 ttyz7
ptya2 ptyq3 ptyw4 tty30 ttyd9 ttyt7 ttyz8
ptya3 ptyq4 ptyw5 tty31 ttyda ttyt8 ttyz9
ptya4 ptyq5 ptyw6 tty32 ttydb ttyt9 ttyza
ptya5 ptyq6 ptyw7 tty33 ttydc ttyta ttyzb
ptya6 ptyq7 ptyw8 tty34 ttydd ttytb ttyzc
ptya7 ptyq8 ptyw9 tty35 ttyde ttytc ttyzd
ptya8 ptyq9 ptywa tty36 ttydf ttytd ttyze
ptya9 ptyqa ptywb tty37 ttye0 ttyte ttyzf
ptyaa ptyqb ptywc tty38 ttye1 ttytf unifi1
ptyab ptyqc ptywd tty39 ttye2 ttyu0 unifiudi1
ptyac ptyqd ptywe tty4 ttye3 ttyu1 urandom
ptyad ptyqe ptywf tty40 ttye4 ttyu2 usbdev1.1
ptyae ptyqf ptyx0 tty41 ttye5 ttyu3 usbdev1.1_ep00
ptyaf ptyr0 ptyx1 tty42 ttye6 ttyu4 usbdev1.1_ep81
ptyb0 ptyr1 ptyx2 tty43 ttye7 ttyu5 usbdev2.1
ptyb1 ptyr2 ptyx3 tty44 ttye8 ttyu6 usbdev2.1_ep00
ptyb2 ptyr3 ptyx4 tty45 ttye9 ttyu7 usbdev2.1_ep81
ptyb3 ptyr4 ptyx5 tty46 ttyea ttyu8 vcs
ptyb4 ptyr5 ptyx6 tty47 ttyeb ttyu9 vcs1
ptyb5 ptyr6 ptyx7 tty48 ttyec ttyua vcs2
ptyb6 ptyr7 ptyx8 tty49 ttyed ttyub vcs3
ptyb7 ptyr8 ptyx9 tty5 ttyee ttyuc vcs4
ptyb8 ptyr9 ptyxa tty50 ttyef ttyud vcs5
ptyb9 ptyra ptyxb tty51 ttymxc0 ttyue vcs6
ptyba ptyrb ptyxc tty52 ttymxc1 ttyuf vcs7
ptybb ptyrc ptyxd tty53 ttymxc2 ttyv0 vcsa
ptybc ptyrd ptyxe tty54 ttyp0 ttyv1 vcsa1
ptybd ptyre ptyxf tty55 ttyp1 ttyv2 vcsa2
ptybe ptyrf ptyy0 tty56 ttyp2 ttyv3 vcsa3
ptybf ptys0 ptyy1 tty57 ttyp3 ttyv4 vcsa4
ptyc0 ptys1 ptyy2 tty58 ttyp4 ttyv5 vcsa5
ptyc1 ptys2 ptyy3 tty59 ttyp5 ttyv6 vcsa6
ptyc2 ptys3 ptyy4 tty6 ttyp6 ttyv7 vcsa7
ptyc3 ptys4 ptyy5 tty60 ttyp7 ttyv8 video16
ptyc4 ptys5 ptyy6 tty61 ttyp8 ttyv9 watchdog
ptyc5 ptys6 ptyy7 tty62 ttyp9 ttyva zero

$ cat /proc/config.gz | gunzip
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.28-19-sendai
# Thu Apr 28 09:27:43 2011
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_GENERIC_GPIO=y
CONFIG_GENERIC_TIME=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_MMU=y
# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ZONE_DMA=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"

#
# General setup
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_VERSION_SIGNATURE="Ubuntu 2.6.28-19.61fsl1sendai25-sendai"
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=14
# CONFIG_CGROUPS is not set
# CONFIG_GROUP_SCHED is not set
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
# CONFIG_RELAY is not set
# CONFIG_NAMESPACES is not set
# CONFIG_BLK_DEV_INITRD is not set
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_EMBEDDED=y
CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLUB_DEBUG=y
CONFIG_COMPAT_BRK=y
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
# CONFIG_PROFILING is not set
# CONFIG_MARKERS is not set
CONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
CONFIG_BLOCK=y
# CONFIG_LBD is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
# CONFIG_LSF is not set
# CONFIG_BLK_DEV_BSG is not set
# CONFIG_BLK_DEV_INTEGRITY is not set

#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not set
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
CONFIG_CLASSIC_RCU=y
CONFIG_FREEZER=y

#
# System Type
#
# CONFIG_ARCH_AAEC2000 is not set
# CONFIG_ARCH_INTEGRATOR is not set
# CONFIG_ARCH_REALVIEW is not set
# CONFIG_ARCH_VERSATILE is not set
# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
# CONFIG_ARCH_NETX is not set
# CONFIG_ARCH_H720X is not set
# CONFIG_ARCH_IMX is not set
# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IOP32X is not set
# CONFIG_ARCH_IOP33X is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_L7200 is not set
# CONFIG_ARCH_KIRKWOOD is not set
# CONFIG_ARCH_KS8695 is not set
# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_LOKI is not set
# CONFIG_ARCH_MV78XX0 is not set
CONFIG_ARCH_MXC=y
# CONFIG_ARCH_ORION5X is not set
# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
# CONFIG_ARCH_S3C2410 is not set
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
# CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_OMAP is not set
# CONFIG_ARCH_MSM is not set
# CONFIG_ARCH_STMP3XXX is not set

#
# Boot options
#

#
# Power management
#

#
# Freescale MXC Implementations
#
# CONFIG_ARCH_MX37 is not set
# CONFIG_ARCH_MX35 is not set
CONFIG_ARCH_MX51=y
# CONFIG_ARCH_MX3 is not set
# CONFIG_ARCH_MX27 is not set
# CONFIG_ARCH_MX25 is not set
CONFIG_I2C_MXC_SELECT1=y
CONFIG_I2C_MXC_SELECT2=y
CONFIG_MXC_SDMA_API=y
CONFIG_SDMA_IRAM=y
CONFIG_SDMA_IRAM_SIZE=0x1000
# CONFIG_I2C_MXC_SELECT3 is not set
CONFIG_FORCE_MAX_ZONEORDER=13
CONFIG_ARCH_MXC_HAS_NFC_V3=y

#
# MX51 Options
#
CONFIG_MX51_OPTIONS=y
# CONFIG_MACH_MX51_3DS is not set
# CONFIG_MACH_MX51_BABBAGE is not set
CONFIG_MACH_MX51_SENDAI=y
CONFIG_ARCH_MXC_HAS_NFC_V3_2=y

#
# SDMA options
#

#
# Device options
#
CONFIG_MXC_TZIC=y
CONFIG_DMA_ZONE_SIZE=64
CONFIG_UTMI_MXC=y
CONFIG_UTMI_MXC_OTG=y
# CONFIG_MXC_PWM is not set

#
# Processor Type
#
CONFIG_CPU_32=y
# CONFIG_CPU_ARM926T is not set
# CONFIG_CPU_V6 is not set
CONFIG_CPU_32v6K=y
CONFIG_CPU_V7=y
CONFIG_CPU_32v7=y
CONFIG_CPU_ABRT_EV7=y
CONFIG_CPU_PABRT_IFAR=y
CONFIG_CPU_CACHE_V7=y
CONFIG_CPU_CACHE_VIPT=y
CONFIG_CPU_COPY_V6=y
CONFIG_CPU_TLB_V7=y
CONFIG_CPU_HAS_ASID=y
CONFIG_CPU_CP15=y
CONFIG_CPU_CP15_MMU=y

#
# Processor Features
#
CONFIG_ARM_THUMB=y
# CONFIG_ARM_THUMBEE is not set
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_DISABLE is not set
# CONFIG_CPU_BPREDICT_DISABLE is not set
CONFIG_HAS_TLS_REG=y
# CONFIG_OUTER_CACHE is not set

#
# Bus support
#
# CONFIG_PCI_SYSCALL is not set
# CONFIG_ARCH_SUPPORTS_MSI is not set
# CONFIG_PCCARD is not set

#
# Kernel Features
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_VMSPLIT_3G=y
# CONFIG_VMSPLIT_2G is not set
# CONFIG_VMSPLIT_1G is not set
CONFIG_PAGE_OFFSET=0xC0000000
CONFIG_PREEMPT=y
CONFIG_HZ=100
CONFIG_AEABI=y
# CONFIG_OABI_COMPAT is not set
CONFIG_ARCH_FLATMEM_HAS_HOLES=y
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_RESOURCES_64BIT is not set
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y
CONFIG_VIRT_TO_BUS=y
CONFIG_UNEVICTABLE_LRU=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
# CONFIG_LEDS is not set
CONFIG_ALIGNMENT_TRAP=y

#
# Boot options
#
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CMDLINE="noinitrd console=ttymxc0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 ip=off"
# CONFIG_XIP_KERNEL is not set
# CONFIG_KEXEC is not set

#
# CPU Power Management
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_TABLE=y
# CONFIG_CPU_FREQ_DEBUG is not set
CONFIG_CPU_FREQ_STAT=y
# CONFIG_CPU_FREQ_STAT_DETAILS is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
CONFIG_CPU_FREQ_IMX=y
# CONFIG_CPU_IDLE is not set

#
# Floating point emulation
#

#
# At least one emulation must be selected
#
CONFIG_VFP=y
CONFIG_VFPv3=y
CONFIG_NEON=y

#
# Userspace binary formats
#
CONFIG_BINFMT_ELF=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
CONFIG_HAVE_AOUT=y
# CONFIG_BINFMT_AOUT is not set
# CONFIG_BINFMT_MISC is not set

#
# Power management options
#
CONFIG_PM=y
# CONFIG_PM_DEBUG is not set
CONFIG_PM_SLEEP=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
# CONFIG_PM_DISABLE_CONSOLE is not set
CONFIG_APM_EMULATION=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_NET=y

#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
CONFIG_XFRM=y
# CONFIG_XFRM_USER is not set
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not set
# CONFIG_XFRM_STATISTICS is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
# CONFIG_IP_PNP_RARP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_INET_XFRM_MODE_TRANSPORT=y
CONFIG_INET_XFRM_MODE_TUNNEL=y
CONFIG_INET_XFRM_MODE_BEET=y
# CONFIG_INET_LRO is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
# CONFIG_IPV6 is not set
# CONFIG_NETWORK_SECMARK is not set
# CONFIG_NETFILTER is not set
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_NET_DSA is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_SCHED is not set

#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
# CONFIG_CAN is not set
# CONFIG_IRDA is not set
CONFIG_BT=y
CONFIG_BT_L2CAP=y
CONFIG_BT_SCO=y
CONFIG_BT_RFCOMM=y
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=y
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_HIDP=y

#
# Bluetooth device drivers
#
# CONFIG_BT_HCIUSB is not set
# CONFIG_BT_HCIBTUSB is not set
# CONFIG_BT_HCIBTSDIO is not set
CONFIG_BT_HCIUART=y
CONFIG_BT_HCIUART_H4=y
CONFIG_BT_HCIUART_BCSP=y
CONFIG_BT_HCIUART_LL=y
# CONFIG_BT_HCIBCM203X is not set
# CONFIG_BT_HCIBPA10X is not set
# CONFIG_BT_HCIBFUSB is not set
# CONFIG_BT_HCIVHCI is not set
# CONFIG_AF_RXRPC is not set
# CONFIG_PHONET is not set
CONFIG_WIRELESS=y
# CONFIG_CFG80211 is not set
CONFIG_WIRELESS_OLD_REGULATORY=y
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
# CONFIG_MAC80211 is not set
CONFIG_IEEE80211=y
# CONFIG_IEEE80211_DEBUG is not set
# CONFIG_IEEE80211_CRYPT_WEP is not set
# CONFIG_IEEE80211_CRYPT_CCMP is not set
# CONFIG_IEEE80211_CRYPT_TKIP is not set
# CONFIG_RFKILL is not set
# CONFIG_NET_9P is not set

#
# Device Drivers
#

#
# Generic Driver Options
#
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
CONFIG_FIRMWARE_IN_KERNEL=y
CONFIG_EXTRA_FIRMWARE=""
# CONFIG_SYS_HYPERVISOR is not set
CONFIG_CONNECTOR=y
CONFIG_PROC_EVENTS=y
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
# CONFIG_MTD_CONCAT is not set
CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set
CONFIG_MTD_CMDLINE_PARTS=y
# CONFIG_MTD_AFS_PARTS is not set
# CONFIG_MTD_AR7_PARTS is not set

#
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
# CONFIG_RFD_FTL is not set
# CONFIG_SSFDC is not set
# CONFIG_MTD_OOPS is not set

#
# RAM/ROM/Flash chip drivers
#
CONFIG_MTD_CFI=y
# CONFIG_MTD_JEDECPROBE is not set
CONFIG_MTD_GEN_PROBE=y
# CONFIG_MTD_CFI_ADV_OPTIONS is not set
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
# CONFIG_MTD_CFI_INTELEXT is not set
# CONFIG_MTD_CFI_AMDSTD is not set
# CONFIG_MTD_CFI_STAA is not set
CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set

#
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
# CONFIG_MTD_PHYSMAP is not set
# CONFIG_MTD_ARM_INTEGRATOR is not set
# CONFIG_MTD_PLATRAM is not set
CONFIG_MTD_MXC=y

#
# Self-contained MTD device drivers
#
# CONFIG_MTD_DATAFLASH is not set
# CONFIG_MTD_M25P80 is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
# CONFIG_MTD_BLOCK2MTD is not set

#
# Disk-On-Chip Device Drivers
#
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOC2001PLUS is not set
CONFIG_MTD_NAND=y
# CONFIG_MTD_NAND_VERIFY_WRITE is not set
# CONFIG_MTD_NAND_ECC_SMC is not set
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
# CONFIG_MTD_NAND_GPIO is not set
CONFIG_MTD_NAND_IDS=y
# CONFIG_MTD_NAND_DISKONCHIP is not set
# CONFIG_MTD_NAND_NANDSIM is not set
# CONFIG_MTD_NAND_IMX_NFC is not set
CONFIG_MTD_NAND_MXC_V3=y
# CONFIG_MTD_NAND_MXC_SWECC is not set
# CONFIG_MTD_NAND_MXC_FORCE_CE is not set
# CONFIG_MXC_NAND_LOW_LEVEL_ERASE is not set
# CONFIG_MTD_NAND_PLATFORM is not set
# CONFIG_MTD_ALAUDA is not set
# CONFIG_MTD_ONENAND is not set

#
# UBI - Unsorted block images
#
# CONFIG_MTD_UBI is not set
# CONFIG_PARPORT is not set
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_UB is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
# CONFIG_MISC_DEVICES is not set
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set

#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=y
CONFIG_SCSI_DMA=y
# CONFIG_SCSI_TGT is not set
# CONFIG_SCSI_NETLINK is not set
CONFIG_SCSI_PROC_FS=y

#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_ST is not set
# CONFIG_CHR_DEV_OSST is not set
CONFIG_BLK_DEV_SR=m
CONFIG_BLK_DEV_SR_VENDOR=y
# CONFIG_CHR_DEV_SG is not set
# CONFIG_CHR_DEV_SCH is not set

#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
CONFIG_SCSI_MULTI_LUN=y
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
# CONFIG_SCSI_SCAN_ASYNC is not set
CONFIG_SCSI_WAIT_SCAN=m

#
# SCSI Transports
#
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
CONFIG_SCSI_LOWLEVEL=y
# CONFIG_ISCSI_TCP is not set
# CONFIG_SCSI_DEBUG is not set
# CONFIG_SCSI_DH is not set
CONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not set
# CONFIG_SATA_PMP is not set
CONFIG_ATA_SFF=y
# CONFIG_SATA_MV is not set
# CONFIG_PATA_PLATFORM is not set
CONFIG_PATA_FSL=y
# CONFIG_MD is not set
CONFIG_NETDEVICES=y
# CONFIG_DUMMY is not set
# CONFIG_BONDING is not set
# CONFIG_MACVLAN is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_VETH is not set
# CONFIG_NET_ETHERNET is not set
CONFIG_MII=y
# CONFIG_NETDEV_1000 is not set
# CONFIG_NETDEV_10000 is not set

#
# Wireless LAN
#
# CONFIG_WLAN_PRE80211 is not set
# CONFIG_WLAN_80211 is not set
# CONFIG_IWLWIFI_LEDS is not set

#
# USB Network Adapters
#
CONFIG_USB_CATC=y
CONFIG_USB_KAWETH=y
CONFIG_USB_PEGASUS=y
CONFIG_USB_RTL8150=y
CONFIG_USB_USBNET=y
CONFIG_USB_NET_AX8817X=y
CONFIG_USB_NET_CDCETHER=y
# CONFIG_USB_NET_DM9601 is not set
# CONFIG_USB_NET_SMSC95XX is not set
# CONFIG_USB_NET_GL620A is not set
CONFIG_USB_NET_NET1080=y
# CONFIG_USB_NET_PLUSB is not set
# CONFIG_USB_NET_MCS7830 is not set
# CONFIG_USB_NET_RNDIS_HOST is not set
CONFIG_USB_NET_CDC_SUBSET=y
# CONFIG_USB_ALI_M5632 is not set
# CONFIG_USB_AN2720 is not set
CONFIG_USB_BELKIN=y
CONFIG_USB_ARMLINUX=y
# CONFIG_USB_EPSON2888 is not set
# CONFIG_USB_KC2190 is not set
CONFIG_USB_NET_ZAURUS=y
# CONFIG_WAN is not set
CONFIG_PPP=m
CONFIG_PPP_MULTILINK=y
CONFIG_PPP_FILTER=y
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
CONFIG_PPP_MPPE=m
CONFIG_PPPOE=m
CONFIG_PPPOL2TP=m
# CONFIG_SLIP is not set
CONFIG_SLHC=m
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
# CONFIG_ISDN is not set

#
# Input device support
#
CONFIG_INPUT=y
CONFIG_INPUT_FF_MEMLESS=y
CONFIG_INPUT_POLLDEV=y

#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
# CONFIG_INPUT_APMPOWER is not set

#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_ATKBD is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
CONFIG_KEYBOARD_MXC=y
# CONFIG_KEYBOARD_GPIO is not set
# CONFIG_INPUT_MOUSE is not set
CONFIG_INPUT_JOYSTICK=y
# CONFIG_JOYSTICK_ANALOG is not set
# CONFIG_JOYSTICK_A3D is not set
# CONFIG_JOYSTICK_ADI is not set
# CONFIG_JOYSTICK_COBRA is not set
# CONFIG_JOYSTICK_GF2K is not set
# CONFIG_JOYSTICK_GRIP is not set
# CONFIG_JOYSTICK_GRIP_MP is not set
# CONFIG_JOYSTICK_GUILLEMOT is not set
# CONFIG_JOYSTICK_INTERACT is not set
# CONFIG_JOYSTICK_SIDEWINDER is not set
# CONFIG_JOYSTICK_TMDC is not set
# CONFIG_JOYSTICK_IFORCE is not set
# CONFIG_JOYSTICK_WARRIOR is not set
# CONFIG_JOYSTICK_MAGELLAN is not set
# CONFIG_JOYSTICK_SPACEORB is not set
# CONFIG_JOYSTICK_SPACEBALL is not set
# CONFIG_JOYSTICK_STINGER is not set
# CONFIG_JOYSTICK_TWIDJOY is not set
# CONFIG_JOYSTICK_ZHENHUA is not set
# CONFIG_JOYSTICK_JOYDUMP is not set
# CONFIG_JOYSTICK_XPAD is not set
CONFIG_JOYSTICK_OJ6SH=y
# CONFIG_INPUT_TABLET is not set
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ADS7846 is not set
# CONFIG_TOUCHSCREEN_FUJITSU is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_INEXIO is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
CONFIG_TOUCHSCREEN_MXC=y
# CONFIG_TOUCHSCREEN_TSC2007 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_ATI_REMOTE is not set
# CONFIG_INPUT_ATI_REMOTE2 is not set
# CONFIG_INPUT_KEYSPAN_REMOTE is not set
# CONFIG_INPUT_POWERMATE is not set
# CONFIG_INPUT_YEALINK is not set
# CONFIG_INPUT_CM109 is not set
CONFIG_INPUT_UINPUT=y

#
# Hardware I/O ports
#
# CONFIG_SERIO is not set
# CONFIG_GAMEPORT is not set

#
# Character devices
#
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set
CONFIG_DEVKMEM=y
# CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_MXC_IIM=y
CONFIG_IMX_SIM=m

#
# Serial drivers
#
# CONFIG_SERIAL_8250 is not set

#
# Non-8250 serial port support
#
CONFIG_SERIAL_MXC=y
CONFIG_SERIAL_MXC_CONSOLE=y
# CONFIG_SERIAL_IMX is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
# CONFIG_IPMI_HANDLER is not set
CONFIG_HW_RANDOM=y
# CONFIG_NVRAM is not set
# CONFIG_R3964 is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_HELPER_AUTO=y

#
# I2C Hardware Bus support
#

#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
# CONFIG_I2C_GPIO is not set
CONFIG_I2C_MXC=y
CONFIG_I2C_MXC_HS=y
# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_SIMTEC is not set

#
# External I2C/SMBus adapter drivers
#
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_TAOS_EVM is not set
# CONFIG_I2C_TINY_USB is not set

#
# Other I2C/SMBus bus drivers
#
# CONFIG_I2C_PCA_PLATFORM is not set
# CONFIG_I2C_STUB is not set

#
# Miscellaneous I2C Chip support
#
# CONFIG_DS1682 is not set
# CONFIG_AT24 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_PCF8575 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_TPS65010 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_SENSORS_TSL2550 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
# CONFIG_I2C_SLAVE is not set
CONFIG_SPI=y
CONFIG_SPI_MASTER=y

#
# SPI Master Controller Drivers
#
CONFIG_SPI_BITBANG=y
CONFIG_SPI_MXC=y
# CONFIG_SPI_MXC_TEST_LOOPBACK is not set
CONFIG_SPI_MXC_SELECT1=y
# CONFIG_SPI_MXC_SELECT2 is not set
# CONFIG_SPI_MXC_SELECT3 is not set

#
# SPI Protocol Masters
#
# CONFIG_SPI_AT25 is not set
# CONFIG_SPI_SPIDEV is not set
# CONFIG_SPI_TLE62X0 is not set
CONFIG_ARCH_REQUIRE_GPIOLIB=y
CONFIG_GPIOLIB=y
# CONFIG_GPIO_SYSFS is not set

#
# Memory mapped GPIO expanders:
#

#
# I2C GPIO expanders:
#
# CONFIG_GPIO_MAX732X is not set
# CONFIG_GPIO_PCA953X is not set
# CONFIG_GPIO_PCF857X is not set

#
# PCI GPIO expanders:
#

#
# SPI GPIO expanders:
#
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_W1 is not set
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set
CONFIG_APM_POWER=y
# CONFIG_BATTERY_DS2760 is not set
# CONFIG_BATTERY_BQ27x00 is not set
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_SENSORS_AD7414 is not set
# CONFIG_SENSORS_AD7418 is not set
# CONFIG_SENSORS_ADCXX is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
# CONFIG_SENSORS_ADM1029 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM9240 is not set
# CONFIG_SENSORS_ADT7462 is not set
# CONFIG_SENSORS_ADT7470 is not set
# CONFIG_SENSORS_ADT7473 is not set
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_F71805F is not set
# CONFIG_SENSORS_F71882FG is not set
# CONFIG_SENSORS_F75375S is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_LM63 is not set
# CONFIG_SENSORS_LM70 is not set
# CONFIG_SENSORS_LM75 is not set
# CONFIG_SENSORS_LM77 is not set
# CONFIG_SENSORS_LM78 is not set
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM87 is not set
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_LM93 is not set
# CONFIG_SENSORS_MAX1111 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_MAX6650 is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_PC87427 is not set
# CONFIG_SENSORS_DME1737 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47M192 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_ADS7828 is not set
# CONFIG_SENSORS_THMC50 is not set
# CONFIG_SENSORS_VT1211 is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83791D is not set
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83793 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
# CONFIG_THERMAL is not set
# CONFIG_THERMAL_HWMON is not set
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_NOWAYOUT=y

#
# Watchdog Device Drivers
#
# CONFIG_SOFT_WATCHDOG is not set
CONFIG_MXC_WATCHDOG=y

#
# USB-based Watchdog Cards
#
# CONFIG_USBPCWATCHDOG is not set
CONFIG_SSB_POSSIBLE=y

#
# Sonics Silicon Backplane
#
# CONFIG_SSB is not set

#
# Multifunction device drivers
#
# CONFIG_MFD_CORE is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_MFD_ASIC3 is not set
# CONFIG_HTC_EGPIO is not set
# CONFIG_HTC_PASIC3 is not set
# CONFIG_MFD_TMIO is not set
# CONFIG_MFD_TC6393XB is not set
# CONFIG_PMIC_DA903X is not set
# CONFIG_MFD_WM8400 is not set
# CONFIG_MFD_WM8350_I2C is not set

#
# Multimedia devices
#

#
# Multimedia core support
#
CONFIG_VIDEO_DEV=y
CONFIG_VIDEO_V4L2_COMMON=y
CONFIG_VIDEO_ALLOW_V4L1=y
CONFIG_VIDEO_V4L1_COMPAT=y
# CONFIG_DVB_CORE is not set
CONFIG_VIDEO_MEDIA=y

#
# Multimedia drivers
#
# CONFIG_MEDIA_ATTACH is not set
CONFIG_MEDIA_TUNER=y
CONFIG_MEDIA_TUNER_CUSTOMIZE=y
# CONFIG_MEDIA_TUNER_SIMPLE is not set
# CONFIG_MEDIA_TUNER_TDA8290 is not set
# CONFIG_MEDIA_TUNER_TDA827X is not set
# CONFIG_MEDIA_TUNER_TDA18271 is not set
# CONFIG_MEDIA_TUNER_TDA9887 is not set
# CONFIG_MEDIA_TUNER_TEA5761 is not set
# CONFIG_MEDIA_TUNER_TEA5767 is not set
# CONFIG_MEDIA_TUNER_MT20XX is not set
# CONFIG_MEDIA_TUNER_MT2060 is not set
# CONFIG_MEDIA_TUNER_MT2266 is not set
# CONFIG_MEDIA_TUNER_MT2131 is not set
# CONFIG_MEDIA_TUNER_QT1010 is not set
# CONFIG_MEDIA_TUNER_XC2028 is not set
# CONFIG_MEDIA_TUNER_XC5000 is not set
# CONFIG_MEDIA_TUNER_MXL5005S is not set
# CONFIG_MEDIA_TUNER_MXL5007T is not set
CONFIG_VIDEO_V4L2=y
CONFIG_VIDEO_V4L1=y
CONFIG_VIDEO_CAPTURE_DRIVERS=y
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set

#
# Encoders/decoders and other helper chips
#

#
# Audio decoders
#
# CONFIG_VIDEO_TVAUDIO is not set
# CONFIG_VIDEO_TDA7432 is not set
# CONFIG_VIDEO_TDA9840 is not set
# CONFIG_VIDEO_TDA9875 is not set
# CONFIG_VIDEO_TEA6415C is not set
# CONFIG_VIDEO_TEA6420 is not set
# CONFIG_VIDEO_MSP3400 is not set
# CONFIG_VIDEO_CS5345 is not set
# CONFIG_VIDEO_CS53L32A is not set
# CONFIG_VIDEO_M52790 is not set
# CONFIG_VIDEO_TLV320AIC23B is not set
# CONFIG_VIDEO_WM8775 is not set
# CONFIG_VIDEO_WM8739 is not set
# CONFIG_VIDEO_VP27SMPX is not set

#
# Video decoders
#
# CONFIG_VIDEO_BT819 is not set
# CONFIG_VIDEO_BT856 is not set
# CONFIG_VIDEO_BT866 is not set
# CONFIG_VIDEO_KS0127 is not set
# CONFIG_VIDEO_OV7670 is not set
# CONFIG_VIDEO_TCM825X is not set
# CONFIG_VIDEO_SAA7110 is not set
# CONFIG_VIDEO_SAA7111 is not set
# CONFIG_VIDEO_SAA7114 is not set
# CONFIG_VIDEO_SAA711X is not set
# CONFIG_VIDEO_SAA717X is not set
# CONFIG_VIDEO_SAA7191 is not set
# CONFIG_VIDEO_TVP5150 is not set
# CONFIG_VIDEO_VPX3220 is not set

#
# Video and audio decoders
#
# CONFIG_VIDEO_CX25840 is not set

#
# MPEG video encoders
#
# CONFIG_VIDEO_CX2341X is not set

#
# Video encoders
#
# CONFIG_VIDEO_SAA7127 is not set
# CONFIG_VIDEO_SAA7185 is not set
# CONFIG_VIDEO_ADV7170 is not set
# CONFIG_VIDEO_ADV7175 is not set

#
# Video improvement chips
#
# CONFIG_VIDEO_UPD64031A is not set
# CONFIG_VIDEO_UPD64083 is not set
# CONFIG_VIDEO_VIVI is not set
# CONFIG_VIDEO_MXC_CAMERA is not set
CONFIG_VIDEO_MXC_OUTPUT=y
CONFIG_VIDEO_MXC_IPU_OUTPUT=y
# CONFIG_VIDEO_MXC_IPUV1_WVGA_OUTPUT is not set
# CONFIG_VIDEO_MXC_OPL is not set
# CONFIG_VIDEO_CPIA is not set
# CONFIG_VIDEO_CPIA2 is not set
# CONFIG_VIDEO_SAA5246A is not set
# CONFIG_VIDEO_SAA5249 is not set
# CONFIG_SOC_CAMERA is not set
# CONFIG_V4L_USB_DRIVERS is not set
# CONFIG_RADIO_ADAPTERS is not set
# CONFIG_DAB is not set

#
# Graphics support
#
# CONFIG_VGASTATE is not set
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
CONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not set
# CONFIG_FB_DDC is not set
# CONFIG_FB_BOOT_VESA_SUPPORT is not set
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
# CONFIG_FB_SYS_FILLRECT is not set
# CONFIG_FB_SYS_COPYAREA is not set
# CONFIG_FB_SYS_IMAGEBLIT is not set
# CONFIG_FB_FOREIGN_ENDIAN is not set
# CONFIG_FB_SYS_FOPS is not set
# CONFIG_FB_SVGALIB is not set
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_BACKLIGHT is not set
CONFIG_FB_MODE_HELPERS=y
# CONFIG_FB_TILEBLITTING is not set

#
# Frame buffer hardware drivers
#
CONFIG_FB_MXC=y
CONFIG_FB_MXC_SYNC_PANEL=y
# CONFIG_FB_MXC_EPSON_VGA_SYNC_PANEL is not set
# CONFIG_FB_MXC_TVOUT_TVE is not set
# CONFIG_FB_MXC_CLAA_WVGA_SYNC_PANEL is not set
CONFIG_FB_MXC_SHARP_WSVGA_SYNC_PANEL=y
# CONFIG_FB_MXC_CH7026 is not set
# CONFIG_FB_MXC_TVOUT is not set
# CONFIG_FB_MXC_TVOUT_CH7024 is not set
# CONFIG_FB_MXC_ASYNC_PANEL is not set
# CONFIG_FB_UVESA is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FB_METRONOME is not set
# CONFIG_FB_MB862XX is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
# CONFIG_LCD_CLASS_DEVICE is not set
CONFIG_BACKLIGHT_CLASS_DEVICE=y
# CONFIG_BACKLIGHT_CORGI is not set
CONFIG_BACKLIGHT_MXC=y
# CONFIG_BACKLIGHT_MXC_MC13892 is not set
CONFIG_BACKLIGHT_MXC_PWM=y

#
# Display device support
#
# CONFIG_DISPLAY_SUPPORT is not set

#
# Console display driver support
#
# CONFIG_VGA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
# CONFIG_FONT_6x11 is not set
# CONFIG_FONT_7x14 is not set
# CONFIG_FONT_PEARL_8x8 is not set
# CONFIG_FONT_ACORN_8x8 is not set
# CONFIG_FONT_MINI_4x6 is not set
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set
CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_SOUND=y
CONFIG_SOUND_OSS_CORE=y
CONFIG_SND=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y
CONFIG_SND_HWDEP=m
CONFIG_SND_RAWMIDI=m
# CONFIG_SND_SEQUENCER is not set
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=y
CONFIG_SND_PCM_OSS=y
CONFIG_SND_PCM_OSS_PLUGINS=y
# CONFIG_SND_DYNAMIC_MINORS is not set
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
# CONFIG_SND_DRIVERS is not set
# CONFIG_SND_ARM is not set
# CONFIG_SND_SPI is not set
CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=m
CONFIG_SND_USB_CAIAQ=m
CONFIG_SND_USB_CAIAQ_INPUT=y
CONFIG_SND_SOC=y
CONFIG_SND_MXC_SOC=y
CONFIG_SND_MXC_SOC_SSI=y
CONFIG_SND_MXC_SOC_IRAM=y
CONFIG_SND_SOC_IMX_3STACK_SGTL5000=y
# CONFIG_SND_SOC_IMX_3STACK_AK4647 is not set
# CONFIG_SND_SOC_IMX_3STACK_WM8580 is not set
# CONFIG_SND_SOC_IMX_3STACK_AK5702 is not set
# CONFIG_SND_SOC_IMX_3STACK_BLUETOOTH is not set
# CONFIG_SND_SOC_ALL_CODECS is not set
CONFIG_SND_SOC_SGTL5000=y
# CONFIG_SOUND_PRIME is not set
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
# CONFIG_HID_DEBUG is not set
CONFIG_HIDRAW=y

#
# USB Input Devices
#
CONFIG_USB_HID=y
CONFIG_HID_PID=y
# CONFIG_USB_HIDDEV is not set

#
# Special HID drivers
#
CONFIG_HID_COMPAT=y
CONFIG_HID_A4TECH=y
CONFIG_HID_APPLE=y
CONFIG_HID_BELKIN=y
CONFIG_HID_BRIGHT=y
CONFIG_HID_CHERRY=y
CONFIG_HID_CHICONY=y
CONFIG_HID_CYPRESS=y
CONFIG_HID_DELL=y
CONFIG_HID_EZKEY=y
CONFIG_HID_GYRATION=y
CONFIG_HID_LOGITECH=y
# CONFIG_LOGITECH_FF is not set
# CONFIG_LOGIRUMBLEPAD2_FF is not set
CONFIG_HID_MICROSOFT=y
CONFIG_HID_MONTEREY=y
CONFIG_HID_PANTHERLORD=y
# CONFIG_PANTHERLORD_FF is not set
CONFIG_HID_PETALYNX=y
CONFIG_HID_SAMSUNG=y
CONFIG_HID_SONY=y
CONFIG_HID_SUNPLUS=y
# CONFIG_THRUSTMASTER_FF is not set
# CONFIG_ZEROPLUS_FF is not set
CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_USB_ARCH_HAS_OHCI is not set
CONFIG_USB_ARCH_HAS_EHCI=y
CONFIG_USB=y
# CONFIG_USB_DEBUG is not set
# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set

#
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
CONFIG_USB_DEVICE_CLASS=y
# CONFIG_USB_DYNAMIC_MINORS is not set
CONFIG_USB_SUSPEND=y
CONFIG_USB_OTG=y
# CONFIG_USB_OTG_WHITELIST is not set
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
CONFIG_USB_MON=y
# CONFIG_USB_WUSB is not set
# CONFIG_USB_WUSB_CBAF is not set

#
# USB Host Controller Drivers
#
# CONFIG_USB_C67X00_HCD is not set
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_ARC=y
CONFIG_USB_EHCI_ARC_H1=y
# CONFIG_USB_EHCI_ARC_H2 is not set
CONFIG_USB_EHCI_ARC_OTG=y
# CONFIG_USB_EHCI_ARC_OTG_WAKE_UP is not set
# CONFIG_USB_STATIC_IRAM is not set
# CONFIG_USB_EHCI_FSL_MC13783 is not set
# CONFIG_USB_EHCI_FSL_1301 is not set
# CONFIG_USB_EHCI_FSL_1504 is not set
CONFIG_USB_EHCI_FSL_UTMI=y
CONFIG_USB_EHCI_ROOT_HUB_TT=y
CONFIG_USB_EHCI_TT_NEWSCHED=y
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_SL811_HCD is not set
# CONFIG_USB_R8A66597_HCD is not set
# CONFIG_USB_HWA_HCD is not set
# CONFIG_USB_GADGET_MUSB_HDRC is not set

#
# USB Device Class drivers
#
CONFIG_USB_ACM=m
# CONFIG_USB_PRINTER is not set
# CONFIG_USB_WDM is not set
# CONFIG_USB_TMC is not set

#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
#

#
# see USB_STORAGE Help for more information
#
CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set
CONFIG_USB_STORAGE_DATAFAB=y
CONFIG_USB_STORAGE_FREECOM=y
CONFIG_USB_STORAGE_ISD200=y
CONFIG_USB_STORAGE_DPCM=y
CONFIG_USB_STORAGE_USBAT=y
CONFIG_USB_STORAGE_SDDR09=y
CONFIG_USB_STORAGE_SDDR55=y
CONFIG_USB_STORAGE_JUMPSHOT=y
CONFIG_USB_STORAGE_ALAUDA=y
CONFIG_USB_STORAGE_ONETOUCH=y
CONFIG_USB_STORAGE_KARMA=y
CONFIG_USB_STORAGE_CYPRESS_ATACB=y
CONFIG_USB_LIBUSUAL=y

#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set

#
# USB port drivers
#
CONFIG_USB_SERIAL=y
# CONFIG_USB_SERIAL_CONSOLE is not set
# CONFIG_USB_EZUSB is not set
CONFIG_USB_SERIAL_GENERIC=y
# CONFIG_USB_SERIAL_AIRCABLE is not set
# CONFIG_USB_SERIAL_ARK3116 is not set
# CONFIG_USB_SERIAL_BELKIN is not set
# CONFIG_USB_SERIAL_CH341 is not set
# CONFIG_USB_SERIAL_WHITEHEAT is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_CP2101 is not set
# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
# CONFIG_USB_SERIAL_EMPEG is not set
CONFIG_USB_SERIAL_FTDI_SIO=m
# CONFIG_USB_SERIAL_FUNSOFT is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_IPAQ is not set
# CONFIG_USB_SERIAL_IR is not set
# CONFIG_USB_SERIAL_EDGEPORT is not set
# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
# CONFIG_USB_SERIAL_GARMIN is not set
# CONFIG_USB_SERIAL_IPW is not set
# CONFIG_USB_SERIAL_IUU is not set
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
# CONFIG_USB_SERIAL_KEYSPAN is not set
# CONFIG_USB_SERIAL_KLSI is not set
# CONFIG_USB_SERIAL_KOBIL_SCT is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_MOS7720 is not set
# CONFIG_USB_SERIAL_MOS7840 is not set
# CONFIG_USB_SERIAL_MOTOROLA is not set
# CONFIG_USB_SERIAL_NAVMAN is not set
CONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_OTI6858 is not set
# CONFIG_USB_SERIAL_SPCP8X5 is not set
# CONFIG_USB_SERIAL_HP4X is not set
# CONFIG_USB_SERIAL_SAFE is not set
# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
# CONFIG_USB_SERIAL_TI is not set
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_XIRCOM is not set
CONFIG_USB_SERIAL_OPTION=m
# CONFIG_USB_SERIAL_OMNINET is not set
# CONFIG_USB_SERIAL_DEBUG is not set

#
# USB Miscellaneous drivers
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_ADUTUX is not set
# CONFIG_USB_SEVSEG is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_BERRY_CHARGE is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_PHIDGET is not set
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_FTDI_ELAN is not set
# CONFIG_USB_APPLEDISPLAY is not set
CONFIG_USB_SISUSBVGA=y
# CONFIG_USB_SISUSBVGA_CON is not set
# CONFIG_USB_LD is not set
# CONFIG_USB_TRANCEVIBRATOR is not set
# CONFIG_USB_IOWARRIOR is not set
# CONFIG_USB_TEST is not set
# CONFIG_USB_ISIGHTFW is not set
# CONFIG_USB_VST is not set
CONFIG_USB_GADGET=y
# CONFIG_USB_GADGET_DEBUG_FILES is not set
CONFIG_USB_GADGET_VBUS_DRAW=2
CONFIG_USB_GADGET_SELECTED=y
# CONFIG_USB_GADGET_AT91 is not set
# CONFIG_USB_GADGET_ATMEL_USBA is not set
# CONFIG_USB_GADGET_FSL_USB2 is not set
# CONFIG_USB_GADGET_LH7A40X is not set
# CONFIG_USB_GADGET_OMAP is not set
# CONFIG_USB_GADGET_PXA25X is not set
# CONFIG_USB_GADGET_PXA27X is not set
# CONFIG_USB_GADGET_S3C2410 is not set
# CONFIG_USB_GADGET_M66592 is not set
# CONFIG_USB_GADGET_AMD5536UDC is not set
# CONFIG_USB_GADGET_FSL_QE is not set
# CONFIG_USB_GADGET_NET2280 is not set
# CONFIG_USB_GADGET_GOKU is not set
CONFIG_USB_GADGET_ARC=y
CONFIG_USB_ARC=y
# CONFIG_USB_GADGET_DUMMY_HCD is not set
CONFIG_USB_GADGET_DUALSPEED=y
CONFIG_USB_GADGET_ARC_OTG=y
# CONFIG_USB_GADGET_WAKE_UP is not set
# CONFIG_USB_GADGET_FSL_MC13783 is not set
# CONFIG_USB_GADGET_FSL_1301 is not set
# CONFIG_USB_GADGET_FSL_1504 is not set
CONFIG_USB_GADGET_FSL_UTMI=y
# CONFIG_USB_ZERO is not set
CONFIG_USB_ETH=m
CONFIG_USB_ETH_RNDIS=y
CONFIG_USB_GADGETFS=m
CONFIG_USB_FILE_STORAGE=m
# CONFIG_USB_FILE_STORAGE_TEST is not set
CONFIG_USB_G_SERIAL=m
# CONFIG_USB_MIDI_GADGET is not set
# CONFIG_USB_G_PRINTER is not set
# CONFIG_USB_CDC_COMPOSITE is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_UNSAFE_RESUME=y

#
# MMC/SD/SDIO Card Drivers
#
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_SDIO_UART is not set
# CONFIG_MMC_TEST is not set
CONFIG_SDIO_UNIFI_FS=y

#
# MMC/SD/SDIO Host Controller Drivers
#
# CONFIG_MMC_SDHCI is not set
# CONFIG_MMC_SPI is not set
# CONFIG_MMC_MXC is not set
CONFIG_MMC_IMX_ESDHCI=y
# CONFIG_MMC_IMX_ESDHCI_PIO_MODE is not set
# CONFIG_MEMSTICK is not set
# CONFIG_ACCESSIBILITY is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y

#
# LED drivers
#
CONFIG_LEDS_MC13892=y
# CONFIG_LEDS_PCA9532 is not set
# CONFIG_LEDS_GPIO is not set
# CONFIG_LEDS_PCA955X is not set

#
# LED Triggers
#
# CONFIG_LEDS_TRIGGERS is not set
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
# CONFIG_RTC_DEBUG is not set

#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
CONFIG_RTC_INTF_DEV_UIE_EMUL=y
# CONFIG_RTC_DRV_TEST is not set

#
# I2C RTC drivers
#
# CONFIG_RTC_DRV_DS1307 is not set
# CONFIG_RTC_DRV_DS1374 is not set
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_MAX6900 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_ISL1208 is not set
# CONFIG_RTC_DRV_X1205 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_M41T80 is not set
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_FM3130 is not set
# CONFIG_RTC_DRV_RX8581 is not set

#
# SPI RTC drivers
#
# CONFIG_RTC_DRV_M41T94 is not set
# CONFIG_RTC_DRV_DS1305 is not set
# CONFIG_RTC_DRV_DS1390 is not set
# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_R9701 is not set
# CONFIG_RTC_DRV_RS5C348 is not set
# CONFIG_RTC_DRV_DS3234 is not set

#
# Platform RTC drivers
#
# CONFIG_RTC_DRV_CMOS is not set
# CONFIG_RTC_DRV_DS1286 is not set
# CONFIG_RTC_DRV_DS1511 is not set
# CONFIG_RTC_DRV_DS1553 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T35 is not set
# CONFIG_RTC_DRV_M48T59 is not set
# CONFIG_RTC_DRV_BQ4802 is not set
# CONFIG_RTC_DRV_V3020 is not set

#
# on-CPU RTC drivers
#
# CONFIG_RTC_MXC is not set
# CONFIG_RTC_DRV_MXC_V2 is not set
# CONFIG_RTC_DRV_IMXDI is not set
CONFIG_RTC_MC13892=y
# CONFIG_DMADEVICES is not set
CONFIG_REGULATOR=y
# CONFIG_REGULATOR_DEBUG is not set
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
# CONFIG_REGULATOR_BQ24022 is not set
CONFIG_REGULATOR_MC13892=y
# CONFIG_UIO is not set

#
# MXC support drivers
#
CONFIG_MXC_IPU=y
CONFIG_MXC_VIBRATOR=y
CONFIG_MXC_CTL_GPIO=y
CONFIG_MXC_IPU_V3=y

#
# MXC SSI support
#
# CONFIG_MXC_SSI is not set

#
# MXC Digital Audio Multiplexer support
#
# CONFIG_MXC_DAM is not set

#
# MXC PMIC support
#
CONFIG_MXC_PMIC=y
# CONFIG_MXC_PMIC_MC13783 is not set
CONFIG_MXC_PMIC_MC13892=y
CONFIG_MXC_PMIC_I2C=y
CONFIG_MXC_PMIC_SPI=y
# CONFIG_MXC_PMIC_MC34704 is not set
# CONFIG_MXC_PMIC_MC9SDZ60 is not set
CONFIG_MXC_PMIC_CHARDEV=y

#
# MXC PMIC Client Drivers
#
CONFIG_MXC_MC13892_ADC=y
CONFIG_MXC_MC13892_RTC=y
CONFIG_MXC_MC13892_LIGHT=y
CONFIG_MXC_MC13892_BATTERY=y
CONFIG_MXC_MC13892_CONNECTIVITY=y
CONFIG_MXC_MC13892_POWER=y
# CONFIG_MXC_PMIC_MC9S08DZ60 is not set

#
# MXC Security Drivers
#
# CONFIG_MXC_SECURITY_SCC is not set
# CONFIG_MXC_SECURITY_SCC2 is not set
# CONFIG_MXC_SECURITY_RNG is not set

#
# SAHARA2 Security Hardware Support
#
# CONFIG_MXC_SAHARA is not set

#
# MXC MPEG4 Encoder Kernel module support
#
# CONFIG_MXC_HMP4E is not set

#
# MXC HARDWARE EVENT
#
# CONFIG_MXC_HWEVENT is not set

#
# MXC VPU(Video Processing Unit) support
#
CONFIG_MXC_VPU=y
CONFIG_MXC_VPU_IRAM=y
# CONFIG_MXC_VPU_DEBUG is not set

#
# MXC Asynchronous Sample Rate Converter support
#

#
# MXC Bluetooth support
#

#
# Broadcom GPS ioctrl support
#

#
# MXC Media Local Bus Driver
#

#
# i.MX ADC support
#
# CONFIG_IMX_ADC is not set

#
# File systems
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
# CONFIG_EXT3_FS_POSIX_ACL is not set
# CONFIG_EXT3_FS_SECURITY is not set
# CONFIG_EXT4_FS is not set
CONFIG_JBD=y
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
CONFIG_FILE_LOCKING=y
# CONFIG_XFS_FS is not set
# CONFIG_OCFS2_FS is not set
CONFIG_DNOTIFY=y
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
# CONFIG_QUOTA is not set
# CONFIG_AUTOFS_FS is not set
CONFIG_AUTOFS4_FS=m
CONFIG_FUSE_FS=m

#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_UDF_FS=y
CONFIG_UDF_NLS=y

#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_NTFS_FS=y
# CONFIG_NTFS_DEBUG is not set
CONFIG_NTFS_RW=y

#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
# CONFIG_TMPFS_POSIX_ACL is not set
# CONFIG_HUGETLB_PAGE is not set
# CONFIG_CONFIGFS_FS is not set

#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
# CONFIG_JFFS2_SUMMARY is not set
# CONFIG_JFFS2_FS_XATTR is not set
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
CONFIG_JFFS2_ZLIB=y
# CONFIG_JFFS2_LZO is not set
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
CONFIG_CRAMFS=y
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_OMFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
# CONFIG_NFS_V4 is not set
CONFIG_ROOT_NFS=y
# CONFIG_NFSD is not set
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
# CONFIG_SUNRPC_REGISTER_V4 is not set
# CONFIG_RPCSEC_GSS_KRB5 is not set
# CONFIG_RPCSEC_GSS_SPKM3 is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set

#
# Partition Types
#
# CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set
# CONFIG_NLS_CODEPAGE_932 is not set
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set
CONFIG_NLS_ASCII=m
CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=m
# CONFIG_DLM is not set

#
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=1024
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_UNUSED_SYMBOLS is not set
# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set
# CONFIG_DEBUG_KERNEL is not set
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_DEBUG_MEMORY_INIT is not set
CONFIG_FRAME_POINTER=y
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_LATENCYTOP is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y
CONFIG_HAVE_FUNCTION_TRACER=y

#
# Tracers
#
# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_DEBUG_USER is not set

#
# Security options
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
CONFIG_CRYPTO=y

#
# Crypto core or helper
#
# CONFIG_CRYPTO_FIPS is not set
CONFIG_CRYPTO_ALGAPI=m
CONFIG_CRYPTO_ALGAPI2=m
CONFIG_CRYPTO_AEAD2=m
CONFIG_CRYPTO_BLKCIPHER=m
CONFIG_CRYPTO_BLKCIPHER2=m
CONFIG_CRYPTO_HASH2=m
CONFIG_CRYPTO_RNG2=m
CONFIG_CRYPTO_MANAGER=m
CONFIG_CRYPTO_MANAGER2=m
# CONFIG_CRYPTO_GF128MUL is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_CRYPTD is not set
# CONFIG_CRYPTO_AUTHENC is not set
# CONFIG_CRYPTO_TEST is not set
# CONFIG_CRYPTO_CRYPTODEV is not set

#
# Authenticated Encryption with Associated Data
#
# CONFIG_CRYPTO_CCM is not set
# CONFIG_CRYPTO_GCM is not set
# CONFIG_CRYPTO_SEQIV is not set

#
# Block modes
#
# CONFIG_CRYPTO_CBC is not set
# CONFIG_CRYPTO_CTR is not set
# CONFIG_CRYPTO_CTS is not set
CONFIG_CRYPTO_ECB=m
# CONFIG_CRYPTO_LRW is not set
# CONFIG_CRYPTO_PCBC is not set
# CONFIG_CRYPTO_XTS is not set

#
# Hash modes
#
# CONFIG_CRYPTO_HMAC is not set
# CONFIG_CRYPTO_XCBC is not set

#
# Digest
#
# CONFIG_CRYPTO_CRC32C is not set
# CONFIG_CRYPTO_MD4 is not set
# CONFIG_CRYPTO_MD5 is not set
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_RMD128 is not set
# CONFIG_CRYPTO_RMD160 is not set
# CONFIG_CRYPTO_RMD256 is not set
# CONFIG_CRYPTO_RMD320 is not set
CONFIG_CRYPTO_SHA1=m
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_TGR192 is not set
# CONFIG_CRYPTO_WP512 is not set

#
# Ciphers
#
# CONFIG_CRYPTO_AES is not set
# CONFIG_CRYPTO_ANUBIS is not set
CONFIG_CRYPTO_ARC4=m
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_DES is not set
# CONFIG_CRYPTO_FCRYPT is not set
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_SALSA20 is not set
# CONFIG_CRYPTO_SEED is not set
# CONFIG_CRYPTO_SERPENT is not set
# CONFIG_CRYPTO_TEA is not set
# CONFIG_CRYPTO_TWOFISH is not set

#
# Compression
#
# CONFIG_CRYPTO_DEFLATE is not set
# CONFIG_CRYPTO_LZO is not set

#
# Random Number Generation
#
# CONFIG_CRYPTO_ANSI_CPRNG is not set
CONFIG_CRYPTO_HW=y

#
# Library routines
#
CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=m
# CONFIG_CRC16 is not set
# CONFIG_CRC_T10DIF is not set
CONFIG_CRC_ITU_T=y
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_PLIST=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y