Firefly-RK3399刷写ubuntu16.04镜像并升级固件

任务动机:了解Firefly-RK3399移植Ubuntu16.04的过程,为向Firefly-RK3399移植OpenEuler操作系统做准备。

任务描述:在Firefly-RK3399上编译和移植Linux内核和Ubuntu16.04 rootfs,升级固件。

1. Firefly-RK3399刷写官方Ubuntu16.04系统

下载ubuntu16.04镜像:http://www.t-firefly.com/doc/download/page/id/3.html 

选择ubuntu(GPT),进入百度网盘后进入/ubuntu16.04/Public目录,选择一个版本下载。本例程下载FIREFLY-RK3399-UBUNTU16.04-GPT-20190910-1001.img.7z

解压之后,在pack目录下可以看到如下文件

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第1张图片

AndroidTool是windows下的烧写工具,解压之后打开AndroidTool.exe

1596420015073

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第2张图片

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第3张图片

将typec线连接电脑和板子,然后按住(长按)**“ RECOVERY ”键,然后按一下“RESET”键,大约两秒之后松开)“ RECOVERY ”**键,界面会提示”发现一个LOADER设备“。

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第4张图片

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第5张图片

电机左上角的升级固件---固件---选择解压的FIREFLY-RK3399-UBUNTU16.04-GPT-20190910-1001.img文件,然后

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第6张图片

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第7张图片

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第8张图片

设备通过HDMI连接显示屏,开机之后会显示已经更新为Ubuntu系统。

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第9张图片

2. Ubuntu16.04固件系统解压

2.1 刷写工具AndroidTool.exe

在高级功能下选择固件:FIREFLY-RK3399-UBUNTU16.04-GPT-20190910-1001.img,然后解包。

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第10张图片

解包之后文件在AndroidTool.exe所在目录下的output文件夹中。

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第11张图片

3. Ubuntu18.06开发环境搭建及内核编译

3.1 编译环境

3.1.1 安装编译环境

sudo apt-get install build-essential lzop libncurses5-dev libssl-dev

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第12张图片

如果使用的是 64 位的 Ubuntu,还需要安装:

sudo apt-get install libc6:i386

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第13张图片

3.1.2 安装 mkbootimg 工具

git clone https://github.com/neo-technologies/rockchip-mkbootimg.git
cd rockchip-mkbootimg
make && sudo make install

注:若没安装git 包,先安装git

sudo apt install git

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第14张图片

3.1.3 获取内核源码和安装交叉编译工具链

获取交叉编译工具:

git clone https://[email protected]/TeeFirefly/prebuilts.git

3.2 内核移植

3.2.1 下载内核

创建文件夹

mkdir openeuler
cd project Firefly-RK3399

Linux 内核代码获取方式ː git clone https://[email protected]/TeeFirefly/linux-kernel.git.(下载不成功,可以下载压缩包,然后解压。)

获取交叉编译工具: git clone https://[email protected]/TeeFirefly/prebuilts.git.

内核与编译工具放在同一目录下

3.2.2 内核编译

linux 内核采用的config 文件为firefly_linux_defconfig, config 文件在~/linux-kernel/arch/arm64/configs/firefly_linux_defconfig,对应生成 kernel.img

dts 文件为 rk3399-firefly-linux.dts 文件, dts 文件在~/ linux-kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-linux.dts, 对应生成resource.img 文件 编译内核

make ARCH=arm64 firefly_linux_defconfig

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第15张图片

make ARCH=arm64 rk3399-firefly-linux.img

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第16张图片

内核编译供成功

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第17张图片

4. Helloworld程序写入内核驱动

4.1 目标

创建一个 hello 的驱动,在开机的时候加载,并打印"Hello world"

4.2 简介

1,增加驱动文件 hello.c 和对应的 Makefile、Kconfig 2,修改上一级的 Makefile 与 Kconfig 3,使用 Make menuconfig 进行配置 4,编译,烧录和运行

1、在内核源码内的 drivers 文件夹里新建一个文件夹,文件夹命名自定义。

cd openeur/linux-kernel-gitlab-firefly/drivers/

mkdir hello

cd hello

vim hello.c

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第18张图片

hello.c的内容如下:

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第19张图片

vim Kconfig

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第20张图片

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第21张图片

vim makefile

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第22张图片

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第23张图片

修改上一级的Makefile和Kconfig

cd ..

vim Kconfig

增加如图内标记的内容并保存。

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第24张图片

vim Makefile

在Makefile文件中增加 :source “drivers/hello/Kconfig"

配置menuconfig

cd ..

make menuconfig

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第25张图片

进入界面,选择“Device Drivers”

点击空格,使得 Hello World 变*****号,然后选择Exit退出。

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第26张图片

如果出图片中的错误,那么需要调整终端窗口的大小

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第27张图片

编译内核

  make ARCH  make ARCH=arm64 rk3399-firefly-linux.img

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第28张图片

5. Ubuntu Rootfs镜像制作

5.1 安装qemu

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第29张图片

5.2 获取Ubuntu—core

Firefly-rk3399 ubuntu根文件系统是基于Ubuntu base 16.04来创建的。 可以到官方网站 http://cdimage.ubuntu.com/ubuntu-base/releases/16.04/release/ 下载 ubuntu-base-16.04.2-base-arm64.tar.gz。

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第30张图片

​ 下载完成之后,创建文件夹temp;并将下载到的文件系统解压到temp中。

mkdir temp
sudo tar-xpf ubuntu-base-16.04.2-base-arm64.tar.gz -C temp

​ 解压之后的文件内容如下:

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第31张图片

5.3 修改根文件系统

准备网络

 sudo cp -b /etc/resolv.conf temp/etc/resolv.conf

准备 qemu 

sudo cp /usr/bin/qemu-aarch64-static temp/usr/bin/

增加软件源

 sudo vim temp/etc/apt/sources.list

加入如下两行内容,保存后退出

deb http://ports.ubuntu.com/ubuntu-ports/ xenial main universe 
deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial main universe

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第32张图片

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第33张图片

进入根文件系统

sudo chroot temp

1596358168910

5.4 更新与安装

更新源和升级

apt update
apt upgrade

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第34张图片

安装需要的功能(vim、git等)

sudo apt install git

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第35张图片

如果需要可以安装桌面(apt install xubuntu-desktop)

5.5 添加用户及设置密码

添加用户

useradd -s '/bin/bash' -m -G adm,sudo wzq

设置用户密码

passwd wzq

设置root密码

passwd root

退出根文件系统

exit

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第36张图片

5.6 制作根文件系统

用dd工具创建镜像文件

dd if=/dev/zero of= rootfs.img bs=1M count=3000

格式化镜像文件

sudo mkfs.ext4 rootfs.img

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第37张图片

挂载镜像并往里面拷入修改后的文件系统

mkdir rootfs sudo mount linuxroot.img rootfs/ sudo cp -rfp temp/* rootfs/

缷载镜像

 sudo umount rootfs/

目前文件的rootds.img文件的大小为3.1G,这是定义的分区的大小,不能系统文件的实际大小,所以还要经过处理。

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第38张图片

依次执行

e2fsck -p -f rootfs.img  #检查并修复镜像文件
resize2fs -M rootfs.img  #减小镜像文件不必要的大小

(图中红框为根文件系统制作的过程)

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第39张图片

执行完成之后,镜像文件有664M。

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第40张图片

6. 打包固件镜像

6.1 工具 

打包固件镜像需要用到工具都在:AndroidTool文件夹里的rockdev文件夹。

6.2 文件

需要用到rockdev的AFPToll.exe、mkupdate.bat、package-file、recover-script、RKimageMaker.exe、update-script。

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第41张图片

需要用到解包固件中的 MiniLoaderAll.bin0、parameter、uboot.img、trust.img

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第42张图片

编译内核生成的内核kernel.imgresource.img

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第43张图片

生成的rootfs.img

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第44张图片

将相关的固件放进Image文件夹中(新建一个),将Image文件放进rockdev目录下,Image文件夹目录如下:

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第45张图片

6.3 修改配置

修改mkupdate.dat文件

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第46张图片

修改 package-file 文件

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第47张图片

6.4 运行

双击mkupdate.dat文件,运行

首先生成了backup.image

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第48张图片

然后生成了firmware.img

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第49张图片

打包完成,生成update.img文件。

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第50张图片

update.img文件在rockdev文件夹。

Firefly-RK3399刷写ubuntu16.04镜像并升级固件_第51张图片

 

你可能感兴趣的:(移植,内核,linux,ubuntu)