FC2カウンター FPGAの部屋 Linux

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

ikwzm さんの構築したPYNQ ボード用DebianでのPS出力クロックfclkの設定方法

”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる9(入れ替え2)”を解決する試み。

昨日のFASTX コーナー検出、ラプラシアンフィルタ、アンシャープ・マスクキング・フィルタの回路が動かないと書いたが、ikwzm さんがクロックはどうなっているかと聞いてくれて、それでハッと気が付いた。Zynq のクロックはPSから供給されていて、ビットファイルは関係ない。。。
ikzwm さんから、”Linux でユーザー空間から Zynq の PLクロック信号を制御するデバイスドライバ”を教えて頂いた。いつもありがとうございます。しかし、何でも作ってありますね。。。
更に、今回のFASTX コーナー検出、ラプラシアンフィルタ、アンシャープ・マスクキング・フィルタの回路用の設定も教えてもらった

ikwzm/fclk-install によると、デバイスツリー・オーバーレイを設定する dtbocfg.rb というコマンドがPYNQ ボードのDebian に入っているそうだ。
PYNQ_Linux_ikwzm_95_170414.png

ikwzm/fclk-install の 4 つの DTS ファイルを fclk0-zynq-pynq.dts、fclk1-zynq-pynq.dts、fclk2-zynq-pynq.dts、fclk3-zynq-pynq.dts ファイルとして、~/device_tree_overlay/fclk_install ディレクトリにセーブした。
PYNQ_Linux_ikwzm_96_170414.png

4 つの DTS ファイルのうちの fclk0-zynq-pynq.dts ファイルを示す。なお、これらのファイルはikwzm/fclk-install の fclk0-zynq-zybo.dts ~ fclk3-zynq-zybo.dts のコピーだ。
fclk0-zynq-pynq.dts を示す。

/dts-v1/;
/ {
    fragment@0 {
        target-path = "/amba";
        __overlay__ {
            fclk0 {
                compatible  = "ikwzm,fclkcfg-0.10.a";
                clocks      = <1 15>;
            };
        };
    };
};


fclk1-zynq-pynq.dts は fclk0 が fclk1 に変更されている。
更に、
clocks      = <1 15>;

clocks      = <1 16>;
になっていて、+1 されている。これは、fclk2, fclk3 も同様だ。

さて、 fclk0-zynq-pynq.dts をデバイスツリー・オーバーレイとしてロードしてみよう。
スーパーユーザーになって、次のコマンドを実行した。
dtbocfg.rb --install --dts fclk0-zynq-pynq.dts fclk0
PYNQ_Linux_ikwzm_97_170414.png

シリアル接続のコンソールに fclk0 の表示が出た。
PYNQ_Linux_ikwzm_106_170414.png

/config/device-tree/overlays ディレクトリに fclk0 ディレクトリができた。
PYNQ_Linux_ikwzm_98_170414.png

fclk0 ディレクトリの中には、dtbo と status ファイルがあった。
PYNQ_Linux_ikwzm_99_170414.png

/sys/class/flckcfg ディレクトリには、fclk0 ディレクトリへのリンクがあった。
PYNQ_Linux_ikwzm_100_170414.png

/sys/class/flckcfg/fclk0 ディレクトリの内容を示す。
PYNQ_Linux_ikwzm_101_170414.png

enable, rate, round_rate ファイルをリードした。
PYNQ_Linux_ikwzm_102_170414.png

enable = 1, rate = 100000000 で 100 MHz だった。round_rate は値がおかしいというか、0 Hz の設定値だったら 251.953 KHz だよ、ということなんだろう?と思う。

試しにスーパーユーザーになって、100000000 を設定してみたところ、100000000 になった。
PYNQ_Linux_ikwzm_103_170414.png

試しに
echo 25000000 > rate
で、fclk0 を 25 MHz に設定してみた。
PYNQ_Linux_ikwzm_104_170414.png
  1. 2017年04月14日 05:12 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる2(Micro SDカードの準備)

”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる1(FPGA-SoC-Linux のクローン)”の続き。

前回は、FPGA-SoC-Linux をクローンした。今回は、Micro SDカードをフォーマットして、パーティションを切った。

最初に、SDカードフォーマッターでMicro SDカードをフォーマットする。このMicro SDカードはPYNQ用のイメージを書いてあるので、上書きフォーマットで論理サイズ調整 ON でフォーマットする。

SDFormatter V4.0 を起動して、オプション設定ボタンをクリックする。
PYNQ_Linux_ikwzm_15_170325.png

フォーマットオプション設定で、上書きフォーマットと論理サイズ調整 ON を指定してOKボタンをクリックする。
PYNQ_Linux_ikwzm_16_170325.png

フォーマットボタンをクリックし、Micro SDカードのフォーマットを行う。
PYNQ_Linux_ikwzm_17_170325.png

確認ダイアログが出るので、OKボタンをクリックした。
PYNQ_Linux_ikwzm_18_170325.png

しばらくの間、フォーマットしていたが、フォーマットが終了した。
PYNQ_Linux_ikwzm_19_170325.png

次にMicro SDカードにパーティションを作っていこう。
ZedBoard用のUbuntu Linuxをビルド6(SDカードを用意する)”を参考にした。
なお、FPGAマガジン No.5 の第3章”Zynq評価ボードZedBoardでLinuxを動かそう”という石原 ひでみさんの記事の中の48ページの”図17 SDカードのパーティション操作手順”を参考にさせて頂いています。

私の環境はWindows 10 でVirtualBoxを使用して、Ubuntu 16.04 をインストールしてある。
Micro SDカードは、秋月電子で購入した”TOSHIBA マイクロSDカード(microSDHC)EXCERIA 16GB 48MB/s”を使用している。このMicro SDカードは古いカード・リーダー・ライタでは認識できなかった。

Windows 10 のパソコンに挿入した Micro SDカードをVirtualBox 上のUbuntu にマウントするためにVirtualBox のデバイスメニュー -> USB -> USBリーダーの名前(Micro SDカードが装着してある)を選択した。
PYNQ_Linux_ikwzm_20_170326.png

/media/masaaki/1BC2-1630 としてマウントされた。
PYNQ_Linux_ikwzm_21_170326.png

lsblk コマンドを実行して、SDカードを検索した。
PYNQ_Linux_ikwzm_22_170326.png

/dev/sdb がSDカードのようだ。
sudo unmount /dev/sdb1 で sdb1 をアンマウントしておく。こうしないと後で w コマンドで書き込むときにエラーになってしまう。
sudo fdisk /dev/sdb コマンドを実行してSDカードのフォーマットを開始した。
PYNQ_Linux_ikwzm_23_170326.png

p コマンドで既存のパーティションを表示した。FAT32パーティションが生成されていた。
d コマンドでパーティションを削除した。
p コマンドで見ると、パーティションが消去されていた。
PYNQ_Linux_ikwzm_24_170326.png

プライマリ・ディスクのパーティション番号1に100 MBの領域を確保する

n コマンドで新たにパーティションを作製した。
p を押して、primary パーティションを指定した。
パーティション番号を 1 にセット。
First sector で、リターンキーを入力した。
Last sector で、+100M を入力して、100 MB の領域を確保した。
p コマンドででパーティションを表示した。
PYNQ_Linux_ikwzm_25_170326.png

プライマリ・ディスクのパーティション番号2に残っている領域(14.3 GB)を確保する
n コマンドで新たにパーティションを作製した。
p を押して、primary パーティションを指定した。
パーティション番号を 2 にセット。
First sector で、リターンキーを入力した。
Last sector で、リターンキーを入力した。
p コマンドででパーティションを表示した。
PYNQ_Linux_ikwzm_26_170326.png

プライマリ・ディスクのパーティション番号1をFAT32にして、ブート可能フラグを付ける
t コマンドを入力した。
パーティション番号に 1 を入力した。
16進コードに、b を入力した。(W95 FAT32)
a コマンドを入力して、ブート可能フラグを付ける。
パーティション番号に 1 を入力した。
p コマンドででパーティションを表示した。
PYNQ_Linux_ikwzm_27_170326.png

SDカードへの書き込み

w コマンドを実行して、今まで設定してきたパーティション情報をMicro SDカードにWrite した。
PYNQ_Linux_ikwzm_28_170326.png

lsblk を行うと、設定したパーティションが sdb1, sdb2 として見えている。
FPGAマガジン No.5 の第3章”Zynq評価ボードZedBoardでLinuxを動かそう”という石原 ひでみさんの記事を参考に、/dev/sdb1 に対して、

sudo mkfs.msdos -n PYNQ_BOO /dev/sdb1

を実行した。(PYNQ_BOOT としたかったが、PYNQ_BOO とタイポしてしまった)
PYNQ_Linux_ikwzm_29_170326.png

PYNQ_BOO がマウントされた。
PYNQ_Linux_ikwzm_30_170326.png

同様に、/dev/sdb2 に対して、

sudo mkfs.ext3 -L ROOT_FS /dev/sdb2

を実行した。(ファイルシステムは ext3 指定だった)
Writing superblocks and filesystem accounting infomation: でリターンを入力した。
PYNQ_Linux_ikwzm_31_170326.png

コマンドが終了した。
PYNQ_Linux_ikwzm_32_170326.png

ROOT_FS がマウントされた。
PYNQ_Linux_ikwzm_33_170326.png

これで、Micro SDカードの用意は終了した。
  1. 2017年03月27日 04:50 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみる1(FPGA-SoC-Linux のクローン)

ikwzm さんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”を試してみようと思う。

Device Tree Overlay+FPGA Managerが使用できれば、SDSoC でビットストリームとアプリケーションソフトが作れれば、すでに動作しているLinux 上でリブートすること無しにいくらでも試すことができる。”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”もこのままの状態で起動したら、Device Tree Overlay+FPGA Managerでハードウェアとそのデバイスツリーを使ってFPGA を使うことができるはずだ。つまりLinux は動作しながら、FPGAでアクセラレーションできるわけだ。という理由でやってみることにした。
参考資料

FPGA+SoC+LinuxでDevice Tree Overlayを試してみた
”FPGA+SoC+LinuxでFPGA Managerを試してみた


まずは、”FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(PYNQ-Z1対応)”で指定されているように、Git LFS(Large File Storage)を自分のVirtualBox 上のUbuntu 16.04 に追加します。
sudo apt-get install git-lfs
PYNQ_Linux_ikwzm_1_170325.png

git-lfs が無いと言われてしまう。
GitHub のgit-lfs/git-lfs の Installation を見るとUbuntu での git-lfs のインストール方法が書いてあった。その手順に従ってUbuntu 16.04 上で git-lfs のインストールを行う。

sudo apt-get install python-software-properties
PYNQ_Linux_ikwzm_2_170325.png

Yをクリックしてインストールを進めると、python-software-properties がインストールできた。
sudo add-apt-repository ppa:git-core/ppa
PYNQ_Linux_ikwzm_3_170325.png

PYNQ_Linux_ikwzm_4_170325.png

ppa をインストールすることができた。
この後で、sudo apt-get update をするように書いてあるが、忘れてしまった。最後にsudo apt-get updatesudo apt-get upgrade を実行しておいたが、これで良いかどうか?よくわからない?

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
PYNQ_Linux_ikwzm_5_170325.png

sudo apt-get install git-lfs
PYNQ_Linux_ikwzm_6_170325.png

git lfs install
PYNQ_Linux_ikwzm_7_170325.png

これで git lfs がインストールできた。

さて、ikwzm さんのFPGA-SoC-Linux をクローンする。
git clone git://github.com/ikwzm/FPGA-SoC-Linux
cd FPGA-SoC-Linux
ls

PYNQ_Linux_ikwzm_8_170325.png

FPGA-SoC-Linux ディレクトリの下には12個のファイルまたはディレクトリがあった。
PYNQ_Linux_ikwzm_10_170325.png

git checkout v0.3.0
PYNQ_Linux_ikwzm_11_170325.png

git lfs pull
PYNQ_Linux_ikwzm_12_170325.png

FPGA-SoC-Linux ディレクトリの下のファイルまたはディレクトリが 9 個に減った。
PYNQ_Linux_ikwzm_13_170325.png

FPGA-SoC-Linux/target/zynq-pynqz1/boot ディレクトリのファイルを示す。
PYNQ_Linux_ikwzm_14_170325.png

boot.bin や u-boot, デバイスツリーの dts と dtb, uEnv.txt, zImage などが入っていた。
  1. 2017年03月26日 06:01 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

ZYBOのUbuntuでMicro SDのMS DOSの第1パーティションをマウントする

ZYBO で動作しているUbuntu でMS DOS(FAT フォーマット)第1パーティションをマウントできて書き換えられれば、Micro SDカードを外さなくてもBOOT.bin や devicetree.dtb などを書き換えて、再度ブートすることでハードウェアの環境を書き換えることができるだろう?ということでやってみた。

まずは、lsblk でMicro SDの各パーティションの情報を見た。
ZYBO_Ubuntu_mount_1_170113.png

マウント用のディレクトリ zybo_boot を /mnt の下に作成した。mkdir zybo_boot
ZYBO_Ubuntu_mount_2_170113.png

mmcblk0p1 がマウントしたいMS DOS のFATフォーマットのドライブのようだ。これの実体は /dev にあった。
ZYBO_Ubuntu_mount_3_170113.png

起動時に実行される /etc/rc.local にマウント コマンドを書く。 vi /etc/rc.local
ZYBO_Ubuntu_mount_4_170113.png

/etc/rc.local に mount -t vfat -o rw /dev/mmcblk0p1 /mnt/zybo_boot コマンドを書いた。
ZYBO_Ubuntu_mount_5_170113.png

これで、reboot すると、/mnt/zybo_boot にMicro SDカードの第1パーティションのドライブがマウントされた。
ZYBO_Ubuntu_mount_6_170113.png
  1. 2017年01月13日 17:30 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

Linux の C 言語でノンブロッキングキー入力をする

Linux の C 言語でノンブロッキングキー入力をする方法を探していたのだが、「mfumiの日記」さんの「Cでnon-blocking IO」に書いてあったコードで見事、ノンブロッキングキー入力ができました。ありがとうございました。

私のコードではキー入力が見えた方が良いので、エコーバックは除いていないです。
このノンブロッキングキー入力のコードは、「2台の Zybot での隊列走行5(追従走行を試してみた)」の platoon_car1.cpp で使っていて、うまく動いています。
  1. 2016年12月01日 20:34 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

FPGA GO のXiltera ディストリビューションをビルドした

FPGAマガジンNo.12の「第4章 共通カスタムLinuxディストリビューションの開発」をやってみた1”でXiltera のビルドに失敗したので、ひでみさんのFPGA GO の 24 ページの Xiltera ディストリビューションをビルドしてみることにした。

ただし、、ひでみさんのFPGA GO では、Ubuntu 16.04 を使用していたが、私が使用しているのはUbuntu 14.04 だ。

最初の 28 ページの下準備は”FPGAマガジンNo.12の「第4章 共通カスタムLinuxディストリビューションの開発」をやってみた1”でやったのでパスした。

repo もすでにインストールされている。Ubuntu 14.04 では apt-get では repo のパッケージがなかった。

git clone git://github.com/aquaxis/build-xiltera.git
cd build-xitrea
を行った。
XA_Linux_build_8_161108.png

./bulid-xiltera.sh を行った。
XA_Linux_build_9_161109.png

エラーが出て進まない。やはりUbuntu 14.04 ではダメなのかな?
  1. 2016年11月12日 04:28 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

FPGAマガジンNo.12の「第4章 共通カスタムLinuxディストリビューションの開発」をやってみた1

FPGAマガジンNo.12 ARMコアFPGA×Linux初体験」の「第4章 共通カスタムLinuxディストリビューションの開発」をやってみることにした。
きっかけは、「Intel SoC FPGA デベロッパー・フォーラム」でDE0-Nano-SoC をもらってしまったので、何かやらねばということで、沿いう言えばひでみさんの記事のZynq とSoC FPGA 両対応でブートできるSDカードをやってみたかったんだっけ?ということで、試しにやってみることにした。
なお、売り物の記事の内容を実行してみているので、具体的な手順ははっきりと示さない。やってみたいと思ったら、FPGAマガジンNo.12 を購入してやってほしい。

環境はWindows 10 でVirtualBox 5.1.8 を動かして、そこにUbuntu 14.04 LTS を動作させている。それ上でビルドしている。

最初に49 ページ左カラム真ん中のYocto Project のビルドで必要なツール類をインストールした。
XA_Linux_build_1_161103.png

49ページ左下のrepo コマンドをダウンロードしたところだ。
XA_Linux_build_2_161103.png

図5 の repo sync が終了した。
XA_Linux_build_3_161103.png

図5 の cd poky; ls が終了したところだ。
XA_Linux_build_4_161103.png

49 ページ真ん中の ls conf が終了した。
XA_Linux_build_5_161103.png

Linux ディストリビューションのレシピ名を表示した。
XA_Linux_build_6_161103.png

図6 のcd tmp/deploy/sdk できなかった。tmp ディレクトリの下は cache しかなかった。
XA_Linux_build_7_161103.png

困ったな。どうしよう?
善後策を考える。
  1. 2016年11月03日 07:58 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0
»