[メモ] ASUS TinkerBoard: カーネル・OSイメージのビルド / ベンチマーク

  • 0
    Like
  • 0
    Comment

    概要

    • TinkerBoardで使えるOSイメージをビルド
      (2017-3-21現在)
      • ここでビルドしたものでは、WifiとBluetoothは使えない
      • ASUSが、TinkerOSとか、カーネルのソースコード・ビルド手順を出してないよね?
        => https://github.com/TinkerBoard/debian_kernel ここにある。(2017-09-26更新... ずっと前から、みんな知ってるよな! 記事更新してなかった)
    • 基本的に [TUTORIAL] Build a Tinker Board development image にそってます。
    • Windowsで、VirtualBox上に、Ubuntu16.04の仮想機を作って、そこでビルド。

    • 作成したイメージは、sshが有効になっていて、ユーザ名: linaro / パスワード: linaroで、ログインできる。

    • 3840x2160での表示(を縮小したもの)....
      起動画面jpg

    環境

    • ASUS TinkerBoard
    • 仮想機ホスト: Windows 10 64bit
      • Vagrant 1.9.2
      • Virtualbox 5.0.32
      • 仮想マシン: Ubuntu 16.04
        • ベースイメージ ubuntu/xenial64 (20170320.0.0) 使用
        • CPU:2コア / RAM: 4GB (お好みにより変更)
        • ソースコードとか生成物を置く、16GBの外部ディスクイメージを作成(/vagrant/disk-ext4.img, /vagrantは Windowsから提供される共有フォルダ)
          sudo mount -t ext4 -o loop /vagrant/disk-ext4.img /mnt/tinker
          にて、マウント。起動ごとにうまくマウントすること.

    手順

    Windowsでの作業

    1. インストールして使えるようにしとく::
      • Vagrant
      • Virtualbox
      • git for Windows
    2. C:\Vagrant\TB-Dev フォルダを作成して、Vagrantfileを作る

      Vagrantfile
      # Vagrantfile
      # mt08
      
      VB_NAME="Build-TinkerOS-MoDoKi"
      VM_MEMORY=4096
      VM_CORES=2
      VM_HOSTNAME="TB-MoDoKi.local"
      
      Vagrant.configure("2") do |config|
          config.vm.box = "ubuntu/xenial64"
          config.ssh.username = 'ubuntu'
      
          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://apt-cache-server: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
              apt-get install -y gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler mtools parted  binfmt-support
              apt-get install -y qemu-user-static
              apt-get install -y python-dbus python-debian python-parted python-yaml python-apt
      
              # python-support for Ubuntu 16.04
              wget http://launchpadlibrarian.net/109052632/python-support_1.0.15_all.deb
              dpkg -i ./python-support_1.0.15_all.deb
              rm -fv ./python-support_1.0.15_all.deb
              apt-get install -f
          SHELL
      end
      
    3. Git Bashをひらいて、

      1. 仮想機起動:
        vagrant up
      2. ... 返って来るまで、待つ ...
      3. 16GBのファイル(disk-ext4.img)を作る
        fsutil file createnew disk-ext4.img 17179869184
      4. sshログイン
        vagrant ssh

    Ubuntuでの作業

    1. ファイルの確認:
      ls -l /vagrant/disk-ext4.img
    2. ext4でフォーマット
      mkfs.ext4 /vagrant/disk-ext4.img
    3. マウントして、作業フォルダ作成・移動

      sudo mkdir /mnt/tinker
      sudo mount -t ext4 -o loop /vagrant/disk-ext4.img /mnt/tinker/
      ls -l /mnt/tinker  #確認
      cd /mnt/tinker     #移動
      sudo mkdir tinkeroscustom
      sudo chmod 777 tinkeroscustom
      sudo chown ubuntu.ubuntu tinkeroscustom
      cd tinkeroscustom
      
    4. ソースコード・スクリプトなど取得

      結構、時間かかるよ
      cd /mnt/tinker/tinkeroscustom
      git clone https://github.com/rockchip-linux/kernel.git
      git clone https://github.com/rockchip-linux/u-boot.git
      git clone https://github.com/rockchip-linux/rk-rootfs-build.git
      git clone https://github.com/rockchip-linux/build.git
      
    5. ビルド

      1. uboot:
        build/mk-uboot.sh miniarm

        参考
        real    0m32.818s
        user    0m26.388s
        sys     0m2.136s
        
      2. rootfsイメージ作成

        cd rk-rootfs-build/
        # 必要なパッケージ導入
        sudo dpkg -i ubuntu-build-service/packages/*
        sudo apt-get install -f
        
        # ビルド
        TARGET=desktop ARCH=armhf ./mk-base-debian.
            #参考time
            #real    25m41.317s
            #user    15m4.508s
            #sys     0m56.804s
        
        ARCH=armhf ./mk-rootfs.sh
            #参考time
            #real    3m5.331s
            #user    2m23.524s
            #sys     0m9.888s
        
        ./mk-image.sh
            #参考time
            #real    0m43.335s
            #user    0m0.332s
            #sys     0m2.840s
        
      3. カーネルビルド

        cd /mnt/tinker/tinkeroscustom
        build/mk-kernel.sh miniarm
            #参考time
            #real    8m38.834s
            #user    14m12.372s
            #sys     1m20.440s
        
    6. 仕上げ

      1. rk3288の編集: vi build/extlinux/rk3288.conf
        root=/dev/mmcblk2p7root=/dev/mmcblk0p7

        こんな感じ/mnt/tinker/tinkeroscustombuild/extlinux/rk3288.conf
        label kernel-4.4
            kernel /zImage
            fdt /rk3288-miniarm.dtb
            append  earlyprintk console=tty1 console=ttyS2,115200n8 rw root=/dev/mmcblk0p7 rootfstype=ext4 init=/sbin/init
        
      2. sdイメージ作成

        build/mk-image.sh -c miniarm -t boot
        build/mk-image.sh -c miniarm -t system -s 4000 -r rk-rootfs-build/linaro-rootfs.img
        
      3. out/system.img

        system.imgをSDにやく
        ubuntu@ubuntu-xenial:/mnt/tinker/tinkeroscustom$ ls -l ./out/system.img
        -rw-rw-r-- 1 ubuntu ubuntu 1974607872 Mar 21 17:20 ./out/system.img
        
    7. Windows側へコピー:
      cp out/system.img /vagrant/
      => Windowsから、いつものツールで、SDに焼く

    ベンチ

    byte-unixbench

    ```bash:byte-unixbench導入・実行
    sudo apt-get install git-core build-essential
    git clone https://github.com/kdlucas/byte-unixbench.git
    cd byte-unixbench/UnixBench
    ./Run
    ```
    
    ```shell-session:結果...1時間くらいかかたのか... 
    linaro@linaro-alip:~/byte-unixbench/UnixBench$ ./Run
    gcc -o pgms/arithoh -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME -Darithoh src/arith.c 
    gcc -o pgms/register -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME -Ddatum='register int' src/arith.c 
    gcc -o pgms/short -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME -Ddatum=short src/arith.c 
    gcc -o pgms/int -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME -Ddatum=int src/arith.c 
    gcc -o pgms/long -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME -Ddatum=long src/arith.c 
    gcc -o pgms/float -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME -Ddatum=float src/arith.c 
    gcc -o pgms/double -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME -Ddatum=double src/arith.c 
    gcc -o pgms/hanoi -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME src/hanoi.c 
    gcc -o pgms/syscall -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME src/syscall.c 
    gcc -o pgms/context1 -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME src/context1.c 
    gcc -o pgms/pipe -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME src/pipe.c 
    gcc -o pgms/spawn -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME src/spawn.c 
    gcc -o pgms/execl -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME src/execl.c 
    gcc -o pgms/dhry2 -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME -DHZ= ./src/dhry_1.c ./src/dhry_2.c
    gcc -o pgms/dhry2reg -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME -DHZ= -DREG=register ./src/dhry_1.c ./src/dhry_2.c
    gcc -o pgms/looper -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME src/looper.c 
    gcc -o pgms/fstime -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME src/fstime.c 
    gcc -o pgms/whetstone-double -Wall -pedantic -O3 -ffast-math -march=native -mtune=native -I ./src -DTIME -DDP -DGTODay -DUNIXBENCH src/whets.c -lm
    make all
    make[1]: Entering directory '/home/linaro/byte-unixbench/UnixBench'
    make distr
    make[2]: Entering directory '/home/linaro/byte-unixbench/UnixBench'
    Checking distribution of files
    ./pgms  exists
    ./src  exists
    ./testdir  exists
    ./tmp  exists
    ./results  exists
    make[2]: Leaving directory '/home/linaro/byte-unixbench/UnixBench'
    make programs
    make[2]: Entering directory '/home/linaro/byte-unixbench/UnixBench'
    make[2]: Nothing to be done for 'programs'.
    make[2]: Leaving directory '/home/linaro/byte-unixbench/UnixBench'
    make[1]: Leaving directory '/home/linaro/byte-unixbench/UnixBench'
    locale: Cannot set LC_CTYPE to default locale: No such file or directory
    locale: Cannot set LC_MESSAGES to default locale: No such file or directory
    locale: Cannot set LC_ALL to default locale: No such file or directory
    locale: Cannot set LC_CTYPE to default locale: No such file or directory
    locale: Cannot set LC_MESSAGES to default locale: No such file or directory
    locale: Cannot set LC_ALL to default locale: No such file or directory
    sh: 1: 3dinfo: not found
    
       #    #  #    #  #  #    #          #####   ######  #    #   ####   #    #
       #    #  ##   #  #   #  #           #    #  #       ##   #  #    #  #    #
       #    #  # #  #  #    ##            #####   #####   # #  #  #       ######
       #    #  #  # #  #    ##            #    #  #       #  # #  #       #    #
       #    #  #   ##  #   #  #           #    #  #       #   ##  #    #  #    #
        ####   #    #  #  #    #          #####   ######  #    #   ####   #    #
    
       Version 5.1.3                      Based on the Byte Magazine Unix Benchmark
    
       Multi-CPU version                  Version 5 revisions by Ian Smith,
                                          Sunnyvale, CA, USA
       January 13, 2011                   johantheghost at yahoo period com
    
    Use of uninitialized value in printf at ./Run line 1438.
    Use of uninitialized value in printf at ./Run line 1439.
    Use of uninitialized value in printf at ./Run line 1438.
    Use of uninitialized value in printf at ./Run line 1439.
    Use of uninitialized value in printf at ./Run line 1438.
    Use of uninitialized value in printf at ./Run line 1439.
    Use of uninitialized value in printf at ./Run line 1438.
    Use of uninitialized value in printf at ./Run line 1439.
    Use of uninitialized value in printf at ./Run line 1648.
    Use of uninitialized value in printf at ./Run line 1649.
    Use of uninitialized value in printf at ./Run line 1648.
    Use of uninitialized value in printf at ./Run line 1649.
    Use of uninitialized value in printf at ./Run line 1648.
    Use of uninitialized value in printf at ./Run line 1649.
    Use of uninitialized value in printf at ./Run line 1648.
    Use of uninitialized value in printf at ./Run line 1649.
    
    1 x Dhrystone 2 using register variables  1 2 3 4 5 6 7 8 9 10
    
    1 x Double-Precision Whetstone  1 2 3 4 5 6 7 8 9 10
    
    1 x Execl Throughput  1 2 3
    
    1 x File Copy 1024 bufsize 2000 maxblocks  1 2 3
    
    1 x File Copy 256 bufsize 500 maxblocks  1 2 3
    
    1 x File Copy 4096 bufsize 8000 maxblocks  1 2 3
    
    1 x Pipe Throughput  1 2 3 4 5 6 7 8 9 10
    
    1 x Pipe-based Context Switching  1 2 3 4 5 6 7 8 9 10
    
    1 x Process Creation  1 2 3
    
    1 x System Call Overhead  1 2 3 4 5 6 7 8 9 10
    
    1 x Shell Scripts (1 concurrent)  1 2 3
    
    1 x Shell Scripts (8 concurrent)  1 2 3
    
    4 x Dhrystone 2 using register variables  1 2 3 4 5 6 7 8 9 10
    
    4 x Double-Precision Whetstone  1 2 3 4 5 6 7 8 9 10
    
    4 x Execl Throughput  1 2 3
    
    4 x File Copy 1024 bufsize 2000 maxblocks  1 2 3
    
    4 x File Copy 256 bufsize 500 maxblocks  1 2 3
    
    4 x File Copy 4096 bufsize 8000 maxblocks  1 2 3
    
    4 x Pipe Throughput  1 2 3 4 5 6 7 8 9 10
    
    4 x Pipe-based Context Switching  1 2 3 4 5 6 7 8 9 10
    
    4 x Process Creation  1 2 3
    
    4 x System Call Overhead  1 2 3 4 5 6 7 8 9 10
    
    4 x Shell Scripts (1 concurrent)  1 2 3
    
    4 x Shell Scripts (8 concurrent)  1 2 3
    
    ========================================================================
       BYTE UNIX Benchmarks (Version 5.1.3)
    
       System: linaro-alip: GNU/Linux
       OS: GNU/Linux -- 4.4.52 -- #1 SMP Tue Mar 21 17:17:30 UTC 2017
       Machine: armv7l (unknown)
       Language: en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968")
       CPU 0: ARMv7 Processor rev 1 (v7l) (0.0 bogomips)
    
       CPU 1: ARMv7 Processor rev 1 (v7l) (0.0 bogomips)
    
       CPU 2: ARMv7 Processor rev 1 (v7l) (0.0 bogomips)
    
       CPU 3: ARMv7 Processor rev 1 (v7l) (0.0 bogomips)
    
       19:31:01 up 6 min,  3 users,  load average: 0.66, 0.34, 0.16; runlevel Mar
    
    ------------------------------------------------------------------------
    Benchmark Run: Tue Mar 21 2017 19:31:01 - 19:59:16
    4 CPUs in system; running 1 parallel copy of tests
    
    Dhrystone 2 using register variables       10094986.0 lps   (10.0 s, 7 samples)
    Double-Precision Whetstone                     1494.8 MWIPS (10.1 s, 7 samples)
    Execl Throughput                                974.9 lps   (29.9 s, 2 samples)
    File Copy 1024 bufsize 2000 maxblocks        173252.4 KBps  (30.0 s, 2 samples)
    File Copy 256 bufsize 500 maxblocks           57547.3 KBps  (30.0 s, 2 samples)
    File Copy 4096 bufsize 8000 maxblocks        421426.1 KBps  (30.0 s, 2 samples)
    Pipe Throughput                              362544.6 lps   (10.0 s, 7 samples)
    Pipe-based Context Switching                  48032.5 lps   (10.0 s, 7 samples)
    Process Creation                                369.6 lps   (30.0 s, 2 samples)
    Shell Scripts (1 concurrent)                   1352.4 lpm   (60.0 s, 2 samples)
    Shell Scripts (8 concurrent)                   1020.5 lpm   (60.1 s, 2 samples)
    System Call Overhead                         783442.5 lps   (10.0 s, 7 samples)
    
    System Benchmarks Index Values               BASELINE       RESULT    INDEX
    Dhrystone 2 using register variables         116700.0   10094986.0    865.0
    Double-Precision Whetstone                       55.0       1494.8    271.8
    Execl Throughput                                 43.0        974.9    226.7
    File Copy 1024 bufsize 2000 maxblocks          3960.0     173252.4    437.5
    File Copy 256 bufsize 500 maxblocks            1655.0      57547.3    347.7
    File Copy 4096 bufsize 8000 maxblocks          5800.0     421426.1    726.6
    Pipe Throughput                               12440.0     362544.6    291.4
    Pipe-based Context Switching                   4000.0      48032.5    120.1
    Process Creation                                126.0        369.6     29.3
    Shell Scripts (1 concurrent)                     42.4       1352.4    319.0
    Shell Scripts (8 concurrent)                      6.0       1020.5   1700.9
    System Call Overhead                          15000.0     783442.5    522.3
                                                                       ========
    System Benchmarks Index Score                                         330.7
    
    ------------------------------------------------------------------------
    Benchmark Run: Tue Mar 21 2017 19:59:16 - 20:27:43
    4 CPUs in system; running 4 parallel copies of tests
    
    Dhrystone 2 using register variables       30422699.0 lps   (10.0 s, 7 samples)
    Double-Precision Whetstone                     5071.9 MWIPS (10.1 s, 7 samples)
    Execl Throughput                               4141.1 lps   (29.9 s, 2 samples)
    File Copy 1024 bufsize 2000 maxblocks        218831.1 KBps  (30.0 s, 2 samples)
    File Copy 256 bufsize 500 maxblocks           62352.0 KBps  (30.0 s, 2 samples)
    File Copy 4096 bufsize 8000 maxblocks        683966.7 KBps  (30.0 s, 2 samples)
    Pipe Throughput                             1253660.1 lps   (10.0 s, 7 samples)
    Pipe-based Context Switching                 148544.1 lps   (10.0 s, 7 samples)
    Process Creation                               8500.8 lps   (30.0 s, 2 samples)
    Shell Scripts (1 concurrent)                   7484.8 lpm   (60.0 s, 2 samples)
    Shell Scripts (8 concurrent)                   1025.5 lpm   (60.1 s, 2 samples)
    System Call Overhead                        2394917.0 lps   (10.0 s, 7 samples)
    
    System Benchmarks Index Values               BASELINE       RESULT    INDEX
    Dhrystone 2 using register variables         116700.0   30422699.0   2606.9
    Double-Precision Whetstone                       55.0       5071.9    922.2
    Execl Throughput                                 43.0       4141.1    963.0
    File Copy 1024 bufsize 2000 maxblocks          3960.0     218831.1    552.6
    File Copy 256 bufsize 500 maxblocks            1655.0      62352.0    376.7
    File Copy 4096 bufsize 8000 maxblocks          5800.0     683966.7   1179.3
    Pipe Throughput                               12440.0    1253660.1   1007.8
    Pipe-based Context Switching                   4000.0     148544.1    371.4
    Process Creation                                126.0       8500.8    674.7
    Shell Scripts (1 concurrent)                     42.4       7484.8   1765.3
    Shell Scripts (8 concurrent)                      6.0       1025.5   1709.2
    System Call Overhead                          15000.0    2394917.0   1596.6
                                                                       ========
    System Benchmarks Index Score                                         969.7
    
    linaro@linaro-alip:~/byte-unixbench/UnixBench$ 
    ```
    

    その他

    • ビルド後のディスクの使用量はこんな感じ。

      ubuntu@ubuntu-xenial:/mnt/tinker/tinkeroscustom$ pwd
      /mnt/tinker/tinkeroscustom
      ubuntu@ubuntu-xenial:/mnt/tinker/tinkeroscustom$ sudo du -sh *
      1.3M    build
      4.4G    kernel
      1.9G    out
      5.5G    rk-rootfs-build
      269M    u-boot
      ubuntu@ubuntu-xenial:/mnt/tinker/tinkeroscustom$ df -h .
      Filesystem      Size  Used Avail Use% Mounted on
      /dev/loop0       16G   12G  2.9G  81% /mnt/tinker
      ubuntu@ubuntu-xenial:/mnt/tinker/tinkeroscustom$
      
    • 起動ごとに、EthernetのMACアドレスが変わる. (ので、DHCPで取得されるIPアドレスも変わるかと..)

    • まだ、シロウトには、使えるものでないな...