読者です 読者をやめる 読者になる 読者になる

S.F. Page

Programming,Music,etc...

シリアル通信でバイナリファイルの転送がうまくいかない - Raspberry Pi 3 + u-boot

u-bootにはloadb,loadx,loadyというコマンドがあってそれぞれでkermit,XMODEM,YMODEMというプロトコルを使用して、PCとシリアルケーブル経由でバイナリファイル転送が行えるとのこと。 PC側はteratermやrloginなどのシリアル通信ができる端末ソフトを用意する。 この環境でファイル転送を試したがteraterm・rloginともファイル転送に失敗した。原因は今のところ不明。

今raspberry pi 3 はWiFiで接続していて、有線LANは接続していない。手元にSW-HUBもないしLANケーブルもない。TFTPを使ってバイナリファイルを受け取れるのは有線LANのみで、WiFiはサポートしていない。なのでとりあえずはシリアル経由でクロスコンパイルしたバイナリを送ることができればと思ったのだが。。

しかしu-bootでWiFiをサポートすることはできないのだろうか。単なるドライバの問題のような気もする。raspbianはWiFiをサポートしているし、u-bootもlinuxベースのようだから、raspbianでWiFiをドライブしているコードを引っこ抜いてu-bootにくっつければ何とかなりそうな気もする。ちょっとソースコードをのぞいてみようかなと思うけど、私には難しいだろうなあ。。

Raspberry Pi 3のベアメタル・プログラミング環境の構築 - 2017/3/5の状況

Raspberry Pi 3で64bitベアメタル・プログラミングをするための環境構築をぼちぼちやっている。

環境構築の状況

JTAGデバッグはソフト・ハードともに不明点も多く、FT232HLボードまで買ったがとりあえず置いておくことにして、lubuntuでクロスコンパイルしたARM64バイナリをu-bootでロードして実行する環境を作ろうとあれこれやってみているところだ。今のところの環境構築図は以下のとおりである。

Raspberry Pi 3
Raspberry Pi 3
lubuntu
lubuntu
windows 10
windows 10
MicroSD
MicroSD
Ethernet
Ethernet
ARM 
バイナリ
[Not supported by viewer]
ARM
ソース
[Not supported by viewer]
クロス
コンパイラ
クロス<div>コンパイラ</div>
Windows
バイナリ
[Not supported by viewer]
Win
ソース
[Not supported by viewer]
クロス
コンパイラ
クロス<div>コンパイラ</div>
ARM 
バイナリ
[Not supported by viewer]
Windows
バイナリ
[Not supported by viewer]
GDB
[Not supported by viewer]
OpenOCD
<div>OpenOCD</div>
USB-JTAG
USB-JTAG
ARM 
バイナリ
[Not supported by viewer]
Ethernet
Ethernet
Ethernet
Ethernet
中断
中断
u-boot
[Not supported by viewer]
OpenOCD
バイナリ構築用
OpenOCD<div>バイナリ構築用</div>
Arm64バイナリ
構築用
Arm64バイナリ<br>構築用
中断
中断
SCP
SCP
TFTP
TFTP
TFTP
TFTP
SCP
SCP

Raspberry Pi 3用のu-bootのビルド

ARM64バイナリを実行させるためにRaspberry Pi 3用のu-bootを下記サイトを参考にしてビルドし、ブート用のSDカードにインストールした。

oyasirazu.blogspot.jp

ほぼ上記サイトの手順通りだが、TFTPDの構築と、boot.scrの作成はやらなかった。 クロス・コンパイルはWindows 10上のubuntu on windowsで行った。ちなみにlubuntuでもビルドできるけど、SCPでWindows 10に持ってくるのが面倒だったので。。ということでu-bootベースでの環境構築ではlubuntuはいらないっぽいので、以下の環境で進めることにしようと思っている。

あと気づいたのはu-bootでtftpを使ってロード・実行するにはRaspberry Pi 3を有線LANでつながなければいけないようだ。wifi経由で可能かは今調べているところであるが、どうもできなさそうだ。

Raspberry Pi 3
Raspberry Pi 3
windows 10
windows 10
MicroSD
MicroSD
Ethernet
Ethernet
ARM 
バイナリ
[Not supported by viewer]
ARM
ソース
[Not supported by viewer]
クロス
コンパイラ
クロス<div>コンパイラ</div>
ARM 
バイナリ
[Not supported by viewer]
u-boot
[Not supported by viewer]
Arm64バイナリ
構築用
Arm64バイナリ<br>構築用
TFTP
TFTP

TFTPサーバーの構築

TFTPサーバーは、ubuntu on windowsで作ってみようと思っていて、以下のサイトの情報を参考にしてtftpd-hpaを今インストールしたところである。

tftpd-hpaを利用したtftpサーバの導入 - devwiki

ubuntu on windows (WLS)でsshdを動かす

lubuntu と windows 10間でファイル転送をするためにwindows 10側でsshdを構築した。 sshd自体はubuntu on windows上で動かすことにした。

動かすにあたっては、下のページあたりを参考にした。

qiita.com

fftest33.blog.fc2.com

ubuntu on windowsに特有な設定としては

  • Windows ファイアウォールの穴あけをする
  • 開発者向けのSSHサービスを落とす
  • ubuntu on windowsを起動時にsshdを起動するようにする設定が必要

である。それ以外はごく普通のsshdの設定でいいようだ。

設定していて気づいた点としては、

  1. hosts.allow/hosts.denyファイルを使ってIP/ポートレベルのアクセス制御が行える(TCP Wrappers?)。
  2. iptablesはubuntu on windowsでは動いていないようだ。

1.、2.ともWindowsファイアーウォールがあるからいらないけど。 ちなみにiptables -Lを実行した結果は以下であった。

sf@computer:/etc/ssh$ sudo iptables -L
iptables v1.6.0: can't initialize iptables table `filter': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

tcp wrappersとiptablesについてはいまだにきちんと理解していない。昔はtcp wrappersだったけど、今はiptablesが主流くらいの知識くらいしかない。 https://www.sfpgmr.net/ も今はubuntuで運用しているけど、iptablesの設定はしたなあ。xinetdなんてものあるんだな。inetdなんかも実際何なのかよくわかっていなかったのだが、下のブログを見て理解できた。

d.hatena.ne.jp

1.なんだけど、TCP Wrappersではなくて、sshd自体がhosts.allow/hosts.denyを読んでいるとのこと。

iptables と hosts.allow、hosts.deny - ふなWiki

実際にはsshdはinetd起動ではなくinitで起動しているので、TCPWrappersの配下にはないとも書いてあった。TCPWrappersなんていうものは今は使われていないんだなぁ。。

それにしてもこのあたりもよくわからんなあ。。