[VEEK][altera wiki]Nios2 SMP System(1)
先日の記事コメントで教えて頂いた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)ファイル作成方法
どんなファイルを用意すれば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 IIEDS -> 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を復元
以下のメモ書いた。しかし、結果として出荷時の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データは、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デバッグ)
枯渇せず、常に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変更。