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包的依赖问题。
安装依赖包:
安装gstreamer基础包:
安装mpp插件:
安装gstreamer主体包:
这里会有两个包安装失败,分别是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