[メモ] Raspberry Pi カーネルビルド 環境(Ubuntu on Virtualbox on Windows)


## 概要
- 通常、Windowsメインで使用。 たまに、らずぱいのカーネルビルドしたくなる、という方。
- `Mr. Proper`を[画像検索](https://www.google.com/search?q=mrproper&tbm=isch)すると...
- ... もうちょっとテストしたら、更新します ...

## Vagrantfile (ubuntu/xenial32 : 32bit版使用)

```rb:Vagrantfile
VM_NAME="rpi_kernel_compile32"

### Change here for more memory/cores ###
VM_MEMORY=1024
VM_CORES=2

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial32"
  # config.vm.network "forwarded_port", guest: 80, host: 8080
  # config.vm.network "public_network", bridge 

  config.vm.provider "virtualbox" do |vb|
  #   vb.gui = true
    vb.name = VM_NAME
    vb.cpus = VM_CORES
    vb.memory = VM_MEMORY
  end

  config.vm.provision "shell", inline: <<-SHELL
    echo `cat /proc/uptime | cut -f 1 -d ' '`  apt update
    # # apt cache server 
    # echo 'Acquire::http::Proxy "http://apt-cache-server:3142";' | sudo tee /etc/apt/apt.conf.d/02proxy
    # echo 'Acquire::http::Proxy "http://linux64:3142";' | sudo tee /etc/apt/apt.conf.d/02proxy
    apt-get -q update -q
    echo `cat /proc/uptime | cut -f 1 -d ' '` apt install
    apt-get -q install -q -y build-essential git libncurses5-dev bc
    apt-get -q -y autoremove -q
    apt-get -q -y clean -q
    cd /home/ubuntu/
	echo `cat /proc/uptime | cut -f 1 -d ' '` Preparing: raspberrypi/tools
    [ -d tools/arm-bcm2708 ] || if [ -f /vagrant/raspberrypi-tools.tbz  ]; then tar xf /vagrant/raspberrypi-tools.tbz ; else git clone --depth=1 --quiet https://github.com/raspberrypi/tools ./tools; tar jcf /vagrant/raspberrypi-tools.tbz ./tools; fi
	echo `cat /proc/uptime | cut -f 1 -d ' '` Preparing: raspberrypi/linux
    [ -d linux/kernel      ] || if [ -f /vagrant/raspberrypi-linux.tbz  ]; then tar xf /vagrant/raspberrypi-linux.tbz ; else git clone --depth=1 --quiet https://github.com/raspberrypi/linux ./linux; tar jcf /vagrant/raspberrypi-linux.tbz ./linux; fi
    chown ubuntu.ubuntu -R linux tools
    grep PATH /home/ubuntu/.bashrc | grep arm-bcm2708|| sudo -u ubuntu echo -e "alias b1='KERNEL=kernel  ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make'\n""alias b2='KERNEL=kernel7 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make'\n""alias b1cnf='b1 bcmrpi_defconfig'\n""alias b2cnf='b2 bcm2709_defconfig'\n"PATH=/home/ubuntu/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin:'$PATH' >> /home/ubuntu/.bashrc
	echo `cat /proc/uptime | cut -f 1 -d ' '` Done
  SHELL
end
```

## 環境
- Windows 10 64bit (2コア4スレッド、8GB?メモリ)

## 手順
1. [[メモ] Windowsで、Virtualbox+Vagrant(ヴェイグラント)環境](http://qiita.com/mt08/items/0ffa4059c112379c0c07)より
    - Chocolatey導入
    - Vagrant, Virtualbox関連導入
2. ↑のVagrantfileを適当なフォルダにおき、cmdひらいて、<br>`vagrant up`
3. 待つ
4. ログイン<br>`vagrant ssh`

    ```bash:.bashrcに追加される設定
alias b1='KERNEL=kernel  ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make'
alias b2='KERNEL=kernel7 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make'
alias b1cnf='b1 bcmrpi_defconfig'
alias b2cnf='b2 bcm2709_defconfig'
PATH=/home/ubuntu/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin:$PATH
```
4. カーネルビルド (make zImage modules dtbs
    1. Raspberry Pi 1/ZERO向け

        ```bash:コマンド例
alias b=b1
alias bcnf=b1cnf
jN=4
##
cd
cd linux
# b mrproper # ソースフォルダをきれいにするなら、使用.
bcnf    # .config
b zImage -j${jN} && b modules -j${jN} && b dtbs -j${jN}
```
 
    2. Raspberry Pi 2/3向け
  
        ```bash:コマンド例
alias b=b2
alias bcnf=b2cnf
jN=4
##
cd
cd linux
b mrproper # ソースフォルダをきれいにするなら、使用.
bcnf    # .config
b zImage -j${jN} && b modules -j${jN} && b dtbs -j${jN}
```

... 以下、後ほど更新
5. ファイルをSDカードにコピー




## その他
1. aptキャッシュサーバがあると、よいかと。=> [[メモ] aptのキャッシュサーバ(apt-cacher-ng)](http://qiita.com/mt08/items/c8b8187b1000382d77ae)
2. tools, linuxをgit取得後、tarで固めて、/vagrant に入れてる。2回目以降は、それを展開.