AKI-H8/3069FでuClinuxを動作させる方法(中編)

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2020年3月3日 (火) 02:09時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == AKI-H8ボード/3069Fの動作確認では、H8上で動作するファームウェアを書き込み、マザーボード上のLEDやLCDの動作確認…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

AKI-H8ボード/3069Fの動作確認では、H8上で動作するファームウェアを書き込み、マザーボード上のLEDやLCDの動作確認をした。
ここでは、AKI-H8/3069Fに小型CPUで動作可能なuClinuxを載せ、実際に動作させる。

まず、uCLinuxを載せるには、下図の構成を覚えておく。

AKI-H8 3069F uCLinux 1.jpg


AKI-H8/3069F上でuClinuxが動作して、コマンド入力を行えるシェルが起動したとしても、キーボードやディスプレイは接続できない。
つまり、AKI-H8/3069F単体では入出力等ができないため、必ず、Linux PCが必要になる。
Linux PC上に、AKI-H8/3069F上のuClinuxの起動に必要なカーネル等のファイルを置くことによって、OSの起動を実現できる。

ここでは、以下の問題を解決していく。
この辺りの問題が、組み込み機器の取り扱いを難しくさせている要因であり、幅広い知識が要求される。

  • BIOSに代わるプログラムは何か。
  • カーネルはどこから起動されるのか。
  • HDD / SSDは無いが、ファイルシステムのマウント先はどうするのか。



RedBootの動作確認

Linux PCとAKI-H8/3069FをUSB-シリアル変換ケーブルで接続して、シリアル通信の接続を確認する。
更に、Linux PCとAKI-H8/3069FをLANケーブル(クロスケーブル)で接続する。
そして、下図のようにAKI-H8/3069FのSW1を通常モードにして起動する。

Red Bootは正常に動作している場合、下記のメッセージが表示される。

+**Warning** FLASH configuration checksum error or invalid key
Use 'fconfig -i' to [re]initialize database
DP83902A - eeprom ESA: 00:02:cb:01:86:c2 ←AKI-H8/3069FのMACアドレス
... waiting for BOOTP information
Ethernet eth0: MAC address 00:02:cb:01:86:c2
Can't get BOOTP info for device!
RedBoot(tm) bootstrap and debug environment [ROM]
Non-certified release, version UNKNOWN - built 14:54:02, Dec 21 2006
Platform: Akizuki H8/3068 Network micom (H8/300H)
Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.
RAM: 0x00400000-0x005f4000, [0x00400000-0x005e1000] available
FLASH: 0x00000000 - 0x80000, 8 blocks of 0x00010000 bytes each.
RedBoot>



tftpのインストールと設定

uClinuxのカーネルをロードするためには、Linux PCからAKI-H8/3069FへuCLinuxカーネルを転送しなければならない。
ここでは、接続認証が不要のtftpを使用して転送する。(セキュリティの問題は残る)

tftpのインストール

まず、tftp(クライアント)とtftp-server、xinetdをインストールする。

# CentOS 7
sudo yum install tftp tftp-server* xinetd*

# SUSE
sudp zypper install tftp yast2-tftp-server xinetd*


tftpの設定

インストールの完了後、/etc/xinetd.d/tftpファイルが作成されるので、以下のように編集する。
(クライアントからtftpサーバにファイルをアップロードする場合、disableをnoに設定して、server_argsに-cオプションを追加する)

# /etc/xinetd.d/tftpファイル

service tftp
{
   socket_type = dgram
   protocol    = udp
   wait        = yes
   user        = root
   server      = /usr/sbin/in.tftpd
   server_args	= -c -s /home/ユーザ名/tftpboot
   disable     = no
   per_source  = 11
   cps         = 100 2
   flags       = IPv4
}


上記の設定ファイルでは、初期設定のtftpルートディレクトリは、/tftpbootに設定される。
したがって、tftpサーバを起動する前に作成する必要があるため、以下のコマンドを実行する。

sudo mkdir ~/tftpboot
sudo chmod -R 777 ~/tftpboot


tftpとxinetdを有効にするため、以下のコマンドを実行する。

# tftpとxinetdの起動
sudo systemctl start xinetd && sudo systemctl start tftp

# tftpとxinetdの自動起動
sudo systemctl enable xinetd && sudo systemctl enable tftp


ファイアーウォールのtftpのポート解放とpublicゾーンの登録を行う。

# UDP 69番ポートの解放
sudo firewall-cmd --add-port=69/udp --permanent

# publicゾーンの登録
sudo firewall-cmd --zone=public --add-service=tftp --parmanent

sudo firewall-cmd --reload


Linux PCにCentOSを使用している場合、SELinuxの設定を行う。
初期設定では、SELinuxは変更を受け入れない強制ポリシーを使用しているため、tftpの読み書きを許可する必要がある。
SELinuxに変更を加えるには、/etc/selinux/configファイルを変更して、ポリシーを許容に変更する。
tftpの読み書きを許可する場合、以下のようにsetseboolコマンドを実行する。

sudo setsebool -P tftp_anon_write 1
sudo setsebool -P tftp_home_dir 1


getsebool -a | grep tftp


# SELinuxにおけるtftpの権限(変更前)
tftp_anon_write --> off
tftp_home_dir --> off

# ELinuxにおけるtftpの権限(変更後)
tftp_anon_write --> on
tftp_home_dir --> on


tftpの動作確認

Linux PCとAKI-H8/3069Fは、1対1で接続するので、Linux PCは静的IPアドレスに設定する。(例 : 192.168.1.10)

一般的に、tftpを用いてファイルを送信するには、上記で作成した~/tftpbootディレクトリにファイルを配置して転送する。
ここでは、test.txtファイルを転送する。

echo "The Embedded" > ~/tftpboot/test.txt 


次に、/tmpディレクトリに移動してファイルが正常に転送されるか確認する。

cd /tmp
tftp 192.168.1.10
tftp> get ~/tftpboot/test.txt
tftp> quit


~/tftpbootディレクトリ下に作成したtest.txtファイルが、tftpを通じて、/tmpディレクトリ下に転送されていることが分かる。
もし、転送されない場合は、/etc/xinetd.d/tftpファイルの設定およびtftpの起動時に実行するgetコマンドの文法を確認する。


uClinuxカーネルのロード