任务动机:完成openEuler面向RK3399开发板的移植。
任务描述:按照固件烧写准备,固件获取,固件打包和烧写的步骤实现openEuler面向RK3399开发板的移植,整理过程和相关命令记录到文档。
1. 固件烧写准备
Firefly RK3399的打包固件升级工具AndroidTool中,包含一个rockdev的文件夹,打包固件是会用到该文件夹下的几个工具(mkupdate.bat、AFPTool.exe、RKImageMaker.exe)。 Firefly RK3399升级固件所需的各部分文件包括:MiniLoaderAll.bin、parameter.txt uboot.img trust.img kernel.img resource.img等。在接下来部分将逐一介绍每个文件的获取。
2. 固件获取
2.1 uboot.img、MiniloaderAll.bin、parameter.txt、trust.img的获取
在AndroidTool_Relese目录里面打开AndroidTool.exe
连接设备,切换到loader模式(将typec线连接电脑和板子,然后按住(长按)RECOVERY键,然后按一下RESET键,大约两秒之后松开)RECOVERY键,界面会提示发现一个LOADER设备)。
选择高级功能--在固件后选择镜像,打开已经下载好的固件包镜像(FIREFLY-RK3399-UBUNTU16.04-GPT-20190910-1001.img),如下图所示
点击"解包",等待解压完成。固件镜像文件都在AndroidTool目录里的"Output"文件夹里面,之后制作固件镜像将会在这个文件夹里面uboot.img、MiniloaderAll.bin、parameter.txt、trust.img四个文件,如下图所示
//Output/Android/img_rk3399_firefly/..(MiniloaderAll.bin、parameter.txt、uboot.img、trust.img)
2.2 kernel.img和resource.img
2.2.1 下载openeuler4.19版本内核
git clone :openeuler/kernel.git
2.2.2 下载RK4.19版本内核
git clone :rockchip-linux/kernel.git
2.2.3 内核文件拷贝
(1)将Rk-4.19内核源码的rk3399pro_npu_defconfig文件copy进openeuler内核的~/arch/arm64/configs文件夹中
(2)将Rk-4.19内核源码的~/arch/arm64/Makefile文件替换openeuler内核的~/arch/arm64/Makefile
(3)替换arm64/boot/dts目录下的:rockchip
(4)在根目录下增加RK-4.19中多余的单个文档与图片。
2.2.4 安装依赖
apt-get install build-essential gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu bc libssl-dev -y
2.2.5 环境配置
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
2.2.6 编译
make ARCH=arm64 rk3399pro_npu_defconfig
make ARCH=arm64 rk3399-firefly-linux.img
常见错误1:scripts缺少文件; 替换RK-4.9的scripts文件夹到openeuler中。
继续编译
make ARCH=arm64 rk3399-firefly-linux.img
常见错误2:dt-bindings文件夹的文件找不到,替换RK-4.9的dt-bindings文件夹到openeuler中。
make ARCH=arm64 rk3399-firefly-linux.img
生成成功
2.3 rootfs.img
2.3.1 创建RPM数据库
mkdir ${WORKDIR}/rootfs
mkdir -p ${WORKDIR}/rootfs/var/lib/rpm
rpm --root ${WORKDIR}/rootfs/ --initdb
// 下载openeuler发布包
rpm -ivh --nodeps --root ${WORKDIR}/rootfs/
会在 ${WORKDIR}/rootfs 下生成三个文件夹: etc/ usr/ var/ 。
2.3.2 安装必要软件
(1)安装yum源
mkdir ${WORKDIR}/rootfs/etc/yum.repos.d
curl -o ${WORKDIR}/rootfs/etc/yum.repos.d/openEuler-20.03-LTS.repo
(2)安装dnf
dnf --installroot=${WORKDIR}/rootfs/ install dnf --nogpgcheck -y
dnf --installroot=${WORKDIR}/rootfs/ makecache
dnf --installroot=${WORKDIR}/rootfs/ install -y alsa-utils wpa_supplicant vim net-tools iproute iputils NetworkManager openssh-server passwd hostname ntp bluez pulseaudio-module-bluetooth
2.3.3 添加配置文件
(1)添加hosts
cp /etc/hosts ${WORKDIR}/rootfs/etc/hosts
(2)网络相关:设置DNS
cp -L /etc/resolv.conf ${WORKDIR}/rootfs/etc/resolv.conf
编辑添加 nameserver:
vim ${WORKDIR}/rootfs/etc/resolv.conf
内容:
nameserver 8.8.8.8
nameserver 114.114.114.114
(3)网络相关(设置IP自动获取)
mkdir ${WORKDIR}/rootfs/etc/sysconfig/network-scripts
vim ${WORKDIR}/rootfs/etc/sysconfig/network-scripts/ifup-eth0
//内容
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=851a6f36-e65c-3a43-8f4a-78fd0fc09dc9
ONBOOT=yes
AUTOCONNECT_PRIORITY=-999
DEVICE=eth0
2.3.4 rootfs设置
chroot ${WORKDIR}/rootfs /bin/bash
(1)设置root密码
passwd root
(2)设置主机名
echo openEuler > /etc/hostname
(3)退出
exit
2.3.5 制作跟文件系统镜像
将上述rootfs文件夹拷贝到本地ubuntu18.04系统下。
用dd工具创建镜像文件:
dd if=/dev/zero of=rootfs.img bs=1M count=3000
格式化镜像文件
sudo mkfs.ext4 rootfs.img
挂载镜像并往里面考入修改后的文件系统
mkdir rootfs
sudo mount rootfs.img rootfs/
sudo cp -rfp temp/* rootfs/
卸载镜像
sudo umount rootfs/
制作完成之后在目录下生成rootfs.img
3. 固件打包和烧写
3.1 文件准备
(1)将生成的uboot.img、MiniloaderAll.bin、parameter.txt、trust.img、kerne.img、resource.img以及rootfs,img拷贝至 **//AndroidTool/rockdev/Image ** 文件夹下,如下图所示:
(2)修改mkupdate.dat文件
(3)修改 package-file文件
3.2 制作镜像
双击运行mkupdate.dat
首先生成了backup.image
然后生成了firmware.img
打包完成,生成update.img文件。
生成的update.img在rockdev文件夹。
任务动机:完成openEuler面向RK3399开发板的移植。
任务描述:按照固件烧写准备,固件获取,固件打包和烧写的步骤实现openEuler面向RK3399开发板的移植,整理过程和相关命令记录到文档。
1. 固件烧写准备
Firefly RK3399的打包固件升级工具AndroidTool中,包含一个rockdev的文件夹,打包固件是会用到该文件夹下的几个工具(mkupdate.bat、AFPTool.exe、RKImageMaker.exe)。 Firefly RK3399升级固件所需的各部分文件包括:MiniLoaderAll.bin、parameter.txt uboot.img trust.img kernel.img resource.img等。在接下来部分将逐一介绍每个文件的获取。
2. 固件获取
2.1 uboot.img、MiniloaderAll.bin、parameter.txt、trust.img的获取
在AndroidTool_Relese目录里面打开AndroidTool.exe
连接设备,切换到loader模式(将typec线连接电脑和板子,然后按住(长按)RECOVERY键,然后按一下RESET键,大约两秒之后松开)RECOVERY键,界面会提示发现一个LOADER设备)。
选择高级功能--在固件后选择镜像,打开已经下载好的固件包镜像(FIREFLY-RK3399-UBUNTU16.04-GPT-20190910-1001.img),如下图所示
点击"解包",等待解压完成。固件镜像文件都在AndroidTool目录里的"Output"文件夹里面,之后制作固件镜像将会在这个文件夹里面uboot.img、MiniloaderAll.bin、parameter.txt、trust.img四个文件,如下图所示
//Output/Android/img_rk3399_firefly/..(MiniloaderAll.bin、parameter.txt、uboot.img、trust.img)
2.2 kernel.img和resource.img
2.2.1 下载openeuler4.19版本内核
git clone :openeuler/kernel.git
2.2.2 下载RK4.19版本内核
git clone :rockchip-linux/kernel.git
2.2.3 内核文件拷贝
(1)将Rk-4.19内核源码的rk3399pro_npu_defconfig文件copy进openeuler内核的~/arch/arm64/configs文件夹中
(2)将Rk-4.19内核源码的~/arch/arm64/Makefile文件替换openeuler内核的~/arch/arm64/Makefile
(3)替换arm64/boot/dts目录下的:rockchip
(4)在根目录下增加RK-4.19中多余的单个文档与图片。
2.2.4 安装依赖
apt-get install build-essential gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu bc libssl-dev -y
2.2.5 环境配置
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
2.2.6 编译
make ARCH=arm64 rk3399pro_npu_defconfig
make ARCH=arm64 rk3399-firefly-linux.img
常见错误1:scripts缺少文件; 替换RK-4.9的scripts文件夹到openeuler中。
继续编译
make ARCH=arm64 rk3399-firefly-linux.img
常见错误2:dt-bindings文件夹的文件找不到,替换RK-4.9的dt-bindings文件夹到openeuler中。
make ARCH=arm64 rk3399-firefly-linux.img
生成成功
2.3 rootfs.img
2.3.1 创建RPM数据库
mkdir ${WORKDIR}/rootfs
mkdir -p ${WORKDIR}/rootfs/var/lib/rpm
rpm --root ${WORKDIR}/rootfs/ --initdb
// 下载openeuler发布包
rpm -ivh --nodeps --root ${WORKDIR}/rootfs/
会在 ${WORKDIR}/rootfs 下生成三个文件夹: etc/ usr/ var/ 。
2.3.2 安装必要软件
(1)安装yum源
mkdir ${WORKDIR}/rootfs/etc/yum.repos.d
curl -o ${WORKDIR}/rootfs/etc/yum.repos.d/openEuler-20.03-LTS.repo
(2)安装dnf
dnf --installroot=${WORKDIR}/rootfs/ install dnf --nogpgcheck -y
dnf --installroot=${WORKDIR}/rootfs/ makecache
dnf --installroot=${WORKDIR}/rootfs/ install -y alsa-utils wpa_supplicant vim net-tools iproute iputils NetworkManager openssh-server passwd hostname ntp bluez pulseaudio-module-bluetooth
2.3.3 添加配置文件
(1)添加hosts
cp /etc/hosts ${WORKDIR}/rootfs/etc/hosts
(2)网络相关:设置DNS
cp -L /etc/resolv.conf ${WORKDIR}/rootfs/etc/resolv.conf
编辑添加 nameserver:
vim ${WORKDIR}/rootfs/etc/resolv.conf
内容:
nameserver 8.8.8.8
nameserver 114.114.114.114
(3)网络相关(设置IP自动获取)
mkdir ${WORKDIR}/rootfs/etc/sysconfig/network-scripts
vim ${WORKDIR}/rootfs/etc/sysconfig/network-scripts/ifup-eth0
//内容
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=851a6f36-e65c-3a43-8f4a-78fd0fc09dc9
ONBOOT=yes
AUTOCONNECT_PRIORITY=-999
DEVICE=eth0
2.3.4 rootfs设置
chroot ${WORKDIR}/rootfs /bin/bash
(1)设置root密码
passwd root
(2)设置主机名
echo openEuler > /etc/hostname
(3)退出
exit
2.3.5 制作跟文件系统镜像
将上述rootfs文件夹拷贝到本地ubuntu18.04系统下。
用dd工具创建镜像文件:
dd if=/dev/zero of=rootfs.img bs=1M count=3000
格式化镜像文件
sudo mkfs.ext4 rootfs.img
挂载镜像并往里面考入修改后的文件系统
mkdir rootfs
sudo mount rootfs.img rootfs/
sudo cp -rfp temp/* rootfs/
卸载镜像
sudo umount rootfs/
制作完成之后在目录下生成rootfs.img
3. 固件打包和烧写
3.1 文件准备
(1)将生成的uboot.img、MiniloaderAll.bin、parameter.txt、trust.img、kerne.img、resource.img以及rootfs,img拷贝至 **//AndroidTool/rockdev/Image ** 文件夹下,如下图所示:
(2)修改mkupdate.dat文件
(3)修改 package-file文件
3.2 制作镜像
双击运行mkupdate.dat
首先生成了backup.image
然后生成了firmware.img
打包完成,生成update.img文件。
生成的update.img在rockdev文件夹。
举报