Edison@Debian(ubilinux)のカーネルビルド on Ubuntu 14.04

偉大なる先達に敬意を表しつつ、この投稿の手順を確認していきたいと思う。
https://communities.intel.com/message/261307
※投稿ではリアルタイムカーネルパッチを当てているが今回はカーネルコンフィグを弄るのみとしたい。

# 目標
ubilinuxで提供されているカーネルは非常にスリム、それはもうほとんどサポートというサポートがごっそりナイ。ので自分でフルフルファットな各種サポート満載のカーネルイメージをビルドして各種デバイス（主にUSB周り）をEdisonに接続したい。

大まかに
* ビルドする
* カーネルを所定の場所に置く
* 再起動
の手順である。
ちなみにDebianの64bitカーネル3.2.0は起動しなかったことを書いておく。

# 用意するもの
* Edison＠Debian(ubilinux)でもビルド自体は可能（/home配下で行う）なので其れより速いマシン、今回はAMD A10 7850Kなマシンを使用。
* メモリも1GB以上の空きががあれば良い模様。
* 1GBぐらいの空き容量。SSDであれば尚良し。
* DebianかUbuntuなどのOS環境、今回はUbuntu14.04＠AMD64。
* SSHできるubilinuxが導入されているEdison

# では実施

所要時間は2時間は覚悟すること。Edisonで行う場合は4時間ぐらいかかる。

## ビルドに必要なパッケージをインストール
次のパッケージを入れる
くれぐれも一度にすまそうとしてはいけない。この3回のインストールを順番に行わないと失敗する。

```lang:console
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install devscripts debhelper dh-kpatches findutils
sudo apt-get install kernel-package libncurses-dev fakeroot zlib1g-dev
sudo apt-get install bc
```

## ビルド会場を用意してカーネルファイルをGET
ビルド会場を設営
`mkdir -p ~/root/src`
そして移動
`cd ~/root/src`
カーネルソースGET
`wget -O - https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.17.tar.bz2 | tar -jxf -`
あとで使うため、フレッシュなママのものをコピーしておく。
`cp -R linux-3.10.17 linux-3.10.17-orig`


## Intelさんが用意したEdisonパッチを当てる
パッチを取得
`wget -O - http://downloadmirror.intel.com/24389/eng/edison-src-rel1-maint-rel1-ww42-14.tgz#_ga=1.225557722.1979370645.1410536481 | tar -zxf -`
実際のビルドディレクトリへ移動
`cd ./linux-3.10.17`
パッチを適用する。
`patch -p1 < ../edison-src/device-software/meta-edison/recipes-kernel/linux/files/upstream_to_edison.patch`
コンフィグファイルをコピー
`cp ../edison-src/device-software/meta-edison/recipes-kernel/linux/files/defconfig .config`
`cp drivers/tty/serial/mfd_trace.h include/trace/`


## kernelコンフィグ
このメニューで64bitサポートが最初に来ているから64bit版カーネルが欲しかったらそこチェックしたらいいんじゃないのか？Intelの手順書にもスクリーンショットがあるし。と思ったら大間違いで、上記のパッチ適用のログを見ればわかるがx86配下のファイルだらけでありどこにも64の文字はない。そうこれは罠であり無視するしかないのだ。
現時点でEdisonに64bit版カーネルを入れる方法を私はまだ知らない。

コンフィグを開く
`make menuconfig`
ここでUSB関連のいろいろなサポートを追加する、WebCamとかDisplayLinkとかとか


## そしてビルド
いらないかもしれないけどとりあえずデバッグを吐かないようにする。
`scripts/config --disable DEBUG_INFO`
クリーン
`make clean`
ビルド！
`make deb-pkg`

終わったら~/root/srcに以下のファイルができているはず

linux-headers-3.10.17-poky-edison_3.10.17-poky-edison-1_i386.deb
linux-image-3.10.17-poky-edison_3.10.17-poky-edison-1_i386.deb
linux-libc-dev_3.10.17-poky-edison-1_i386.deb

## Edison本体にコピー

scpで転送,アドレスは適当に、パーティーションが異なる/home直下に置く。
`cd ~/root/src`
`scp *.deb root@192.168.x.x:/home`

## 配置
元の投稿ではいろいろバックアップをやっているが、最悪焼き直せばいいのでここは気にせずバックアップなど取らずに置き換えることにする。

#### Edisonにsshでログインしてカーネルを置換、再起動する。
元のやつはどっかに置いておく
mv /boot/vmlinuz /root

/bootパーティションをアンマウント、フォーマットで最大限に拡大する。

```lang:console
mkdir /tmp/boot
cp -R /boot/* /tmp/boot
umount /boot
mkfs.vfat /dev/mmcblk0p7
mount /boot
cp -R /tmp/boot/* /boot
```
再マウント後の容量確認
`df -h`

```lang:console
Filesystem       Size  Used Avail Use% Mounted on
rootfs           1.4G  1.1G  245M  82% /
/dev/root        1.4G  1.1G  245M  82% /
devtmpfs         481M     0  481M   0% /dev
tmpfs             97M  308K   96M   1% /run
tmpfs            5.0M     0  5.0M   0% /run/lock
tmpfs            193M     0  193M   0% /run/shm
tmpfs            481M  180K  481M   1% /tmp
/dev/mmcblk0p10  1.6G   15M  1.5G   1% /home
/dev/mmcblk0p7    32M     0   32M   0% /boot
```



ここでインストール

```lang:console
cd /home
dpkg -i *.deb
mv /boot/vmlinuz-3.10.17-poky-edison /boot/vmlinuz
reboot
```

以上で起動する。きっと、きっと大丈夫、きっとだよ！

## 確認
以下のコマンドでコンパイルしたマシンの情報が見れたら置き換わっている。
`dmesg | grep "Linux version" `

※のんきにコンフィグしてビルドしたらWifiが使えなくなってしまった・・

## 失敗して起動しなくなってしまったら・・・
駄目な場合はこちらを参照してください。
http://qiita.com/ryunosinfx@github/items/6d014dc9cfd615ac076e
多分/boot配下は上書きしてくれるので起動するはずです。