3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ASUS TinkerBoard: カーネル セルフビルド/Building Kernel Locally on Tinker Board

Last updated at Posted at 2017-06-13

概要/Overview

  • Tinkerboardで、カーネルをセルフビルド
  • Building Kernel Locally on Tinker Board
  • Small patch: to avoid warning of '-Wmisleading-indentation' with GCC6
    (disabled by '-Wno-misleading-indentation')

環境/Environment

  • ASUS TinkerBoard

  • TinkerOS_Debian V1.8 (20170417-tinker-board-linaro-stretch-alip-v1.8.zip)

  • Kernel source code: https://github.com/TinkerBoard/debian_kernel

     linaro@linaro-alip:~/debian_kernel$ git log -n 1
     commit 4431f98d9cd1695c7d28a02ff77f1dad20d4a56b
     Author: andy_chi <andy_chi@asus.com>
     Date:   Mon Apr 17 12:00:22 2017 +0800
    
     	Etherent: disable EEE LED mode
     	
     	Change-Id: I44f1ead2138f716c4af092b0daf7b1d1141c7f0c
     linaro@linaro-alip:~/debian_kernel$ 
    
     # Kernel version (TinkerOS v1.8)
     linaro@linaro-alip:~$ uname -a
     Linux linaro-alip 4.4.16-00006-g4431f98-dirty #1 SMP Mon Apr 17 17:27:25 CST 2017 armv7l GNU/Linux
    

手順/Steps

1. Burn TinkerOS_Debian V1.8 to microSD, and boot
2. パッケージ更新

```bash:Update_packages(Optional??)
sudo apt update && sudo apt upgrade -y && sudo reboot
```

3. 必要なパッケージインストール

```bash:Install_packages_for_kernel_build
sudo apt update && sudo apt install -y git-core build-essential bc libssl-dev device-tree-compiler
```

4. ソース取得

```bash:Kernel_source_code
git clone --depth 1 -b linux4.4-rk3288 https://github.com/TinkerBoard/debian_kernel.git
# Move to source code directory
cd debian_kernel
```

5. Patch (GCC6: avoiding warning of '-Wmisleading-indentation')

```bash:Copy_And_Paste
cat <<EOF | patch -p1
diff --git a/drivers/media/i2c/soc_camera/rockchip/Makefile b/drivers/media/i2c/soc_camera/rockchip/Makefile
index 7933bcd1..2486999a 100755
--- a/drivers/media/i2c/soc_camera/rockchip/Makefile
+++ b/drivers/media/i2c/soc_camera/rockchip/Makefile
@@ -1,2 +1,3 @@
 obj-\$(CONFIG_VIDEO_OV8858) += ov_camera_module.o rk_camera_module.o ov8858_v4l2-i2c-subdev.o
 obj-\$(CONFIG_VIDEO_IMX219) += imx_camera_module.o rk_camera_module.o imx219_v4l2-i2c-subdev.o
+ccflags-y += -Wno-misleading-indentation # GCC6
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bs/Makefile b/drivers/net/wireless/rockchip_wlan/rtl8723bs/Makefile
index 40715655..bd33c700 100644
--- a/drivers/net/wireless/rockchip_wlan/rtl8723bs/Makefile
+++ b/drivers/net/wireless/rockchip_wlan/rtl8723bs/Makefile
@@ -16,6 +16,7 @@ EXTRA_CFLAGS += -Wno-unused
 #EXTRA_CFLAGS += -Wno-uninitialized
 #EXTRA_CFLAGS += -Wno-error=date-time  # Fix compile error on gcc 4.9 and later

+EXTRA_CFLAGS += -Wno-misleading-indentation # GCC6
 EXTRA_CFLAGS += -I\$(src)/include
 EXTRA_CFLAGS += -I\$(src)/hal/phydm
EOF
```

5. Edit Makefile for EXTRAVERSION (Optional)

```Makefile:Makefile(Example)
VERSION = 4
PATCHLEVEL = 4
SUBLEVEL = 16
EXTRAVERSION = mt08      # <--- example
NAME = Blurry Fish Butt

...
...
...
```

6. ビルド

```bash:Build
# .config
make ARCH=arm miniarm-rk3288_defconfig

# zImage
time make ARCH=arm -j6 zImage 2>&1 | tee 1.log

#real 25m12.322s
#user 78m3.870s
#sys 4m43.920s

# modules
time make ARCH=arm -j6 modules 2>&1 | tee 2.log

#real 1m35.393s
#user 4m26.670s
#sys 0m24.790s

# dtbs
time make ARCH=arm dtbs 2>&1 | tee 3.log

#real 0m8.204s
#user 0m3.110s
#sys 0m1.100s
```
6. インストール

```bash:Install
# Modules
sudo make ARCH=arm modules_install

# Backup: old kernel & dtb
sudo mv -v /boot/zImage{,.bak}
sudo mv -v /boot/rk3288-miniarm.dtb{,.bak}

# Copy: new kernel & dtb
sudo cp -v arch/arm/boot/{zImage,dts/rk3288-miniarm.dtb} /boot

```

7. sudo reboot
8. :-)

```shell-session

linaro@linaro-alip:~$ uname -a
Linux linaro-alip 4.4.16mt08-dirty #1 SMP Tue Jun 13 17:47:01 UTC 2017 armv7l GNU/Linux
linaro@linaro-alip:~$



## その他
- diff

	```diff:diff
	diff --git a/drivers/media/i2c/soc_camera/rockchip/Makefile b/drivers/media/i2c/soc_camera/rockchip/Makefile
	index 7933bcd1..2486999a 100755
	--- a/drivers/media/i2c/soc_camera/rockchip/Makefile
	+++ b/drivers/media/i2c/soc_camera/rockchip/Makefile
	@@ -1,2 +1,3 @@
	 obj-$(CONFIG_VIDEO_OV8858) += ov_camera_module.o rk_camera_module.o ov8858_v4l2-i2c-subdev.o
	 obj-$(CONFIG_VIDEO_IMX219) += imx_camera_module.o rk_camera_module.o imx219_v4l2-i2c-subdev.o
	+ccflags-y += -Wno-misleading-indentation # GCC6
	diff --git a/drivers/net/wireless/rockchip_wlan/rtl8723bs/Makefile b/drivers/net/wireless/rockchip_wlan/rtl8723bs/Makefile
	index 40715655..bd33c700 100644
	--- a/drivers/net/wireless/rockchip_wlan/rtl8723bs/Makefile
	+++ b/drivers/net/wireless/rockchip_wlan/rtl8723bs/Makefile
	@@ -16,6 +16,7 @@ EXTRA_CFLAGS += -Wno-unused
	 #EXTRA_CFLAGS += -Wno-uninitialized
	 #EXTRA_CFLAGS += -Wno-error=date-time  # Fix compile error on gcc 4.9 and later
	
	+EXTRA_CFLAGS += -Wno-misleading-indentation # GCC6
	 EXTRA_CFLAGS += -I$(src)/include
	 EXTRA_CFLAGS += -I$(src)/hal/phydm
	```

- gcc version

	```shell-session
	#
	# gcc: included in TinkerOS v1.8
	linaro@linaro-alip:~$ gcc -v
	Using built-in specs.
	COLLECT_GCC=gcc
	COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/6/lto-wrapper
	Target: arm-linux-gnueabihf
	Configured with: ../src/configure -v --with-pkgversion='Debian 6.3.0-12' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --enable-plugin --enable-default-pie --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-armhf/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-armhf --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-armhf --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
	Thread model: posix
	gcc version 6.3.0 20170406 (Debian 6.3.0-12) 

	#
	# After apt upgrade (on Jun-13-2017)
	linaro@linaro-alip:~$ arm-linux-gnueabihf-gcc -v
	Using built-in specs.
	COLLECT_GCC=arm-linux-gnueabihf-gcc
	COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/6/lto-wrapper
	Target: arm-linux-gnueabihf
	Configured with: ../src/configure -v --with-pkgversion='Debian 6.3.0-18' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --enable-plugin --enable-default-pie --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-armhf/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-armhf --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-armhf --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
	Thread model: posix
	gcc version 6.3.0 20170516 (Debian 6.3.0-18) 
	```

- `Vagrantfile` (For Vagrant + Virtualbox)

	```rb
	# Vagrantfile
	# mt08

	VB_NAME="Build-TinkerBoard-debian_kernel"
	VM_MEMORY=8192
	VM_CORES=8

	Vagrant.configure("2") do |config|
		config.vm.box = "ubuntu/xenial64"
		config.ssh.username = 'ubuntu'
		#config.vm.box = "bento/ubuntu-16.04"

		config.vm.provider "virtualbox" do |vb|
			vb.gui    = false 
			vb.name   = VB_NAME
			vb.memory = VM_MEMORY
			vb.cpus   = VM_CORES
		end

		config.vm.provision "shell", inline: <<-SHELL
			echo 'Acquire::http::Proxy "http://linux64:3142";' | tee /etc/apt/apt.conf.d/02proxy

			apt-get update
			apt-get upgrade -y
			apt-get install -y git build-essential bc libssl-dev python gcc-arm-linux-gnueabihf device-tree-compiler
		SHELL

		config.vm.provision "shell", privileged: false, inline: <<-SHELL
			cd ${HOME}
			git clone --depth 1 -b linux4.4-rk3288 https://github.com/TinkerBoard/debian_kernel.git
			cd debian_kernel
			
			# Build Kernel
			make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- miniarm-rk3288_defconfig
			bash -c "time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage  -j10" 2>&1 | tee 1.log
			bash -c "time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules -j10" 2>&1 | tee 2.log
			bash -c "time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs        " 2>&1 | tee 3.log

			# Copy Objects
			cd ${HOME}/debian_kernel
			DIR_INSTALL=rk3288-miniarm-$(date +%s)
			mkdir -p ${DIR_INSTALL}
			make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/tmp/${DIR_INSTALL}  modules_install
			cp -v arch/arm/boot/zImage arch/arm/boot/dts/rk3288-miniarm.dtb /tmp/${DIR_INSTALL}
			tar zcvf /vagrant/${DIR_INSTALL}.tgz /tmp/${DIR_INSTALL}
			rm -rf /tmp/${DIR_INSTALL}
		SHELL
	end
	```

	```shell-session:vagrant-up
	mt08@windows-pc MINGW64 /c/Vagrant/TB-Dev
	$ vagrant destroy -f
	==> default: Destroying VM and associated drives...

	mt08@windows-pc MINGW64 /c/Vagrant/TB-Dev
	$ time vagrant up
	Bringing machine 'default' up with 'virtualbox' provider...
	==> default: Importing base box 'ubuntu/xenial64'...

	...
	...

	==> default: /tmp/rk3288-miniarm-1497400581/zImage
	==> default: /tmp/rk3288-miniarm-1497400581/rk3288-miniarm.dtb

	real    6m42.125s
	user    0m0.000s
	sys     0m0.000s

	mt08@windows-pc MINGW64 /c/Vagrant/TB-Dev
	$ ls -1 ./rk3288-miniarm-*
	./rk3288-miniarm-1497400581.tgz

	mt08@windows-pc MINGW64 /c/Vagrant/TB-Dev
	```
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?