本章では、Armadillo-640 のソフトウェアをカスタマイズする方法などについて説明します。
Device Treeとは、ハードウェア情報を記述したデータ構造体です。ハードウェアの差分をDevice Treeに記述することによって、1つのLinuxカーネルイメージを複数のハードウェアで利用することができるようになります。
Device Treeに対応しているメリットの1つは、ハードウェアの変更に対するソフトウェアの変更が容易になることです。例えば、拡張インターフェース1(CON9)に接続する拡張基板を作成した場合、主にC言語で記述されたLinuxカーネルのソースコードを変更する必要はなく、やりたいことをより直感的に記述できるDTS(Device Tree Source)の変更で対応できます。
ただし、Device Treeは「データ構造体」であるため、ハードウェアの制御方法などの「処理」を記述することができない点に注意してください。Device Treeには、CPUアーキテクチャ、RAMの容量、各種デバイスのベースアドレスや割り込み番号などのハードウェアの構成情報のみが記述されます。
Device Treeのより詳細な情報については、Linuxカーネルのソースコードに含まれているドキュメント(Documentation/devicetree/
)、devicetree.orgで公開されている「Device Tree Specification」を参照してください。
Linuxカーネルのソースコードに含まれている初期出荷状態でのDTS、及び関連するファイルを次に示します。
-
初期出荷状態でのDTS、及び関連するファイル
-
arch/arm/boot/dts/armadillo-640.dts
-
arch/arm/boot/dts/imx6ull.dtsi
-
arch/arm/boot/dts/imx6ul.dtsi
コンフィギュレーションを変更してLinuxカーネルイメージをカスタマイズする方法を説明します。
Linuxカーネルアーカイブの展開
Linuxカーネルのソースコードアーカイブを準備し、Linuxカーネルのソースコードアーカイブを展開します。
[PC ~]$ ls
linux-v4.14-at[version].tar.gz
[PC ~]$ tar xf linux-v4.14-at[version].tar.gz
[PC ~]$ ls
linux-v4.14-at[version] linux-v4.14-at[version].tar.gz
コンフィギュレーション
コンフィギュレーションをします。
[PC ~]$ cd linux-v4.14-at[version]
[PC ~/linux-v4.14-at[version]]$ make ARCH=arm armadillo-640_defconfig
[PC ~/linux-v4.14-at[version]]$ make ARCH=arm menuconfig
カーネルコンフィギュレーションの変更
カーネルコンフィギュレーションを変更後、"Exit"を選択して「Do you wish to save your new kernel configuration ? <ESC><ESC> to continue.」で"Yes"とし、カーネルコンフィギュレーションを確定します。
.config - Linux/arm 4.14-at1 Kernel Configuration
------------------------------------------------------------------------------
----------------- Linux/arm 4.14-at1 Kernel Configuration -----------------
Arrow keys navigate the menu. <Enter> selects submenus ---> (or empty
submenus ----). Highlighted letters are hotkeys. Pressing <Y>
includes, <N> excludes, <M> modularizes features. Press <Esc><Esc> to
exit, <?> for Help, </> for Search. Legend: [*] built-in [ ]
-----------------------------------------------------------------------
General setup --->
[ ] Enable loadable module support ----
[*] Enable the block layer --->
System Type --->
Bus support --->
Kernel Features --->
Boot options --->
CPU Power Management --->
Floating point emulation --->
Userspace binary formats --->
Power management options --->
[*] Networking support --->
Device Drivers --->
Firmware Drivers --->
File systems --->
Kernel hacking --->
Security options --->
-*- Cryptographic API --->
Library routines --->
[ ] Virtualization ----
-----------------------------------------------------------------------
---------------------------------------------------------------------------
<Select> < Exit > < Help > < Save > < Load >
| |
---|
Linux Kernel Configurationメニューで"/"キーを押下すると、カーネルコンフィギュレーションの検索を行うことができます。カーネルコンフィギュレーションのシンボル名(の一部)を入力して"Ok"を選択すると、部分一致するシンボル名を持つカーネルコンフィギュレーションの情報が一覧されます。 |
ビルド
[PC ~/linux-v4.14-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x82000000 uImage
[PC ~/linux-v4.14-at[version]]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
イメージファイルの生成確認
ビルドが終了すると、arch/arm/boot/ディレクトリと、arch/arm/boot/dts/以下にイメージファイル(LinuxカーネルとDTB)が作成されています。
[PC ~/linux-v4.14-at[version]]$ ls arch/arm/boot/uImage
uImage
[PC ~/linux-v4.14-at[version]]$ ls arch/arm/boot/dts/armadillo-640.dtb
armadillo_640.dtb