宮ヶ瀬湖(神奈川県)


Date/Time: 2014:11:24 13:40:36
Camera: PENTAX
Model: PENTAX K-5 II s
Exporsure Time: 1/800
FNumber: 8.0
Aperture Value: 6.0
Focal Length: 21.0

Close

y2blog » BeagleBone Botic7環境を自分で再構築してみる(その2)

9

29

2019

BeagleBone Botic7環境を自分で再構築してみる(その2)

Robert C. Nelson版BeagleBoneカーネルスクリプトをベースにBotic7関係の処理を追加する


前回の記事で、Miroslav Rudisin(Miero)さんが公開している”Botic7″ のGitHubリポジトリ “https://github.com/miero/linux-dev” を通じて、自分の手元のLinux開発環境で ”Botic7″化した Linuxカーネルを作成する手順を簡単に説明した.


今回は、Robert C. Nelsonさんが公開しているBeagleBoneカーネルに対して、Mieroさんがカーネルを”Botic7″ 化するために追加した部分を中心に、その概要を説明することにする.


Robert C. Nelson版BeagleBoneカーネルのビルド環境では、 シェルスクリプト “build_kernel.sh” を起動するだけで最終的なカーネルの構築までほぼ全自動でやってくれるので、その中身の構成が分からなくても何とかなったが、自分でカスタマイズした環境を構築するには、 “build_kernel.sh” スクリプトやそこから呼び出される一連のスクリプト群が何をやっているのかきちんと把握しなければならない.


これらの一連のスクリプト群の中身を覗いて見ると、その中では相当複雑な処理を行っており、Gitやシェルスクリプトのエクスパートでもなければ直ぐにはその内容を把握できないだろう.スクリプト自体はそれ程複雑ではないのだが、Linuxカーネルの構築という処理内容そのものがとても複雑なので、作業全体をスクリプトの組み合わせで行うにはどうしても複雑性が付き纏うのは仕方が無い.


シェルスクリプト愛好家であれば技巧を駆使したシェルスクリプトを見て心躍るのかもしれないが、私のような普通のスキルの人間にとっては他人が技巧を駆使して作ったシェルスクリプトほど厄介な物はないと言って良いくらいだ.勿論、シェルスクリプトでも分かり易くかつ綺麗なスクリプトは世の中に存在するが、大概は技術者の自己満足的な頭の体操のような物が多い.


最近、IT業界では “Ansible” による自動化が持て囃されているが、これまでのようなシェルスクリプトの呪縛から皆解き放されたいのかもしれない.今後は組み込み系の開発などの場面に於いても”Ansible” による自動化が進んで行くのだろうか...


Botic7の実装方法を探る


GitHubの”Botic7″リポジトリからカーネルのビルド環境を取得すると、”linux-dev” というディレクトリ配下は次のような構成となっている事だろう.



yasuaki@ubuntu18srv:~/OriginalBotic7$ git clone https://github.com/miero/linux-dev.git
Cloning into 'linux-dev'...
remote: Enumerating objects: 36829, done.
remote: Total 36829 (delta 0), reused 0 (delta 0), pack-reused 36829
Receiving objects: 100% (36829/36829), 35.24 MiB | 7.80 MiB/s, done.
Resolving deltas: 100% (23867/23867), done.
yasuaki@ubuntu18srv:~/OriginalBotic7$ cd linux-dev
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev$ ls -la
total 16
drwxr-xr-x 3 yasuaki 501 4096 Sep 28 13:50 .
drwxr-xr-x 3 yasuaki 501 4096 Sep 28 13:50 ..
drwxr-xr-x 8 yasuaki 501 4096 Sep 28 13:50 .git
-rw-r--r-- 1 yasuaki 501   45 Sep 28 13:50 README
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev$ git branch -r
  origin/HEAD -> origin/master
  origin/botic5
  origin/botic7
  origin/botic7-v48
  origin/master
  origin/v48
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev$ git checkout origin/botic7-v48 -b originalBotic7
Branch 'originalBotic7' set up to track remote branch 'botic7-v48' from 'origin'.
Switched to a new branch 'originalBotic7'
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev$ ls -la
total 112
drwxr-xr-x  8 yasuaki 501  4096 Sep 28 13:52 .
drwxr-xr-x  3 yasuaki 501  4096 Sep 28 13:50 ..
drwxr-xr-x  3 yasuaki 501  4096 Sep 28 13:52 3rdparty
-rwxr-xr-x  1 yasuaki 501  5157 Sep 28 13:52 build_deb.sh
-rwxr-xr-x  1 yasuaki 501  9772 Sep 28 13:52 build_kernel.sh
-rwxr-xr-x  1 yasuaki 501  7447 Sep 28 13:52 build_mainline.sh
drwxr-xr-x  8 yasuaki 501  4096 Sep 28 13:52 .git
-rw-r--r--  1 yasuaki 501   226 Sep 28 13:52 .gitignore
-rw-r--r--  1 yasuaki 501  1111 Sep 28 13:52 LICENSE
drwxr-xr-x 18 yasuaki 501  4096 Sep 28 13:52 patches
-rwxr-xr-x  1 yasuaki 501 28187 Sep 28 13:52 patch.sh
-rw-r--r--  1 yasuaki 501  1103 Sep 28 13:52 readme.md
drwxr-xr-x  2 yasuaki 501  4096 Sep 28 13:52 repo_maintenance
-rwxr-xr-x  1 yasuaki 501  2838 Sep 28 13:52 run.sh
drwxr-xr-x  2 yasuaki 501  4096 Sep 28 13:52 scripts
-rw-r--r--  1 yasuaki 501   988 Sep 28 13:52 system.sh.sample
drwxr-xr-x  2 yasuaki 501  4096 Sep 28 13:52 tools
-rw-r--r--  1 yasuaki 501   926 Sep 28 13:52 version.sh
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev$ 

これらのファイルやディレクトリの役割や中身を簡単に説明する.”build_kernel.sh” はカーネルの構築を行うためのフロントエンド(メインスクリプト)で、”build_deb.sh” も同じようにカーネルの構築を行うためのフロントエンドだが、アウトプットが Debianのパッケージ形式 (debファイル)で吐き出すようだ.”build_mainline.sh”については、中身を確認していないので正体は不明.


“paches” ディレクトリが、R. C. Nelsonさんのカスタマイズパッチファイル群と今回の主役である、 “Botic7″化するための一連のパッチファイルが置かれている.”botic”ディレクトリ配下には全部で13個のBotic7パッチファイルが置かれており、Botic用のカーネル構成設定ファイル “.config” のテンプレートとして、”botic_defconfig” という構成設定ファイルが配置されている.実はBotic7関連の設定ファイルはこの2つと パッチ当てスクリプト”patch.sh”に書き加えられた “botic()” という関数モジュールだけだ.



yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev$ cd patches
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev/patches$ ls -la
total 1888
drwxr-xr-x 18 yasuaki 501   4096 Sep 28 13:52 .
drwxr-xr-x  8 yasuaki 501   4096 Sep 28 13:52 ..
-rw-r--r--  1 yasuaki 501  42939 Sep 28 13:52 all.db
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 bbb_overlays
drwxr-xr-x 19 yasuaki 501   4096 Sep 28 13:52 beaglebone
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 botic
-rw-r--r--  1 yasuaki 501 126307 Sep 28 13:52 botic_defconfig
-rw-r--r--  1 yasuaki 501 182685 Sep 28 13:52 debian-armmp
-rw-r--r--  1 yasuaki 501 183816 Sep 28 13:52 debian-armmp-lpae
-rw-r--r--  1 yasuaki 501 180357 Sep 28 13:52 debian-stable-armmp
-rw-r--r--  1 yasuaki 501 163948 Sep 28 13:52 defconfig
-rw-r--r--  1 yasuaki 501 149772 Sep 28 13:52 defconfig-bone
-rw-r--r--  1 yasuaki 501 179482 Sep 28 13:52 defconfig-lpae
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 dts
-rw-r--r--  1 yasuaki 501 131491 Sep 28 13:52 example_imx_v6_v7_defconfig
-rw-r--r--  1 yasuaki 501 119860 Sep 28 13:52 example_omap2plus_defconfig
-rw-r--r--  1 yasuaki 501  85706 Sep 28 13:52 example_sunxi_defconfig
-rw-r--r--  1 yasuaki 501 122365 Sep 28 13:52 example_tegra_defconfig
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 exynos
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 more_fixes
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 packaging
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 pre-packaging
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 pru_rpmsg
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 pru_uio
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 quieter
-rw-r--r--  1 yasuaki 501 166300 Sep 28 13:52 ref_multi_v7_defconfig
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 reverts
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 sunxi
drwxr-xr-x  5 yasuaki 501   4096 Sep 28 13:52 ti
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 udoo
drwxr-xr-x  2 yasuaki 501   4096 Sep 28 13:52 wand
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev/patches$ cd botic
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev/patches/botic$ ls -la
total 136
drwxr-xr-x  2 yasuaki 501  4096 Sep 28 13:52 .
drwxr-xr-x 18 yasuaki 501  4096 Sep 28 13:52 ..
-rw-r--r--  1 yasuaki 501  2612 Sep 28 13:52 0001-ALSA-add-support-for-sampling-rates-up-to-768kHz.patch
-rw-r--r--  1 yasuaki 501   877 Sep 28 13:52 0002-ASoC-new-daifmt-DIT.patch
-rw-r--r--  1 yasuaki 501   885 Sep 28 13:52 0003-ASoC-declare-support-for-DSD-format.patch
-rw-r--r--  1 yasuaki 501  1740 Sep 28 13:52 0004-ASoC-mcasp-support-right-justified-TX-DAI-format.patch
-rw-r--r--  1 yasuaki 501  2299 Sep 28 13:52 0005-ASoC-mcasp-allow-to-change-serializer-cfg.patch
-rw-r--r--  1 yasuaki 501  5731 Sep 28 13:52 0006-ASoC-mcasp-add-support-for-DSD-and-high-sampling.patch
-rw-r--r--  1 yasuaki 501  1339 Sep 28 13:52 0007-ASoC-edma-increase-buffer-size-to-cover-200ms-of-DSD.patch
-rw-r--r--  1 yasuaki 501  5121 Sep 28 13:52 0008-ASoC-mcasp-support-the-DIT-daifmt.patch
-rw-r--r--  1 yasuaki 501  1461 Sep 28 13:52 0009-ASoC-mcasp-disable-unnecessary-pins-for-DIT-DSD-play.patch
-rw-r--r--  1 yasuaki 501  3959 Sep 28 13:52 0010-ASoC-mcasp-add-suport-for-emulated-mute-pin-on-data-.patch
-rw-r--r--  1 yasuaki 501 66468 Sep 28 13:52 0011-botic-card-codec-and-sabre32-codec.patch
-rw-r--r--  1 yasuaki 501  1252 Sep 28 13:52 0012-tps65217-force-low-noise-fixed-frequency.patch
-rw-r--r--  1 yasuaki 501  6930 Sep 28 13:52 0013-pm-shutdown-on-power-button-press-or-power-loss.patch
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev/patches/botic$ cd ..
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev/patches$ cat botic_defconfig
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm 4.8.13 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_ARM_HAS_SG_CHAIN=y
CONFIG_MIGHT_HAVE_PCI=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_HAVE_PROC_CPU=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_ARCH_HAS_BANDGAP=y
CONFIG_FIX_EARLYCON_MEM=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_ARCH_SUPPORTS_UPROBES=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_ARM_PATCH_PHYS_VIRT=y
CONFIG_GENERIC_BUG=y
CONFIG_PGTABLE_LEVELS=2
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_IRQ_WORK=y
CONFIG_BUILDTIME_EXTABLE_SORT=y

#
# General setup
#
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""

  ... 【途中省略 全体で5345行に及ぶ ".config" ファイル】

CONFIG_CORDIC=m
CONFIG_DDR=y
# CONFIG_IRQ_POLL is not set
CONFIG_LIBFDT=y
CONFIG_OID_REGISTRY=y
CONFIG_FONT_SUPPORT=m
CONFIG_FONT_8x16=y
CONFIG_FONT_AUTOSELECT=y
CONFIG_SG_SPLIT=y
CONFIG_SG_POOL=y
CONFIG_ARCH_HAS_SG_CHAIN=y
CONFIG_VIRTUALIZATION=y
# CONFIG_VHOST_NET is not set
# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev/patches$ 

パッチ当て処理用シェルスクリプト “patch.sh” の Botic7関係のパッチ当てを行っている部分を示す.#804 〜 #829 行目までの “botic()” 関数モジュールの定義と、#846行目の”botic()” 関数モジュール呼び出し “botic” が Botic7パッチ当て処理の中心部分だ.Botic7に関するコードの追加や関連コードの修正は全てこの “botic” ディレクトリ配下の13個のパッチファイルが担っている.



      1 #!/bin/sh -e
      2 #
      3 # Copyright (c) 2009-2016 Robert Nelson 
      4 #
      5 # Permission is hereby granted, free of charge, to any person obtaining a copy
      6 # of this software and associated documentation files (the "Software"), to deal
      7 # in the Software without restriction, including without limitation the rights
      8 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      9 # copies of the Software, and to permit persons to whom the Software is
     10 # furnished to do so, subject to the following conditions:
     11 #
     12 # The above copyright notice and this permission notice shall be included in
     13 # all copies or substantial portions of the Software.
     14 #
     15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     16 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     17 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     18 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     19 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     20 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     21 # THE SOFTWARE.
     22 
     23 # Split out, so build_kernel.sh and build_deb.sh can share..
     24 
     25 . ${DIR}/version.sh
     26 if [ -f ${DIR}/system.sh ] ; then
     27         . ${DIR}/system.sh
     28 fi
     29 git_bin=$(which git)
     30 #git hard requirements:
     31 #git: --no-edit
     32 
     33 git="${git_bin} am"
     34 #git_patchset=""
     35 #git_opts
     36 
     37 if [ "${RUN_BISECT}" ] ; then
     38         git="${git_bin} apply"
     39 fi
     40 
     41 echo "Starting patch.sh"
     42 
     43 #merged_in_4_5="enable"
     44 unset merged_in_4_5
     45 #merged_in_4_6="enable"
     46 unset merged_in_4_6
     47 
     48 git_add () {
     49         ${git_bin} add .
     50         ${git_bin} commit -a -m 'testing patchset'
     51 }
     52 
     53 start_cleanup () {
     54         git="${git_bin} am --whitespace=fix"
     55 }

          ...  【途中省略】

    788 
    789 more_fixes () {
    790         echo "dir: more_fixes"
    791         #regenerate="enable"
    792         if [ "x${regenerate}" = "xenable" ] ; then
    793                 start_cleanup
    794         fi
    795 
    796         ${git} "${DIR}/patches/more_fixes/0001-slab-gcc5-fixes.patch"
    797 
    798         if [ "x${regenerate}" = "xenable" ] ; then
    799                 number=1
    800                 cleanup
    801         fi
    802 }
    803 
    804 botic () {
    805         echo "dir: botic"
    806         #regenerate="enable"
    807         if [ "x${regenerate}" = "xenable" ] ; then
    808                 start_cleanup
    809         fi
    810 
    811         ${git} "${DIR}/patches/botic/0001-ALSA-add-support-for-sampling-rates-up-to-768kHz.patch"
    812         ${git} "${DIR}/patches/botic/0002-ASoC-new-daifmt-DIT.patch"
    813         ${git} "${DIR}/patches/botic/0003-ASoC-declare-support-for-DSD-format.patch"
    814         ${git} "${DIR}/patches/botic/0004-ASoC-mcasp-support-right-justified-TX-DAI-format.patch"
    815         ${git} "${DIR}/patches/botic/0005-ASoC-mcasp-allow-to-change-serializer-cfg.patch"
    816         ${git} "${DIR}/patches/botic/0006-ASoC-mcasp-add-support-for-DSD-and-high-sampling.patch"
    817         ${git} "${DIR}/patches/botic/0007-ASoC-edma-increase-buffer-size-to-cover-200ms-of-DSD.patch"
    818         ${git} "${DIR}/patches/botic/0008-ASoC-mcasp-support-the-DIT-daifmt.patch"
    819         ${git} "${DIR}/patches/botic/0009-ASoC-mcasp-disable-unnecessary-pins-for-DIT-DSD-play.patch"
    820         ${git} "${DIR}/patches/botic/0010-ASoC-mcasp-add-suport-for-emulated-mute-pin-on-data-.patch"
    821         ${git} "${DIR}/patches/botic/0011-botic-card-codec-and-sabre32-codec.patch"
    822         ${git} "${DIR}/patches/botic/0012-tps65217-force-low-noise-fixed-frequency.patch"
    823         ${git} "${DIR}/patches/botic/0013-pm-shutdown-on-power-button-press-or-power-loss.patch"
    824 
    825         if [ "x${regenerate}" = "xenable" ] ; then
    826                 number=13
    827                 cleanup
    828         fi
    829 }
    830 
    831 ###
    832 reverts
    833 #fixes
    834 ti
    835 dts
    836 wand
    837 #sunxi
    838 udoo
    839 exynos
    840 pru_uio
    841 pru_rpmsg
    842 bbb_overlays
    843 beaglebone
    844 quieter
    845 more_fixes
    846 botic
    847 
    847 
    848 packaging () {
    849         echo "dir: packaging"
    850         #regenerate="enable"
    851         if [ "x${regenerate}" = "xenable" ] ; then
    852                 cp -v "${DIR}/3rdparty/packaging/builddeb" "${DIR}/KERNEL/scripts/package"
    853                 ${git_bin} commit -a -m 'packaging: sync builddeb changes' -s
    854                 ${git_bin} format-patch -1 -o "${DIR}/patches/packaging"
    855                 exit 2
    856         else
    857                 ${git} "${DIR}/patches/packaging/0001-packaging-sync-builddeb-changes.patch"
    858                 ${git} "${DIR}/patches/packaging/0002-fixup-kernel-headers-target-package.patch"
    859         fi
    860 }
    861 
    862 packaging
    863 echo "patch.sh ran successfully"



カーネル構築関連のスクリプトファイルのカスタマイズ


一連のR. C. Nelsonカーネルスクリプトをもう少し詳しく内容を調べておくことにする.


“version.sh”

カーネルのバージョンやビルド番号などの設定と、クロスコンパイラなどのツールのバージョン、カーネル設定ファイルのテンプレートファイル名などの設定を行う.


      1 #!/bin/sh
      2 #
      3 ARCH=$(uname -m)
      4 
      5 config="botic_defconfig"    <= カーネル設定用テンプレートファイル
      6 
      7 build_prefix="-botic7-rc3" <= カーネルのビルド名に付けるサフィックス
      8 branch_prefix="v"
      9 branch_postfix=".x"
     10 
     11 #arm
     12 KERNEL_ARCH=arm
     13 #toolchain="gcc_linaro_eabi_4_8"
     14 #toolchain="gcc_linaro_eabi_4_9"
     15 #toolchain="gcc_linaro_eabi_5"
     16 #toolchain="gcc_linaro_eabi_6"
     17 #toolchain="gcc_linaro_gnueabi_4_6"
     18 #toolchain="gcc_linaro_gnueabihf_4_7"
     19 #toolchain="gcc_linaro_gnueabihf_4_8"
     20 #toolchain="gcc_linaro_gnueabihf_4_9"
     21 #toolchain="gcc_linaro_gnueabihf_5"
     22 toolchain="gcc_linaro_gnueabihf_6"   <= クロス開発ツールのバージョン指定
     23 #arm64
     24 #KERNEL_ARCH=arm64
     25 #toolchain="gcc_linaro_aarch64_gnu_5"
     26 #toolchain="gcc_linaro_aarch64_gnu_6"
     27 
     28 #Kernel/Build
     29 KERNEL_REL=4.8         <= カーネルのメインバージョン番号
     30 KERNEL_TAG=${KERNEL_REL}.13  <= カーネルのサブバージョン番号
     31 BUILD=${build_prefix}
     32 kernel_rt=".X-rtY"       <= リアルタイムカーネルのビルド番号
     33 
     34 #v4.X-rcX + upto SHA
     35 #prev_KERNEL_SHA="4cea8776571b18db7485930cb422faa739580c8c"
     36 #KERNEL_SHA="3be7988674ab33565700a37b210f502563d932e6"
     37 
     38 #git branch
     39 #BRANCH="${branch_prefix}${KERNEL_REL}${branch_postfix}"
     40 
     41 DISTRO=1
     42 DEBARCH=armhf
     43 #

上記の”version.sh”の内容を書き換えることで、カーネルのバージョンや使用するクロス開発ツールのバージョンなどの組み合わせを変更する事が可能だが、カーネルのメインバージョン番号を V4.8 から V4.9以上に上げてしまうと、関係するカーネルのソースコードの互換性が無くなるため、残念ながら “Botic7” 関連のパッチファイルが適用できなくなってしまう.


”Botic7″がリリースされた当時の Kernel V4.8.13ではなく、カーネルのメインバージョン番号を最っと新しい物にしたい所だが、それを行うには、R. C. Nelson 版のカーネル構築環境自体を新しいバージョンに上げる必要がある.当然ながら”Botic7″ 関連のパッチファイルも自分でその内容を調べて、自分の手作業で関連するソースコードに逐次パッチ当てる作業が必要だ.


“diff”ツールで作成されたパッチファイルの内容は単純なので、人間がその内容を解釈しながらソースコードを改修することはそれ程難しい事では無いが、相当根気の要る作業であることは確かだ.”diff”ツールはとても単純でシンプルなのだが、その分融通が利かないので、後は人間が上手く判断して処理するしかない.


次に示す “version.sh” の内容は、 R. C. nelson版のBeagleBoneカーネル(V4.9 メインラインRealTime版)に、Botic7パッチと lightMPD用のカーネル構成ファイルの組み合わせで、カーネルビルドした際のものである.



#!/bin/sh
#
ARCH=$(uname -m)

#config="omap2plus_defconfig"
config="botic_lmpd_defconfig"

build_prefix="-b7-rt"
branch_prefix="am33x-rt-v"
branch_postfix=".x"

#arm
KERNEL_ARCH=arm
#toolchain="gcc_linaro_eabi_4_8"
#toolchain="gcc_linaro_eabi_4_9"
#toolchain="gcc_linaro_eabi_5"
#toolchain="gcc_linaro_eabi_6"
#toolchain="gcc_linaro_eabi_7"
#toolchain="gcc_linaro_gnueabi_4_6"
#toolchain="gcc_linaro_gnueabihf_4_7"
#toolchain="gcc_linaro_gnueabihf_4_8"
#toolchain="gcc_linaro_gnueabihf_4_9"
#toolchain="gcc_linaro_gnueabihf_5"
#toolchain="gcc_linaro_gnueabihf_6"
#toolchain="gcc_linaro_gnueabihf_7"
toolchain="gcc_arm_gnueabihf_8"

#arm64
#KERNEL_ARCH=arm64
#toolchain="gcc_linaro_aarch64_gnu_5"
#toolchain="gcc_linaro_aarch64_gnu_6"
#toolchain="gcc_linaro_aarch64_gnu_7"
#toolchain="gcc_arm_aarch64_gnu_8"

#Kernel
KERNEL_REL=4.9
KERNEL_TAG=${KERNEL_REL}.178
kernel_rt=".178-rt131"
#Kernel Build
BUILD=${build_prefix}

#v5.X-rcX + upto SHA
#prev_KERNEL_SHA=""
#KERNEL_SHA=""

#git branch
BRANCH="${branch_prefix}${KERNEL_REL}${branch_postfix}"

DISTRO=xross
DEBARCH=armhf
#


“system.sh.sample”

システム側の実行環境設定に関するシェルスクリプト作成用のテンプレートファイルで、この内容を修正した物を “system.sh” というファイル名で同じディレクトリに配置する.環境変数 “CC” にユーザが用意したクロス開発環境が置かれているパスを登録しておくことで、メインスクリプト”build_kernel.sh” の実行中に、外部のクロス開発環境ダウンロードサイトからダウンロードすることなく、ユーザのローカル環境にインストールされているクロス開発環境を利用する事が可能となる.


yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev$ mv system.sh.sample system.sh
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev$ vim system.sh
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev$ cat system.sh
#!/bin/sh
#copy as "system.sh" and tweak for your system

ARCH=$(uname -m)

#ARM Native gcc compiler (running gcc on arm target)
if [ "x${ARCH}" = "xarmv7l" ] ; then
	#Native arm gcc compiler
	CC=
fi

###REQUIRED:

#ARM GCC CROSS Compiler:
#if CC is not set, a known working linaro based gcc compiler will be downloaded and utilized.
#CC=/bin/arm-none-eabi-
#CC=/bin/arm-linux-gnueabi-
#CC=/bin/arm-linux-gnueabihf-

#CC=/usr/local/gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
CC=/usr/local/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-

###OPTIONAL:

###OPTIONAL: LINUX_GIT: specify location of locally cloned git tree.
#
#LINUX_GIT=/home/user/linux-stable/

###OPTIONAL: MMC: (REQUIRED FOR RUNNING: tools/install_kernel.sh)
#Note: This operates on raw disks, NOT PARTITIONS..
#
#WRONG: MMC=/dev/mmcblk0p1
#CORRECT: MMC=/dev/mmcblk0
#
#WRONG: MMC=/dev/sde1
#CORRECT: MMC=/dev/sde
#
MMC=/dev/sdb

###ADVANCED: RUN_BISECT: used with ./scripts/bisect.sh
#
#RUN_BISECT=1

###ADVANCED: AUTO_BUILD: Easier integration with Jenkins/Buildbot/etc..
#
#AUTO_BUILD=1
yasuaki@ubuntu18srv:~/OriginalBotic7/linux-dev$ 

以上、R. C. Nelson版のカーネル構築環境上でBotic7化されたカーネルを実装する方法について概要を説明したが、次回は”Botic7″化の中身についてもう少し詳しく説明する予定だ.BeagleBoneに実装されている TI の Sitarra SoCプロセッサに組み込まれている、”McASP” というシリアル信号処理モジュールが、”Botic7″での I2S信号出力の要なのだが、時間が無く”McASP”のマニュアルに目を通している暇がないので、”Botic7″での I2Sマルチチャネル再生の実現はもう少し先になりそうだ.


“Botic7″のLinuxルートファイルシステム(ディストリビューション)は一般的な Debian Linux(Wheezy)なので、オーディオプレイヤー用途には向かない.電源を切る前にシャットダウンコマンドを投入しなければならないなんて、オーディオ機器としては論外だ.何時でも “電源ブチッ” ができるようでなければどんなに音が良くても使う気にはなれない.


ネットワークオーディオプレイヤーとしては、やはり lightMPD(+Botic Kernel) の組み合わせが使い勝手が良い.今回、 “Botic7” 化されたカーネルの構築が自分で簡単にできるようになったので、以前入手したBeaglBoard X15 によるオーディオプレイヤー作りも行ってみようと思う.X15のCPU性能はBeagleBone Blackの4倍以上と言うことなので、これにBotic化されたRealTimeカーネル、lightMPDの組み合わせでどのような音が再生されるのか楽しみだ.


時間があれば、lightMPDのルートイメージの作成方法や Yocto Projects による組み込み系のLinux開発についてもフォローしてみようと思う.