fc2ブログ

[VEEK][altera wiki]Nios2 SMP System(1)

http://bobgosso.blog13.fc2.com/blog-entry-249.html#comment57

先日の記事コメントで教えて頂いたNios2 SMP Systemをやってみる。

・上記の記事でやったのをベースに、Application Selector用データ(*_HW.bin、*_SW.bin)
 をコピーするだけ。
http://www.alterawiki.com/wiki/Nios2_SMP_System

Download of Compiled Samples
File:Nios2 quad HW.bin.tar.gz (Quad core Nios2 = 4 CPUS Example.)
File:Linux.initramfs.smp SW.bin.tar.gz (This Kernel supports up to 4 CPUS.)


 VMware上のゲストOSでSDカードへライトしてやり、tar.gzを展開すると.binが得られた。

・SDカードを挿入しtPADの電源をONすると、uClinuxが起動した。
 しかも、Quad CoreのHW.binを使ったせいか、ロゴのペンギンが4匹になっとる!
 いいなぁ。こんなふうにHWとSWいろいろいじれるようになりたいなぁ。

・uClinuxプロンプトでtopコマンドを実行すると、CPU使用率が見れるが、4コアある事は分からない。
 キーボードで1を入力すると表示が変わり、CPU0~3まで4コアあるとの表示が見えた。

 これ以上は何をして良いか分からないので、とりあえず確認終了。
スポンサーサイト



[VEEK]Application Selector用HW(.sof -> .flash -> .bin), SW(.elf -> .bin)ファイル作成方法

http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=139&No=670&PartNo=4

どんなファイルを用意すればApplication Selectorで読めるのか?を調べた。

◆pdfのpage44のCreating Your Own Loadable Applications説明和訳
・必要な物は、HWイメージ(.sof)と、それ上で動くSWイメージ(NIOS II .elf)のみ。

・制約は以下だけ。
  - HWデザインはCFI Flash controllerを含む事。
  - .SOFがNios IIを含むなら、リセットアドレス=CFI Flash、offset 0x0 にする。
  - プログラムメモリ (.text section)はフラッシュメモリへセット。

・.SOFと.ELFは以下ステップで変換。
  - Nios II Command Shell起動(Start ->Programs -> Altera -> Nios II EDS -> Nios II Command Shell)
  - sof2flash --epcs --input=*.sof --output=*_HW.flash
  - nios2-elf-objcopy –I srec –O binary *_HW.flash *_HW.bin
  - nios2-elf-objcopy –O binary *.elf *_SW.bin
  - SDカード内Dir構成: Application_Selector\<表示アプリ名>\*_SW.bin & *_HW.bin



・今やってる「Linux with MMU on VEEK/t-Pad」を参考にやってみる。
 ちなみに、Cygwinではエラーが出て出来なかった。

x230: sof2flash --epcs --input= DE2_115_NIOS_HOST_MOUSE_VGA_time_limited.sof --output= DE2_115_NIOS_HOST_MOUS
E_VGA_time_limited_HW.flash
: No such file or directorys2eds/bin/sof2flash: line 4: /cygdrive/c/altera/13.1/nios2eds/bin/sh_jar.sh



・さらに、この記事によると、ふつーに実行してもダメらしい。
http://shopaltera.com/support/kdb/solutions/rd11112013_614.html
確かに、記事にあるQUARTUS_BINDIR変数を設定しなかったら、実行してもエラーは出ないが何も生成されなかった。
なので、ちゃんとNios Command Shellをスタートメニューのプログラムから起動して、さらに記事に従い変数も設定して実行してみた。しかしエラー。

bob@x230 /cygdrive/c/user/work/veek/Linux_with_MMU_on_VEEK_t-Pad/DE2_115_NIOS_HOST_MOUSE_VGA_restored
$ export QUARTUS_BINDIR=${QUARTUS_ROOTDIR}/bin

bob@x230 /cygdrive/c/user/work/veek/Linux_with_MMU_on_VEEK_t-Pad/DE2_115_NIOS_HOST_MOUSE_VGA_restored
$ sof2flash --epcs --input=DE2_115_NIOS_HOST_MOUSE_VGA_time_limited.sof --output=DE2_115_NIOS_HOST_MOUSE_VGA_time_
limited_HW.flash
Info: *******************************************************************
Info: Running Quartus II 32-bit Convert_programming_file
Info: Command: quartus_cpf --no_banner --convert --device=EPCS128 --option=DE2_115_NIOS_HOST_MOUSE_VGA_time_limited
_HW.opt DE2_115_NIOS_HOST_MOUSE_VGA_time_limited.sof DE2_115_NIOS_HOST_MOUSE_VGA_time_limited_HW.pof
File DE2_115_NIOS_HOST_MOUSE_VGA_time_limited.sof contains one or more time-limited megafunctions that support the
OpenCore Plus feature that will not work after the hardware evaluation time expires. Refer to the Messages window f
or evaluation time details.
Info (210040): SRAM Object File DE2_115_NIOS_HOST_MOUSE_VGA_time_limited.sof contains time-limited megafunction tha
t supports OpenCore Plus feature -- Vendor: 0x6AF7, Product: 0x00A2
Error: Quartus II 32-bit Convert_programming_file was unsuccessful. 0 errors, 0 warnings
Error: Peak virtual memory: 199 megabytes
Error: Processing ended: Sun Jan 05 02:43:54 2014
Error: Elapsed time: 00:00:03
Error: Total CPU time (on all processors): 00:00:03
Info: *******************************************************************
Info: Running Quartus II 32-bit Convert_programming_file
Info: Command: quartus_cpf --no_banner --convert DE2_115_NIOS_HOST_MOUSE_VGA_time_limited_HW.pof DE2_115_NIOS_HOST_
MOUSE_VGA_time_limited_HW.rpd
Error (213009): File name "DE2_115_NIOS_HOST_MOUSE_VGA_time_limited_HW.pof" does not exist
Error: Quartus II 32-bit Convert_programming_file was unsuccessful. 1 error, 0 warnings
Error: Peak virtual memory: 183 megabytes
Error: Processing ended: Sun Jan 05 02:43:57 2014
Error: Elapsed time: 00:00:01
Error: Total CPU time (on all processors): 00:00:01
2014/01/05 2:43:57 - (致命的) sof2flash: Read error: File: DE2_115_NIOS_HOST_MOUSE_VGA_time_limited_HW.rpd not foun
d, exiting
2014/01/05 2:43:57 - (致命的) sof2flash: Error retrieving data from DE2_115_NIOS_HOST_MOUSE_VGA_time_limited_HW.rpd

[VEEK]Application SelectorのFactory Imageを復元

VEEKのApplication Selectorをいじろうと思って、以前出荷時のデータ消したつもりでいたので、
以下のメモ書いた。しかし、結果として出荷時のApplication Selectorのデータ残ってたので、
以下メモは中途半端。


■USB Blasterドライバインストール
・久しぶりにVEEKを電源ONしたら、USB Blasterのドライバ不足っぽい。

・デバイスマネージャで、QuartusII 13.0sp1のインストールフォルダの以下参照しても、
 「ドライバは既に最新版」と言われるが、?のまま使えない。
C:\altera\13.0sp1\quartus\drivers\usb-blaster\x64

・以下のサイトで、Win7 64bit用のUSB Blasterドライバページを参照したら、
 上記のQuartusIIインストールフォルダを参照、となってたが、違いは以下だった。忘れてた。
http://www.altera.co.jp/download/drivers/dri-index.html

 × = C:\altera\13.0sp1\quartus\drivers\usb-blaster\x64
 ○ = C:\altera\13.0sp1\quartus\drivers\usb-blaster

■Application SelectorのFactory Imageを準備
・以前入手したデータにそれらしきものあったので、Cドライブへコピー。(以下は私物のパス)
NASの中の user\book\fpga\altera\veek\tpad2.0.0\tPad_Demonstration\tPad_Selector

・QuartusII起動 > コピーした上記フォルダ内「tPad_Selector.qpf」を選択。
  > Tools > Programmer > tPad_Selector.sofが選択されている事を確認。
  > Hardware SetupボタンでUSB Blaster [USB-0]を選択 > Startボタンを押すが、Speccify Hardware setupとか何とか言われてダウンロード出来ない。

 たぶん、SW19のDIPスイッチが、PROG側でなくてRUN側になってるからかな?
 これはマニュアル要確認と。

 っと思ってたら、そもそも、VEEK起動したら、Application Selector動いてる。

■SDカードの修復
 今回、VEEK用SDカード発見出来たので不要になったが、Application Selectorで読み込める
 SDカードを作るには以下に注意との事。
  Tpad_User_manual.pdf 5.3 Application Selector Detais参照

 ・フォーマット=FAT16
 ・SDカード内のトップフォルダ=Application_Selector
  このトップフォルダ以下へサブフォルダを作成し、各アプリを保存。
  このサブフォルダ名が、実際の選択画面の名前になる。
 ・アプリファイルの命名規則は以下。
   FPGAのコンフィグデータ = *_HW.bin
   NiosIIのソフトデータ  = *_SW.bin

[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へログインしてから何をしたら良いのか?は別の機会に調べるとして、とにかくここまでは成功。

[VEEK]カメラの映像を表示したい(13)(SDRAM to LCD用SGDMAデバッグ)

まずは、最終段のPixel FIFOデータが枯渇してないか確認したい。
枯渇せず、常に1Frame分のデータをLCDへ送っているのなら画面がチラチラしないはずだから。

QsysでPixel FIFOの設定変更。(これが参考になるか不明だがとりあえずやってみる)

・Depth = 1024 -> 2048へ
・Create Status Interface for input にチェック。
・Create Status Interface for output にチェック。



最初にFIFO入力I/Fの方から。
FULL割り込み許可して、更にFIFO入力I/F割り込みハンドラへ飛んだ時は、
ハンドラ内でFULL割り込みBITクリアするよう設定。
それからSGDMAスタートすると何度かFULL割り込みかかるが、
途中からFULL割り込みはかからなくなる。

次はFIFO出力I/Fの方。
EMPTY割り込み許可して、更にFIFO出力I/F割り込みハンドラへ飛んだ時は、
ハンドラ内でEMPTY割り込みBITクリアするよう設定。
最初からやり直すと、継続してFIFO出力I/F割り込みハンドラへ飛んでしまう。
おそらくPIXEL FIFOへの画像データ送信が間に合わず枯渇してると予想。
そもそも、SDRAM含めて、全てLCDドットクロックの40MHzでインプリしてるのが
問題と思う。(System ID Not Found問題あったので全て同期クロックにしてた)

PIXEL FIFO部が2port FIFOで非同期吸収するはずだから、その前後で
クロック変えてみよう。

・PIXEL FIFO前段回路(NiosII含む)を40 -> 80MHzへ変更。
・UART DIVISOR設定を、80MHz用へSW変更。

カレンダー
11 | 2023/12 | 01
- - - - - 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 30
31 - - - - - -
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

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

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

この人とブロともになる

QRコード
QRコード