• 【北京迅为】RK3568开发板android11系统固件讲解


     

     

    脚本里面写入这些内容👆, apt-get install uuid 后面就是包名,比如说安装了这些内容uuid 

    在安装之前先执行这个命令增加下载源👇

    这里会提示,需要输入 回车继续,还是输入 Ctrl-c取消 当然要输入回车继续添加就可以了,添加完之后呢,我们就要创建install 脚本 

    在这个目录下创建了install.sh脚本, 这个脚本大家在任意路径创建就可以 这些命令的world版本大家可以在使用手册里找到 直接执行install.sh脚本这样他就会一个一个的给我们去安装,在安装的时候 第一次安装同样会提示你是yes 还是no  选yes 

     

     

    解压完之后得到这样的一个源码包👆, 

    用ssh拷贝到ubuntu开发环境 然后解压

     

     解压好后,进入这个文件夹:这个文件夹放到就是3568android11整个的bicp 在这个bicp里面,也就是源码包里面,有内核源码,有文件系统源码,我们在编译的时候,是直接使用他给我们提供的build.sh这个编译脚本来安装的,这个源码包里面还给我们集成了编译器,也就是说我们在编译的时候 我们不需要再额外的安装编译器,额外的去设置编译器的环境变量,这些操作我们都不需要了,如果说你之前学过,你用过其他的cpu 其他的cup有个编译内核,需要安装编译器 设置编译器的环境变量,然后再内核有这些步骤 但是3568android11这些步骤都不要了,所以说他给我们简化了,这个是非常方便的,所以越高端的cpu 性能越好的cpu 他的bsp 他的源码就越智能 越方便,

     因为3568他支持很多的屏幕,比如我们迅为做好的 10.1的 7寸屏,vp屏,或者以后在更新的时候不光是设置屏幕了,你可能需要设置其他的,而如果后期更新,在手册上给大家提到,

    以屏幕为例,进入源码这个目录下

    打开这个dtsi文件, 我们只需要修改dtsi文件里面的宏定义就可以了,

    如果是vp屏就需要把LCD_TYPE_MIPI 1 打开,这样编译后的镜像,就支持vp屏的镜像了,如果你没有屏幕 这个呢你如果没有录屏幕随意就行

     设置好屏幕,我们回到android11的源码目录下,

    我们执行这个build.sh脚本进行编译 

     帮助信息 build.sh -U编译的就是uboot  编译的是 build.sh -C 代表是带Clang的kernel内核,如果是

     build.sh -K 编译的是kernel 如果整体编译是不是这些参数都用啊?

     在Android11源码下 使用source javaenv.sh配置jdk环境 然后检查一下jdk版本,然后将设置成3568

    source build/envsetup.sh 因为我们硬件是3568 所以这里的lunch也是3568 我们编译的是 userdebug版本

    这些 准备工作做好了之后,我们就可以执行 build.sh 脚本进行编译了,比如说整体编译,我们就要使用这个命令

     编译时间很长,

    编译没有问题的打印效果👆

    整体编译的镜像会在目录下 在Android11的源码下

    这些就是android11的生成镜像,这些镜像是干什么的? 如果你编译没有成功,是不会生成这些镜像的

    单独编译,比如说我们在开发的时候,我们只修改了他的内核,那我们不需要整体编译 单独编译也是需要这些命令配置一下👆 配置完之后执行 build.sh -CK clong k代表内核,但是编译内核还多了一个命令,这个命令./mkimage.sh这个命令是最后的镜像打包成这个镜像,

    编译uboot 这个时间比较短, 在android11源码目录下执行build.sh -U 编译uboot之前1-2这些命令都需要输入的,刚才这些我们输入过了,所以这次没有输入

     单独对android文件系统进行编译,同样的,build.sh -A 就可以单独编译android文件系统了

    编译生成的Android镜像都有哪些作用呢?

     编译完,要有uboot镜像,内核镜像,文件系统镜像,可能也就3个,但是你看他有这么多个

     boot 就是常说的内核镜像 如果你之前学过其他的板子,他是不是有zim 那这个boot也是内核镜像

    这个内核镜像里面他包含了 dtb设备树镜像,kernel内核镜像,ramdis 他包含了这3种镜像的,但是在烧写的时候我们不能够只烧内核镜像,我们要把它3个打包生成的这个boot.img 把整个内核镜像烧写进去才可以

    boot-debug 他唯一的不同是他多了一个root权限的操作 这个实际上也是内核镜像

    dtbo.img 如果你之前有接触过linux,那么dtb你肯定熟悉,他肯定是设备树,那我们之前在讲设备树的时候 我们讲过驱动么,什么是设备树呢?你比如说这个是一个开发板,然后中间是核心板是rk3568 然后这板子上有很多外设 你比如说 这里有wifi,gpio 4g 那我们在写设备树的时候 我们要把这些外设通过设备树给描述出来呀?这个是我们之前学过的设备树的这个概念,他就是硬件描述的一种语言,那dtbo 我们在字面上 他就是设备树的一个插件,他用来做什么呢?我给大家举个例子,你比如说在这个开发板上 这里有一个gpio设备,他比如说用了gpio3 那么我突然又加了一个gpio的设备,那么这gpio的设备,他也用到了这个gpio3 那他们是不是冲突了,那如果说我们再改这个设备树的时候 我们就要解决这个问题呀?那dtbo就是用来解决这个问题的,他是怎么解决的呀?他也是我先使用这个设备树,但是 他描述的不是整个开发板的设备树 他描述的只有这个核心板rk3568 只有这个最核心的,然后他把这些外设模块,他做成了一个个的插件的形式,然后我用到哪个 我就通过插件组合把他组合起来,我把它组合起来,是不是就是一个完整的呀 你比如说我这用到这个gpio3设备,然后我将这些插件组合,如果说,我用到gpio3的另一个设备,我就将这些插件组合,他就是来解决资源有冲突的时候

    config.cfg是烧写工具的配置文件,这个烧写工具的配置文件他是用来做什么的呢?我们看一下

    烧写工具里面有很多cfg文件

    在烧写工具里面 我们烧写的时候是不是有这么多的选项?那么config.cfg他就是对这里面的选项进行 配置  你比如说点击右键 我点击清空所有项 然后右键点击导入配置,然后找到烧写工具里的config.cfg文件,这里就是对应的配置,那么这些配置就是烧写的时候用的,你比如说我们

     现在要烧写linux镜像,这些配置就是我们要烧写的linux镜像所需要的.img文件,我把Android的配置导进来,这里又有了Android 的配置

     我在清空的时候,他总有一个清空不了,这是为什么? 这个清空不了的选项 他就是MinLoaderAll.bin文件 他是引导程序的一部分,这里给的解释是一级loader  这是瑞星微原厂提供的,他不开源,我们也不知道里面做了什么,而且我们绕不过去,我们只能用,所以说这个选项我们是清空不了的,所以说这个选项,我们肯定是要用的,他是引导程序的一部分,然后我们再来看下一个

    misc这个镜像他是做什么的?这个镜像他是控制android 他是正常启动还是进入到急救模式 也就是recovery modo 他就是做这个来用的,你比如说他进入急救模式,那就需要用到recovery这个镜像,这个镜像里面他实际上和boot里面的内容是一模一样的,

    parameter是参数配置文件 它里面最重要的是分区信息,这个后面讲解

    pcba_small_ misc.img pcbawhole_mlsc.img  pcb他就是一个裸板子 那么pcba呢可以想象成焊接完了的板子,那么这两个镜像是做什么的呢? 瑞星微为了方便给大家测试 就做了一些镜像 这些镜像可以帮助你快速测试你 焊接完了的板子是不是好的,比如说你可以快速测试一下emmc 快速测试cpu 这个就是这个镜像的作用

    supper 这个就是分区相关的文件,他可以动态分区

    trust是信任的固件,但是rk3568上是没有这个固件的

    vbmeta是用于avb校验的

    update 这个镜像他是我们上述镜像的打包 他给你打包一个完整的 这个完成的镜像,我们可以用来直接烧写,我分着烧写不行吗?我不想烧写他整个,我就想烧写这些文件 也可以,rk他就提供了两种方式 第一种就是这些分散的,第二个就是一整个的,给你打包好的镜像,这个就是update

     就拿Android 实体举例子,

     Android实际上我们要烧写的就是这些镜像?但是Android也多了一个baseparameter. img 

    baseparameter是和显示效果相关的文件,

    update就是他的里面就是里面把这些所有的镜像都打包了,生成的一个update.img把你直接烧写好了打包好了 使用这些分散的来烧写也是可以的,

    这里面有 很多镜像 刚才讲了这些镜像的作用,那这些镜像我们在烧写的时候是不是肯定不是全部都要用到呀?你比如说这些pcba_small_ misc.img pcbawhole_mlsc.img相关的,这些我们不需要用的,那哪些镜像我们需要用到的呢?这个就是我们刚才讲的c onfig.cfg的配置文件所决定的,这些配置文件里面他都配置了哪些选项,是不是在这里我们可以看到?我们只需要将这些配置选项里面所需要的对应的文件拷贝到我们的烧写工具里面,我们就可以烧写了 如果说我们需要烧写整个的话,我们需要使用升级固件的功能,这个后面讲

    3.update.img固件拆包和打包

     

    解包👆 

     

    bsp将这个路径下的解包工具, 复制到test的文件夹下

     unpack.sh是解包工具,

    把这三个都拷贝到update.img 的同一级目录下,直接执行这个脚本文件,

    这样他就可以给我们自动解包 

     

     打包,先创建image的文件夹,这一个我们就直接用他生成的文件夹,把要打包的10个镜像放到这个image文件夹下,然后这个文件package-file我们可以通过解包来获得,这个文件是我们打包的时候必须要用的,

    这个文件他描述的其实就是镜像的路径, 

     

     mkupdate 就是bsp里面的打包工具 了, 在bsp有很多打包工具,不光有3288 还有3399的

    我们复制完之后,就是现在的一个状况,然后我们 打开这个脚本文件

     这个脚本文件会找这个文件

     这个文件他其实是这个路径下的这个文件,但是他的名字和脚本文件里的不一样,所以要改一下他的名字,

    我们把他改成刚才脚本文件下的这个名字

     现在打包准备工作完成了,有四个文件,加一个文件夹image 这一个文件夹就是我们要打包的镜像,我们打包的时候, 

     

     直接执行这个脚本,

     

    在当前目录下直接生成了update.img 

    给RK3568开发板烧写Android11系统

    1.

     rk3568

     

     

       

     

    调试串口可以连接可以不连接 

    先按音量“+”按键, 然后按电源键 进入rk3568的loader模式, 发现loader设备 就可以点击升级

     自动将update.img这个系统镜像烧写到开发板中,

    单独的镜像烧写:

     将单独的镜像拷贝到烧写器当中

     update可以删除也可以不删除

    配置烧写工具 点击下载镜像 右键 清除所有项,然后导入配置​​​​​​​

    选择使用Android的cfg 

     点击执行

     一定要是loader模式或者marstroom 模式也没有问题 点击执行

    只烧写内核镜像boot

     注意地址不要错,

    同样是进入开发板的loader模式下,然后我们点击设备分区表,读分区表成功,这样这个地址就会给我们设置成正确的地址 

    易错:

    1.没有安装好驱动,烧写器识别不到loader设备

    2.镜像,镜像有两种,​​​​​​​

     3.烧写线不要连错,先按音量“+”按键, 然后按电源键 进入rk3568的loader模式 再松手

  • 相关阅读:
    牛客网《剑指offer》专栏刷题练习|锻炼递归思想|练习栈的使用
    第23期 | GPTSecurity周报
    LeetCode-22. 括号生成-Java-medium
    elasticsearch常用命令
    Spring Boot与Reactive MongoDB集成
    Postgres16版本中FROM子查询别名可以省略不写了
    精益管理学会|什么是ECRS改善方法?
    卸载Google Drive 硬盘-必须退出程序才能卸载
    Vue和React的一些比较
    2022.11.24
  • 原文地址:https://blog.csdn.net/chezabo6116/article/details/128100108