RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像
source link: https://blog.51cto.com/hongpangzi/5840166
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
buildroot虽然灵活,但是基于实际情况,本身是侧重驱动和应用定制开发的只定制一次文件系统投入有点多,还不如直接ubunt自己交叉编译依赖库,做一些库的移植裁剪。
于是本篇就使用ubuntu系统了,至于其他库自己下源码在宿主机交叉编译号后,再拷贝过去或者直接在板子上编译也行(只是会比较慢),但是意义不大,因为开发过程肯定是用宿主机,不然核心板编译太慢,在编译上会花费不少可以省去的时间。
为什么选择ubuntu
核心板方案上已经提供适配好的基础uboot和kernel,这个时候不同文件系统 uboot和内核时一样的,做驱动差别也不大,而且笔者做移植交叉编译应用和库都较多,且不同平台都做,直接裁剪移植,所以对于笔者来说,选择ubuntu是更好的方式,缺什么下源码三部曲交叉编译,而使用buildroot构建势必有点绕远路,所以选择了ubuntu,后续对ubuntu进行裁剪,如去掉桌面,然后开发移植库和应用。
RK系列SDK简要介绍
一个通用 Linux SDK (RV系类的sdk没有对工程目录包含有 buildroot、 debian、 app、 kernel、 u-boot、 device、 docs、 external等目录。
以下是RK系类的目录分类:
- app:存放上层应用 app,主要是 qcamera/qfm/qplayer/settings 等一些应用程序。
- buildroot:基于 buildroot (2018.02-rc3) 开发的根文件系统。
- debian:基于 debian 10 开发的根文件系统,支持部分芯片。
- device/rockchip:存放各芯片板级配置和 Parameter 文件,以及一些编译与打包固件的脚本和预备文件。
- docs:存放芯片模块开发指导文档、 平台支持列表、 芯片平台相关文档、 Linux 开发指南等。
- IMAGE:存放每次生成编译时间、 XML、 补丁和固件目录。
- external:存放第三方相关仓库,包括音频、 视频、 网络、 recovery 等。
- kernel:存放 kernel 4.4 或 4.19 开发的代码。
- prebuilts:存放交叉编译工具链。
- rkbin:存放 Rockchip 相关的 Binary 和工具。
- rockdev:存放编译输出固件。
- tools:存放 Linux 和 Windows 操作系统环境下常用工具。
- u-boot:存放基于 v2017.09 版本进行开发的 uboot 代码。
- yocto:基于 yocto gatesgarth 3.2 开发的根文件系统,支持部分芯片
相对于以上的,对比下RV1109&RV1126的SDK目录,如下图:
Ubuntu
Ubuntu 是一个流行的 Linux 发行版, 是基于 Debian 的 unstable 版本加强而来, 以“最好的 Linux 桌面系统” 而闻名, 近些年 Ubuntu 也推出了 Ubuntu Enterprise Linux, 在企业 Linux 应用市场占有率也有较大提高。
- 优点: 技术支持较好, 用户界面友好, 硬件的兼容性好, 采用基于 Deb 的 ATP 包管理系统。
- 缺点: 技术支持和更新服务是需要付费的, 服务器软件生态系统的规模和活力方面稍弱 。
(参考厂家手册)
从开发版提供的资料中拿到uboot,kernel,rootfs:
- uboot:uboot是引导程序,芯片运行跑起来,然后引入kernel
- kernel:linux的内核是加载后将会移植运行在内存中的核心
- rootfs:这是文件系统,文件系统是kernel运行时需要加载一些驱动,库,存储等相关的其他一切相关的东西;
编译uboot,kernel,然后制作文件系统: (注意:buildroot也是要下载编译的,因为打包ubuntu镜像的时候需要使用到buildroot里面的脚本环境,所以此处也要先做buildroot系统再做ubuntu系统,具体查看“入坑一”)
(注意:一定要从购买开发板或者核心板的厂家获取,已经做好了ddr等外设的适配,包括开发板的外设,这是我们后续学习移植的基础,千万不要想着从零开始做,这个是不现实的,目前也没有人和公司这么做)
(注意:Ubuntu文件系统,是真的文件系统,而buildroot文件系统时buildroot工具构建的文件系统,Yocto也是;Debian和Ubuntu则是真文件系统)
编译ubuntu
步骤一:安装buildroot依赖环境
虚拟机安装编译buildroot环境,以下跟来回验证了:
sudo apt-get install uuid uuid-dev zlib1g-dev liblz-dev liblzo2-2 liblzo2-dev lzop \
git-core curl u-boot-tools mtd-utils android-tools-fsutils openjdk-8-jdk device-tree-compiler \
gdisk m4 libz-dev git gnupg flex bison gperf libsdl1.2-dev libesd-java libwxgtk3.0-dev \
squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev pngcrush schedtool \
libxml2 libxml2-utils xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev \
lib32ncurses5-dev lib32readline-dev gcc-multilib libswitch-perl libssl-dev unzip \
zip liblz4-tool repo git ssh make gcc libssl-dev liblz4-tool vim expect \
g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \
qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib \
unzip device-tree-compiler python-pip libncurses5-dev rsync subversion \
sed make binutils build-essential gcc g++ wget python libncurses5 bzr cvs git mercurial \
patch gzip bzip2 perl tar cpio unzip rsync file bc wget qemu-user-static live-build -y \
python3.8 python3.8-dev
步骤二:下载解压uboot-kernel,ubuntu
下载解压,做这个开发确实很需要磁盘大小,而且传输也费时间,加上用虚拟机,专门加装了1024GBSSD作为专门开发的。
然后传送到ubuntu上,使用samba服务,参考博文《linux实用技巧:ubuntu18.04安装samba服务器实现局域网文件共享》
步骤三:移动解压uboot-kernel
tar xvf uboot_kernel_20220512.tar.gz
(疑问:只用了3分钟,因为之前是系统ssd,这次是专门配的1024ssd单独盘么?)
步骤四:使用ubuntu系统
注意:rk3568支撑多个系统,按照SDK文档指定系统是相似的操作。
我们使用ubuntu文件系统,将ubuntu_20220511.tar.gz直接解压到rk356x_linux的文件夹:
cd ~/work/sdk
tar xvf buildroot_20220510.tar.gz -Ca rk356x_linux/
很快,如下图:
步骤五:查看编译命令单独编译uboot,kernel和ubuntu
编译uboot:
编译kernel:
编译文件系统ubuntu,这里要先选择厂商的配置:
./build.sh BoardConfig-rk3568-evb1-ddr4-v10.mk
./build.sh ubuntu
然后错误:
具体查看“入坑一”,这里可以看出方案上先基于buildroot做的,然后再buildroot下去做其他的打包。
编译好buildroot后,继续使用ubuntu
./build.sh ubuntu
至此,ubuntu的固件编译完成,但是我们没有适配屏幕的。
步骤六:适配屏幕
屏幕,笔者使用的是厂家提供的lvds10.1寸屏幕,已经做好了驱动在sdk中,但是需要配置设备树:
cd /home/topeet/Linux/rk356x_linux/
gedit kernel/arch/arm64/boot/dts/rockchip/topeet_screen_choose.dtsi
知识点:适配屏幕是修改了内核的设备树,而没有修改文件系统。
步骤七:编译整体
由于uboot,kernel是没有争议的,但是文件系统是由好几个参数,所以要根据开发文档来,有个环境变量RK_ROOTFS_SYSTEM,他是什么则是什么系统,由此可见,他实际上是build编译文件系统的参数:
编译:
export RK_ROOTFS_SYSTEM=ubuntu
./build.sh all
5分钟编完。
步骤八:打包mkfirmware.sh
./mkfirmware.sh
入坑一:编译ubuntu镜像打包错误
找不到buildroot下的一个脚本。
要先编译buildroot
先走buildroot编译流程,再走编译ubuntu流程
具体的编译buildroot问题,需要看《RK3568开发笔记(四):在虚拟机上使用SDK编译制作uboot、kernel和buildroot镜像》。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK