Linuxでシリアル通信 - Ubuntu+minicom

眺めているうちに、いろいろ気づいてくる
You can observe a lot just by watching.
ジョセフ・マーフィー

組み込み系では、ターゲット端末にシリアル接続してコンソール経由で、ログとったり、デバッグしたり、あるいは設定したりということがよくあります。その時必要になるのが、シリアル接続用の端末プログラムです。WindowsだとTeraTerm、Linuxだとやっぱりminicomが定番でしょうか。Linuxでは、Qt4使ったcutecomも試してみましたが、個人的にはボタンがごちゃごちゃしてイマイチだったので、結局minicomに戻りました。

ということで、今回は、Linux(Ubuntu 14.04)のシリアル通信端末としてminicomを設定した時のメモです。以下記事を参考にさせて頂きました。
(参考)Ubuntuでminicom起動すると/dev/ttyUSB0のパーミッションがないと言われる

minicomのインストール

これはaptでinstallするだけ。
$ sudo apt-get install minicom

但し、残念ながら、これだけだと、デバイスファイルのパーミッション設定で弾かれて、エラーになります。
$ sudo minicom --device /dev/ttyUSB0
minicom: cannot open /dev/ttyUSB0: No such file or directory
No such file or directoryではなく、Permission deniedの場合もあるみたいです。

デバイスファイル(/dev/ttyUSB0)のパーミッション設定

ということで、ttyデバイスのパーミッション設定を行います。
最近は、RS232C端子がついているPCもなくなってきたので、USBシリアルが使うことがほとんどですね。なので、ここでも対応するデバイスファイルは/dev/ttyUSB0という前提で話を進めます。

まずは、/dev/ttyUSB0を使うためにユーザー(例.dms)をdialoutに追加します。
$ sudo adduser <ユーザー名> dialout

次に、/dev/ttyUSB0のパーミッション変更のためudevの設定を変更します。単純にchmodで直接パーミッション変更もできますが、USBシリアルの場合hotplugなので、抜き差しするたびに設定しないといけないことになります。
具体的には、ttyファイルの定義行に、MODE="0666"を追加しています。
$ sudo vi /lib/udev/rules.d/50-udev-default.rules
KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*",  GROUP="dialout", MODE="0666"

ちなみに、udevルールの書き方は以下あたりが参考になりそうです。
udev の設定をカスタマイズする - いますぐ実践! Linuxシステム管理

minicomの設定

これで、minicomで/dev/ttyUSB0にアクセスできるようになったはずなのでminicomを設定します。
minicom -sで設定起動しますので、Serial Deviceに/dev/ttyUSB0に変更します。 なお、default設定に保存する場合は、root権限がいるので、その場合はsudoつけて下さい。また、LANGが日本語だと表示が崩れるので、LANG=Cで起動した方がいいです。
$ sudo LANG=c minicom -s

ログの自動保存

シリアル通信を使う目的がログ取得なんかの場合、常にログはファイル保存しておきたいことがあると思います。minicomの起動オプションでログの保存ファイル名が指定できるので、常に日付ファイル名でログ保存するように設定しておくと、ログの取り忘れもなく便利です。
先のLANG=C設定とあわせて、以下のようなaliasを.bashrcあたりで設定しておくと便利です
(個人的に想い出深いscript)。
$ vi ~/.bashrc
alias minicom="mkdir -p ~/minilog ; LANG=C minicom -C ~/minilog/`date +%y%m%d_%H%M%S`.log"

これで、~/minilog以下に、ログが自動保存されるようになります。本当は、timestampもONにしたいのですが、これはコマンドラインからはできないみたいです。必要ならminicomのソースコード変更するしかないですね。
なお、ログ取得し忘れてもう一回、というのはよくある光景なので、minicomにかぎらず、WindowsでTeraTermという時にもぜひやっておいた方がよい設定です。(参考: Tera Termログ取得-自動でログの取得を開始する設定)。「ログが残っていれば。。。」ということはよくある光景ですので、開発プロジェクトでログ取得目的で使う場合は必須にしてもいい設定ですね。

487311585X
【関連記事】
【関連書籍】

Linuxで簡易ネットワーク解析 - bridge, tc, netem

ロンドン橋がおちる おちる おちる
ロンドン橋がおちる さあどうしましょう
『London Bridge Is Falling Down』 - 高田三九三訳詞・イギリス民謡

Linuxを使ってパケットキャプチャや、パケットロスや通信遅延といった通信環境のシミュレーションを簡易的に実施するという話です。

本格的な評価のための通信レミュレーションとなると、専用の機材を使わないと難しいこともありますが、簡易的な確認であれば、ノートPCに入れたLinuxだけでできるようにしておくと、特別な機材準備もいらないので、結構便利だったりします。メモもかねて残しておきます。

やりたいこと

  • 有線ネットワーク上のパケットキャプチャ
  • 通信の遅延や瞬断、パケットロスのレミュレーション

準備


パケットキャプチャ用の接続と設定

パケットキャプチャのソフトの方は、Wiresharkやtcpdumpを使えばいいんですが、問題は接続方法。最近は安くてコンパクトやミラーリング対応のスイッチングハブ(以下ものもとか)もあるので、それを使うというのが基本的な方法です
実際、ものさえあればそれが一番手間いらずですが、あとで説明するネットワークエミュレーションもあわせて実施できるようにするため、ここではブリッジを作成した接続方法を説明します。

USB-Etherの接続

Linuxをブリッジにするために、まずUSB etherを2本USBポートに差します。挿した直後は、ホストOSの方で認識されてしまうので、virtualbox側で認識させます。何も問題なければ、ゲストOS側にeth3, eth4で認識されます。ifconfigで見えているか確認しましょう。
USB etherを2個さす理由は、bridgeの両端用です。通信キャプチャしたい機器と機器の間に準備したPCが挟まるような形でLANケーブルを接続します。

例) 機器Aと機器Bの通信をキャプチャしたい場合
 [元の接続]
 (機器A) ----- (ハブ等) ---- (機器B)

 [接続変更後]
 (機器A) ----- (ハブ等) --- [(USB Ether1) 解析用PC (USB Ether2)] ---- (機器B)


内蔵のetherポートやホストOSとの通信用の仮想ドライバを片方側に割り当ててもいいのですが、ここは独立性が高くなるよう専用ポートを用意するようにしています。これだと、既存のネットワークとの接続を維持したまま、ターゲットのネットワークを見れるというメリットもあります。

bridgeの設定

USB etherが認識できたら、これらを両端としたブリッジを構成します。ブリッジの作成は、brctlコマンドで行います。brctlはbridge-utilsのパッケージに含まれますので、入っていない場合はインストールしましょう。
先ほどのUSB etherがeth3, eth4とすると、以下一連のコマンドでeth3とeth4を中継するbridgeデバイスが作成できます。

brctl addbr br0
brctl addif br0 eth3
brctl addif br0 eth4
ifconfig eth3 0.0.0.0 up
ifconfig eth4 0.0.0.0 up
ifconfig br0 0.0.0.0 up

bridgeデバイスの状態は、brctl show br0で確認できます。
うまくいっていれば、これで通信がbridgeされているはずです。 試しに、br0を通るパケットをtcpdumpやwiresharkで見てみましょう。
tcpdump -i br0
機器Aから機器Bへのパケットが見えていればOKです。

大抵は、これでOKですが、マルチキャストパケットの場合、IGMP snoopingのために通信が中継されないことがあります。とりあえず全キャプチャしたいという時には、混乱のもとになるので、IGMP snooping機能は無効にしておいた方が安全かと思います。
bridge-utilsはまだ対応していないので、/sys/devices/virtual/net/brN/bridge以下のファイルを変更することで、設定を変更します。multicast_snoopingの内容を1から0に変更します。
echo 0 > /sys/devices/virtual/net/br0/bridge/multicast_snooping

その他、Linux bridgeの詳しい内容については、以下が参考になります。


通信環境のエミュレーション

パケットロスや、通信速度といったにはnetem (tcコマンド)を使います。
先の手順で機器Aと機器Bの通信は全て解析用PCがブリッジしているので、tcコマンドで中継しているデバイス (br0、又は、eth3やeth4)に設定することで、機器Aと機器B間の通信に対する遅延やエラーをエミュレートできます。

4797373512 eth0に100ms遅延
tc qdisc add dev eth0 root netem delay 100ms

eth0を100ms±10ms(ランダム)の遅延 (先にaddしたものを変更)
tc qdisc change dev eth0 root netem delay 100ms 10ms

パケットロス率を0.1%に変更
 tc qdisc change dev eth0 root netem loss 0.1%

bitエラー率を0.1%に変更 (ランダムなオフセットに対して1bit error)
tc qdisc change dev eth0 root netem corrupt 0.1% 

パケット重複 (1%)
 tc qdisc change dev eth0 root netem duplicate 1%

パケットリオーダリング (5パケット毎に10ms遅延して送信)
tc qdisc change dev eth0 root netem gap 5 delay 10ms

設定したフィルタを削除
tc qdisc change dev eth0 root

その他、netem, tcコマンドの詳細は、以下が参考になります。

警察の初動捜査と同じで、不具合や問題の解析も何か起こった時にすぐ解析できるかどうかは、結果や経過を大きく左右します。簡易的であっても、手軽に解析できる環境をもっておくというのはいざという時に強い味方になります。

4897977967
【関連書籍】
ルーター自作でわかるパケットの流れ 小俣 光之
Linuxネットワークプログラミングバイブル 小俣 光之 種田 元樹
実践 パケット解析 ―Wiresharkを使ったトラブルシューティング Chris Sanders 園田 道夫
パケットキャプチャ入門 第3版 (LANアナライザWireshark活用術) 竹下 恵
パケットキャプチャ実践技術―Wiresharkによるパケット解析 応用編 竹下 恵

Ubuntu12.04でatftpdを使う時の設定

僕はつい見えもしないものに頼って逃げる
君はすぐ形で示して欲しいとごねる
Mr. Children - NOT FOUND

開発環境用のUbuntu12.04上でatftpd(Advanced TFTP server)を動そうとした時に、少しハマったのでそのメモです。

まず、atftpdはaptitudeでinstallしておきます。

$ sudo aptitude install atftpd

デフォルトでは、inetd(Ubuntu12.04だとrlinetd)経由での起動になっていますが、不要なので単独daemonとして起動するように/etc/default/atftpdを変更します。
USE_INETDをfalseに変更して、これでOKかと思ったのですが、実際にこれで起動するとatftpdの起動に失敗します。解決策としては、同じく/etc/default/atfpdで、OPTIONSにポート番号指定(--port=69)を追加してやればOKのようです。

(参考)
TFTP Server atftpd fails to start - Ask Ubuntu

(/etc/default/atftpd 設定例)

USE_INETD=false
OPTIONS="--tftpd-timeout 300 --retry-timeout 5 --port=69 --maxthread 100 --verbose=5 /srv/tftp"

変更後、atftpdを起動し直します。

$ sudo /etc/init.d/atftpd start

ps等で起動しているか見てみて、atftpdが起動していればとりあえず起動は成功です。

念のため、動作確認するために、別のマシンor自分自身からtftpしてみます。
自分自身からアクセスするならtftp localhostして、適当なファイルをputして成功すればOKです。 うまくいかない場合は、エラーログ等参考に、root directory(/tftpbootとか)のpermissionやiptable等のフィルタ設定を見直しましょう。


4873114225 【関連書籍】
Linuxカーネル Hacks ―パフォーマンス改善、開発効率向上、省電力化のためのテクニック 池田宗広 大岩尚宏 島本裕志 竹部晶雄 平松雅巳 高橋浩和
リンカ・ローダ実践開発テクニック―実行ファイルを作成するために必須の技術 (COMPUTER TECHNOLOGY) 坂井弘亮
起動プログラム ブート・ローダ入門─クロックの初期化や外部メモリの設定からOSの起動まで TECH I シリーズ (TECH Iシリーズ) Interface編集部
組込みソフトウェア開発入門 ~組込みシステムの基本を‐ハードウェアとソフトウェアの両面から学ぶ! 星野香保子 並木秀明 菊池宜志 日比野吉弘

Linuxインストールメモ - NTFS・無線LAN・ワイドディスプレイ

自分の経験は、どれほど小さくても、百万の他人がした経験よりも価値ある財産である。
レッシング
dellcampaign10_125x125法人向け
最近我が家のノートPCを買い換えました。機種はDELLのINPSPIRON 710m。デフォルトOSは当然のようにWindows XPですので、早速Linuxをインストール。久々ということもあって、いくつか戸惑ったところをもありましたので、メモも兼ねて記事にしておこうと思います。ポイントは、
  • NTFSパーティションの変更
  • 無線LANの設定
  • ワイドディスプレイの設定
といったところです。

■ディストリビューションの選択

最初、手元にあったVine Linux 3.1をインストールしようとおもったのですが、なぜかインストーラが「install exited abnormally」のログを出して以上終了してしまいます。テキストモードでも同様。 特にVineに強いこだわりがあるわけではないので、Fedora Code 4にしました。kernelも2.6系だしパッケージも新しいので結果的には楽そうだというのもあったので。

■NTFSパーティションのリサイズ

買ってすぐのパーティション構成は、Windows XPがインストールされたNTFSパーティションが1つだけ。まずはLinuxインストール用のパーティション確保からです。今まではFIPSというツールでパーティション分割していたのですが、残念ながらNTFSには未対応。GNUPartedというツールもありますがこれも駄目。

qtparted 結局、NTFSパーティションを分割(リサイズ)するツールは、ntfsresizeとそのフロントエンドであるQTPartedを使いました。Linux上で動作するツールで、簡単にパーティション操作ができるツールです。でも、今からLinuxを入れようとしているので、この場合Linuxはインストールされていません。
よって、ここは1CD/DVDのみで起動できるLinuxであるKNOPPIXが使えます。公式サイトからISOイメージをダウンロードしてCDに焼いて起動。手元にisoイメージを焼くソフトがなかったので、フリーのDeepBurnerを使いました。
ちなみに、私が使ったのはKNOPPIX 4.0 日本語版でしたが、QTPartedはデフォルトでメニューにも含まれていました。GUIなので使い方は簡単です。あらかじめNTFSパーティションをデフラグしておき、あとはメニューに従って操作するだけ。使い方は、「QTParted パーティション設定ツール」が参考になります。
これで、NTFSパーティションを縮めてやれば、開いたところにLinuxをインストールすることができます。Windows XPのみしか使用しない人でも、データ用のパーティションを別に区切っておくことで、後々再インストール等の必要性が出た時には有効です。

※実はDELLの直販だと、パーティションを最初から区切ってくれるサービスも選択できたのですが、有料だったので選択していませんでした。

■無線LANの設定

Windowsのデバイスマネージャで見ると、無線LANアダプタは「Intel(R) PRO/Wireless 2200BG Network Connection」。Fedora Coreなら新しいデバイスドライバも入っているだろうということで起動してみますが、 ipw2200は入っており、ハードウェアの認識もされているようですが、demesgで起動ログを見るとファームウェアのロードに失敗したいうようなログがでています。
ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.0.0
ipw2200: Copyright(c) 2003-2004 Intel Corporation
ACPI: PCI Interrupt Link [LNKE] enabled at IRQ 10
ACPI: PCI Interrupt 0000:02:01.0[A] -> Link [LNKE] -> GSI 10 (level, low) -> IRQ 10
ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection
ipw2200: ipw-2.2-boot.fw load failed: Reason -2
ipw2200: Unable to load firmware: 0xFFFFFFFE
ipw2200: failed to register network device
ipw2200: probe of 0000:02:01.0 failed with error -5
driverのホームページを見ると、firmwareは別途用意する必要があるようです。
ダウンロードして、hotplug用のディレクトリ(Fedoraなら/lib/hotplug)に置いてやった上で再起動すると、無事動作しました。 もちろん、WEP等の設定は別途必要です。
(参考)Fedora core 3でIntel PRO/Wireless 2915ABGを使う

■ワイドディスプレイの設定

インストールも済んで、無線LANも無事動いたので、早速Webをブラウジングして見る。???。どうも表示が横長になっています。Xorgの設定は、ちゃんとワイド仕様(WXGA:1280x800)になっています。
どうもワイド表示のためにはビデオBIOSを上書きする必要があるようです。ビデオBIOSの書き換えは855resolutionというツールでできます。インストールして、起動時に書き換えるようにしてやると、正常に表示されるようになりました。
(参考)855resolution

【関連リンク】
KNOPPIX Japanese Edition
Deep Burner (窓の杜)
QTParted パーティション設定ツール
1台のPCでLinuxとWindowsを共存するには? (デュアルブート編)
Intel® PRO/Wireless 2200BG Driver for Linux

【関連書籍】
がんがん使おうPartition Magic
Knoppix Hacks―カスタマイズとシステム管理のテクニック カイル・ランキン
今すぐ使えるLinux KNOPPIXコンプリートガイド 鎌滝雅久 柘植昭秀
Fedora Core4ビギナーズバイブル 大津真 向井領治 まえだひさこ

magicdevが重い

4873111382 最近Linuxがなんだか重いので、topで調べてみました。
すると、magicdevというプロセスがやたらとCPUを使用しています。

magicdevというのは、CDやDVD等のリムーバブルメディアに対応した一種のauto mountデーモンのようなものらしいのですが、調べてみると同様の症状に陥っている人も散見されます。私は不要なのでアンインストールしました。
%> rpm -e magicdev

ちなみに私のディストリビューションはVine Linux 3.1です。
Redhat系のディストリビューションには標準で含まれているようです。

HDDに定期的にアクセスするようなので、HDDのアクセス音が気になる人はこれが原因かもしれないので、一度切ってみるといいかもしれません。

【関連書籍】
Fedora Core4ビギナーズバイブル 大津真 向井領治 まえだひさこ
UNIXシステム管理 第3版〈VOLUME 1〉 アイリーン・フリッシュ
人気エントリ
最近の記事
本のおすすめ

4274065979

4844337858

482228493X

4904807057

4873114799


最近のコメント
Links
プロフィール
  • Author:proger
  • 組み込み関係で仕事してます
ブログ内検索