ROC-RK3566-PC ubuntu系统编译实践

rk3566平台支持android和linux系统,原本项目中使用android系统,现在需要在rk3566上跑ubuntu,记录按照官网文档进行操作的实际情况。

官网文档地址:2. 编译 Linux5.10 固件 — Firefly Wiki

目录

下载Linux SDK

同步库上代码

PC配置编译环境,使用Docker

创建工作目录~/docker,在其中创建文件:dockerfile,官方给出的内容如下:

​编辑

创建镜像

创建容器

docker使用

编译Ubuntu固件

配置config,官方命令:

下载Ubuntu根文件系统

编译


下载Linux SDK

下载地址:Firefly | 让科技更简单,让生活更智能

下载时PC端可以同步安装:

sudo apt update
sudo apt install -y repo git python

下载完成后,提取SDK,此步无坑,按官网操作即可。

# 给脚本添加执行权限
cd /path/to/rk356x_linux5.10_release_20231027_v1.2.1b
chmod +x ./sdk_tools.sh

# 创建 SDK 目录
mkdir -p ~/proj/rk356x_sdk-linux5.10

# 校验并解压
./sdk_tools.sh --unpack -C ~/proj/rk356x_sdk-linux5.10

# 还原工作目录
./sdk_tools.sh --sync -C ~/proj/rk356x_sdk-linux5.10

同步库上代码

代码使用repo进行管理。执行命令如下:

# 进入 SDK 根目录
cd ~/proj/rk356x_sdk-linux5.10

# 同步
.repo/repo/repo sync -c --no-tags
.repo/repo/repo start firefly --all

需要注意.repo/repo/repo sync -c --no-tags这条命令

初次接触repo,简单了解了下,这里-c指清除本地的修改。

执行这步时遇到了第一个问题:

按照官网提供的方法反复执行是无法解决的。

解决办法:删除对应出问题的目录,重新执行。比如上图删除tools目录重新同步就可以成功。

后面回过头想了下,出现这个问题的原因可能是下载了sdk,但是恰好官方更新了sdk版本,而且本地对下载的sdk是过了两天才解压同步,导致的这个问题。

PC配置编译环境,使用Docker

这里我的电脑很早就装过docker,所以安装过程略过,firefly也提供了docker安装过程:

1. 用户和密码 — Firefly Wiki

这里我简单试了一下,基本没有问题,在步骤2的docker info这步,开始几次执行不成功,加了sudo执行就可以了,后面全步骤做完不加sudo也能成功了。

创建工作目录~/docker,在其中创建文件:dockerfile,官方给出的内容如下:
FROM ubuntu:18.04
MAINTAINER firefly "service@t-firefly.com"

ENV DEBIAN_FRONTEND=noninteractive

RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
RUN sed -i 's@http://.*ubuntu.com@http://repo.huaweicloud.com@g' /etc/apt/sources.list

RUN apt update

RUN apt install -y build-essential crossbuild-essential-arm64 \
	bash-completion vim sudo locales time rsync bc python

RUN apt install -y repo git ssh libssl-dev liblz4-tool lib32stdc++6 \
	expect patchelf chrpath gawk texinfo diffstat binfmt-support \
	qemu-user-static live-build bison flex fakeroot cmake \
	unzip device-tree-compiler python-pip ncurses-dev python-pyelftools \
	subversion asciidoc w3m dblatex graphviz python-matplotlib cpio \
	libparse-yapp-perl default-jre patchutils swig expect-dev u-boot-tools

RUN apt update && apt install -y -f

# language support
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8

# switch to a no-root user
RUN useradd -c 'firefly user' -m -d /home/firefly -s /bin/bash firefly
RUN sed -i -e '/\%sudo/ c \%sudo ALL=(ALL) NOPASSWD: ALL' /etc/sudoers
RUN usermod -a -G sudo firefly

USER firefly
WORKDIR /home/firefly
注意此步的dockerfile的apt install部分,我这边实际使用下来发现少了两个:libmpc-dev、libgmp-dev,在docker里编译时报错了。需要自己加入。

官方的dockerfile将root权限禁掉了,可以修改dockerfile将这里改为root用户,或者直接不使用提供dockerfile,直接创建个18.04的docker再将需要下载的依赖都下载就可以了。

这里后面在编译完成打包时还有问题,打包的时候会失败:(这步可以遇到时回来看,或者直接把依赖加进去就解决了。)

这也是缺少依赖:bsdmainutils,也需要加入。

或者docker里编译,出来在host主机打包也可以规避这个问题。

创建镜像
cd ~/docker
docker build -t sdkcompiler .
# sdkcompiler 是镜像名称,可随意更改,注意命令最后有一个‘.’
创建容器
docker run --privileged --mount type=bind,source=/home/fierfly/proj,target=/home/firefly/proj --name="ubuntu18" -h firefly -it sdkcompiler

这里source后面是第一步下载的SDK的目录,target是容器内的一个目录,必须是空目录,这里没有太理解这的意思,有知道的可以帮忙解释下。

name是容器名字,firefly是容器的hostname

进到容器里后需要cd /home/fierfyl/proj,就可以使用sdk了。

docker使用
# 在容器内输入 exit 即可退出

# 查看所有容器(包括已退出的)
docker ps -a

# 重启一个退出的容器并连接
docker start ubuntu18 # 容器名
docker attach ubuntu18

编译Ubuntu固件

配置config,官方命令:
./build.sh firefly_rk3566_roc-rk3566-pc_ubuntu_defconfig

实际上需要执行:

./build.sh device/rockchip/rk3566_rk3568/firefly_rk3566_roc-rk3566-pc_ubuntu_defconfig

所有config都在device/rockchip/rk3566_rk3568/目录下。

下载Ubuntu根文件系统

地址:Firefly | 让科技更简单,让生活更智能

官方压缩包为7z格式,Ubuntu安装7z软件包:

sudo apt-get update
sudo apt-get install p7zip-full

解压文件:

# 假设下载的压缩包叫 Ubuntu20.04-xxx_RK3568_KERNEL-5.10_xxx.7z
7z x Ubuntu20.04-xxx_RK3568_KERNEL-5.10_xxx.7z

将解压出的根文件系统放到 prebuilt_rootfs/ 目录下:

mkdir prebuilt_rootfs
# 假设解压出的文件系统叫做 Ubuntu20.04-xxx_RK3568_KERNEL-5.10_xxx.img
mv Ubuntu20.04-xxx_RK3568_KERNEL-5.10_xxx.img prebuilt_rootfs/
cd prebuilt_rootfs
ln -sf Ubuntu20.04-xxx_RK3568_KERNEL-5.10_xxx.img rk356x_ubuntu_rootfs.img
编译
./build.sh all

到此,RK3566上跑ubuntu的固件的编译流程就好了,可以进行定制化修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值