docker run -it fedora bash
docker run -it ubuntu bash
docker run -d --name portainer -p 9000:9000 -v "/var/run/docker.sock:/var/run/docker.sock" portainer/portainer
FROM ubuntu:latest
WORKDIR /root
RUN apt-get update && apt-get install -y python python-pip \
&& pip install -U pip apio \
&& apio drivers --enable \
&& apio install --all# apio drivers --enable
Configure FTDI drivers for FPGA
Traceback (most recent call last):
File "./root/.local/bin/apio", line 11, in <module>
sys.exit(cli())
File "/root/.local/lib/python2.7/site-packages/click/core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "/root/.local/lib/python2.7/site-packages/click/core.py", line 697, in main
rv = self.invoke(ctx)
File "/root/.local/lib/python2.7/site-packages/click/core.py", line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/root/.local/lib/python2.7/site-packages/click/core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/root/.local/lib/python2.7/site-packages/click/core.py", line 535, in invoke
return callback(*args, **kwargs)
File "/root/.local/lib/python2.7/site-packages/click/decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "/root/.local/lib/python2.7/site-packages/apio/commands/drivers.py", line 24, in cli
exit_code = Drivers().enable()
File "/root/.local/lib/python2.7/site-packages/apio/managers/drivers.py", line 52, in enable
return self._enable_linux()
File "/root/.local/lib/python2.7/site-packages/apio/managers/drivers.py", line 78, in _enable_linux
self.rules_local_path, self.rules_system_path])
File "/usr/lib/python2.7/subprocess.py", line 523, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Por lo tanto, el posible 'bug' es que no se comprueba la existencia de la carpeta. Es razonable para cualquier sistema completo, pero las imágenes de docker no tienen esa carpeta, ya que dependen del Host para ello. Aun así, he creado la carpeta para que exista y sigue dando el mismo error.$ sudo cp 80-icestick.rules /etc/udev/rules.d/
$ sudo service udev restart
def _enable_linux(self):
click.secho('Configure FTDI drivers for FPGA')
if not isfile(self.rules_system_path):
subprocess.call(['sudo', 'cp',
self.rules_local_path, self.rules_system_path])
subprocess.call(['sudo', 'service', 'udev', 'restart'])$ mkdir tmpdir && cd tmpdir
$ wget https://raw.githubusercontent.com/1138-4EB/elide/master/Dockerfile-apiobase
$ docker build -t apiobase .
551M /
350M /usr
114M /root
47M /var
26M /lib
7.8M /bin
4.6M /sbin
2.2M /etc
...
208M /usr/lib
76M /usr/share
34M /usr/bin
20M /usr/include
13M /usr/local
1.8M /usr/sbin
...
208M /usr/lib/
80M /usr/lib/gcc
63M /usr/lib/python2.7
62M /usr/lib/x86_64-linux-gnu
1.7M /usr/lib/locale
...
2.3M /root/.cache
111M /root/.apio
114M /root
3.1M /root/.apio/packages/tools-system
14M /root/.apio/packages/toolchain-iverilog
92M /root/.apio/packages/toolchain-icestorm
3.1M /root/.apio/packages/tool-scons
504K /root/.apio/packages/examples
111M /root/.apio/packages/
FROM ubuntu:latest
WORKDIR /root
RUN apt-get update && apt-get install curl \
&& curl -sSL http://fpgalibre.sf.net/debian/go | sh \
&& apt-get install -y apio \
&& apt-get install -y apio-scons apio-icestorm apio-iverilog apio-examples apio-system
$ mkdir tmpdir && cd tmpdir
$ wget https://raw.githubusercontent.com/1138-4EB/elide/master/Dockerfile-apiodebbase
$ docker build -t apiodebbase .428M /
340M /usr
50M /var
26M /lib
7.2M /bin
3.5M /sbin
2.5M /etc
152M /usr/lib
131M /usr/share
56M /usr/bin
1.8M /usr/sbin
84M /usr/lib/x86_64-linux-gnu
34M /usr/lib/python2.7
24M /usr/lib/python3.5
4.1M /usr/lib/scons
1.7M /usr/lib/locale
$ mkdir tmpdir && cd tmpdir
$ wget https://raw.githubusercontent.com/1138-4EB/elide/master/Dockerfile-ubuntubase
$ docker build -t ubuntubase .
Como
podéis ver en el fichero, se instalan y mantienen icestorm +
arachne-pnr + yosys + iverilog + graphviz + xdot. Y el tamaño final son
"sólo" 449M. He de admitir que en este caso se borra la caché de apt en
/var/apt/lists, por lo que se ahorran 40M muy preciados, que también
podrían quitarse de los anteriores (de hecho, he editado los ficheros en
el repo). Ahora apio ocupa 512M, y apiodeb 390M.$ ls .apio/packages/toolchain-icestorm/bin/
arachne-pnr icemulti icepll icetime yosys-abc
icebram icepack iceprog yosys
$ls /usr/local/bin/
arachne-pnr icebox_html icemulti yosys
icebox.py icebox_maps icepack yosys-abc
icebox_chipdb icebox_stat icepll yosys-config
icebox_colbuf icebox_vlog iceprog yosys-filterlib
icebox_diff iceboxdb.py icetime yosys-smtbmc
icebox_explain icebram iceunpack
-rwxr-xr-x 1 root root 571432 Oct 25 16:29 arachne-pnr
lrwxrwxrwx 1 root root 43 Oct 24 13:23 icebox_chipdb -> ../share/fpga-icestorm/python/icebox_chipdb
lrwxrwxrwx 1 root root 43 Oct 24 13:23 icebox_colbuf -> ../share/fpga-icestorm/python/icebox_colbuf
lrwxrwxrwx 1 root root 41 Oct 24 13:23 icebox_diff -> ../share/fpga-icestorm/python/icebox_diff
lrwxrwxrwx 1 root root 44 Oct 24 13:23 icebox_explain -> ../share/fpga-icestorm/python/icebox_explain
lrwxrwxrwx 1 root root 41 Oct 24 13:23 icebox_html -> ../share/fpga-icestorm/python/icebox_html
lrwxrwxrwx 1 root root 41 Oct 24 13:23 icebox_maps -> ../share/fpga-icestorm/python/icebox_maps
lrwxrwxrwx 1 root root 41 Oct 24 13:23 icebox_vlog -> ../share/fpga-icestorm/python/icebox_vlog
-rwxr-xr-x 1 root root 34768 Oct 24 13:23 icebram
-rwxr-xr-x 1 root root 14288 Oct 24 13:23 icemulti
-rwxr-xr-x 1 root root 55248 Oct 24 13:23 icepack
-rwxr-xr-x 1 root root 10104 Oct 24 13:23 icepll
-rwxr-xr-x 1 root root 22392 Oct 24 13:23 iceprog
-rwxr-xr-x 1 root root 297000 Oct 24 13:23 icetime
lrwxrwxrwx 1 root root 7 Oct 24 13:23 iceunpack -> icepack
-rwxr-xr-x 1 root root 5163120 Oct 25 12:56 yosys
lrwxrwxrwx 1 root root 12 Oct 25 12:56 yosys-abc -> berkeley-abc
-rwxr-xr-x 1 root root 31176 Oct 25 12:56 yosys-filterlib
-rwxr-xr-x 1 root root 25013 Oct 25 12:56 yosys-smtbmc
$ mkdir tmpdir && cd tmpdir
$ wget https://raw.githubusercontent.com/1138-4EB/elide/master/Dockerfile-fedorabase
$ docker build -t fedorabase .$ mkdir tmpdir && cd tmpdir
$ wget https://raw.githubusercontent.com/1138-4EB/elide/master/Dockerfile-alpinebase
$ docker build -t alpinebase .--device=/dev/bus/usb/001/007 --device=/dev/ttyUSB0
--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/LEjvbrymcrA/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/31cd9e69-4a79-4755-89e9-22a29ce109af%40googlegroups.com.
--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-lib...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver este debate en la Web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/edfa3fec-b6f0-4361-32eb-314757f3cdea%40inti.gob.ar.
Para obtener más opciones, visita https://groups.google.com/d/optout.
Tené en cuenta que los paquetes Debian que armé contienen binarios
enlazados dinámicamente, eso reduce bastante.
En este momento no estoy actualizando los paquetes Debian porque estuve
con varias cosas personales (vacaciones, una operación, etc.), cosas del
trabajo y haciendo andar la Kéfir I como un Arduino. Cuando tenga más
resuelto esto último actualizaré los paquetes.
Creo que sería muy simple que armes una imágen docker basada en un Debian oficial y los paquetes estos.
Como comentario adicional a lo de Arduino: Ya logré que la IDE de Arduino transfiera algunos programas básicos a la iCE40, están
funcionando todos los pines de I/O digital del Arduino UNO, también los 6 PWMs y funcionan bien las rutinas de demora (ms y µs). El mayor
problema que veo es que la HX4K tiene sólo 80 kib de memoria embebida, lo cual me está limitando mucho a cuanta memoria de programa le queda al Arduino. Para fines didácticos parece que no va a haber problemas, pero para un uso más pesado si.
https://raw.githubusercontent.com/1138-4EB/elide/master/Dockerfile-ubuntubase
Cambiando la primera línea, "FROM ubuntu:latest", por "FROM debian:testing", y funciona sin ningún cambio adicional. El resultado final es prácticamente el mismo (menos de 10M de diferencia).
Con "debian:latest" (que es jessie), no encuentra libftdi1-dev, hay que utilizar libftdi-dev en su lugar. Por lo demás, el resultado es correcto. El tamaño final de la imagen es también equivalente.
Por último, "stretch-slim" (9.0 versión compacta). También funciona sin mayor cambio que la primera línea y el tamaño es el mismo que alpine, muy por encima de apiodeb.
Puedes ver más versiones de debian con las que hacer pruebas aquí: https://hub.docker.com/_/debian/
----
Después he probado con:
https://raw.githubusercontent.com/1138-4EB/elide/master/Dockerfile-apiodebbase
(nótese que no incluye graphviz, creo)
"debian:latest": funciona sin problema añadiendo --allow-unauthenticated a linea en la que se instala apio -> "apt-get install -y --allow-unauthenticated apio". El tamaño es ligeramente superior a alpine.
"debian:testing" y "debian:stretch-slim": hay que añadir "--allow-unauthenticated". Aun así:
...
Reading package lists...
Building dependency tree...
Reading state information...
apio-scons is already the newest version (2.3.1-2).
apio-scons set to manually installed.
apio-iverilog is already the newest version (1.0.0-4).
apio-iverilog set to manually installed.
apio-system is already the newest version (1.0.0-2).
apio-system set to manually installed.
apio-examples is already the newest version (0.0.8-2).
apio-examples set to manually installed.
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
apio-icestorm : Depends: arachne-pnr but it is not going to be installed
Depends: yosys but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
Por lo tanto, es razonable pensar que stretch introduce alguna actualización de GCC u otras librerías que hace los binarios incompatibles. No obstante, por las primeras pruebas de este mensaje, Dockerfile-ubuntubase contiene esos binarios en su versión adecuada. Así, lo único que hay que hacer es empaquetarlos por si alguien quiere descargarlos de forma independiente (con apt-get).
Saludos
No necesariamente, si enlazás dinámicamente "compartís" las bibliotecas,
si enlazás estáticamente las "copiás"
A lo que me refiero es que el script de docker es mucho más simple y
claro, lo que agregás es un par de líneas que instalan los paquetes. De
hecho con instalar uno o dos paquetes alcanza, las dependencias traen el
resto. De otra manera hay que instalar y limpiar varias cosas.
build-essential clang bison flex libreadline-dev gawk tcl-dev libffi-dev git mercurial iverilog pkg-config python python3 libftdi1-dev graphviz xdotLo que tengo actualmente está incompleto y usa periféricos "custom".
En la actualidad estoy en 445 FF y 1572 LUTs. La CPU es un AVR de 2da
generación (avr25 en términos de gcc) con 256 B de RAM y 4 kiB de "flash"
Antes de agregar los periféricos y demás detalles estaba en 183 FFs y
976 LUTs.
Los periféricos actuales son:
- Contador de microsegundos y contador de milisegundos (no existen en el
AVR, el Arduino lo hace con interrupciones del timer 0)
- Demora configurable de microsegundos (en el código de Arduino lo hace
de forma muy artesanal, acá lo hace el periférico, sirve para demoras
cortas)
- 6 PWMs (en el código de Arduino lo hace con los 3 timers, acá son más
simples)
- Todos los puertos de I/O necesarios para cubrir el Arduino UNO y algún
pin extra para el LED interno (son 100% compatibles con los del AVR)
El tema con el PicoBlaze (o similar) sería que la arquitectura Arduino
necesita una CPU soportada por el gcc, preferentemente por el avr-gcc
(que ya viene incluido).
Los AVR (2da generación y posteriores) son razonablemente buenos para el
código C. CPUs como el x51 o los PICs (16x, 18x, etc.) son catastróficos
para el uso de lenguaje C.
La idea es que el uso se parezca lo más posible al de una placa de Arduino.
No descarto mecanismos "especiales", pero de momento la IDE de Arduino
cree que está usando una variante de Arduino, es decir que se comunica
con el bootloader usando avrdude y compila el código usando avr-gcc.
Como los periféricos son custom necesita de un directorio separado con
la implementación de la API retocada.
> Con "debian:latest" (que es jessie), no encuentra libftdi1-dev, hay
> que utilizar ||libftdi-dev en su lugar. Por lo demás, el resultado es
> correcto. El tamaño final de la imagen es también equivalente.
Esto es raro, suena a alguna mezcla. Mi sistema es Jessie y los paquetes
no dependen de |libftdi1-dev (que tampoco tengo).
Creo que es más seguro dejar que autentifique los paquetes.
Una forma de agregar las claves necesarias es corriendo (como root)
# curl -sSL http://fpgalibre.sf.net/debian/go | sh
# apt-cache search arachne icestorm abc
arachne-pnr - Place and route tool for iCE40 family FPGAs
arachne-pnr-chipdb - Chip db files for arachne-pnr
# apt-cache search icestorm
fpga-icestorm - Tools to handle the bitstream format of Lattice iCE40 FPGAs
fpga-icestorm-chipdb - Chip database files for fpga-icestorm
...
# apt-cache search abc
...
berkeley-abc - ABC - A System for Sequential Synthesis and Verification
...
# apt-cache search yosys
yosys - Framework for Verilog RTL synthesis
yosys-dev - Framework for Verilog RTL synthesis (development files)
yosys-doc - Documentation for Yosys
apt-get install arachne-pnr arachne-pnr-chipdb fpga-icestorm fpga-icestorm-chipdb berkley-abc yosysPara darte una idea:
1) libc6: *TODO* el sistema la usa.
2) libbz2-1.0 y zlib1g: Son las bibliotecas de compresión más comunes,
algunos comandos que las usan file, gnupg, etc.
3) libreadline6: la usa el comando bc, el ftp, el gnupg, y el mismísimo
yosys
Fijate que incluso se repiten con otras cosas que necesita apio, por
ejemplo, el paquete iverilog depende de:
Depends: libbz2-1.0, libc6 (>= 2.14), libgcc1 (>= 1:4.1.1), libreadline6
(>= 6.0), libstdc++6 (>= 4.9), zlib1g (>= 1:1.2.0)
Estas dependencias son para *crear* los paquetes debian, no los necesita
el usuario final.
A lo que me refiero es que:
1) Si querés usar apio basta con instalar apio, eso automáticamente
instala apio-examples, apio-icestorm, apio-scons, apio-iverilog,
apio-system. Esto implica que también instala el toolchain de IceStorm y
el Icarus Verilog.
2) Si querés usar apio desde la IDE basta con instalar apio-ide y atom,
eso automáticamente instala todo lo de (1)
3) Si querés usar icestudio basta con instalar icestudio, eso
automáticamente instala todo lo de (1)
int analogRead(uint8_t pin)
{
uint8_t low, high;
/* Set the channel and start a new conversion */
WB_ADR=AD_BASE+1;
WB_DAT=pin;
/* Wait until the conversion ends */
loop_until_bit_is_clear(WB_DAT,7);
/* Read the result */
high=WB_DAT;
WB_ADR=AD_BASE;
low=WB_DAT;
/* Combine both bytes */
return (high<<8)|low;
}
Es bastante configurable, pero si me pongo a agregar binarios implica
que tengo que tener los binarios para cada plataforma.
darwin;386 darwin;amd64 freebsd;386 freebsd;amd64 freebsd;arm linux;386 linux;amd64 linux;arm windows;386 windows;amd64--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/617bc1e9-e282-4372-95e8-7fec9388699b%40googlegroups.com.
Apio drivers
No creo que tenga mucho sentido configurar los drivers en una máquina virtual. Ese comando sólo tiene sentido ejecutarlo en una máquina real y completa.
#127
An interesting feature of docker images is that a command (or sequence of commands) can be executed as soon as a container is started. Therefore, the content in/etc/udev/rules.dcan be copied from the container to the host and execute thenservice udev restart.
(PD: aunque el user sea root puede ejecutar comandos con sudo). Ejecutar apio como sudo tampoco tendría sentido ya que se estaría invocando otro binario, ésto sólo se haría si el usuario quiere instalar apio en root.
https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#user
You should avoid installing or usingsudosince it has unpredictable TTY and signal-forwarding behavior that can cause more problems than it solves. If you absolutely need functionality similar tosudo(e.g., initializing the daemon as root but running it as non-root), you may be able to use “gosu”.
Python es un intérprete y por lo tanto es necesario para ejecutar los scripts. GCC es el compilador y por lo tanto sólo es necesario para la fase de compilación, no de ejecución.
Icestorm + ...
Como comenta Salvador, los paquetes compilados para debian suelen estar enlazados dinámicamente por lo tanto ocupan menos. Todos los paquetes de Apio (toolchain-icestorm, toolchain-iverilog, etc.) están compilados en estático en su mayoría para garantizar que funcionan correctamente en cualquier distro y cualquier versión, pero como contra ocupan más. PD: en las últimas versiones de las toolchains se ha optimizado bastante el tamaño con ahorros del 35% y >70% respectivamente ya que he eliminado, entre otras cosas, las referencias al debugger.
Hay que tener en cuenta que hay varias distribuciones de las herramientas de Icestorm: toolchain-icestorm (en estático y con estructura compatible apio), debian de fpgalibre (dinámico y con estructura compatible con apio), debian (dinámico y estándar). Para trabajar con Apio hay que utilizar las dos primeras, o la tercera activando el modo "native".
$ ls .apio/packages/toolchain-icestorm/bin/
arachne-pnr icemulti icepll icetime yosys-abc
icebram icepack iceprog yosys
$ls /usr/local/bin/
arachne-pnr icebox_html icemulti yosys
icebox.py icebox_maps icepack yosys-abc
icebox_chipdb icebox_stat icepll yosys-config
icebox_colbuf icebox_vlog iceprog yosys-filterlib
icebox_diff iceboxdb.py icetime yosys-smtbmc
icebox_explain icebram iceunpack
Las incompatibilidades del apt vienen generadas porque no encuentra de dónde descargar el .deb, esto se soluciona añadiéndolo a las sources.list, en vez de por problemas con GCC.
Quizá sea un poco offtopic, pero apio se podría instalar sin problemas dentro de un entorno virtual de Python (python-virtualenv), ¿no?Yo uso Arch Linux, y mezclar pip con pacman nunca es bueno.Le tengo que dar una vuelta, limpiar lo que instaló automáticamente y hacerlo de forma limpia con «venv» para documentarlo.
sudo pacman -S docker
sudo systemctl start docker
sudo docker run --rm -it \
> -v /tmp/.X11-unix/:/tmp/.X11-unix \
> -e DISPLAY=unix$DISPLAY \
> 11384eb/elide:alpine-run sh
sistemas operativos caóticos que no poseen el concepto de paquetes (me refiero a esa cosa que sigue dándole plata a la empresa de Redmond).
Para sistemas operativos como Debian es una locura. Pensá que tenés una máquina que la usan 6
personas, 3 quieren usar IceStorm, pero sin APIO y 3 quieren usarlo, pero con APIO. Sin usar los paquetes que yo armé terminás con 4 copias
de IceStorm, una enlazada dinámicamente e instalada a nivel de sistema, y 3 copias enlazadas estáticamente e instaladas en el home de cada
usuario. Ni hablar que las 4 pueden hasta ser diferentes versiones, con lo que es un caos reproducir errores. Con los paquetes Debian se
soluciona, hay una única copia que usan todos.
> Entiendo que el deb, además crea enlaces simbólicos para apio y copia
> los scripts de apio en sí. Pero tengo la sensación de que no utilizas
> los binarios en https://github.com/FPGAwars/toolchain-icestorm, ¿es así?
Exactamente, sería una locura hacerlo.
No conozco Alpine, pero estas bibliotecas las usan los comandos más
básicos del OS. Salvo cosas hechas para embebidos lo normal es que estén.
https://en.wikipedia.org/wiki/Alpine_Linux
Originally, Alpine Linux began as a fork of the LEAF project.[3] The members of LEAF wanted to continue making a Linux distribution that could fit on a single floppy disk, whereas the Alpine Linux wished to include some more heavyweight packages such as Squid and Samba, as well as additional security features and a newer kernel. One of the original goals was to create a framework for larger systems; although usable for this purpose, this is no longer a primary goal.
Tendrías que investigar caso por caso. En lineas generales son bibliotecas muy básicas, el problema va a aparecer si querés poner algo gráfico. Ahí la cosa se complica.
Si, uso WISHBONE, ¿versión? ni idea, lo uso desde hace más de 10 años ;-)