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開発についてもフォローしてみようと思う.