瑞芯微Rockchip开发者社区
直播中

李萍

7年用户 1436经验值
私信 关注
[经验]

Ubuntu16.04如何集成gstreamer的插件mpp实现硬件解码呢?

1、创建基本的ubuntu1604根文件系统可做成能够启动的rootfs。

2、下载硬件解码/wifi蓝牙相关的安装包

用git克隆下来即可,后面要用到。

3、下载依赖包及工具

网盘共享中有后面步骤需要用的的安装包以及update升级包,还有ch-mount.sh和mkimage-ubuntu-1604.sh两个脚本。

将pkg.tar.bz2下载下来,并解压。将脚本也一并下载下来。

4、当前目录状态如下:

└── rk3288
├── linux-rootfs
│ ├── ch-mount.sh
│ ├── linux-rootfs-ubuntu-1604.tar.bz2
│ └── mkimage-ubuntu-1604.sh
├── pkg
│ ├── 01_dep
│ ├── 02_dep
│ ├── 03_dep
│ ├── alsa-utils_1.1.3-1ubuntu1_armhf.deb
│ ├── gstreamer1.0-alsa_1.10.4-1ubuntu1_armhf.deb
│ ├── gstreamer1.0-plugins-bad_1.10.4-1ubuntu1_armhf.deb
│ ├── gstreamer1.0-plugins-base_1.10.4-1ubuntu1_armhf.deb
│ ├── gstreamer1.0-plugins-good_1.10.4-1ubuntu1_armhf.deb
│ └── gstreamer1.0-tools_1.10.4-1_armhf.deb
└── rk-rootfs-build
├── mk-base-debian.sh
├── mk-image.sh
├── mk-rootfs.sh
├── overlay
├── overlay-debug
├── overlay-firmware
├── packages
├── readme.md
└── ubuntu-build-service

其中 linux-rootfs-ubuntu-1604.tar.bz2是基于ubuntu-base-16.04-core-armhf制作的rootfs,在此基础上安装wifi驱动和硬件解码的gstreamer1.0

5、解压 linux-rootfs-ubuntu-1604.tar.bz2, 将官方rk-rootfs-build里面的相关文件及下载的依赖库文件复制到解压后的根文件系统里面

$sudo tar -xvpf linux-rootfs-ubuntu-1604.tar.bz2
$sudo cp -rf ../rk-rootfs-build/overlay/* linux-rootfs-ubuntu-1604 // 此步是系统初始化配置和一些service配置
$sudo cp -rf ../rk-rootfs-build/overlay-debug/* linux-rootfs-ubuntu-1604 // 此步可以省略,这里面都是一些测试脚本和qt例子,大家可以参考使用
$sudo cp -rf ../rk-rootfs-build/overlay-firmware/* linux-rootfs-ubuntu-1604 // 此步是wifi蓝牙相关的驱动
$sudo mkdir -p linux-rootfs-ubuntu-1604/packages // 创建一个目录用于暂存相关安装包。注意,一定是packages这个名字,不要更改此目录名
$sudo cp -rf ../rk-rootfs-build/packages/armhf/* linux-rootfs-ubuntu-1604/packages/ //相关文件拷贝到packages目录
$sudo cp -rf ../pkg/ linux-rootfs-ubuntu-1604/packages/ //将依赖包拷贝到packages目录

6、使用ch-mount.sh脚本挂载根文件系统(rootfs)
$./ch-mount.sh -m linux-rootfs-ubuntu-1604

7、参照rk-rootfs-build/mk-rootfs.sh脚本,执行以下安装

a) 安装xserver

#apt update
#apt install libxfont1 libinput-bin libinput10 libwacom-common libwacom2 libunwind8 xserver-xorg-input-libinput
#dpkg -i /packages/xserver/xserver-common__all.deb
#dpkg -i packages/pkg/01_dep/lib
.deb // 这都是xserver-xorg-core_armhf.deb的依赖库
#dpkg -i /packages/xserver/xserver-xorg-core
_armhf.deb

至此,xserver安装完毕

b) 安装gstreamer

mk-rootfs.sh里面安装gstreamer1.0的时候,需要依赖的额外deb包的版本都较高,而ubuntu16.04默认的库版本较低,无法满足要求。

解决办法是利用ubuntu-base-17.04-core-armhf下载所有依赖的库,通过ubuntu17.04下载的库版本基本都是最新的,可以成功解决deb包的依赖问题。

安装依赖包:

 #dpkg -i packages/pkg/02_dep/*.deb // 注意,此命令请执行两次,第一次执行失败,可能是版本依赖导致,请自行研究。

 #dpkg -i packages/pkg/03_dep/*.deb // 这里的deb包比较多,都是安装gstreamer需要的依赖包
安装gstreamer基础包:

 #dpkg -i packages/pkg/*.deb
安装mpp插件:

 #dpkg -i  /packages/video/mpp/librockchip-mpp1_*_armhf.deb
 #dpkg -i  /packages/video/mpp/librockchip-mpp-dev_*_armhf.deb
安装gstreamer主体包:

 #dpkg -i  /packages/video/gstreamer/*.deb
 这里会有两个包安装失败,分别是gstreamer1.0-plugins-bad_1.10.4-1_armhf.deb和libgstreamer-plugins-bad1.0-0_1.10.4-1_armhf.deb,这里忽略,直接过,不管它。

 可能以后有问题,大家自行研究

至此,gstreamer安装完毕

8、禁止libmali-rk-midgard安装

为什么要禁止这个包安装呢?因为安装上它之后,lightdm就无法启动,原因没有仔细研究。所以为了保证系统正常运行,先屏蔽掉,以后有需要再加上。

大家打开/etc/init.d/rockchip.sh文件,里面针对rk3288的需要安装libmali-rk-midgard-r9p0-r0p0_.deb和libmali/libmali-rk-dev_.deb两个包,这里把它们都屏蔽掉。

修改rockchip.sh文件可以再启动一个shell窗口,在外部修改它,修改部分如下:

if [ "$1" == "rk3288" ];
         then
             GPU_VERSION=$(cat /sys/devices/platform/*gpu/gpuinfo)
             if [[ $GPU_VERSION =~ "Mali-T76x MP4 r1p0 0x0750" ]];
             then
                 dpkg -i  /packages/libmali/libmali-rk-midgard-r9p0-r1p0_*.deb #3288w
             else
                 # dpkg -i  /packages/libmali/libmali-rk-midgard-r9p0-r0p0_*.deb
             fi
            # dpkg -i  /packages/libmali/libmali-rk-dev_*.deb
         elif [[  "$1" == "rk3328"  ]]; then
             dpkg -i  /packages/libmali/lib32mali-rk-utgard-2th-r7p0_*.deb
             dpkg -i  /packages/libmali/libmali-rk-dev_*.deb
         elif [[  "$1" == "rk3399"  ]]; then
             dpkg -i  /packages/libmali/lib*mali-rk-midgard-4th-r13p0_*.deb
             dpkg -i  /packages/libmali/libmali-rk-dev_*.deb
         else
             dpkg -i  /packages/libmali/libmali-rk-utgard0_*.deb  
             dpkg -i  /packages/libmali/libmali-rk-dev_*.deb
         fi

9、系统启动脚本设置

$systemctl enable rockchip.service
$systemctl mask systemd-networkd-wait-online.service
$systemctl mask NetworkManager-wait-online.service

10、处理系统依赖问题

前面的操作破坏了系统的依赖关系,做以下处理:

#apt install -f
#apt autoremove
#apt install xubuntu-desktop

11、清理,退出以及卸载根文件系统

#rm -rf /var/lib/apt/lists/*
#exit

此处一定要记得卸载根文件系统:

$./ch-mount.sh -u linux-rootfs-ubuntu-1604

12、制作根文件系统镜像文件

$./mkimage-ubuntu-1604.sh

至此,整个根文件系统的硬件解码库安装完毕。

测试硬件解码请参考:/usr/local/bin/test_dec-gst.sh

请与linux-boot.img一起制作成update.img,刷机验证吧!!!

原作者:luwanjia

更多回帖

发帖
×
20
完善资料,
赚取积分