75 | | * Ubuntu 14.04 LTS (Trusty Tahr) console image |
76 | | - Important Notes: |
77 | | - This is a mainline kernel that does not have Video Hardware Acceleration support for gstreamer and a few other Gateworks specific items. For more information, read [wiki:ventana#MainlineLinuxKernelsupport Gateworks Mainline Linux Support]. |
78 | | - This requires the latest Gateworks Bootloader - U-Boot v2017.05 (see http://dev.gateworks.com/ventana/images and http://trac.gateworks.com/wiki/ventana/bootloader#PreBuiltBootloader) |
79 | | - A pre-built console image created using the [#debootstrap debootstrap] method for [http://releases.ubuntu.com/14.04/ Ubuntu 14.04 (Trusty Tahr)] can be downloaded: |
80 | | * [http://dev.gateworks.com/ventana/images/trusty-ventana_large.ubi trusty-ventana_large.ubi] - UBI image for 4K page size 'large' geometry FLASH (see [wiki:/linux/ubi/#flashgeometry here] to determine your flash geometry) (see wiki:/linux/ubi#BasicMethod for info about flashing UBI images) |
81 | | * [http://dev.gateworks.com/ventana/images/trusty-ventana_normal.ubi trusty-ventana_normal.ubi] - UBI image for 2K page size 'large' geometry FLASH (see [wiki:/linux/ubi/#flashgeometry here] to determine your flash geometry) (see wiki:/linux/ubi#BasicMethod for info about flashing UBI images) |
82 | | * [http://dev.gateworks.com/ubuntu/trusty/trusty-ventana.tar.gz trusty-ventana.tar.gz] - tarball of rootfs you can use to image onto microSD / mSATA using instructions from [wiki:linux/blockdev linux/blockdev] |
83 | | - Features: |
84 | | - Ubuntu 14.04 (from debootstrap instructions) |
85 | | - Gateworks 3.14 kernel with modules |
86 | | - ventana bootscript |
87 | | - extra packages: openssh-server can-utils i2c-tools usbutils pciutils |
88 | | - eth0 dhcp |
89 | | - user root passwd root |
90 | | * Ubuntu 14.04 LTS (Trusty Tahr) multimedia image |
91 | | - A pre-built console image created using the [#debootstrap debootstrap] method for [http://releases.ubuntu.com/14.04/ Ubuntu 14.04 (Trusty Tahr)] and adding gstreamer-imx for IPU/VPU/GPU hw video acceleration can be downloaded: |
92 | | * [http://blog.gateworks.com/?wpdmpro=trusty-armhf-ventana_20160112_large.ubi trusty-armhf-ventana_20160112_large.ubi] - UBI image for 4K page size 'large' geometry FLASH (see [wiki:/linux/ubi/#flashgeometry here] to determine your flash geometry) (see wiki:/linux/ubi#BasicMethod for info about flashing UBI images) |
93 | | * [http://blog.gateworks.com/?wpdmpro=trusty-armhf-ventana_20160112.tar.gz trusty-armhf-ventana_20160112.tar.gz] - tarball of rootfs you can use to image onto microSD / mSATA using instructions from [wiki:linux/blockdev linux/blockdev] |
94 | | - Features: |
95 | | - Ubuntu 14.04 (from debootstrap instructions) |
96 | | - Gateworks 3.14 kernel with modules |
97 | | - ventana bootscript |
98 | | - extra packages: openssh-server can-utils i2c-tools usbutils pciutils |
99 | | - eth0 dhcp |
100 | | - user root passwd root |
101 | | - gstreamer (gstreamer1.0-x gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-alsa) |
102 | | - fsl vpu firmware |
103 | | - fsl lib-vpu |
104 | | - fsl codec library |
105 | | - fsl libg2d |
106 | | - dev tools (build-essential autoconf libtool wget python pkg-config git) |
107 | | - python |
108 | | - gstreamer/gstreamer-imx/libimxvpuapi |
109 | | - v4l-utils |
110 | | - For details on Gstreamer and Gstreamer-imx see our [wiki:Yocto/gstreamer page] |
437 | | |
438 | | |
439 | | == version-specific notes |
440 | | Here are some version specific notes |
441 | | |
442 | | === trusty (14.04) LTS |
443 | | - An extra step is needed for serial console configuration: |
444 | | {{{ |
445 | | #!bash |
446 | | cat << EOT >> /etc/init/serial.conf |
447 | | start on stopped rc RUNLEVEL=[2345] |
448 | | stop on runlevel [!2345] |
449 | | respawn |
450 | | exec /sbin/getty 115200 ttymxc1 |
451 | | EOT |
452 | | }}} |
453 | | |
454 | | |
455 | | |
456 | | [=#gstreamer-imx] |
457 | | == Adding GStreamer IPU/VPU/GPU support via gstreamer-imx (**Trusty**) |
458 | | **Note: This section pertains only to the Gateworks downstream vendor 3.14 kernel with proprietary Freescale Drivers (Trusty Prebuilt image)** |
459 | | |
460 | | If using the Gateworks downstream vendor 3.14 kernel with proprietary Freescale drivers you can easily add IMX6 IPU, VPU, and GPU support via GStreamer and Gstreamer-imx plugins. Many of the pieces needed (firmware and source-code) are from Freescale and not freely redistributable thus must be downloaded from their mirror and extracted from a shell script that forces you to read and agree to their End User License Agreement (EULA). |
461 | | |
462 | | This support requires that you are using the Gateworks downstream vendor kernel as it has the necessary driver support that is not in the mainline Linux kernel. '''This procedure has not been proven on versions newer than Trusty. ''' |
463 | | |
464 | | There are several pre-requisites you will need to install and/or build using the instructions below: |
465 | | - Gateworks downstream vendor kernel (containing non-upstreamed IPU/VPU/GPU drivers) with kernel headers. See [wiki:linux/kernel here] for instructions on building, or [http://dev.gateworks.com/ventana/images/gateworks-linux-imx6-3.14.48.tar.gz here] for a pre-built kernel tarball |
466 | | - gstreamer and libs |
467 | | - firmware-imx-3.14.28-1.0.0.bin - Freescale VPU firmware (EULA required) |
468 | | - imx-vpu-5.4.31.bin - Freescale lib_vpu (EULA required) - this is the low-level documented API that works with the (undocumented) VPU kernel driver API. You can think of this as a kernel driver in userspace |
469 | | - libfslcodec-4.0.3.bin - Freescale Codec Library (EULA required) |
470 | | - imx-gpu-viv-5.0.11.p4.5-hfp.bin - Freescale libg2d (EULA required) - this is the low-level documented API that works with the (undocumented) Vivante Galcore GPU kernel driver API. You can think of this as a kernel driver in userspace |
471 | | - libimxvpuapi - community based open-source high-level library over the low-level imx-vpu API |
472 | | - gstreamer-imx - community based open-source GStreamer plugins to utilize hardware accellerated capture, display, transforms, compositing, decode, encode capabilities of the IMX6. |
473 | | |
474 | | |
475 | | The following instructions can be used on top of the [#debootstrap debootstrap created rootfs] but should work on other sources of Ubuntu or other Linux distributions root filesystems as well. |
476 | | |
477 | | 1. install build deps (~165MB): |
478 | | {{{ |
479 | | #!bash |
480 | | apt-get install build-essential autoconf libtool wget python pkg-config git |
481 | | }}} |
482 | | |
483 | | 2. install gstreamer1.x (~200MB): |
484 | | {{{ |
485 | | #!bash |
486 | | apt-get install gstreamer1.0-x gstreamer1.0-tools |
487 | | # install videoparserbad for video parsers like h264parse, mpegvideoparse and mpeg4videoparse |
488 | | apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad |
489 | | # install alsa plugin |
490 | | apt-get install gstreamer1.0-alsa |
491 | | }}} |
492 | | * note that the gstreamer1.0-plugins-bad meta-package is in the multiverse package feed |
493 | | * at this point you could use 'gst-launch-1.0 videotestsrc ! fbdevsink' but it will not stretch to the display, and will not be hardware accelerated |
494 | | |
495 | | 3. install Freescale VPU firmware (firmware-imx) (EULA required) |
496 | | {{{ |
497 | | #!bash |
498 | | wget http://www.freescale.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-3.14.28-1.0.0.bin |
499 | | /bin/sh firmware-imx-*.bin |
500 | | # install firmware |
501 | | mkdir -p /lib/firmware/vpu |
502 | | cp firmware-imx-*/firmware/vpu/vpu_fw_imx6*.bin /lib/firmware/vpu |
503 | | }}} |
504 | | |
505 | | 4. build and install Freescale lib_vpu (EULA required) |
506 | | {{{ |
507 | | #!bash |
508 | | wget http://www.freescale.com/lgfiles/NMG/MAD/YOCTO/imx-vpu-5.4.31.bin |
509 | | /bin/sh imx-vpu-*.bin |
510 | | cd imx-vpu-* |
511 | | make PLATFORM=IMX6Q all |
512 | | make install # installs vpu_lib.h and vpu_io.h in /usr/include and libvpu.* in /usr/lib |
513 | | cd .. |
514 | | }}} |
515 | | |
516 | | 5. (optional) build and install Freescale Codec Library (libfslcodec) (EULA required) |
517 | | {{{ |
518 | | #!bash |
519 | | wget http://www.freescale.com/lgfiles/NMG/MAD/YOCTO/libfslcodec-4.0.3.bin |
520 | | /bin/sh libfslcodec-*.bin |
521 | | cd libfslcodec-* |
522 | | ./autogen.sh --prefix=/usr --enable-fhw --enable-vpu |
523 | | make all |
524 | | make install |
525 | | # move the libs where gstreamer plugins will find them |
526 | | mv /usr/lib/imx-mm/video-codec/* /usr/lib |
527 | | mv /usr/lib/imx-mm/audio-codec/* /usr/lib |
528 | | rm -rf /usr/lib/imx-mm/ |
529 | | cd .. |
530 | | }}} |
531 | | * this is optional and is needed if you want the audio codec support in gstreamer-imx |
532 | | * Note the Makefile will install the libs into $prefix/lib/imx-mm which is undesirable so we move them after 'make install' |
533 | | |
534 | | 6. (optional) install Freescale libg2d (EULA required) |
535 | | {{{ |
536 | | #!bash |
537 | | wget http://www.freescale.com/lgfiles/NMG/MAD/YOCTO/imx-gpu-viv-5.0.11.p4.5-hfp.bin |
538 | | /bin/sh imx-gpu-viv-*.bin |
539 | | cd imx-gpu-viv-* |
540 | | # install just the g2d headers/libs |
541 | | cp g2d/usr/include/* /usr/include/ |
542 | | cp -d g2d/usr/lib/* /usr/lib/ |
543 | | # install gpu-core headers/libs |
544 | | cp -d gpu-core/usr/lib/*.so* /usr/lib/ |
545 | | cp -Pr gpu-core/usr/include/* /usr/include/ |
546 | | # optional: install demos |
547 | | cp -r gpu-demos/opt / |
548 | | # optional: install gpu tools |
549 | | cp -axr gpu-tools/gmem-info/usr/bin/* /usr/bin/ |
550 | | cd .. |
551 | | }}} |
552 | | * this is part of the Freescale Vivante GPU driver and apps (imx-gpu-viv) package which provides libgl/libgles1/libgles2/wayland-egl/libgal-x11/egl/libopenvg/libg2d |
553 | | * it comes in soft-float (sfp) and hard-float (hfp) - we want the hard-float as we are using an armhf rootfs |
554 | | * this is not required but needed for the gstreamer-imx g2d transform and sink plugins |
555 | | |
556 | | 7. build and install libimxvpuapi library: |
557 | | - This library provides a community based open-source API to the Freescale imx-vpu library (the low-level IMX6 VPU interface). It is a replacement for Freescale's closed-development libfslvapwrapper library. |
558 | | {{{ |
559 | | #!bash |
560 | | git clone git://github.com/Freescale/libimxvpuapi.git |
561 | | cd libimxvpuapi |
562 | | ./waf configure --prefix=/usr |
563 | | ./waf |
564 | | ./waf install |
565 | | cd .. |
566 | | }}} |
567 | | |
568 | | 8. build and install gstreamer-imx: |
569 | | {{{ |
570 | | #!bash |
571 | | apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev # +70MB |
572 | | git clone git://github.com/Freescale/gstreamer-imx.git |
573 | | cd gstreamer-imx |
574 | | ln -s /usr/lib/arm-linux-gnueabihf/gstreamer-1.0/ /usr/lib/gstreamer-1.0 |
575 | | ./waf configure --prefix=/usr --kernel-headers=/include |
576 | | ./waf |
577 | | ./waf install |
578 | | cd .. |
579 | | }}} |
580 | | * note './waf install' installs artifacts to its prefix + /lib/gstreamer-1.0 but they need to be installed to /usr/lib/arm-linux-gnueabihf/gstreamer-1.0 which is why we created a symlink above before installing |
581 | | * note the uniaudio decoder codecs are from Freescale (found in the fsl-mm-codeclib package) and you do not need these unless you want to use FSL's audio codecs instead of the GStreamer ones |
582 | | * note g2d lib required to build G2D |
583 | | * note that linux kernel headers are required to build PxP and IPU |
584 | | * note that libfslaudiocodec is required to build audio plugins |
585 | | * After this step you should be able to see several plugins with {{{gst-inspect-1.0}}}: |
586 | | {{{ |
587 | | #!bash |
588 | | # gst-inspect-1.0 | grep imx |
589 | | imxv4l2videosrc: imxv4l2videosrc: V4L2 CSI Video Source |
590 | | imxipu: imxipucompositor: Freescale IPU video compositor |
591 | | imxipu: imxipuvideosink: Freescale IPU video sink |
592 | | imxipu: imxipuvideotransform: Freescale IPU video transform |
593 | | imxpxp: imxpxpvideotransform: Freescale PxP video transform |
594 | | imxpxp: imxpxpvideosink: Freescale PxP video sink |
595 | | imxvpu: imxvpuenc_mjpeg: Freescale VPU motion JPEG video encoder |
596 | | imxvpu: imxvpuenc_mpeg4: Freescale VPU MPEG-4 video encoder |
597 | | imxvpu: imxvpuenc_h264: Freescale VPU h.264 video encoder |
598 | | imxvpu: imxvpuenc_h263: Freescale VPU h.263 video encoder |
599 | | imxvpu: imxvpudec: Freescale VPU video decoder |
600 | | imxg2d: imxg2dcompositor: Freescale G2D video compositor |
601 | | imxg2d: imxg2dvideotransform: Freescale G2D video transform |
602 | | imxg2d: imxg2dvideosink: Freescale G2D video sink |
603 | | }}} |
604 | | |
605 | | 9. install a U-Boot bootscript to setup kernel parameters for your display output: |
606 | | {{{ |
607 | | #!bash |
608 | | apt-get install u-boot-tools |
609 | | wget https://github.com/Freescale/meta-freescale-3rdparty/raw/master/recipes-bsp/u-boot/u-boot-script-gateworks-imx/6x_bootscript-yocto.txt |
610 | | mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "boot script" -d 6x_bootscript-yocto.txt /boot/6x_bootscript-ventana |
611 | | reboot # reboot to setup bootargs for display |
612 | | }}} |
613 | | * The Freescale IMX6 display drivers use kernel parameters to configure what display outputs to enable and in what format. What displays, resolutions, and formats affect how much contiguous memory is needed (CMA) as well. The Gateworks Yocto BSP has a bootscript that configures connected displays based on various rules and we will use this here. See http://trac.gateworks.com/wiki/Yocto/Video_Out#DisplaysDevices for more info |
614 | | |
615 | | Now you will be able to use Gstreamer and Gstreamer-imx to tap the full potential of the IMX IPU/VPU/GPU hardware. |
616 | | |
617 | | Examples: |
618 | | * show gstreamer-imx plugins: |
619 | | {{{ |
620 | | #!bash |
621 | | # gst-inspect-1.0 | grep imx |
622 | | imxvpu: imxvpuenc_mjpeg: Freescale VPU motion JPEG video encoder |
623 | | imxvpu: imxvpuenc_mpeg4: Freescale VPU MPEG-4 video encoder |
624 | | imxvpu: imxvpuenc_h264: Freescale VPU h.264 video encoder |
625 | | imxvpu: imxvpuenc_h263: Freescale VPU h.263 video encoder |
626 | | imxvpu: imxvpudec: Freescale VPU video decoder |
627 | | imxv4l2videosrc: imxv4l2videosrc: V4L2 CSI Video Source |
628 | | imxg2d: imxg2dcompositor: Freescale G2D video compositor |
629 | | imxg2d: imxg2dvideotransform: Freescale G2D video transform |
630 | | imxg2d: imxg2dvideosink: Freescale G2D video sink |
631 | | imxipu: imxipucompositor: Freescale IPU video compositor |
632 | | imxipu: imxipuvideosink: Freescale IPU video sink |
633 | | imxipu: imxipuvideotransform: Freescale IPU video transform |
634 | | imxpxp: imxpxpvideotransform: Freescale PxP video transform |
635 | | imxpxp: imxpxpvideosink: Freescale PxP video sink |
636 | | }}} |
637 | | * imxipuvideosink: |
638 | | {{{ |
639 | | #!bash |
640 | | gst-launch-1.0 videotestsrc ! imxipuvideosink |
641 | | }}} |
642 | | * imxg2dvideosink: |
643 | | {{{ |
644 | | #!bash |
645 | | gst-launch-1.0 videotestsrc ! imxg2dvideosink |
646 | | }}} |
647 | | |
648 | | See the [wiki:Yocto/gstreamer Gstreamer wiki page] for more details. |
649 | | |