Monday, March 09, 2020

Use OpenCL interoperability with OpenVINO


1. Install Intel NEO driver :

$ cd /opt/intel/openvino/install_dependencies
$ sudo -E ./install_NEO_OCL_driver.sh

2. Check if OCL driver ready

$ clinfo -l
Platform #0: Intel(R) OpenCL HD Graphics
 `-- Device #0: Intel(R) Gen9 HD Graphics NEO


2. Check if OCL driver ready

export environment variables :


$ export LIBVA_DRIVERS_PATH=/opt/intel/mediasdk/lib64
$ export LIBVA_DRIVER_NAME=iHD


Or source script directly:

$ . /etc/profile.d/intel-mediasdk.sh

$ /opt/intel/mediasdk/bin/vainfo --display drm --device /dev/dri/renderD128 
libva info: VA-API version 1.4.1
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD'
libva info: Trying to open /opt/intel/mediasdk/lib64/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.4 (libva 2.4.1)
vainfo: Driver version: Intel iHD driver - 19.1.0.git_42f6f23_2019-04-23
vainfo: Supported profile and entrypoints
      VAProfileNone                   : VAEntrypointVideoProc
      VAProfileNone                   : VAEntrypointStats
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Simple            : VAEntrypointEncSlice
      ...

3. Download OpenCL C headers :

$ sudo -E apt install opencl-c-headers

$ sudo cp /usr/include/CL/cl_va_api_media_sharing_intel.h /usr/include/CL/va_ext.h


4. Download OpenCV source from https://github.com/opencv/opencv/archive/4.2.0-openvino.zip, and config cmake to build

$ mkdir build && cd build
$ cmake -DWITH_VA_INTEL=ON \
        -DBUILD_EXAMPLES=ON \
        -DVA_INTEL_IOCL_ROOT=/usr/include \
        -DVA_INCLUDE_DIR=/opt/intel/mediasdk/include \
        -DVA_INTEL_LIBRARIES= "/opt/intel/mediasdk/lib64/libva.so;/opt/intel/mediasdk/lib64/libva-drm.so" \
-DVA_LIBRARIES= "/opt/intel/mediasdk/lib64/libva.so;/opt/intel/mediasdk/lib64/libva-drm.so" ..

$ make -j `nproc`

5. Test interop

Test with interop enabled:

$ ./bin/example_va_intel_va_intel_interop ../samples/data/HappyFish.jpg on_orig.jpg on_blur.jpg
libva info: VA-API version 1.4.1
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD'
libva info: Trying to open /opt/intel/mediasdk/lib64/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
VA display opened successfully
Interop ON : processing time, msec: 1.27697

Test with interop disabled (fallback):

$ ./bin/example_va_intel_va_intel_interop \
       -f ../samples/data/HappyFish.jpg off_orig.jpg off_blur.jpg
libva info: VA-API version 1.4.1
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD'
libva info: Trying to open /opt/intel/mediasdk/lib64/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
VA display opened successfully
Interop OFF: processing time, msec: 9.83819

Check libraries dependence :


$ ldd bin/example_va_intel_va_intel_interop
        linux-vdso.so.1 (0x00007ffe9dca3000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007efc03690000)
        libva.so.2 => /opt/intel/mediasdk/lib64/libva.so.2 (0x00007efc0346d000)

        libva-drm.so.2 => /opt/intel/mediasdk/lib64/libva-drm.so.2 (0x00007efc0326a000)

Reference :
https://software.intel.com/en-us/articles/tutorial-opencl-interoperability-with-video-acceleration-api-on-linux-os

Tuesday, September 04, 2018

Patch and build kernel



## Install kernel build dependencies
apt-get -y install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc g++

## Download kernel source & unpack
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.tar.xz
tar -xJf linux-4.4.tar.xz

## Apply kernel patches, modify configs
cp /opt/intel/mediasdk/opensource/patches/kmd/4.4/intel-kernel-patches.tar.bz2 .
tar -xvjf intel-kernel-patches.tar.bz2
cd linux-4.4
for i in ../intel-kernel-patches/*.patch; do patch -p1 < $i; done
cp /boot/config-`uname -r` .config

## Build patched kernel & install 
make -j8 LOCALVERSION=-custom
make modules_install
make install

## Or build patches kernel as .deb file, and install
make -j8 deb-pkg LOCALVERSION=-smbus18ww36
sudo dpkg -i ../*.deb
sudo update-grub && sudo reboot

PS, generated .deb files :
linux-firmware-image-4.4.0-smbus18ww36_4.4.0-smbus18ww36-1_amd64.deb
linux-headers-4.4.0-smbus18ww36_4.4.0-smbus18ww36-1_amd64.deb
linux-image-4.4.0-smbus18ww36_4.4.0-smbus18ww36-1_amd64.deb
linux-image-4.4.0-smbus18ww36-dbg_4.4.0-smbus18ww36-1_amd64.deb
linux-libc-dev_4.4.0-smbus18ww36-1_amd64.deb

PS, disable CONFIG_DEBUG_INFO and -dbg package will not be built.





Sunday, August 19, 2018

Using a schroot environment correctly

Without assign session name :

$schroot -c u1604

It will auto generate a session id under /var/lib/schroot/session :

$cat  /var/lib/schroot/session/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600
[u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600]
aliases=
command-prefix=
description=Ubuntu 16.04 (session chroot)
directory=/home/neowong/u1604
...

And lots mounted folder under /var/lib/schroot/mount :

$ mount
/dev/nvme0n1p2 on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600 type ext4 (rw,relatime,errors=remount-ro,data=ordered)
proc on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600/proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600/sys type sysfs (rw,nosuid,nodev,noexec,relatime)
udev on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600/dev type devtmpfs (rw,nosuid,relatime,size=4022048k,nr_inodes=1005512,mode=755)
devpts on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600/dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
/dev/nvme0n1p2 on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600/home type ext4 (rw,relatime,errors=remount-ro,data=ordered)

/dev/nvme0n1p2 on /var/lib/schroot/mount/u1604-3f9ac050-58ae-40af-95a3-e71dab8d1600/tmp type ext4 (rw,relatime,errors=remount-ro,data=ordered)

Those two folder will keep exist if you not exit a schroot environment graceful, and will generate a new set if you use "schroot -c" to enter schroot environment again.

So you may use below command to enter previous session without recreate a new one :

$ schroot -r -c $SESSIONID

Or to clean those existing session by :

$ schroot -e -c $SESSIONID


Friday, August 17, 2018

Setup a schroot environment of Ubuntu installation


### 1. Install schroot & debootstrap
sudo apt-get install schroot debootstrap


### 2. Install the Ubuntu in the schroot folder


$mkdir /home/neowong/u1604
$sudo debootstrap --variant=buildd --arch amd64 xenial /home/neowong/u1604 http://archive.ubuntu.com

variant=buildd fakechroot scratchbox minbase

### 3. Modify /etc/schroot/schroot.conf


[u1604]
description=Ubuntu 16.04
directory=/home/neowong/u1604
users=neowong
groups=neowong
root-users=neowong
root-groups=neowong
type=directory


### 4. List schroot availability 


$schroot  -l
chroot:u1604


### 5. Start to use schroot


$schroot -c u1604
(u1604)neowong@neonuc7:~$

Tuesday, May 08, 2018

udev for virtual device sample

root@usky:~# cat /etc/udev/rules.d/99-ion.rules
KERNEL=="ion",SUBSYSTEM=="misc", GROUP="users", MODE="0666"

root@usky:~# ls /dev/ion -l
ls: cannot access '/dev/ion': No such file or directory

root@usky:~# udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

# insert module on another console : modprobe ion
KERNEL[2910.271610] add /module/ion (module)
UDEV   [2910.272325] add /module/ion (module)
KERNEL[2910.272419] add /devices/virtual/misc/ion (misc)
UDEV   [2910.273507] add /devices/virtual/misc/ion (misc)

Tuesday, April 10, 2018

Text edit under EFI console

edit startup.nsh

ex: fs0:\EFI\ubuntu\grubx64.efi

F2 : save
F3 : exit

 http://samfreetime.blogspot.my/2011/09/efi-shell-commands-edit.html