瑞芯微Rockchip开发者社区
登录
直播中
麻酱
8年用户
1223经验值
擅长:MEMS/传感技术
私信
关注
[问答]
如何在Firefly-RK3399上编译和移植Linux内核和Ubuntu16.04 rootfs?
开启该帖子的消息推送
内核
RK3399
Firefly-RK3399移植Ubuntu16.04的过程是怎样的?
如何在Firefly-RK3399上编译和移植Linux内核和Ubuntu16.04 rootfs?
回帖
(1)
袁伟
2022-3-7 10:37:13
< >
任务动机:了解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目录下可以看到如下文件
AndroidTool是windows下的烧写工具,解压之后打开AndroidTool.exe
将typec线连接电脑和板子,然后按住(长按)**“ RECOVERY ”
键,然后按一下
“RESET”
键,大约两秒之后松开)
“ RECOVERY ”**键,界面会提示”发现一个LOADER设备“。
电机左上角的升级固件---固件---选择解压的FIREFLY-RK3399-UBUNTU16.04-GPT-20190910-1001.img文件,然后
设备通过HDMI连接显示屏,开机之后会显示已经更新为Ubuntu系统。
2. Ubuntu16.04固件系统解压
2.1 刷写工具
AndroidTool.exe
在高级功能下选择固件:FIREFLY-RK3399-UBUNTU16.04-GPT-20190910-1001.img,然后解包。
解包之后文件在AndroidTool.exe所在目录下的output文件夹中。
3. Ubuntu18.06开发环境搭建及内核编译
3.1 编译环境
3.1.1 安装编译环境
sudo apt-get install build-essential lzop libncurses5-dev libssl-dev
如果使用的是 64 位的 Ubuntu,还需要安装:
sudo apt-get install libc6:i386
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
3.1.3 获取内核源码和安装交叉编译工具链
获取交叉编译工具:
git clone
https://TeeFirefly@gitlab.com/TeeFirefly/prebuilts.git
3.2 内核移植
3.2.1 下载内核
创建文件夹
mkdir openeuler
cd project Firefly-RK3399
Linux 内核代码获取方式ː git clone
https://TeeFirefly@gitlab.com/TeeFirefly/linux-kernel.git.(下载不成功,可以下载压缩包,然后解压。)
获取交叉编译工具: git clone
https://TeeFirefly@gitlab.com/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
make ARCH=arm64 rk3399-firefly-linux.img
内核编译供成功
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
hello.c的内容如下:
vim Kconfig
vim makefile
修改上一级的Makefile和Kconfig
cd ..
vim Kconfig
增加如图内标记的内容并保存。
vim Makefile
在Makefile文件中增加 :source “drivers/hello/Kconfig"
配置menuconfig
cd ..
make menuconfig
进入界面,选择“Device Drivers”
点击空格,使得 Hello World 变*****号,然后选择Exit退出。
如果出图片中的错误,那么需要调整终端窗口的大小
编译内核
make ARCH make ARCH=arm64 rk3399-firefly-linux.img
5. Ubuntu Rootfs镜像制作
5.1 安装qemu
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。
下载完成之后,创建文件夹temp;并将下载到的文件系统解压到temp中。
mkdir temp
sudo tar-xpf ubuntu-base-16.04.2-base-arm64.tar.gz -C temp
解压之后的文件内容如下:
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
进入根文件系统
sudo chroot temp
5.4 更新与安装
更新源和升级
apt update
apt upgrade
安装需要的功能(vim、git等)
sudo apt install git
如果需要可以安装桌面(apt install xubuntu-desktop)
5.5 添加用户及设置密码
添加用户
useradd -s '/bin/bash' -m -G adm,sudo wzq
设置用户密码
passwd wzq
设置root密码
passwd root
退出根文件系统
exit
5.6 制作根文件系统
用dd工具创建镜像文件
dd if=/dev/zero of= rootfs.img bs=1M count=3000
格式化镜像文件
sudo mkfs.ext4 rootfs.img
挂载镜像并往里面拷入修改后的文件系统
mkdir rootfs sudo mount linuxroot.img rootfs/ sudo cp -rfp temp/* rootfs/
缷载镜像
sudo umount rootfs/
目前文件的rootds.img文件的大小为3.1G,这是定义的分区的大小,不能系统文件的实际大小,所以还要经过处理。
依次执行
e2fsck -p -f rootfs.img #检查并修复镜像文件
resize2fs -M rootfs.img #减小镜像文件不必要的大小
(图中红框为根文件系统制作的过程)
执行完成之后,镜像文件有664M。
6. 打包固件镜像
6.1 工具
打包固件镜像需要用到工具都在:AndroidTool文件夹里的rockdev文件夹。
6.2 文件
需要用到rockdev的
AFPToll.exe、mkupdate.bat、package-file、recover-script、RKimageMaker.exe、update-script。
需要用到解包固件中的
MiniLoaderAll.bin0、parameter、uboot.img、trust.img
编译内核生成的内核
kernel.img
和
resource.img
生成的
rootfs.img
将相关的固件放进
Image
文件夹中(新建一个),将
Image
文件放进
rockdev
目录下,Image文件夹目录如下:
6.3 修改配置
修改
mkupdate.dat
文件
修改
package-file
文件
6.4 运行
双击
mkupdate.dat
文件,运行
首先生成了
backup.image
然后生成了
firmware.img
打包完成,生成
update.img
文件。
update.img文件在rockdev文件夹。
< >
任务动机:了解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目录下可以看到如下文件
AndroidTool是windows下的烧写工具,解压之后打开AndroidTool.exe
将typec线连接电脑和板子,然后按住(长按)**“ RECOVERY ”
键,然后按一下
“RESET”
键,大约两秒之后松开)
“ RECOVERY ”**键,界面会提示”发现一个LOADER设备“。
电机左上角的升级固件---固件---选择解压的FIREFLY-RK3399-UBUNTU16.04-GPT-20190910-1001.img文件,然后
设备通过HDMI连接显示屏,开机之后会显示已经更新为Ubuntu系统。
2. Ubuntu16.04固件系统解压
2.1 刷写工具
AndroidTool.exe
在高级功能下选择固件:FIREFLY-RK3399-UBUNTU16.04-GPT-20190910-1001.img,然后解包。
解包之后文件在AndroidTool.exe所在目录下的output文件夹中。
3. Ubuntu18.06开发环境搭建及内核编译
3.1 编译环境
3.1.1 安装编译环境
sudo apt-get install build-essential lzop libncurses5-dev libssl-dev
如果使用的是 64 位的 Ubuntu,还需要安装:
sudo apt-get install libc6:i386
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
3.1.3 获取内核源码和安装交叉编译工具链
获取交叉编译工具:
git clone
https://TeeFirefly@gitlab.com/TeeFirefly/prebuilts.git
3.2 内核移植
3.2.1 下载内核
创建文件夹
mkdir openeuler
cd project Firefly-RK3399
Linux 内核代码获取方式ː git clone
https://TeeFirefly@gitlab.com/TeeFirefly/linux-kernel.git.(下载不成功,可以下载压缩包,然后解压。)
获取交叉编译工具: git clone
https://TeeFirefly@gitlab.com/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
make ARCH=arm64 rk3399-firefly-linux.img
内核编译供成功
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
hello.c的内容如下:
vim Kconfig
vim makefile
修改上一级的Makefile和Kconfig
cd ..
vim Kconfig
增加如图内标记的内容并保存。
vim Makefile
在Makefile文件中增加 :source “drivers/hello/Kconfig"
配置menuconfig
cd ..
make menuconfig
进入界面,选择“Device Drivers”
点击空格,使得 Hello World 变*****号,然后选择Exit退出。
如果出图片中的错误,那么需要调整终端窗口的大小
编译内核
make ARCH make ARCH=arm64 rk3399-firefly-linux.img
5. Ubuntu Rootfs镜像制作
5.1 安装qemu
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。
下载完成之后,创建文件夹temp;并将下载到的文件系统解压到temp中。
mkdir temp
sudo tar-xpf ubuntu-base-16.04.2-base-arm64.tar.gz -C temp
解压之后的文件内容如下:
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
进入根文件系统
sudo chroot temp
5.4 更新与安装
更新源和升级
apt update
apt upgrade
安装需要的功能(vim、git等)
sudo apt install git
如果需要可以安装桌面(apt install xubuntu-desktop)
5.5 添加用户及设置密码
添加用户
useradd -s '/bin/bash' -m -G adm,sudo wzq
设置用户密码
passwd wzq
设置root密码
passwd root
退出根文件系统
exit
5.6 制作根文件系统
用dd工具创建镜像文件
dd if=/dev/zero of= rootfs.img bs=1M count=3000
格式化镜像文件
sudo mkfs.ext4 rootfs.img
挂载镜像并往里面拷入修改后的文件系统
mkdir rootfs sudo mount linuxroot.img rootfs/ sudo cp -rfp temp/* rootfs/
缷载镜像
sudo umount rootfs/
目前文件的rootds.img文件的大小为3.1G,这是定义的分区的大小,不能系统文件的实际大小,所以还要经过处理。
依次执行
e2fsck -p -f rootfs.img #检查并修复镜像文件
resize2fs -M rootfs.img #减小镜像文件不必要的大小
(图中红框为根文件系统制作的过程)
执行完成之后,镜像文件有664M。
6. 打包固件镜像
6.1 工具
打包固件镜像需要用到工具都在:AndroidTool文件夹里的rockdev文件夹。
6.2 文件
需要用到rockdev的
AFPToll.exe、mkupdate.bat、package-file、recover-script、RKimageMaker.exe、update-script。
需要用到解包固件中的
MiniLoaderAll.bin0、parameter、uboot.img、trust.img
编译内核生成的内核
kernel.img
和
resource.img
生成的
rootfs.img
将相关的固件放进
Image
文件夹中(新建一个),将
Image
文件放进
rockdev
目录下,Image文件夹目录如下:
6.3 修改配置
修改
mkupdate.dat
文件
修改
package-file
文件
6.4 运行
双击
mkupdate.dat
文件,运行
首先生成了
backup.image
然后生成了
firmware.img
打包完成,生成
update.img
文件。
update.img文件在rockdev文件夹。
举报
更多回帖
rotate(-90deg);
回复
相关问答
内核
RK3399
如何对
Firefly-RK3399
Linux
内核
进行
编译
呢
2022-03-08
1506
如何对
Firefly-RK3399
进行
编译
呢
2022-03-08
1896
Ubuntu16.04
配置开发
编译
环境的过程是怎样的?
2022-03-04
1039
Firefly-RK3399
烧写
Ubuntu
系统校验芯片和固件失败怎么解决?
2022-03-07
2751
如何去实现
Firefly-RK3399
第一个
编译
到
内核
的驱动程序呢
2022-03-07
1253
如何对
RK3399
Android7.1进行
编译
呢
2022-03-09
1042
RK3399
Linux
下烧写固件错误是何原因
2022-09-19
1859
怎样在
RK3399-firefly
上
安装Docker容器呢
2022-03-07
1791
如
何在
RK
3328上去安装liunx(
ubuntu16.04
)
RK
固件呢
2022-02-17
1872
如何完成openEuler面向
RK3399
开发板的
移植
?
2022-03-04
1068
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分