4

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像

 1 year ago
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.
neoserver,ios ssh client

  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目录,如下图:
    RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_rk3568sdk编译

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,然后制作文件系统:
    RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_ubuntu_02
      (注意: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

  

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_rk3568sdk编译_03

步骤二:下载解压uboot-kernel,ubuntu

  下载解压,做这个开发确实很需要磁盘大小,而且传输也费时间,加上用虚拟机,专门加装了1024GBSSD作为专门开发的。

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_rk3568sdk编译_04

  然后传送到ubuntu上,使用samba服务,参考博文《linux实用技巧:ubuntu18.04安装samba服务器实现局域网文件共享》

步骤三:移动解压uboot-kernel

  

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_rk3568sdk编译_05
tar xvf uboot_kernel_20220512.tar.gz

  

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_rk3568_06

  (疑问:只用了3分钟,因为之前是系统ssd,这次是专门配的1024ssd单独盘么?)

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_rk3568_07

步骤四:使用ubuntu系统

  注意:rk3568支撑多个系统,按照SDK文档指定系统是相似的操作。
  我们使用ubuntu文件系统,将ubuntu_20220511.tar.gz直接解压到rk356x_linux的文件夹:

cd ~/work/sdk
tar xvf buildroot_20220510.tar.gz -Ca rk356x_linux/

  RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_ubuntu_08
  很快,如下图:

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_rk3568_09

步骤五:查看编译命令单独编译uboot,kernel和ubuntu

  

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_uboot_10

  编译uboot:

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_rk3568sdk编译_11

  编译kernel:

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_kernel_12

  编译文件系统ubuntu,这里要先选择厂商的配置:

./build.sh BoardConfig-rk3568-evb1-ddr4-v10.mk
./build.sh ubuntu

  

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_uboot_13

  然后错误:

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_rk3568_14

  具体查看“入坑一”,这里可以看出方案上先基于buildroot做的,然后再buildroot下去做其他的打包。
  编译好buildroot后,继续使用ubuntu

./build.sh ubuntu

  

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_uboot_15
RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_rk3568sdk编译_16

  至此,ubuntu的固件编译完成,但是我们没有适配屏幕的。

步骤六:适配屏幕

  屏幕,笔者使用的是厂家提供的lvds10.1寸屏幕,已经做好了驱动在sdk中,但是需要配置设备树:

cd /home/topeet/Linux/rk356x_linux/
gedit kernel/arch/arm64/boot/dts/rockchip/topeet_screen_choose.dtsi

  RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_uboot_17

  知识点:适配屏幕是修改了内核的设备树,而没有修改文件系统。

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_kernel_18

步骤七:编译整体

  由于uboot,kernel是没有争议的,但是文件系统是由好几个参数,所以要根据开发文档来,有个环境变量RK_ROOTFS_SYSTEM,他是什么则是什么系统,由此可见,他实际上是build编译文件系统的参数:
  编译:

export RK_ROOTFS_SYSTEM=ubuntu
./build.sh all

  

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_uboot_19
RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_rk3568sdk编译_20

  5分钟编完。

步骤八:打包mkfirmware.sh

./mkfirmware.sh

  

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_ubuntu_21
RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_kernel_22

入坑一:编译ubuntu镜像打包错误

  找不到buildroot下的一个脚本。

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_rk3568sdk编译_23

  

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_ubuntu_24

  要先编译buildroot

  先走buildroot编译流程,再走编译ubuntu流程

RK3568开发笔记(五):在虚拟机上使用SDK编译制作uboot、kernel和ubuntu镜像_rk3568_25

  具体的编译buildroot问题,需要看《RK3568开发笔记(四):在虚拟机上使用SDK编译制作uboot、kernel和buildroot镜像》。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK