Install deb packages on Torizon target (NOT on container)

Hello,

I have to install proprietary camera drivers (ids ueye) that are provided as bullseye debian packages for ARMv8. I would like to install them on the iMX8 Torizon target (NOT on a target’s container) but I am not able to do it because dpkg or apt-get does not exist on the target.

Installing the files manually does not work any better since /usr is read-only even with sudo.

I guess I am not following the right way to install new packages. Could you point me to the solution ?

Best regards,
Fabian

Hi @fdortu ,

Unfortunately there isn’t a straightforward way to install new packages in TorizonCore. The standard procedure is to build TorizonCore with Yocto to include them.

You would have to create a new recipe which installs the drivers you want, similar to this example: Custom meta layers, recipes and images in Yocto Project (hello-world examples) | Toradex Developer Center.

Best regards,
Lucas Akira

Hi @lucas_a.tx, @sivagganesan

I don’t see in the custom meta layer examples a case that fits exactly my need but I guess the recipe recipes-customer/hello-world/hello-world_1.0.0.bb is a good starting point.

Since I have binary drivers I would then make the binary archive accessible from SRC_URI and have a do_install() script to actually make it installed at the right place ? I would make a recipe like this :

# Package summary
SUMMARY = "Proprietary binary drivers"
# License
LICENSE = "Company providing drivers"
# License checksum file is always required  
LIC_FILES_CHKSUM = "???? WHAT TO DO HERE ?????"

# drivers from local file
SRC_URI = "file://mydriver.run"

# Change source directory to workdirectory where the binary driver file is
S = "${WORKDIR}"

# Install binary and configuration files to final directory (/usr/bin, /etc, )
# nb: the mydriver.run is a self extracting archive that installs the file at the right place
do_install() {
    yes y | sh mydriver.run
}

Alternatively, I could use debian packages so the recipe would become :

...

# drivers from local file
SRC_URI = "file://mydrivers-debs.tgz

# Change source directory to workdirectory where the binary driver file is
S = "${WORKDIR}"

# Install binary and configuration files to final directory (/usr/bin, /etc, )
do_install() {
    tar xfvz  mydrivers-debs.tgz
    dpkg -i mydeb1.deb
    dpkg -i mydeb2.deb
    dpkg -i mydeb3.deb
   ....
}

Could you confirm one (or both) of this way is the way to go before I start ?

I am also wondering how I could generate the LIC_FILES_CHKSUM ?

nb: I am still investigating a way to have the drivers inside the container because I managed to make it work once, but it is not reproducible (when I change the camera, or give the container to a colleague). However that is a discussion that I started in another thread, and I may come back to you later on this (Systemd service management on Torizon).

nb: I am working with @sivagganesan so our issues are actually the same :slight_smile:

Best regards,
Fabian

Hi @fdortu ,

I would suggest you try working with the deb files with a recipe similar to this answer: yocto - bitbake recipe for installing deb package - Stack Overflow. You may have to change do_install_append to do_install:append.

LIC_FILES_CHKSUM is the license file checksum for the recipe. In your case, given that these packages are closed source, the value of LICENSE should be “CLOSED”. With this Bitbake won’t ask for a license checksum.

See if this helps you.

Best regards,
Lucas Akira

Hi there Fabian,

I hope you are all well this fine Monday evening.

I’m just getting in touch to see if you managed to install the IDS Camera using the Yocto project.
The reason I’m asking is that I’ve been tasks to install a IDS (uEye) camera on a “Colibri iMX6DL”
(with Viola Carrier Board Rev 1.2) board.

Would you have any example (recipe) files, or steps to follow which might help.
So far, I’ve gone through the steps of creating the Meta Layer and following the steps for creating the recipe, but have hit several errors along the way running the command lines.

i.e.

Let me know if you have any guidance which may assist.

Much appreciated
Jon

Hi Jon,

I have never tried to integrate the IDS-imaging ueye driver in yocto. I was rather installing them manually on an existing yocto image.

I am now using Torizon and it is quite easy to automate the driver installation in a docker file (the same commands for the SDK, debug or release images)

...

RUN apt-get -q -y update && apt-get -q -y install [required-packages-if-any-I-don't-remember]

...

COPY external-dependencies/libs/ /home/torizon/

...

RUN yes y | sh /home/torizon/libs-IDSImaging/ueye_4.94.0.1220_arm64.run

assuming the file is located in VSCodeWorkspace/external-dependencies/libs/libs-IDSImaging/ueye_4.94.0.1220_arm64.run

Best regards,
Fabian