This is an old revision of the document!
Analog Devices Kuiper Linux is a distribution based on Raspbian for the Raspberry Pi. It incorporates Linux device drivers for ADI products, and is created with ease of use in mind.
The reasoning behind creating this distribution is to minimize the barriers to integrating ADI hardware devices into a Linux-based system. When starting with a generic Linux distribution, the kernel typically would have to be rebuilt with the desired drivers enabled. While this is not difficult for an engineer that is familiar with the process, it can be a daunting task even when everything goes right.
ADI Kuiper Linux solves this problem, and includes a host of additional applications, software libraries, and utilities including:
While Rasbpian targets Raspberry Pi platform boards, ADI Kuiper Linux supports several other platforms including the Xilinx and Intel FPGAs.
The AD-FMC-SDCARD or AD-FMC-SDCARD is an microSD Card and SD Card adapter (to use the Micro SD Card in an SD Card Slot) comes pre-formatted with an ADI Kuiper Linux image on it. This will usually ship with many evaluation boards.
If you have a preformatted SD Card (one that normally comes with one of the ADI FMC Cards), you can skip down to the Preparing the image section. You still will need to do some manual configuration, since the SD Card supports different base platforms, and different FMC Cards.
You will also need to update the image, since the pre-formatted image will be 6 or more months old, and issues have been fixed since then.
The BOLD is what you should type. It's not too much more than Special Agent Oso's three special steps, and it also allows you to go for that specialty coffee you have been craving.
For different platforms you'll need different images. Currently we provide a single pre-build images, that can work on all the platforms we support.
Now, depending if you are using Linux or Windows, follow these instructions to write the file to your SD card.
The SD card includes a few images on it's BOOT
partition. One of these images needs to be selected before the system will boot properly. In order to run any of these images, just copy the images from the subdirectory into the base directory, and then boot it. For newer versions of the SD card, uImage (Image for ZynqMP) files are in subdirectories for FPGA board generation. Be sure to move the correct uImage (Image for ZynqMP) into the root of the BOOT
partition as well. So the root of 'BOOT' should contain:
If you notice that the file/board you want isn't in your actual SD-Card, that's because you need to upgrade it first. Just pick something with the same base board, boot it, and then run the update scripts, and then copy the right files to the BOOT
partition.
Supported images include:
Directory on the SD image | Carrier | On Carrier Devices | Add on card | doc |
---|---|---|---|---|
socfpga_arria10_socdk_ad9081 | DK-SOC-10AS066S-A | EVAL-ad9081 | ||
socfpga_arria10_socdk_adrv9002 | DK-SOC-10AS066S-A | EVAL-adrv9002 | ||
socfpga_arria10_socdk_adrv9009 | DK-SOC-10AS066S-A | EVAL-ADRV9008-9009 | doc | |
socfpga_arria10_socdk_adrv9371 | DK-SOC-10AS066S-A | EVAL-ADRV9371 | doc | |
socfpga_arria10_socdk_cn0506_mii | DK-SOC-10AS066S-A | CN0506 | ||
socfpga_arria10_socdk_daq2 | DK-SOC-10AS066S-A | AD-FMCDAQ2-EBZ | doc | |
socfpga_arria10_socdk_fmclidar1 | DK-SOC-10AS066S-A | AD-FMCLIDAR1-EBZ | doc | |
socfpga_arria10_socdk_fmcomms8 | DK-SOC-10AS066S-A | EVAL-AD-FMCOMMS8-EBZ | ||
socfpga_cyclone5_de10_nano_cn0540 | Intel Cyclone 5 De10 Nano Kit | CN0540 board | ||
socfpga_cyclone5_sockit_arradio | Intel Cyclone 5 SoC Kit | Arradio board | ||
zynq-adrv9361-z7035-bob | ADRV1CRR-BOB | ADRV9361 | doc | |
zynq-adrv9361-z7035-bob-cmos | ADRV1CRR-BOB | ADRV9361 | doc | |
zynq-adrv9361-z7035-fmc | ADRV1CRR-FMC | ADV7511 | doc | |
zynq-adrv9361-z7035-packrf | ADRV-PACKRF | ADRV9361 | doc | |
zynq-adrv9364-z7020-bob | ADRV1CRR-BOB | ADRV9364 | doc | |
zynq-adrv9364-z7020-bob-cmos | ADRV1CRR-BOB | ADRV9364 | doc | |
zynq-adrv9364-z7020-packrf | PackRF | ADRV9364 | doc | |
zynqmp-adrv9009-zu11eg-revb-adrv2crr-fmc-revb | ADRV2CRR-FMC | ADRV9009-ZU11EG | doc | |
zynqmp-adrv9009-zu11eg-revb-adrv2crr-fmc-fmcomms8 | ADRV2CRR-FMC | EVAL-AD-FMCOMMS8-EBZ | doc | |
zynqmp-zcu102-rev10-ad9172-fmc-ebz-mode4 | ZCU102 | EVAL-AD9172 | ||
zynqmp-zcu102-rev10-ad9361-fmcomms2-3 | ZCU102 | AD-FMCOMMS2-EBZ or AD-FMCOMMS3-EBZ | doc or doc | |
zynqmp-zcu102-rev10-ad9361-fmcomms5 | ZCU102 | AD-FMCOMMS5-EBZ | doc | |
zynqmp-zcu102-rev10-ad9364-fmcomms4 | ZCU102 | AD-FMCOMMS4-EBZ | doc | |
zynqmp-zcu102-rev10-adrv9002 | ZCU102 | ADRV9002NP/W1/PCBZ ADRV9002NP/W2/PCBZ | doc | |
zynqmp-zcu102-rev10-adrv9008-1 | ZCU102 | EVAL-ADRV9008-9009 | doc | |
zynqmp-zcu102-rev10-adrv9008-2 | ZCU102 | EVAL-ADRV9008-9009 | doc | |
zynqmp-zcu102-rev10-adrv9009 | ZCU102 | EVAL-ADRV9008-9009 | doc | |
zynqmp-zcu102-rev10-adrv9371 | ZCU102 | ADRV9371 | doc | |
zynqmp-zcu102-rev10-adrv9375 | ZCU102 | ADRV9375 | doc | |
zynqmp-zcu102-rev10-fmcdaq2 | ZCU102 | AD-FMCDAQ2-EBZ | doc | |
zynqmp-zcu102-rev10-fmcdaq3 | ZCU102 | eval-fmcdaq3-ebz | doc | |
zynqmp-zcu102-rev10-fmclidar1 | ZCU102 | AD-FMCLIDAR1-EBZ | doc | |
zynq-zc702-adv7511 | ZC702 | ADV7511 | ||
zynq-zc702-adv7511-ad9361-fmcomms2-3 | ZC702 | ADV7511 | AD-FMCOMMS2-EBZ or AD-FMCOMMS3-EBZ | doc or doc |
zynq-zc702-adv7511-ad9361-fmcomms5 | ZC702 | ADV7511 | AD-FMCOMMS5-EBZ | doc |
zynq-zc702-adv7511-ad9364-fmcomms4 | ZC702 | ADV7511 | AD-FMCOMMS4-EBZ | doc |
zynq-zc706-adv7511 | ZC706 | ADV7511 | ||
zynq-zc706-adv7511-ad6676-fmc | ZC706 | ADV7511 | EVAL-AD6676 | |
zynq-zc706-adv7511-ad9172-fmc-ebz | ZC706 | ADV7511 | ||
zynq-zc706-adv7511-ad9265-fmc-125ebz | ZC706 | ADV7511 | AD9265-FMC-125EBZ | |
zynq-zc706-adv7511-ad9361-fmcomms2-3 | ZC706 | ADV7511 | AD-FMCOMMS2-EBZ or AD-FMCOMMS3-EBZ | doc or doc |
zynq-zc706-adv7511-ad9361-fmcomms5 | ZC706 | ADV7511 | AD-FMCOMMS5-EBZ | doc |
zynq-zc706-adv7511-ad9361-fmcomms5-ext-lo-adf5355 | ZC706 | ADV7511 | AD-FMCOMMS5-EBZ external LO | doc |
zynq-zc706-adv7511-ad9364-fmcomms4 | ZC706 | ADV7511 | AD-FMCOMMS4-EBZ | doc |
zynq-zc706-adv7511-ad9434-fmc-500ebz | ZC706 | ADV7511 | AD9434-FMC-500EBZ | doc |
zynq-zc706-adv7511-ad9625-fmcadc2 | ZC706 | ADV7511 | AD-FMCADC2-EBZ | doc |
zynq-zc706-adv7511-ad9625-fmcadc3 | ZC706 | ADV7511 | AD-FMCADC3-EBZ | |
zynq-zc706-adv7511-ad9739a-fmc | ZC706 | ADV7511 | EVAL-AD9739A | doc |
zynq-zc706-adv7511-adrv9008-1 | ZC706 | ADV7511 | EVAL-ADRV9008-9009 | doc |
zynq-zc706-adv7511-adrv9008-2 | ZC706 | ADV7511 | EVAL-ADRV9008-9009 | doc |
zynq-zc706-adv7511-adrv9009 | ZC706 | ADV7511 | EVAL-ADRV9008-9009 | doc |
zynq-zc706-adv7511-adrv9371 | ZC706 | ADV7511 | ADRV9371 | doc |
zynq-zc706-adv7511-adrv9375 | ZC706 | ADV7511 | ADRV9375 | doc |
zynq-zc706-adv7511-fmcdaq2 | ZC706 | ADV7511 | AD-FMCDAQ2-EBZ | doc |
zynq-zc706-adv7511-fmcdaq3-revC | ZC706 | ADV7511 | eval-fmcdaq3-ebz | doc |
zynq-zc706-adv7511-fmcjesdadc1 | ZC706 | ADV7511 | AD-FMCJESDADC1-EBZ | |
zynq-zc706-adv7511-fmclidar1 | ZC706 | ADV7511 | AD-FMCLIDAR1-EBZ | doc |
zynq-zc706-adv7511-fmcomms11 | ZC706 | ADV7511 | AD-FMCOMMS11-EBZ | doc |
zynq-zed-adv7511 | Zed Board | ADV7511 | ||
zynq-zed-adv7511-ad9361-fmcomms2-3 | Zed Board | ADV7511 | AD-FMCOMMS2-EBZ or AD-FMCOMMS3-EBZ | doc or doc |
zynq-zed-adv7511-ad9364-fmcomms4 | Zed Board | ADV7511 | AD-FMCOMMS4-EBZ | doc |
zynq-zed-adv7511-ad9467-fmc-250ebz | Zed Board | ADV7511 | AD9467-FMC-250EBZ | |
zynq-zed-adv7511-cn0363 | Zed Board | ADV7511 | EVAL-CN0363-PMDZ | |
zynq-zed-ad40xx_fmc | Zed Board | EVAL-AD400x-FMCZ | ||
zynq-zed-ad4630 | Zed Board | EVAL-AD4630-16 | ||
zynq-zed-ad5758_sdz | Zed Board | EVAL-AD5758 | ||
zynq-zed-ad5766_sdz | Zed Board | EVAL-AD5766 | ||
zynq-zed-ad7134_fmc | Zed Board | EVAL-AD7134FMCZ | ||
zynq-zed-ad738x_fmc | Zed Board | EVAL-AD738xFMCZ | ||
zynq-zed-ad7405_fmc | Zed Board | eval-ad7405 | ||
zynq-zed-ad7616_sdz | Zed Board | EVAL-AD7616 | ||
zynq-zed-ad77681evb | Zed Board | |||
zynq-zed-ad7768evb | Zed Board | EVAL-CN0363-PMDZ | ||
zynq-zed-ad9467_fmc | Zed Board | EVAL-AD9467 | ||
zynq-zed-adaq7980_sdz | Zed Board | EVAL-ADAQ7980 | ||
zynq-zed-adrv9002 | Zed Board | eval-adrv9002 | ||
zynq-zed-adrv9002_rx2tx2 | Zed Board | eval-adrv9002 | ||
zynq-zed-cn0363 | Zed Board | CN0363 | ||
zynq-zed-cn0506_mii | Zed Board | CN0506 | ||
zynq-zed-cn0506_rgmii | Zed Board | CN0506 | ||
zynq-zed-cn0506_rmii | Zed Board | CN0506 | ||
zynq-zed-imageon | Zed Board | ADV7511 | FMC-IMAGEON | |
zynq-coraz7s-cn0540 | Cora Z7 Board | CN0540 board | ||
zynq-coraz7s-cn0501 | Cora Z7 Board | |||
versal-vck190-ad9081_fmca_ebz | VCK190 Board | EVAL-AD9081 |
We have heard of some versions of Windows, and some specific SD readers/writers that don't like the FAT parition that we make on the SD Cards - sorry - we have no idea, and have no way to replicate things (that we have found). If it doesn't work for you - try a different windows machine.
the U-Boot terminals below are for, well - U-Boot. If you see a kernel booting, you aren't running in U-Boot. This means reset the board, and when the system says “Hit any key to stop autoboot” - hit any key.
First you have to use the default environment from the SD card (otherwise the system may not boot):
env default -a saveenv
Then you need to update the MAC address of the board. For some reason, Xilinx doesn't do this on their boards, and you will not get the proper MAC address. Depending on where to do it:
setenv ethaddr XX:XX:XX:XX:XX:XX (whatever is on the sticker on the board saveenv reset
ifconfig eth2 down ifconfig eth2 hw ether XX:XX:XX:XX:XX:XX (what ever is on the sticker on the board) ifconfig eth2 up
These boot messages may change based on your specific platform.
Even thought this is Linux, this is a persistent file systems. You have to take care not to corrupt the file system -- please shut down things, don't just turn off the power switch. Depending on your monitor, the standard power off could be hiding. You can do this from the terminal as well with:
sudo shutdown -h now
or
sudo poweroff
The default user is the “analog” user, the password for this user is “analog”. The password for the “root” account is “analog” as well.
User | Password |
---|---|
root | analog |
analog | analog |
There are 2 things to update:
Upgrading one side, without upgrading the other might cause more problems than it solves. If you are upgrading, please upgrade both.
Staying up to date is a combination of:
If you need to use a proxy for any of these:
There are a number of ADI provided tools in the file system. There is an easy way to rebuild these projects from source. The only requirement is an healthy image and active Internet connection.
In order to update all ADI tools - simply call the update script as shown below: In case you only want to update a certain project, the script accepts a single parameter, the ADI github project name. (https://github.com/analogdevicesinc)
If you are using an old image & old update tools script - you may need to run the update tools script twice (the first time it updates the update script, and the second time it updates everything else). This has been resolved in the most recent update script (the script updates itself, and switches over to the new one), so you only need to do this if you are using an older version.
This specifies any shell prompt running on the target
root@analog:~# adi_update_tools.sh
The default ADI ZYNQ image supports a variety of ZYNQ boards and reference designs. In order to keep those boot files up to date. There is a another script that downloads the latest builds from the ADI Wiki page and installs them onto the FAT32 partition on the SD Card. The only requirement is a healthy image and active Internet connection.
In order to update all ADI tools, simply call the adi_update_boot.sh script as shown below:
This specifies any shell prompt running on the target
root@analog:~# adi_update_boot.sh
It may happen that you have to copy manually the boot files to complete the update.
To do so, plug the SD card into your computer, and:
(Replace ${CONFIG} with the config name that applies in your case, e.g. “zynq-zed-adv7511-ad9361” for a FMCOMMS2/3 on a ZedBoard.)
The device tree is a data structure for describing hardware. Rather than hard coding every detail of a device into an operating system, many aspect of the hardware can be described in a data structure that is passed to the operating system at boot time.
For your convenience – all device tree files (dtb) for our designs are included in the SD Card boot partition. Sometimes it's desired to change certain device tree properties permanently.
For example a custom board has a different reference clock.
This specifies any shell prompt running on the target
analog@analog:~$ cd /media/analog/BOOT/ analog@analog:/media/analog/BOOT$ dtc -I dtb devicetree.dtb -O dts -o devicetree.dts analog@analog:/media/analog/BOOT$ mousepad devicetree.dts & analog@analog:/media/analog/BOOT$ dtc -I dts devicetree.dts -O dtb -o devicetree.dtb analog@analog:/media/analog/BOOT$
On the embedded Linux target there is Samba_(software) service running. Allowing you to access (Add/map Network Location/Drive) everything under /media on the target.
The only thing you need to do is:
ifconfig
By default, only read access is possible. If you want to be able to copy files onto the image over the network share, the permissions need to be changed first. This can be done by running the following command on the board:
Modify network share permissions
sudo chmod 777 /media/*
Be aware that with this change anybody on your network will now be able to write to the image.
Use rsync, or ssh, or scp, or just plug in the SD card to your Linux machine, and mount the ext4 file system. If you really need help - ask.
The system will likely need to be configured according to what devices are connected to the platform board (for example, an AD7124-8 ADC connected to a Raspberry Pi) The most straightforward way to do this for Raspberry Pi is to edit the config.txt file, which is located in the boot partition. This is a FAT partition that is accessible in Linux, Windows, or MacOS. Any text editor can be used, including the Mousepad editor that is included with Kuiper Linux. Using the Raspberry Pi itself also avoids problems with USB encryption, often present on company computers. Connect a keyboard, mouse, and monitor to the Raspberry Pi and connect power. The ADI Kuiper Linux desktop should appear.
Before editing, it is a good idea to make a backup of the original file, just in case something goes wrong (which it won't, but still…) Open a terminal and enter the following command (noting that “analog@analog:~ $” is the prompt, and does not need to be typed):
analog@analog:~ $ sudo cp /boot/config.txt /boot/config.backup analog@analog:~ $ sudo mousepad /boot/config.txt
This will bring up the text editor. At this point, the appropriate device tree overlays can be included, for example, add the following line to enable the ADXL345 3-axis SPI accelerometer, noting that the lirc-rpi lines are shown for reference, and any line beginning with “#” is ignored:
# Uncomment this to enable the lirc-rpi module #dtoverlay=lirc-rpi dtoverlay=rpi-adxl345
This usually represents a default overlay, with SPI port and interrupt mapping defined in the kernel source. A number of other overlays are included with Kuiper Linux, for individual devices and various reference designs. Alternative configurations can be created by cloning and editing the appropriate dts file.
After editing config.txt, reboot for changes to take effect.
If any IIO devices are attached and were enabled in config.txt, run iio_info to verify that the drivers loaded properly. Example:
analog@analog:~ $ iio_info Library version: 0.21 (git tag: 1c0781b) Compiled with backends: local xml ip IIO context created with local backend. Backend version: 0.21 (git tag: 1c0781b) Backend description string: Linux analog 4.19.86-v7l+ #3 SMP Tue Sep 1 19:43:06 UTC 2020 armv7l IIO context has 2 attributes: local,kernel: 4.19.86-v7l+ uri: local: IIO context has 5 devices: iio:device0: ad7127-8 (buffer capable) 8 channels found: voltage0-voltage1: (input, index: 0, format: be:u24/32>>0) 6 channel-specific attributes found: attr 0: filter_low_pass_3db_frequency value: 3 attr 1: offset value: 0 ... ...
Copyright © 2022 Raspberry Pi (Trading) Ltd.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.