热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

前言

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

 

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目录,如下图:
  在这里插入图片描述

buildroot

  Linux SDK中 buildroot的 版本是 Buildroot-2018.02,其包含了基于 Linux 系统开发
  用到的各种系统源码,驱动,工具,应用软件包。
  在这里插入图片描述

  buildroot 优势:

  • 通过源码构建, 有很大的灵活性
  • 方便的交叉编译环境, 可以进行快速构建
  • 方便各系统组件配置及定制开发
 

源码准备

  从开发版提供的资料中拿到uboot,kernel,rootfs:

  • uboot:uboot是引导程序,芯片运行跑起来,然后引入kernel
  • kernel:linux的内核是加载后将会移植运行在内存中的核心
  • rootfs:这是文件系统,文件系统是kernel运行时需要加载一些驱动,库,存储等相关的其他一切相关的东西;
     &emsp编译uboot,kernel,然后制作文件系统:
      在这里插入图片描述

  (注意:一定要从购买开发板或者核心板的厂家获取,已经做好了ddr等外设的适配,包括开发板的外设,这是我们后续学习移植的基础,千万不要想着从零开始做,这个是不现实的,目前也没有人和公司这么做)
  (注意:buildroot文件系统,并不是真的文件系统,是buildroot工具构建的文件系统,Yocto也是,Debian和Ubuntu则是真文件系统)

 

编译buildroot

步骤一:安装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

  在这里插入图片描述

步骤二:下载解压buildroot、uboot-kernel 传输到目标系统

  windows上先解压,得到完整文件:
  在这里插入图片描述

  在这里插入图片描述

  然后传送到ubuntu上(使用samba服务,不清楚的参考上一篇安装samba服务)。
  在这里插入图片描述

  在这里插入图片描述

  虚拟机上:
  在这里插入图片描述

步骤三:移动解压uboot-kernel

  注意:文件较大,不建议copy,一是会增加虚拟机所占存储,二是复制的时间很久。

mv buildroot_20220510.tar.gz uboot_kernel_20220512.tar.gz ~/work/

  在这里插入图片描述

  先解压uboot_kernel:

tar xvf uboot_kernel_20220512.tar.gz

   在这里插入图片描述

  这是个挺漫长的时间,花费大致5分钟。

步骤四:使用buildroot系统

  注意:rk3568支撑多个系统,按照SDK文档指定系统是相似的操作。
  我们使用buildroot文件系统,将buildroot_20220510.tar.gz拷贝到rk356x文件夹:

cd ~/work
mv buildroot_20220510.tar.gz rk356x_linux

  在这里插入图片描述
  然后解压:

tar xvf buildroot_20220510.tar.gz

  差不多也是五分钟。

步骤五:查看编译命令

  在这里插入图片描述

  编译uboot,编译内核,编译文件系统(buildroot)
  在这里插入图片描述

步骤六:适配屏幕

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

cd ~/work/rk356x_linux/

  我们此时做个额外学习,先不配置hdmi和vga,这样hdmi和vga就不能显示,后续等我们验证hdmi不能显示后,再重新配置 该文件,进行显示:
  在这里插入图片描述

步骤七:编译整体

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

  然后开始编译:

./build.sh all

  在这里插入图片描述

  查看“入坑二”,最终,使用sdk定义的路径是可以通过的:
  在这里插入图片描述

 

入坑

入坑一:编译所有,定位到是文件系统失败

问题

./build.sh all

  在这里插入图片描述

  编译错误:
  在这里插入图片描述

解决

  依次编译,开始哪里有错误:

./build.sh uboot

  在这里插入图片描述

./build.sh kernel

  内核报的警告,但是依然过了:
  在这里插入图片描述

./build.sh buildroot

  在这里插入图片描述
  仔细看信息,找到问题依次解决:
  在这里插入图片描述
  过程中,还有其他的错误,…其实就是环境缺少一些依赖,文档前面已经补上全部的依赖环境了。
  特别注意,解决后要./build.sh cleanall清理后再编译。
  最终依赖环境是:

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

入坑二:编译buildroot失败

问题

  编译buildroot出现编译库错误。

原因

  新版本的buildroot添加了很多库,这些库跟/home/toppet/Linux的路径相关,配置的时候写成了绝对路径,所以编译buildroot无法通过。

解决

  方案商技术支持说一定要使用文档说的路径才可以通过,重新全部来一遍后,确实可以过,如下图:
  在这里插入图片描述


推荐阅读
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
  • docker安装到基本使用
    记录docker概念,安装及入门日常使用Docker安装查看官方文档,在"Debian上安装Docker",其他平台在"这里查 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 解决IDEA配置xml文件头报错的方法
    本文介绍了解决IDEA配置xml文件头报错的方法,包括了具体的解决方案和步骤。通过本文的指导,读者可以轻松解决这个问题并正常使用IDEA进行开发工作。 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • 解决IDEA的HTML文件格式的显示问题
    用IDEA在显示HTML文件的时候,格式非常奇怪,比如body标签下面不会自动缩进,每次都需要手动缩进,怪麻烦的。解决办法如下:settings>Ed ... [详细]
  • maven阿里云镜像一路繁花似锦绣前程
    重点:找到maven引用的settings.xml配置文件,将以下代码复制至<mirrors><mirrors&a ... [详细]
  • Linux神奇漏洞:长按回车键70秒 即可轻松拿到Root权限
    一般来说获取系统root权限是很困难的,尤其是加密系统中,但西班牙安全研究员hectormarco、ismaelripoll发现,linux系统下只需按住回车键70秒钟,就能轻 ... [详细]
  • Pico Neo 3教程☀️ 六、项目的配置总结及交互开发
    文章目录🟥SDK的导入和项目的设置1️⃣项目的部分配置2️⃣PlayerSettings设置✨将项目切换到Gamma颜色空间✨MinimumAPILevel ... [详细]
author-avatar
猫儿爱妞_591
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有