In my previous post on the iCEBreaker Bitsy FPGA - early adopter version, I mentioned the interesting iua: ice40 USB Analyzer project that I learned about on the iCEBreaker discord channel in the context of troubleshooting the odd problem I was seeing on my "Power Share" USB3.0 port.
There's minimal documentation on Getting Started, so here I am creating my notes.
The iua
is meant for the iCEBreaker, not the Bitsy (although I wonder if it would still work on the Bisty? another rabbit hole for another day...)
As with all prior posts, I'm a Visual Studio developer at the day job, and continue that with my FPGA learning on the weekends... thus I use Windows, WSL, and Visual Studio here.
cd /mnt/c/workspace/
git clone https://github.com/smunaut/iua.git
cd iua/hdl
make
As reminder, if you have a VM running, make sure you are not having problems with a prompt awaiting device connection:
Also, even if you've used
iceprog
before and it decides to not find the icEBreaker today, check the drivers with Zadig. Windows seems to like to replace the drivers during updates. The iCEBreaker needs the libusbK
drivers.dfu-util
, the iCEBreaker does NOT need that when using iceprog
As there's no native USB support in my WSL, I use the DOS exe to send the binary to the device either from DOS:
C:\workspace\ulx3s-toolchain\bin\iceprog.exe
or from WSL:
/mnt/c/workspace/ulx3s-toolchain/bin/iceprog.exe iua_icebreaker_top.bin
When successful, there should be output that looks something like this:init..
cdone: high
reset..
cdone: low
flash ID: 0xEF 0x40 0x18 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
file size: 104090
erase 64kB sector at 0x000000..
erase 64kB sector at 0x010000..
programming..
reading..
VERIFY OK
cdone: high
Bye.
So that was the easy part. (The easy part is always the thing you already know). The next part - sigrok - is something that I've wanted to learn more about for quite some time. There's another smunaut/libsigrok project needed, which is a modified fork of sigrokproject/libsigrok and needs to be built like this:
git clone git://sigrok.org/libsigrok
cd libsigrok
./autogen.sh
./configure
make
People often ask why I deal with the annoyances of Windows. Well, Linux has plenty as well, imho. I had most of the dependencies already installed, but receieved this error diring
make
configure: error: Package requirements (glib-2.0 >= 2.32.0 libftdi1 >= 1.0 libusb-1.0 >= 1.0.16 gio-2.0 >= 2.24.0 libzip >= 0.10) were not met:
No package 'libzip' found
And so what's the first thing to try? Well,
sudo apt-get install libzip
, right? Nope. :/
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package libzip
grumble, grumble, google, grumble....
There's only one reference on the wiki, and it only notes I need
libzip >= 0.10
. But where to find it? Ah yes, it is just the development code library, not a tool, so we need the -dev
suffix:
sudo apt-get install libzip-dev
Ok, now to run
./configure
again...
Closer this time; I am still missing some things:
Enabled language bindings:
- C++............................. no (missing: glibmm, Doxygen)
- Python.......................... no (missing: C++ bindings, PyGObject, SWIG)
- Ruby............................ no (missing: C++ bindings, SWIG)
- Java............................ no (missing: C++ bindings, SWIG, JavaC, JNI headers)
===============================================================================
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
===============================================================================
=== ===
=== The libsigrok C++ bindings are not being built since you ===
=== are missing one or more dependencies (see above)! ===
=== ===
=== This means you won't be able to compile frontends that require ===
=== the C++ bindings (such as PulseView)! You also won't be able to build ===
=== other bindings and frontends using those (such as sigrok-meter)! ===
=== ===
===============================================================================
WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
===============================================================================
ugh.
gojimmypi:/mnt/c/workspace/libsigrok
$ sudo apt-get install glibmm
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package glibmm
gojimmypi:/mnt/c/workspace/libsigrok
$ sudo apt-get install glibmm-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package glibmm-dev
gojimmypi:/mnt/c/workspace/libsigrok
grumble, grumble, google, grumble....
This one requires a version number in the name. Of course it does. So onward to install: glibmm. I'll grab
doxygen
too, and then one more ./configure
as well:sudo apt-get install libglibmm-2.4-dev
sudo apt-get install doxygen
./configure
No warnings! Hurray!! So on to a (very long running)
make
, then:
$ make check
make
make all-am
make check-TESTS
============================================================================
Testsuite summary for libsigrok 0.6.0
============================================================================
# TOTAL: 0
# PASS: 0
# SKIP: 0
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
============================================================================
$ sudo make install
/bin/mkdir -p '/usr/local/lib'
/bin/bash ./libtool --silent --mode=install /usr/bin/install -c libsigrok.la bindings/cxx/libsigrokcxx.la '/usr/local/lib'
libtool: warning: relinking 'bindings/cxx/libsigrokcxx.la'
/bin/mkdir -p '/usr/local/include/libsigrokcxx'
/usr/bin/install -c -m 644 bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp '/usr/local/include/libsigrokcxx'
/bin/mkdir -p '/usr/local/include/libsigrok'
/usr/bin/install -c -m 644 include/libsigrok/libsigrok.h include/libsigrok/proto.h '/usr/local/include/libsigrok'
/bin/mkdir -p '/usr/local/share/mime/packages'
/usr/bin/install -c -m 644 contrib/vnd.sigrok.session.xml '/usr/local/share/mime/packages'
/bin/mkdir -p '/usr/local/share/icons/hicolor/48x48/mimetypes'
/usr/bin/install -c -m 644 contrib/libsigrok.png '/usr/local/share/icons/hicolor/48x48/mimetypes'
/bin/mkdir -p '/usr/local/share/icons/hicolor/scalable/mimetypes'
/usr/bin/install -c -m 644 contrib/libsigrok.svg '/usr/local/share/icons/hicolor/scalable/mimetypes'
/bin/mkdir -p '/usr/local/include/libsigrokcxx'
/usr/bin/install -c -m 644 bindings/cxx/include/libsigrokcxx/enums.hpp '/usr/local/include/libsigrokcxx'
/bin/mkdir -p '/usr/local/include/libsigrok'
/usr/bin/install -c -m 644 include/libsigrok/version.h '/usr/local/include/libsigrok'
/bin/mkdir -p '/usr/local/lib/pkgconfig'
/usr/bin/install -c -m 644 libsigrok.pc bindings/cxx/libsigrokcxx.pc '/usr/local/lib/pkgconfig'
Next is to install decoder:
git clone https://github.com/sigrokproject/libsigrokdecode.git
cd libsigrokdecode
./autogen.sh
./configure
make
sudo make install
Next is to install Pulseview! (see also build info). Despite having the requirements installed, I also needed:
sudo apt-get install qttools5-dev
git clone https://github.com/sigrokproject/pulseview.git
cd pulseview
cmake .
make
sudo make install
Still following along? After all this, it is time to actually run
pulseview
! Alas on WSL we have an extra challenge: X-Windows. I'm using vcxsrv
from the ad-spam-ridden sourceforge. (it is really a shame to see what that site has become).
C:\Program Files\VcXsrv\vcxsrv.exe
See building libsigrok, but use the
smunaut/libsigrok
sudo apt-get install git-core gcc make autoconf automake libtool
git clone https://github.com/sigrokproject/libserialport.git
cd libserialport
./autogen.sh
./configure
make
sudo make install
git clone https://github.com/smunaut/libsigrok.git smunaut-libsigrok
cd smunaut-libsigrok
./autogen.sh
./configure
make
sudo make install
See build failure for smunaut/libsigrok #2
If after doing a
make clean
for pulseview, and an error like this is enountered:
$ make
[ 1%] Automatic MOC for target pulseview
[ 1%] Built target pulseview_autogen
make[2]: *** No rule to make target 'l10n/de.qm', needed by 'qrc_translations.cpp'. Stop.
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/pulseview.dir/all' failed
make[1]: *** [CMakeFiles/pulseview.dir/all] Error 2
Makefile:151: recipe for target 'all' failed
make: *** [all] Error 2
The problem seems to be that
make clean
improperly deletes a couple of files:
gojimmypi:/mnt/c/workspace/pulseview
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: l10n/de.ts
deleted: l10n/es_MX.ts
no changes added to commit (use "git add" and/or "git commit -a")
gojimmypi:/mnt/c/workspace/pulseview
So simply put them back:
git checkout master
git checkout l10n/de.ts
git checkout l10n/es_MX.ts
Despite
gojimmypi:/mnt/c/workspace/smunaut-libsigrok
$ ./configure
...
Detected libraries (optional):
- libserialport >= 0.1.1.......... 0.1.1
I still saw wthis error:
pulseview: error while loading shared libraries: libserialport.so.0: cannot open shared object file: No such file or directory
sudo apt-get install libserialport-dev
Great blog - really like that you clearly show both the issues, and how you worked around - true mathematical style :-) Much appreciated
ReplyDeleteThank you
ReplyDelete