FC2ブログ

[VEEK][altera wiki]Linux with MMU on VEEK/t-Pad(1)

こんなの見つけた。これLinuxが動作するHW構成を勉強するのに使えるのかな?いじってみよう。

ちなみにこのLinuxデータは、VEEK出荷時に搭載されている機能「Application Selector」から
起動出来る。
Application Selectorは
「SDカードに保存された各アプリデータ(.bin)をGUIで選択して起動出来るようにしたUIアプリ」

使い方は、いくつかのデモデータをSDカードに保存しておき、VEEK起動時にApplication Selector
画面で、どのデモを見せるか?を選択して、デモを起動する、といった使い方。


■Application Selector用の_HW.bin、_SW.binをWebから入手してダウンロード
 まずは完成している.binを入手して、どんな動きをするか見て見る。

・以下から_HW.binと_SW.binを入手する。

  http://www.alterawiki.com/wiki/File:DE2_115_NIOS_HOST_MOUSE_VGA_HW.bin.gz
  http://www.alterawiki.com/wiki/File:Linux_SW.bin.gz

・VEEKのApplication Selector用SDカード(付属品)をWIndowsへ接続し、
 SDカード内Application_Selectorフォルダの下に任意の名前のサブフォルダを作成。
  ※ このサブフォルダの名前が、実際のApplication Selector実行時の表示名になる。

・作成したサブフォルダへ、上記2つの.binを保存。

・VEEKへSDカードを挿入して、またPS/2キーボードを接続して、電源ON。
 すると、サブフォルダ名でさっきのアプリが選択出来るようになってる。

・選択後、Loadボタンを押すと、5分くらいかかるが、Loadが完了し、uCLinuxが起動した。

 ※ altera wiki名は、「Linux with MMU」だけど、実際にはuClinuxだからMMUは非搭載かな?
   wikiではX windowテストを希望する場合は、記載された方法でSDカードを準備すると書いてある。
   Application Selector用のSDカードとは別になるはずだから、uClinuxが起動後に、電源ONのまま
   SDカードを取り替えるって事かな?

(2013/11/9追記)
・uClinux起動時は、Application Selector用のデータを格納したSDカードを挿しているが、
 それはWIndowsでフォーマットしたFAT16。
 以下の手順で「mount /dev/mmcblkp2 /mnt」は、当初準備する物の欄に記載あったBlank SDカード
 だから、どのタイミングでSDカードを取り替えるのか?が疑問だった。

http://www.alterawiki.com/wiki/Linux_with_MMU_on_VEEK/t-Pad の「Test X Window」

 uClinux起動後に、たんにSDカードを取り替えただけだと、SDカードが認識されない。
 正しいかわからんが、SDカードを取り替えてからリセットボタンらしきもので
 uClinuxを再起動したら、SDカード認識されたようだ。
 VEEK(※)裏面のPUSHスイッチ「KEY0」がリセットになってた。
 SDカードを取り替えて、KEY0を押すと、一度白画面になってからuClinuxが再起動した。

  ※ Alteraの正規品?はVEEKという名前らしいが、Terasic社ではVEEKと互換品の
    tPADしか購入出来なかった。Terasicに聞いたら完全互換だとか。
    今は、VEEK-MT(マルチタッチ)しか購入出来なかったような。

 ・以下コマンドでマウント成功したようだ。

# /sbin/mount /dev/mmcblk0p2 /mnt
kjournald starting. Commit interval 5 seconds
EXT3 FS on mmcblk0p2, internal journal
EXT3-fs: recovery complete.
EXT3-fs: mounted filesystem with writeback data mode.



・順番逆になったけど/bin/bash も実行。そうすると、TABによる補完が効くようになった。

・以下コマンドでやっとキーボード設定がUSからJP106にできると思ったが、loadkeysなんて
 コマンドが見つからない。

loadkeys jp106



・おそらくWikiに書いてあった、X Windowのテストをする場合は、11個のtar.gzをダウンロードして
 展開しろ、っていうのをスキップして作業してたからだと思う。

File:Usr.bin.tar.gz
File:Usr.doc.tar.gz
File:Usr.etc.tar.gz
File:Usr.home.tar.gz
File:Usr.include.tar.gz
File:Usr.lib.tar.gz
File:Usr.libexec.tar.gz
File:Usr.man.tar.gz
File:Usr.sbin.tar.gz
File:Usr.share.tar.gz
File:Usr.var.tar.gz



 まず、作業するOSは、VMwareのCentOS5.7としたが、SDカードへデータ書き込みたいのに、
 USBリーダーを指しても認識されない。
 代わりに、CentOS6.4 i386でやってみたら、sdbとしてSDカードが認識された。

 記載されている上記tar.gzをダウンロードして、共有フォルダ経由でWindowsから、
 VMwareのCentOS6.4 i386へコピー。
 ちなみに、書き込み先のSDカードは、前の作業でwiki記載通り、mmcblk0p2とかの、
 3つのパーティションにfdiskで切ってある。
 記事では「作業PCで展開してから、SDカードのmmcblk0p2へデータをコピー」と書いてある。
 けど、展開してからコピーだと、リンクファイルが変になったりしないか?という疑問から、
 コピーしてから展開にした。

 また、VMwareのCentOSでSDカードが自動認識された時、dfで見て見ると、SDカードは、
 /media/以下のよく分からないフォルダ名でマウントされてる。

①/dev/sdb1 592796 341776 251020 58% /media/5279-06E3
②/dev/sdb2 586100 360932 195396 65% /media/189b9b73-bfd3-4a9e-873b-8d33d537ec71フォ


 /dev/sdb2がmmcblk0p2になるんだっけ?
 不安だったので、上記①、②の両方にコピーして展開してみた。
 しかし、①はPermission Deniedが出て、リンク?の展開か何かがエラー出てる。
 ②の方はすんなり全て展開出来たようだ。

・次は、VMwareのCentOSで作ったSDカードをVEEKのuClinuxでマウントして、作業を継続。
 前にやったように、Applicatoin Selector用データが入っているSDカードを挿してuClinux起動、
 それから起動中にSDカードを取り替えて、リセットボタンで再起動、という手順だ。

 尚、この間に、PS/2キーボードのLボタンが壊れた。なんという事でしょう。
 ls -lstとLは多様するのに、使い物にならん!という訳で、以前アキバで買った
 ジャンクUSBキーボードを使用。Wikiにも書いてある通り、PS/2、USBどちらでも問題無く認識された。
 しかしこちらもあっという間に問題発生。/ボタンを押すと、押されたまま戻らなくなくこと多発。
 まあ、確か300円くらいの品だ。我慢して進もう。

・まずはmount /dev/mmcblkp2 /mnt でSDカードのmmcblk0p2のパーティションをマウント。
 すると、/mnt/usr/bin/loadkeysを発見。
 このフォルダへ移動して以下実行。直下にあるのに、./をつけないとnot foundになってしまった。

# ./loadkeys jp106
Decompressor program not found: gunzip


 しかも、gunzipがないとかエラー出た。
 しかし、同じフォルダに/mnt/usr/bin/gunzipが存在する。
 これって、存在するけど、パスが切れてないとか?
 さっきのloadkeysではダメで、./loadkeysとしないと実行出来なかったのも関係するのかな。

・いろいろ調べていくうちに、exportコマンドを叩くと、以下のような表示が出た。
 Linuxのenvコマンドと少し似てる。

# export
declare -x HOSTNAME="nios2"
declare -x HOSTTYPE="nios2"
:
declare -x PATH="/bin:/usr/bin:/sbin:/usr/sbin"
:


whichコマンドが効かないのでexportコマンドのありか分からないし、
探してもexportが見当たらないので効かないと思ってた。
そうと分かれば、まずはwikiに書いてあった以下実行。

export HOME=/home


loadkeysと同じフォルダにgunzipを参照出来ない原因として、以下のように「.」
を追加すれば良いと予想してやってみた。

export PATH=".:/bin:/usr/bin:/sbin:/usr/sbin"



・すると、loadkeysが正常に実行出来たようだ。
確かにキー配列が見慣れたjp106のものになったようだ。

# cd /mnt/usr/bin
# loadkeys jp106
Loading /mnt/usr//share/keymaps/i386/qwerty/jp106.kmap.gz

 

・次の手順はtelnetでVEEKとPCをつなぐという事で、PCを起動して、クロスケーブルでVEEKと接続。

・PC > コントロールパネル > ネットワーク接続 > プロパティ > TCP/IPのプロパティ
  > IPアドレス=192.168.21.15、サブネットマスク=255.255.255.0、他空白にする。

・VEEK側で、以下実行。特にメッセージ出ないので成功したと思われる。

ifconfig eth0 192.168.21.16 netmask 255.255.255.0



・PC側 > Winキー+R > cmdと実行してDOSプロンプトを開く。
 ipconfig /allで確認すると、ネットワークアダプタは設定したIP、サブネットマスクになってる。

・そのままDOSプロンプトで、telnet実行したが、失敗した。

telnet 192.168.21.16
接続中: 192.168.21.16...ホストへ接続できませんでした。ポート番号23:接続に失敗しました



・悩んでいて時間経過したら、VEEK画面で以下メッセージが出てきた。

net eth0: packet dropped
net eth0: packet dropped
  :


 これはどういう事だ?

■ソースからApplication Selector用_HW.bin、_SW.binを作成(以下書きかけ)
 次に、上で試した.binを自分で作ってみようという試み。

・以下からQuartus Archiveを入手。
 http://www.alterawiki.com/wiki/File:DE2_115_NIOS_HOST_MOUSE_VGA.qar

・また、以下も入手して、gzip解凍。
 http://www.alterawiki.com/wiki/File:DE2_115_NIOS_HOST_MOUSE_VGA.pin.gz

・QuartusII(13.0sp1)のOpen Projectで開くとソースファイルらしきものが展開された。
 (HWデータのソースはこれで揃ってるようだが、uClinuxのソフトウェアデータはどこにある??)
 DE2_115_NIOS_HOST_MOUSE_VGA_restored フォルダが生成される。

・Qsysを起動しても.qsysは無く、DE2_115_SOPC.sopcがあった。
 なので、SOPC Builder用のこのファイルをQsysで読み込み、Qsys用へ自動Upgrade。

・Qsys > Generateタブ > 以下設定後、Generate

Create Simulation model = Verilog
Create testbench Qsys system = Standard, BFMs for standard Qsys interconnect
Create testbench Simulation model = Verilog
Create HDL design files for Synthesis = Verilog



・SEG7_IFがVerilog対応してない、とのエラーが出る。
 以下ファイルが存在するし、Qsysにも登録されてるから問題無いと思うんだが・・・なぜだ?

IP/TERASIC_SEG7/hdl/SEG7_IF_hw.tcl
IP/TERASIC_SEG7/hdl/SEG7_IF.v



・Qsys > 左のツリーからProject > Terasic Technology Inc. > SEG7_IFを選択。
 > 右クリック > Edit > Filesタブ > Verilog Simulation Filesに何も登録が無い。
 ここでCopy from Synthesis fileをクリックすると、合成用ソースと同じファイルが登録された。
 Finishボタン > Yes,Save で終了する。

・これでSEG7_IFについてのエラーは消えたようだ。しかし次も同様に以下回路が指摘された。

Error: ISP1362: ISP1362_IF does not support generation for Verilog Simulation. Generation is available for: Quartus Synthesis.



・ISP1362もSEG7_IFと同様に対策したら、QuartusIIのコンパイルまでPassした。
 けどTimeQuestでSetup違反がある。

-0.384 DE2_115_SOPC:DE2_115_SOPC|peripheral_main_memory_clock_bridge:the_peripheral_main_memory_clock_bridge|peripheral_main_memory_clock_bridge_downstream_fifo:the_downstream_fifo|dcfifo:downstream_fifo|dcfifo_20g1:auto_generated|altsyncram_0k31:fifo_ram|q_b[34] DE2_115_SOPC:DE2_115_SOPC|sdram_s1_arbitrator:the_sdram_s1|sdram_s1_slavearbiterlockenable system_clk system_clk 10.000 0.017 10.419
  :



(2014.1.5追記)
・次のQuartusIIバージョンにしたら、TimeQuestで違反がなくなった。
  QuartusII 64bit 13.1.0 Build 162 10/23/2013 SJ Web Edition

(2014.1.12追記)
Wikiページの作者の方からコメント頂いたので、それに従い作業継続してみる。

・まずは、uClinux起動後にSDカードを交換する、と記載していたが、これは1枚のSDカードで
 Application Selector用データの格納と、uClinux用データの格納が実現出来るとの事。
 mkfs.vfatなどでファイルシステムを構築するとの事だが、WMware上のCentOSにmkfs.vfat
 コマンドがインストールされてない。
 調べるとdosfstoolsというパッケージでインストール出来るようだ。

・これを実行したらmkfs.vfatがインストールされた。

yum install dosfstools



・以前、これ用にパーティションは切っておいたSDなので、あとは以下を実行。

mkfs.vfat /dev/sdb1
mkfs.ext3 /dev/sdb2
mkswap /dev/sd3



・Windows上からSDへ格納すべきデータを各種コピーしようと思ったが、/mnt/hgfs/下に共有フォルダが現れない。
 VMware toolもインストールしたし、フォルダパス設定もしてるのになぜだ?

(2014.1.12追記)
・デスクトップPCのVMware上のCentOS6.4 i386では、/mnt/hgfsに共有フォルダが表示されなかった。
 しかし、ノートPCの方のCentOS6.4 i386(こちらもVMware)では正常に表示されている。
 デスクトップPCの方では、X Windowはインストールしてなくコマンドラインの状態。
 これが原因かどうか分からんが、ノートPCに入っているOSとの違いはそれくらいだったような・・・

 まあ、とりあえずノートPCで作業継続。

・SDカードを、3つのパーティションにして、ファイルシステムも作ったので、
 次は、それぞれに必要なデータをコピーする。
 まずは、sdb1パーティションへ、FPGAコンフィグ用HW & SWデータ(.bin)をコピーする。

http://www.alterawiki.com/wiki/Linux_with_MMU_on_VEEK/t-Pad#Boot_Linux
 Wikiのページから2つの.binをダウンロードする。

Download
File:DE2 115 NIOS HOST MOUSE VGA HW.bin.gz
File:Linux SW.bin.gz



・VMwareのOS(ゲストOS)起動してから、SDカード(USB接続)を挿すと、ゲストOSの方で
 自動的に検出されて、/dev/sdbとして現れる。
 パーティション1(sdb1)へ、上記の.binをコピーするためにマウントし、コピー。gzip -dで解凍も。
 尚、Application_Selectorで取り扱えるように、sdb1直下の構成は、Application_Selector/NiosII_Linux/*.bin
 というディレクトリ構成にしておく。

mount -t vfat /dev/sdb1 /mnt/sd1
cd /mnt/sd1/
mkdir Application_Selector
cd Application_Selector/
mkdir NiosII_Linux
cd NiosII_Linux/
cp -ipr /mnt/hgfs/vm_share/Linux_with_MMU_on_VEEKt-Pad/DE2_115_NIOS_HOST_MOUSE_VGA_HW.bin .
cp -ipr /mnt/hgfs/vm_share/Linux_with_MMU_on_VEEKt-Pad/Linux_SW.bin .



・パーティション2(sdb2)の方にも同様に必要データをコピーする。

mount -t ext3 /dev/sdb2 /mnt/sd2
cd /mnt/sd2/
cp -ipr /mnt/hgfs/vm_share/Linux_with_MMU_on_VEEKt-Pad/Usr.* .



・コピーしたら展開する。

gzip -cd Usr.bin.tar.gz | tar xvf -
gzip -cd Usr.doc.tar.gz | tar xvf -
gzip -cd Usr.etc.tar.gz | tar xvf -
gzip -cd Usr.home.tar.gz | tar xvf -
gzip -cd Usr.include.tar.gz | tar xvf -
gzip -cd Usr.lib.tar.gz | tar xvf -
gzip -cd Usr.libexec.tar.gz | tar xvf -
gzip -cd Usr.man.tar.gz | tar xvf -
gzip -cd Usr.sbin.tar.gz | tar xvf -
gzip -cd Usr.share.tar.gz | tar xvf -
gzip -cd Usr.var.tar.gz | tar xvf -



・SDカードの準備が出来たので、ホストPCから抜いて、tPADボードのSDカードスロットへ挿入。
 それから電源ONすると、無事にuClinuxが起動して、プロンプトが出た。

・あとはWikiのページに従って、次の通り進めていく。
http://www.alterawiki.com/wiki/Linux_with_MMU_on_VEEK/t-Pad#Boot_Linux

/ # export HOME=/home
/ # bash
root@nios2:/# SD
kjournald starting. Commit interval 5 seconds
EXT3 FS on mmcblk0p2, internal journal
EXT3-fs: mounted filesystem with writeback data mode.
root@nios2:/# loadkeys jp106
mmcblk0: retrying using single block read
Loading /mnt/usr/share/keymaps/i386/qwerty/jp106.kmap.gz
root@nios2:/# ifconfig eth0 192.168.21.20 netmask 255.255.255.0
root@nios2:/#



・Wikiではstartxの前にフリーズ対策としてtelnetで接続しておく事を推奨されている。
 Windows7では標準でtelnetが使えないようなので、以下記事の通り、まずは設定した。
http://bobgosso.blog13.fc2.com/blog-entry-266.html

・tPADのETHERNET0側のポートへLANクロスケーブルを接続。もう一方をホストPC側にも接続。
 tPADの設定として、JP1を2-3ショートにすべきとコメント欄で教えて頂いたので、設定。
 また、コメント欄で、D15のLED点灯時は1000Gbpsモードであり、現在のHW構成では
 100Mbpsにしか(10Mbpsに対応してるか不明)対応してないとの事。
 さらにtPAD側では速度制御出来ないためホストPC側で制御すべきとの事を教えて頂いた。
 ホストPC側で以下の設定を試した。

 コントロールパネル > ネットワークと共有センター > アダプタ設定の変更
  > ローカルエリア接続で右クリック > プロパティ > ネットワークタブの「構成」
  > 詳細設定 > 有線LANリンク速度とデュプレックス > 100Mbps全二重通信

 これでtPAD基板上のLED D16が点灯し、100Mbpsモードである事を示しているようだ。

・ホストPC側で、以下でtelnet接続を試みた。
 Win + Rでファイル名を指定して実行を起動 > telnet > open 192.168.21.20

 しかし、「接続中:192.168.21.20...ホストへ接続できませんでした。ポート番号23:接続に失敗しました」
 となり、失敗してしまう。
 これは、TeraTerm(TCP/IPのtelnetでProtcol=IPv4を選択)で試しても同じ。やり方間違ってるかな?
 「100Mbps全二重通信」の代わりに「100Mbps半二重通信」にしても同じ。

・ネットに接続出来ない原因は分かってないが、とりあえずstartxを実行すると起動出来た。


(2014/2/2追記)
・1/29に頂いたコメントに従い、再度イーサネット機能の実験。やった手順を書いていく。

・VEEKの電源ON(既にこれ用に作ったSDカードがあるので、そこからLinux起動する)
・uClinux起動してプロンプトが出たら以下コマンドを実行していく。
 詳しくは本家のWikiページ参照。
http://www.alterawiki.com/wiki/Linux_with_MMU_on_VEEK/t-Pad#Boot_Linux

/ # export HOME=/home
/ # bash
root@nios2:/# SD
root@nios2:/# loadkeys jp106


ここまでは前回同様に成功。

・ここでWindows側の有線LANポートの設定。
 詳しくは、2014.1.12追記、という名目でこのページ上の方に詳しく書いてある。
 設定は以下のみ。

速度    = 100Mbps全二重通信
IP     = 172.31.32.10
ネットマスク= 255.255.255.0


 さらにクロスケーブルでVEEK(eth0)とWindowsを接続。
 まだローカルエリア接続を無効にしたままなので、この時点でVEEK側の速度設定は
 1000(LED=D15)、DUP(LED=D14)のLEDが点灯している。

・次にWindowsのローカルエリア接続を有効にしたら、LED点灯がVEEKの1000から100(LED=D16)に変わった。
 (有効にした時ではなく、再度「100Mbps全二重通信」に設定した時、だったかな?うる覚え)

・VEEK側で以下コマンド実行。

root@nios2:/# ifconfig eth0 172.31.32.11 netmask 255.255.255.0


 少し時間あけると、「net eth0: packet dropped」という表示が次々と表示されていく。

・Windows側で、Win + R > telnet > open 172.31.32.11
 と実行しても、
 「接続中:192.168.21.20...ホストへ接続できませんでした。ポート番号23:接続に失敗しました」
 というメッセージで失敗してしまう。これは前回と同じ状況。

・ここからコメント欄で再度情報頂いたように次のように実行。

・まずは頂いたヒント1としてVEEKのeth0を停止→起動の順にVEEK側で実行。

root@nios2:/# ifconfig eth0 down
root@nios2:/# ifconfig eth0 up


 それから再度Windowsからtelnetでopenコマンドうったが、結果は同じで接続失敗。

・次にヒント2で一度VEEK側からpingをうってからWindowsで再度pingを実行。

root@nios2:/# ping 172.31.32.10
PING 172.31.32.10 (172.31.32.10): 56 data bytes
64 bytes from 172.31.32.10: seq=0 ttl=128 time=2.303ms
64 bytes from 172.31.32.10: seq=0 ttl=128 time=1.407ms
64 bytes from 172.31.32.10: seq=0 ttl=128 time=1.329ms
64 bytes from 172.31.32.10: seq=0 ttl=128 time=1.352ms
  :


 まずVEEKからのpingは成功。
 次にWindowsのtelnetからopenコマンドをうつと・・・

nios2 login:


 んん!? telnet画面にプロンプトが返ってくるじゃありませんか!!

 root、Pass無しでログイン!すると。

nios2 login: root
Welcome to
____ _ _
/ __| ||_|
_ _| | | | _ ____ _ _ _ _
| | | | | | || | _ \| | | |\ \/ /
| |_| | |__| || | | | | |_| |/ \
| ___\____|_||_|_| |_|\____|\_/\_/
| |
|_|

For further information check:
http://www.uclinux.org/



BusyBox v1.14.2 (2012-05-28 18:11:14 JST) hush - the humble shell
Enter 'help' for a list of built-in commands.

/ #


 出た!!!

 VEEK側には、こんな表示出た。

root@nios2:/# login[887]: root login on 'pts/1'



・このブログ書いている間しばらく放置したら、また「net eth0: packet dropped」が出てきた。
 しかし、とにかくtelnetによるアクセスに成功したようだ。

・「net eth0: packet dropped」に関してぐぐっても、同じ問題抱える人がある掲示板で発見できたが、
 情報が少な過ぎてよく分からない。

(2014.2.23追記)
またまたWiki作者の方から、Ethernetドライバのバグを修正したとコメント頂いたので試してみる。

・まずは修正版の*_SW.binを入手する。
 *_HW.binの方は更新ないようで、ダウンロードページでは2012年版だったので、SW.binのみ。
 Windows上でSDカードのApplication Selectorフォルダへ置く。
http://www.alterawiki.com/wiki/File:Linux_SW.bin.gz

current 08:36, 17 February 2014 (3.45 MB) KASUYASU (Talk | contribs) Bug fixed version around the ethernet driver.



■実験1(初回ping=Windows側から)
・tPADへSDカードを挿入して、電源ONするとApplication Selectorが起動するので、
 起動したいアプリを選択して、Loadを押す。これでuClinuxが起動してプロンプトが出た。

・ホストPC(Windows)でtPADとの通信に使う有線LANポートの設定をする。(前回試した時と同じ)

 コントロールパネル > ネットワークと共有センター > アダプタ設定の変更
  > ローカルエリア接続で右クリック > プロパティ > ネットワークタブの「構成」
  > 詳細設定 > 有線LANリンク速度とデュプレックス > 100Mbps全二重通信

・クロスケーブルをホストPCとtPADをつなぐ。この時点ではtPADのLEDに特に変化は無い。

・tPADのuClinuxプロンプトで以下手順で実行。

/ # export HOME=/home
/ # bash
root@nios2:/# SD
kjournald starting. Commit interval 5 seconds
EXT3 FS on mmcblk0p2, internal journal
EXT3-fs: mounted filesystem with writeback data mode.
root@nios2:/# loadkeys jp106
mmcblk0: retrying using single block read
Loading /mnt/usr/share/keymaps/i386/qwerty/jp106.kmap.gz
root@nios2:/# ifconfig eth0 192.168.21.20 netmask 255.255.255.0


 最後のifconfigを実行した時、tPADのD16(100Mbps)、D14(DUP)が点灯し、D13(RX)が点滅し始めた。
 そして、そのすぐ後に、「net eth0: packet dropped」が垂れ流されて表示され始めた。

・ここで、tPADで設定したIPアドレスが前回と変わっている事に気付く。前回は172.31.32.xxだった。
 tPADは上記メッセージが垂れ流されていて、とてもコマンド実行出来ないので、Windows側の有線LANを
 192.168.21.21に設定した。特にtPADに変化は無い。

・Windows側でWin + R > telnet > 次のコマンドで接続試みても失敗。

Microsoft Telnet> open 192.168.21.20
接続中: 192.168.21.20...ホストへ接続できませんでした。 ポート番号 23: 接続に失敗しました



■実験2(初回ping=tPAD側から)
・ホストとクロスケーブルで接続したままtPADの電源OFF -> ONして、再起動。
 実験1と同じ手順でコマンド実行し、ifconfigを実行した後、そのままtPADで「ping 192.168.21.21」を実行。

root@nios2:/# ping 192.168.21.21
net eth0: packet dropped
PING 192.168.21.21 (192.168.21.21) : 56 data bytes
net eth0: packet dropped
net eth0: packet dropped
net eth0: packet dropped
  :


 すると、またdroppedのメッセージが垂れ流された。これは一定時間後に出てしまうため、
 もっと早く打ち込めばPING成功してたとか?

■実験3(初回ping=tPAD側から)(即pingコマンド)
・pingコマンドをもっと早く打つために、ifconfigの前にコマンド実行履歴に入れておく。

root@nios2:/# ping 192.168.21.21
PING 192.168.21.21 (192.168.21.21): 56 data bytes
ping: sendto: Network is unreachable


 この結果は、ifconfigで設定前だから、納得の内容(のはず)。

・ifconfig実行後、tPADのLEDが付き始めた頃を見計らって、ping実行。

root@nios2:/# ifconfig eth0 192.168.21.20 netmask 255.255.255.0
root@nios2:/# ping 192.168.21.21
PING 192.168.21.21 (192.168.21.21): 56 data bytes
64 bytes from 192.168.21.21: seq=2 ttl=128 time=1.754ms
64 bytes from 192.168.21.21: seq=2 ttl=128 time=1.106ms
net eth0: packet dropped
net eth0: packet dropped
net eth0: packet dropped
  :



■実験4(初回ping=Windows側から)(即pingコマンド)
・次はtPADのifconfigの直後に、Windows側からtelnetで接続を試みた。
 tPADでifconfigを実行したすぐ後にWindowsから以下openコマンド実行。
 しばらく沈黙の後、先にtPADで「net eth0: packet dropped」の垂れ流し開始。
 その後、Windows側で「ホストへ接続できませんでした。」のメッセージが出た。

Microsoft Telnet> open 192.168.21.20
接続中: 192.168.21.20...ホストへ接続できませんでした。 ポート番号 23: 接続に失敗しました



・しばらくどうしたもんかと考えつつ放置した後、tPAD側で以下試してみた。

# ifconfig eth0 down → droppedメッセージが割り込んで表示されるが、気にせず続けて入力し実行。
# ifconfig eth0 up


 間を空けず、Windows側からtelnet上でopenコマンド実行すると、通信に成功しログイン画面に変わった。
 rootと入力すると、そのままログイン成功。

・そのまま放置すると、Windows側のtelnetで、時間切れで接続が切れたとのメッセージ。
 その後、またWindows側のtelnetでopenコマンド実行すると今度は「ホストへ接続できませんでした。」との結果。

■実験5(初回ping=tPAD側から)(即pingコマンド)再度
・さっき実験3でtPADから初回pingうって、成功してから、Windows側からtelnetで接続する、
 という手順までやってなかったので、再度やってみる。

・以下手順を間を空けず実行。しかし失敗した。

tPAD側 : ifconfig 192.168.21.20
tPAD側 : ping 192.168.21.21 → 成功したらCtrl-Cで強制終了
Windows側 : telnet からopen 192.168.21.20 を実行 → 接続できず。


 この後、しばらくの間droppedメッセージが出なかったが、長く待ったらやはり垂れ流しで表示された。

(2014.3.8追記)
頂いたコメントに従い、再度実験。

・まずは、Application Selectorのロードデータを一度別のものに上書きするため、NiosII SMPをロード。
 それから、目的のNiosII Linuxをロード。

・コメントを参考にバージョンを確認。ちゃんと2014年版になってる。

/ # export HOME=/home
/ # bash
root@nios2:/# cat /proc/version
Linux version 2.6.30-00471-g2e1b9d6-dirty (hamada@Messiah2) (gcc version 4.1.2 (Wind River Linux Sourcery G++ 4.1-176)) #193 PREEMPT Web Feb 12 02:36:18 JST 2014



・その他の設定をする。

root@nios2:/# SD
root@nios2:/# loadkeys jp106
root@nios2:/# ifconfig eth0 192.168.21.20 netmask 255.255.255.0



・クロスケーブルでノートPCとtPADを接続する。これでtPADのEther関連のLEDが点灯し始めた。
 ここからノートPC(Windows)からtelnetを打とうとしたら、1分ほどで「net eth0: packet dropped」
 の垂れ流しが始まってしまった。

・ノートPCからtelnetで「open 192.168.21.20」を実行しても接続出来ず。

・tPADから「ping 192.168.21.21」を実行するが、「100% packet loss」となった。

・その後またノートPCからtelnet接続をやってみたが、pingが成功してないせいか、またも接続出来ず。

(2014.3.21追記)

・3/14に頂いたコメントに従い、ブート後以下手順で進めた。
 すると、クロスケーブルを接続しようとすると、Trying xxxxのメッセージが垂れ流された。

/ # export HOME=/home
/ # bash
root@nios2:/# SD
root@nios2:/# loadkeys jp106
root@nios2:/# ifconfig eth0 192.168.21.20 netmask 255.255.255.0
root@nios2:/# ethtool -s eth0 autoneg off speed 100 duplex full
root@nios2:/# Trying 100/HALF
Trying 10/FULL
Trying 10/HALF
Trying 10/HALF
Trying 10/HALF
Trying 10/HALF
  :



・次にクロスケーブルで接続するが、画面表示は相変わらずTrying 10/HALFの垂れ流し。
 tPAD裏面のEther関連のLEDは点灯する気配が無い。

・なんとなくWindowsからtelnetで「open 192.168.21.20」をやるが接続失敗。

・その後、なんとなくtPADで「ping 192.168.21.21」を打つが結果が返ってこない。

(2014.4.19追記)
コメント頂いた「オートネゴシエーション」にしてやってみたが、上手く行かず。

・ホストPC: コントロールパネル > ローカルエリア接続 > プロパティ > 構成
     > 詳細設定 > 速度とデュプレックス > オートネゴシエーション

・tPAD: 起動して、いつもの手順でloadkeysまで実行。

・クロスケーブルでホストPCとtPADを接続。
 ホストPCのローカルエリア接続では「識別されてないネットワーク」と出てる。

・tPAD: ifconfigを実行。tPADから、ホストPCから、両方pingを実行しても成功せず。

・ホストPC: telnetで接続失敗。

・tPAD: ここまでは、MSG垂れ流しは出てないが、ethtoolコマンドを実行したら、
 「net eth0: packet dropped」のMSGが垂れ流された。

(2014/6/22追記)
だいぶさぼってしまったが、本業の開発の仕事が一段落しつつあるので、
ようやくVEEKを引っ張り出して来て、4/22にKASUYASUさんから頂いたコメントに対してやってみた。

やり方も忘れているので、一通りやった事を書いてみる。

・前にやったままデータ入りのSDを挿入した状態でVEEKにキーボードを接続して電源ON。
 これでuClinuxが起動する。

・VEEKで以下手順で打ち込む。

/ # export HOME=/home
/ # bash
root@nios2:/# SD
root@nios2:/# loadkeys jp106
root@nios2:/# ifconfig eth0 192.168.21.20 netmask 255.255.255.0
root@nios2:/# ethtool -s eth0 autoneg off speed 100 duplex full



・オートネゴシエーションをOFFにしたせい(?)か、packetなんちゃらの垂れ流しは出ない。
 その間にノートPC側の設定。

・まずは最近OSクリーンインストールしたので、Windows 7でdefaultでOFFになってる
 telnetサービスをONにする。

・コントロールパネル > プログラムと機能 > Windowsの機能の有効化または無効化 > 
 telnetサーバーとtelnetクライアントにチェックをつける。
 (今回は、telnetでノートPCからVEEKへアクセスするので、クライアントのみで良いはずだが、何となく両方共にチェック)

・有線LANネットワークアダプタのプロパティで、192.168.21.21の固定IP、255.255.255.0のサブネットマスクを設定。
 「速度とデュプレックス」は「オートネゴシエーション」のまま。

・クロスケーブルでノートPCとVEEKを接続。

・ノートPCでコマンドプロンプトを開く。
 C/Windows/System32へ移動。
 ping 192.168.21.20で実行。成功。

・ノートPCで、telnet 192.168.21.20 を実行。rootでEnter押せば、VEEKへログイン成功。

KASUYASUさんコメントの通り、VEEK側のオートネゴシエーションをOFFにしてから手順通りやれば、
以前VEEK側で発生した「net eth0: packet dropped」とかいうMSGは一切出て来なかった。
telnetでVEEKへログインしてから何をしたら良いのか?は別の機会に調べるとして、とにかくここまでは成功。
スポンサーサイト



コメントの投稿

非公開コメント

Linux with MMU on VEEK/t-Pad

こんにちは。上記のWikiページの作者です。

>altera wiki名は、「Linux with MMU」だけど、実際にはuClinuxだからMMUは非搭載かな?

 MMU付です。

>Application Selector用のSDカードとは別になるはずだから、uClinuxが起動後に、電源ONのままSDカードを取り替えるって事かな?

これは、同じSDにPC上のLinuxで

mkfs.vfat /dev/mmcblk0p1
mkfs.ext3 /dev/mmcblk0p2
mkswap /dev/mmcblk0p3

のごとくパーティションを切って、VFATにApplication Selectorをコピー、ext3にFile:Usr.bin.tar.gz 以下を展開してコピーして頂ければ、差し替える必要はなくなります。リンク関係はext3上でbin doc etc home include lib libexec man sbin share var なるディレクトリ関係が崩れていなければ自動的につながると思います。
 boot後は、シェルがbashではないので、

export HOME=/home
bash

にて切り替えてください。/home下に.bashrc があり、pathなどが自動で設定されます。正常ならプロンプトにディレクトリ名が出てくるはずです(初期設定がUSキーボードなので'='などが探しにくいと思いますが)。その後バッチファイル

SD

にて、/dev/mmcblk0p2 を/mntにマウントします。loadkeys およびキー・マップ・ファイルはSD側にしか入っていないので、ここで初めて loadkeys jp106 で106キーボードに変更できます。
 ethernetはOpen CoresのMAC IPを使用しており、PhyとのインターフェイスはMIIで100Mbpsまでしか対応していませんので、Veek上のジャンパ JP1を必ず2-3ショートに切り替えて下さい。使用するRJ45コネクタはETHERNET0側です。残念ながらバグがありVeek側からはethtoolなどでspeedを制限することができませんので、PC側よりコントロールするようにして下さい。D15のLEDが点灯している時は1Gbpsですので通信できません。IPアドレスを適宜セットしてpingが通れば、inetdは起動済みですので、telnet、ftpが使えるはずです。
 X window は

startx

で起動します。ただし初回の起動のみかなり時間が掛かります。1度でも起動してしまえば、その後は1~2分程度で起動できると思います。このXには残念ながら少々バグがあり、条件によりたまにフリーズします。SysRqキーかtelnetで脱出して下さい。

 Nios2を使ったSMPシステムも作ってみましたので、よろしければこちらも試してみて下さい。

http://www.alterawiki.com/wiki/Nios2_SMP_System

SD上のVFATに新たなディレクトリを作りHWとSWをコピーするだけで、後の起動方法などはまったく同一です。topコマンドなどで動いているコア数が確認できるかと思います。

No title

こんにちは。色々試して頂いたようで恐縮ですm__m。

>現在のHW構成では100Mbpsにしか(10Mbpsに対応してるか不明)対応してないとの事。

 100Mbps、10Mbps、 全二重、半二重の何れも対応しています。1000Gbpsのみ不可です。

>「接続中:192.168.21.20...ホストへ接続できませんでした。ポート番号23:接続に失敗しました」

 こちらでは t-PAD 2台、普通のDE2-115 1台で正常に作動していたので、結果オーライであまり深くテストはしていなかったのですが、ブログを拝見してt-PADをテストしてみたところ、1台うまく接続できないのがありまして・・・。PHYとFPGA間のタイミングが悪いのか?と疑っても見たのですが、ボードに乗っているPHY(88E1111)の電気的特性がどうも何処を探しても見つからず、制約の掛けようがない状態で、さらにPCを別なものにすると正常に動くと言った状況ですので、ボードもしくはPHY自体に相性問題があるのかもしれません。(PCtoPCの接続になりますから本来ならば、クロス・ケーブルを使って接続しなければなりませんが、最近の1000Gbps対応のパソコンならクロス接続が必要な場合は勝手にIC内でクロスしてくれますし・・・)。
 よろしければ WireShark

http://www.wireshark.org/

などでEtherパケットの状況をご確認頂ければ、と存じます。pingも通らなければ、大抵、最初のarpパケットでコケています。

 あと言い忘れてましたが、pingが通らない場合は、一度VEEK側で

ifconfig eth0 down
ifconfig eth0 up

して、ドライバにリセットを掛けてみて下さい。またVEEK側からpingを打つとそれ以降上手く行く場合もあるようです(=結局、どこかにまだバグが潜んでると言うことですが^^;)。

No title

KASUYASU様

おはようございます。度々のご教授大変有難いです。

先程、このブログページに「2014/2/2追記」として追記しましたが、pingに成功しました。
一人では到底たどり着けないような気がしますが、頂いたヒントでWindowsのtelnetを経由
してVEEKへアクセスし、操作出来ました。
いやー自分のVEEKでこんな事出来るなんて嬉しいです。

このVEEKをPCとして家庭内LANに接続して、yum(uClinuxにこのコマンドあるか知らないですが)
なんかでOS更新しながら、1つのPCとして使っていく、なんて事が出来ないかあこがれてしまいます。
何も入ってないFPGAの中に、必要なものを詰め込んで、それが1台のPCになるなんて凄いなと。

いろいろサポート頂きありがとうございました。

No title

こんばんわ。
eth周りのバグ・フィックス版をWikiにアップしておきましたので、よろしければお試し下さい。原因は、ドライバを作った人がヘタッピで、割り込みの許可・不許可でレーシングを起していたようです。 SignalTapIIで信号がレーシングっぽいので、改めてソースを見たらorz・・・でした。ついでにMII関係も最近パッチが当たったようなので動くようにしてあります。

No title

コメントありがとうございます。
WikiにアップされていたSW.binの更新版で試した結果を、記事に追記しました。

こちらのtPADでは上手くいってないようで、おそらくそちらの挙動と違う結果でした。
前回との違いといえば「net eth0: packet dropped」が出てくるまでの
間隔が短くなったような気がします。

あまり参考にならないかもしれませんが、ご参考まで。
(そもそも私のデータかやり方が間違っているような気もしてきましたが)

No title

こんにちは。お手数をお掛けしております^^)。
ご存知かも知れませんが、Application SelectorはロードするアプリをSDから基板上のFlashに全部書き込んで次回以降はそこからブートしようとしますので、一度、まったく別のアプリをロードしてから目的のアプリをロードするようにして見て下さい。
kernelが古いものから新しい物に変わったかどうかは

cat /proc/version

でbuildされた年が2014に変わっているか、もしくはもっと簡単に

ethtool eth0

がちゃんと起動するかどうかでも調べることが可能です。

No title

おはようございます。
毎度コメントありがとうございます。

記事更新した通り、バージョン確認後、やってみましたが、失敗してしまいました。
何か気付く事あればコメント下さい。

自分のtPADの個体差とかかな?

No title

こんにちは。
うーん、ドライバを修正して以来、こちらのt-Padでは2台とも順調に動いていますので、今のところちょっと原因は分からないです。ただ、net eth0: packet droppedのメッセージはt-PadのMAC側に受信データが入っているのにkernel側が受け取れず、MACのバッファがオーバーフローしたときに出るようなので、何らかの理由でCPUが割り込みに応答しづらくなっている->それを意に介さずパケットが次々と到着する(しかもエラーパケット)などの状況があるのかも知れません。
 以前のドライバは割り込み許可フラッグを上げ下げする場所を2ヶ所にしていて、明らかにレーシングを起こしてパケットの到着頻度に応じてバグが出たり出なかったりしていた前科がありますし、ちょっとネットをサーチしたところ、このnet eth0: packet droppedのメッセージを出す部分をバッサリとカットしたpatchもあるようですので、まだまだドライバにバグが潜んでいるのかも知れません。
 とにかくハードも含めて今一度検証し直してみますので、しばらくお時間を下さいm__m。

No title

こんにちは。お世話になっております。
Etherの件ですが「クロスケーブルでノートPCとtPADを接続」したのは、IPアドレスやPhyのSpeedを100Mbpsに設定する前でしたでしょうか。それとも後でしょうか? 
 もし前者であるならば、一度、ケーブルをつながずにパワー・オン、ブート後、

ifconfig eth0 **.**.**.** netmask 255.255.255.0
ethtool -s eth0 autoneg off speed 100 duplex full

と設定してから、 ケーブルを接続してみて頂けないでしょうか?
 こちらのテストでは、PC側が1Gbps対応でそのままオート・ニゴーシエーションした場合、Phy(Marvel 88E1111)から使用しているOpen CoresのMAC IPに対して一時的に128MHzの受信クロックが供給される結果、(多分)内部のシーケンサーがハング・アップして、以降は100Mbpsに落としても受信(送信はできる)ができなくなると言うバグが確認できました(t-Pad側でethtoolを使えるようにしたのが、かえってアダになったようです)。ただしPC側であらかじめPhyのSpeedを100Mbpsに制限してあれば、この問題はそちらの現象とは無関係かと思います。

No title

こんばんは。返事遅れてすみません。

コメント頂いた内容で、ブログへ追記しました。
希望した通りの手順になってますかね?
追記した通りの結果でした。参考になります?

また、何かあればコメント下さい。試しますので。

No title

こんにちは。お世話になっております。
Trying 10/HALFの垂れ流しの件ですが、ethtoolでオート・ネゴシエーションをOFFにすると、Linuxは指定された最高のリンク・スピード(この場合は100/FULL)から順に100/HALF->10/FULL->10/HALFと落として、リンクが確立するかどうかを試して行きます。ケーブルがつながっていないと当然リンクが張れないので、誰もが応答できるはずの10/HALFでリンクを張ろうとずーっと頑張り続けますので、ここまでは正常な反応です。でも、ケーブルを接続してもリンクを張れないとなると、ここからは相手のPC側かもしくはケーブルの問題ですね。ちなみにリンク張りはPhyが全面的に受け持っていますので、FPGA内のMAC側はほぼ無関係です。PC側のオート・ネゴシエーションはONになっていますか?

No title

こんばんわ。風邪やら仕事やらでtPADさぼってました。すみません。

ホストPC側のオートネゴシエーション設定を実施し、やってみましたが、
うまく行きませんでした。
どうして良いものか良く分からず・・・

No title

現況のkernelでは、t-PADのPhyはオートネゴシエーション状態で起動します。ここにオートネゴシエーション状態のPC側Phyを接続すると、両者、最速のモードでリンクしようとしますので、不幸にしてそれが1Gbpsでなおかつ、1発でもt-PAD側MACがパケットを受信すると、ハングします。
 t-PAD側をオートネゴシエーションOFF、スピード100Mbps以下の設定にしてからケーブルを接続してみて下さい。

No title

KASUYASUさん、こんばんは。

前回頂いたコメントから2ヶ月も経ってしまいました。申し訳無く。
4月から本格化した本業の開発作業も落ち着いてきて、気持ちに余裕が出て来たので、
4/22に頂いたコメントに関して、試してみました。

結果は記事に追記しましたが、無事telnetログインまで成功しました。
いろいろサポート頂きありがとうございました。

最近このブログご覧になっているか分かりませんが、感謝の報告まで。

No title

こんばんわ。
その後、Etherは最初からオート・ネゴシエーションをOFFにして、ケーブルの接続手順とか煩わしさをなくしたものをアップしましたので、よろしければお試し下さい。その他、色々バグ取りおよび新たな機能、また、遅すぎて実用にはなりませんがWebKitを移植してブラウザが使えるようにして見ましたので、こちらもよろしければお試し頂ければ幸です。
カレンダー
01 | 2020/02 | 03
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード