Edited at

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

More than 1 year has passed since last update.


概要/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. パッケージ更新


    Update_packages(Optional??)

    sudo apt update && sudo apt upgrade -y && sudo reboot
    

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


    Install_packages_for_kernel_build

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

    4. ソース取得


    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')


    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(Example)

    VERSION = 4
    
    PATCHLEVEL = 4
    SUBLEVEL = 16
    EXTRAVERSION = mt08 # <--- example
    NAME = Blurry Fish Butt

    ...
    ...
    ...


    6. ビルド


    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. インストール


    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. :-)

    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 --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

    #
    
    # 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)

    # 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


    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