Raspberry Pi 2 に3.2インチLCDを載せたいな

# はじめに
Waveshareの3.2インチLCDをRaspberryPi2で動作させるまで。
LCD自体はAmazonで購入。

NOOBS 1.7.0ベースのraspbianで実施。
WiFi経由でSSH接続して設定。

以下のサイトを参考にさせてもらいました。ありがとうございます。
http://tomosoft.jp/design/?p=4856
http://arakan60.mydns.jp/04kousaku/31-0132lcdinst.html

# 各種設定
インストールし終わった時点でファイルシステムが拡張されているようなのでExpand Filesystemはしなかった。

## X11関連の無効化
`$ sudo vi /usr/share/X11/xorg.conf.d/99-fbturbo.conf`

下記の行をコメントアウト。

```lang:/usr/share/X11/xorg.conf.d/99-fbturbo.conf
 #Option “fbdev” “/dev/fb0″
```

## SPIを有効に
`$ sudo raspi-config`
[9 Advanced Options]->[A6 SPI]から。
再起動を求められるので、してしまっていいと思う。

## 再起動
`$ sudo reboot`

## fbtftのインストール（というかファームウェアの更新）
`$ sudo rpi-update`

## 再起動
`$ sudo reboot`

## SPIの確認
```
$ dmesg | grep spi
[    0.000000] Linux version 4.0.7-v7+ (pi@raspi2) (gcc version 4.8.3 20140106 (prerelease) (crosstool-NG linaro-1.13.1-4.8-2014.01 - Linaro GCC 2013.11) ) #1 SMP PREEMPT Sat Jul 11 20:44:05 CEST 2015
[    4.861048] bcm2708_spi 3f204000.spi: DMA channel 2 at address 0xf3007200 with irq 77
[    4.861087] bcm2708_spi 3f204000.spi: DMA channel 4 at address 0xf3007400 with irq 20
[    4.918969] ads7846 spi0.1: touchscreen, irq 497
[    4.919764] input: ADS7846 Touchscreen as /devices/platform/soc/3f204000.spi/spi_master/spi0/spi0.1/input/input0
[    4.925048] bcm2708_spi 3f204000.spi: SPI Controller at 0x3f204000 (irq 80)
[    4.925084] bcm2708_spi 3f204000.spi: SPI Controller running in dma mode
```
なんかタッチパネルのが出てるけど今回は気にしない。

## fbtftのロード
電源が上側に来るようにしたかったので270度回転で。
`$ sudo modprobe fbtft_device name=waveshare32b rotate=270`

## ロードの確認
```
$ dmesg | grep fbtft_device
[   34.169613] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[   34.170509] fbtft_device:  SPI devices registered:
[   34.170529] fbtft_device:      ads7846 spi0.1 1000kHz 8 bits mode=0x00
[   34.170537] fbtft_device:  'fb' Platform devices registered:
[   34.170561] fbtft_device:      soc:fb id=-1 pdata? no
[   34.170719] fbtft_device:  GPIOS used by 'waveshare32b':
[   34.170731] fbtft_device:    'reset' = GPIO27
[   34.170740] fbtft_device:    'dc' = GPIO22
[   34.170747] fbtft_device:  SPI devices registered:
[   34.170758] fbtft_device:      ads7846 spi0.1 1000kHz 8 bits mode=0x00
[   34.170768] fbtft_device:      fb_ili9340 spi0.0 48000kHz 8 bits mode=0x00
```
## GUIが起動しないようにする
`$ sudo raspi-config`
[3 Boot Options] -> [B1 Console]か[B2 Console Autologin]
これをやらないと下のマッピング変更をしてもうまくいかなかった。

## 起動
コンソールのマッピングをどうにかするらしい
`$ con2fbmap 1 1`

うまくいってればこの時点で何かしら表示されるはず。

## 起動時にカーネルモジュールをロードするようにする
参考にしたサイトで説明されていた /etc/modules だけに書くやり方だとうまくいかなかった。
wikiに書いてあるやり方でやってみたら動いた。
https://github.com/notro/fbtft/wiki#install

### /etc/modprobe.d/fbtft.conf を作成
```lang:/etc/modprobe.d/fbtft.conf
options fbtft_device name=waveshare32b rotate=270
```

### /etc/modules-load.d/fbtft.conf を作成
```lang:/modules-load.d/fbtft.conf
spi-bcm2835
fbtft_device
```

### /etc/modules の編集
```lang:/etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

i2c-dev
fbtft_device
```
ファイルの最後に `fbtft_device` を追加。

### /boot/cmdline.txt の編集
```lang:/boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait fbcon=map:10
```
行の末尾に `fbcon=map:10` を追加

# はまったところ
## ドライバーの場所
https://github.com/notro/fbtft/wiki#install
> The FBTFT drivers are now included in the Raspberry Pi Foundation kernel and can be installed with plain `rpi-update`. 

とのことなのでREPO_URIとかは特に指定せずに実行した。

## なぜかcon2fbmapを実行するとpermissionで文句を言われる
sudoで実行すると動くものの、参考にしたサイトでは誰もそんなことしていないので調べた。
どうやらpiユーザーじゃなくて適当なユーザーを作って使っていたせいでvideoグループに所属していなかったのが原因らしい。
https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=6568
hogeグループのhogeユーザーなら
`$ sudo usermod -G video,hoge hoge`
あとあと調べたらこっちのほうが安心とのこと(上記は追記じゃなくて上書きになるらしい)
http://qiita.com/tk1024/items/16e98031b84a31df469b
`$ gpasswd -a hoge video`

## con2fbmap 叩いても表示されないどころか重くなる
GUI立ち上がってるとどうやらだめらしい。
コンソール起動にしたら解決した。
GUI立ち上げたい場合はコマンド叩いてあげるといい。
`$ FRAMEBUFFER=/dev/fb1 startx`

## /etc/modules に書くだけでは動かない
参考にしたサイトなどでは /etc/modules に書くだけで動いたようだが、自分はだめだった。
原因は不明。
OSのバージョンなのか、fbtftのバージョンなのか。謎。

# タッチパネルは？
またの機会に。