前言

  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镜像》。

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

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

    前言   上一篇搭建好了ubuntu宿主机开发环境,本篇的目标系统主要是开发linux+qt,所以需要刷上billdroot+Qt创建的系统,为了更好的熟悉原理和整个开发过程,选择从零开始搭建rk35 ...

  2. Django开发笔记五

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...

  3. Hi3516开发笔记(四):Hi3516虚拟机编译uboot、kernel、roofts和userdata以及分区表

    若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/121572767红胖子(红模仿)的博文大全:开发技术集合( ...

  4. 在虚拟机上安装gho、esd(wim)系统镜像文件

    gho.esd(wim)等文件不能被虚拟机识别,但如果把它们打包成iso就可以了. 另外,还需用到能在虚拟机上运行的WinPE的iso文件,本文用的是微PE. 注意:安装虚拟机提示operating ...

  5. openwrt开发笔记一:源码下载与编译

    1.1 环境要求 编译系统:Linux发行版(本文使用Ubuntu) 编译一个可以安装的OpenWrt固件镜像文件(大约8MB大小的),你需要: 一个纯净的OpenWrt编译系统大约需要200MB的空 ...

  6. 《ArcGIS Runtime SDK for Android开发笔记》——翻译:ArcGIS Runtime SDK for Android 10.2.7发布

    ArcGIS Runtime SDK for Android v10.2.7 released by Dan O'Neill on October 1, 2015(发布时间:2015年10月1日) W ...

  7. [APP] Android 开发笔记 006-使用短信验证SDK进行短信验证

    1. 下载SDK (http://www.mob.com/#/download) SMS For Android Studio: http://www.mob.com/download/sms/and ...

  8. Linux及Arm-Linux程序开发笔记(零基础入门篇)

    Linux及Arm-Linux程序开发笔记(零基础入门篇)  作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/bee ...

  9. 【Linux开发】Linux及Arm-Linux程序开发笔记(零基础入门篇)

    Linux及Arm-Linux程序开发笔记(零基础入门篇) 作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/beer ...

随机推荐

  1. vsftpd 操作手册 - 完整版

    vsftpd # 目录 - ftp 简介 - vsftpd 简介 - vsftpd 安装&卸载 - vsftpd 配置文件 - vsftpd 认证模板 - vsftpd 配置模板 # 目录详解 ...

  2. DataGridVIew控件绑定数据之后的,增、插、删操作

    最开始没有绑定数据,很快就实现了增.插.删操作,可是绑定数据之后,进行这些操作就会报错. 网上对这方面的资料比较少,自己摸索着找到了解决方法,也就是直接对绑定的数据进行操作,这里以DataTable为 ...

  3. KingbaseES 数据库软件卸载

    关键字: KingbaseES.卸载   一.安装后检查 在安装完成后,可以通过以下几种方式进行安装正确性验证: 1. 查看安装日志,确认没有错误记录; 2. 查看开始菜单: 查看应用程序菜单中是否安 ...

  4. KingbaseES sys_prewarm 扩展

    Oracle 在查询数据 可以通过cache hint 所访问的数据cache 到数据库buffer,对于KingbaseES,如何将数据加载到cache 了?sys_prewarm 扩展插件可以实现 ...

  5. mysql选择列建立索引选择

    1. 选择Where子句中筛选性好的列,即列中数据大量不重复 2. 索引名最好 idx_ 开头 3. 包含在 Order by ; Group By; Distinct 中的字段可以添加索引,可以提高 ...

  6. 一文搞懂mysql索引底层逻辑,干货满满!

    一.什么是索引 在mysql中,索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录.通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列即可 ...

  7. 三门问题模拟对比试验——附VB6和Python3源程序及EXE文件

    三门问题模拟对比试验 [直接跳转到文件下载] 前言 "三门问题"是一个很有意思的概率论问题,涉及贝叶斯公式,是人工智能领域的一个经典问题. 为了直观地研究这个问题,也为了测试一下P ...

  8. Windows服务器无法配置IP

    前天在给一台服务器配置IP地址的时候发现一个奇怪的问题.IP地址配置之后不生效,还是使用的169.254这个微软保留自动分配地址.由于这个是一台虚拟机,尝试了删除添加网卡也没有用.配置IP不成功的时候 ...

  9. 一门能让你五分钟学会的语言-Brainfuck

    看到标题,不出意外的话,你肯定开始骂我了:**标题党,什么编程语言五分钟就能学会? 其实我本来也是不相信的,但是学过了才知道这是真的. 1.Brainfuck 看到这个小标题,不要误会,我没有骂人. ...

  10. 使用kubeoperator安装的k8s集群以及采用的containerd容器运行时,关于采用的是cgroup 驱动还是systemd 驱动的说明

    使用kubeoperator安装的k8s集群,默认使用的是systemd驱动 # kubectl get cm -n kube-system NAME DATA AGE calico-config 4 ...