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

张鑫

7年用户 1062经验值
私信 关注
[问答]

怎样去完成openEuler面向RK3399开发板的移植呢

怎样去完成openEuler面向RK3399开发板的移植呢?有哪些实现步骤?

回帖(2)

洪欣意

2022-3-7 15:40:46
任务动机:完成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.imgrockdev文件夹。

举报

孙洪山

2022-3-7 15:41:07
任务动机:完成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.imgrockdev文件夹。
举报

更多回帖

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