一、前言

期初我是想弄一个分区存放自己的 APP 程序,如果需要更改应用的时候,只需要烧写独立的分区即可,就不需要重新烧写 rootfs。这是一个简单的操作,为啥还需要记录了,因为我在里面遇到了一些坑,思路走错了,便折腾了几天。为啥会有这样的需求了,一是为了管理方便,二是将应用程序给新手的时候,他们不一定能将应用程序拷贝到开发板中。下面是我使用的一些环境

开发板:RV1126

内核版本:4.19.111

启动方式:快速启动

二、分区实现

  1. 原理

    仔细研究过的朋友便能发现,在 SDK 中是没有分区操作的,其原理并不是编译的时候将 rootfs 分成了多个块,而是在烧写的时候,烧写工具根据分区信息分成多个引导块,如下图所示:

    在这里做一个简单的测试便知道,我们只需要将 demo 分区的大小更改一下,重新烧写验证即可,怎么更改接着往下看

  2. 分区规则

    这里主要是关注 “CMDLINE: mtdparts=rk29xxnand:” 之后的内容,至于 “CMDLINE: mtdparts=rk29xxnand:” 为啥不介绍了,因为我也不知道,我们就当是一个规则约束吧,不然会崩溃的,扯远了。

    在接着看冒号后面的内容是有规律的,可以知道用逗号隔开后对应的是一个分区。仔细看一下,便知道规则是“分区大小@起始地址”,并且下一个分区的起始地址是上一个分区的结束地址。

  3. 结论

    到此相信相信小伙伴都会对 RV1126 进行分区操作了,在来整理一下步奏,如下所示:

    • 首先,需要更改烧写时的 parameter.txt 分区文件,可以对其进行增删改查

    • 其次,我们需要制作自己的分区,并烧写到对应的其实地址即可,分区的制作就比较简单了,不知道的可以参考我之前的笔记linux下制作img文件,制作好 img 文件后,烧写即可,;烧写规则如下图所示:

    • 最后,对分区进行挂载,挂载分区就比较简单了,可以在开机脚本中使用 mount 命令进行挂载,也可以在 “ etc/fstab” 文件中添加对应的挂载信息即可。

  4. 注意事项

    • 上面降到分区的规则是 “分区大小@起始地址” ,但是会在以为文件中看到 “-@起始地址” 这样的形式,其作用是自动获取剩余的空间,都是在最后一个分区中出现,如下图所示:

      注意: 再次注意,细心的小伙伴会发现,在分区名后面多了一个 “:grow” ,没错当你使用 - 表示获取剩余空间的时候,必须要在分区名的后面加上 “:grow” ,否则你开机后,变回发现挂载点不存在。

    • 看到这里,有的小伙伴就会好奇,怎么才能查看对应的挂载点,这里有两个办法,首先可是使用 lsblk 命令进行查看,但是 lsblk 命令可能在 RV1126 不存在,那还有一个方法,使用 cat /sys/class/block/xxx/uevent 查看对应的挂载点是那个,如下图所示:

到此,分区的操作就算完成了,但是笔记到这里还没结束。上面的操作显然是没问题的,这样介绍的目的是让各位小伙伴深刻理解分区的操作,不然换一个板子就不会了。后面将继续介绍怎么使用 SDK 完成分区的操作。

三、分区脚本

分区脚本在 “sdk/device/rockchip/rv1126_rv1109” 目录下,具体是那个文件,可以看板级配置文件,这里就不介绍,不明白的小伙伴,可以看我之前的笔记RV1126 快速启动

在次打开对应的分区文件,便会发现,这个分区脚本和烧写时的分区文件是一样的,没错烧写文件中的 parameter.txt 文件就从这里直接拷贝过去的,只是名称不一样而已。脚本内容如下图所示:

四、img 打包

  1. 打包脚本 mk-image.sh

    在 SDK 中,提供了一个脚本可以直接将对应的文件打包成 img 文件。在 SDK 简单找了一下,对应的打包文件是 “sdk/device/rockchip/common/mk-image.sh”,使用规则就很简单了,接着往下看。

  2. 使用规则

    mk-image.sh <src_dir> <target_image> <fs_type> [size]
    • src_dir:是需要打包的文件路径及名称,如“/home/demo”
    • target_image:是需要打包成的文件路径及名称,如:“/home/demo.img”
    • fs_type:文件类型,如ext2、ext2、ext4
    • size:文件大小,可以省略

      注意: 如果路径错误便会提示 “mk-image.sh <src_dir> <target_image> <fs_type> [size]”,所以有的小伙伴会发现编译的时候会提示这个错误,多数是因为路径不存在导致的
  3. 添加到 img 打包脚本中

    在之前的比中介绍到,SDK 中的 img 打包脚本是 “mkfirmware.sh”,在 “sdk/device/rockchip/common” 目录下,具体怎么添加,在 4.2 中已经介绍了,这里就不过多讲解了。

五、启动挂载

上面已经完成了分区和 img 文件的打包,但是这两个步奏完成后,烧写到开发板中是不具备文自动挂载的,每次都需要手动挂载。一开始我们已经介绍到了自动挂载的方式,所以只需要在打包之前更改对应的脚本文件即可。

不论是更改 “etc/fstab” 文件还是对应的启动脚本,操作方式都是一样的,只需要将文件放到对的目录下,每次编译的时候会自动将其打包到 rootfs 中,不了解的下伙伴可以看我之间的笔记【Buildroot】工具包使用

到此,我们的真个分区操作算便完成了,有写的不好的地方望各位指出,我会积极改进。

参考资料

rv1126 扩展rootfs分区以及增加分区:https://www.ebaina.com/articles/140000016845

RV1126 分区教程的更多相关文章

  1. 解决Mac OS X Lion狮子系统及win7多分区教程

    [绿茶教程]解决Mac OS X Lion狮子系统及win7多分区教程   工具/原料 8G的u盘制作lion系统安装盘   步骤/方法  插入U盘---开机---按住左下角“Option”键(alt ...

  2. 【Win10分区教程】

    Win10怎么分区?如何为Win10硬盘分区? 注:本教程适用于Win7.Win8.Win8.1和Win10系 到了Windows10时代,TB级硬盘已经很普及了,那么在Win10系统下如何为这些大容 ...

  3. Sqlserver2008 表分区教程

    先声明..Sql2008只有企业版才能够搞这个表分区.其他版本请自觉更改.. 哥在这里费了很长时间劲..结果还是老老实实的重装.. 表分区定义 一般情况下,我们建立数据库表时,表数据都存放在一个文件里 ...

  4. (转)PQ分区魔术师中文版分区教程

    PQ分区魔术师中文版分区的图解,图文并茂很多朋友提到硬盘分区,觉得不敢轻易去尝试,怕得不偿失,深度xp系统下载在此分享下pq分区的图解详见下图: 1)这是用的雨林木风系统的光盘,其他系统盘一样 2)首 ...

  5. 2015-2016款Mac安装win10多分区教程,不破坏GUID分区表。

    原文:https://bbs.feng.com/read-htm-tid-10895240.html 参考:https://bbs.feng.com/read-htm-tid-9940193.html ...

  6. CentOS7挂载分区教程

    http://www.centoscn.com/CentOS/config/2014/1016/3955.html

  7. 小米3移动版 分区 调整/合并教程(16GB/64GB)

    (必读)版权声明:米3移动版TWRP Recovery为XueferH适配,分区脚本以及双数据置换脚本的知识产权,智力成果权归XueferH所有. 注:此教程仅适用于Xiaomi MI 3-移动版(1 ...

  8. 分区助手官网使用教程(专业版、绿色版和WinPE版)(图文详解)

    不多说,直接上干货! 详情见 http://www.disktool.cn/jiaocheng/index.html http://www.disktool.cn/jiaocheng/index2.h ...

  9. linux磁盘及分区详解

    1.Linux 分区简介 1.1 主分区 vs 扩展分区 硬盘分区表中最多能存储四个分区,但我们实际使用时一般只分为两个分区,一个是主分区(Primary Partion)一个是扩展分区(extend ...

  10. 安装Windows 8.1过程中出现的各种问题(无损从MBR转GPT磁盘、不能定位已有分区)

    这个周末就安装了个系统,本以为一个小时就能搞定,没想到花费了将近一天. 我的机子是6G内存.500G硬盘,原装系统是Windows 7,现在想换成Windows 8.1,于是下载了64位的Window ...

随机推荐

  1. 这才叫 API 接口设计!

    API 接口设计 Token 设计 Token 是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个 Token 便将此 Token 返回给客户端,以后客户端只需带上 ...

  2. [Python] 今天开始学习Python3了, 纪念一下

    #! /usr/bin/env python3 import time print("你好, 请告诉我你的名字.") name = input("名前: ") ...

  3. 使用KRPano资源分析工具强力加密JS文件

    本文地址:http://www.cnblogs.com/reachteam/p/6294767.html 软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278 ...

  4. Falcon-7B大型语言模型在心理健康对话数据集上使用QLoRA进行微调

      文本是参考文献[1]的中文翻译,主要讲解了Falcon-7B大型语言模型在心理健康对话数据集上使用QLoRA进行微调的过程.项目GitHub链接为https://github.com/iamaru ...

  5. # 简明快速配置 Rust 工具链

    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/dBzL9WZ8P1L1X9j_XkmNQg 你可能会为不同版本的工具 ...

  6. Hadoop - WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...

    Hadoop - WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... 配置完ha ...

  7. css的认知与样式

      目录 1. 介绍css 2. CSS语法 3. CSS注释 4. CSS中的颜色值 5. CSS长度单位 6. html引入CSS的三种方法 6.1 行内样式(内联样式) 6.2   内嵌样式 6 ...

  8. math库常用函数+产生随机数总结

    math库常用函数+产生随机数总结 1.对x开平方 double sqrt(x)://返回值为double类型,输入的x类型随意,只要是数的类型 2.求常数e的x次方 double exp(x);// ...

  9. 使用Spring Integration接收TCP与UDP请求

    1. 简介 Spring Integration 是一个开源的项目,它是 Spring 生态系统的一部分,旨在简化企业集成(Enterprise Integration)的开发.它提供了一种构建消息驱 ...

  10. Vue:watch的多种使用方法

    好家伙, 补了一下watch的多种用法 1.属性: 方法(最常用) 使用最广泛的方式是将watch选项设置为一个对象,对象的属性是要观测的数据属性,值是一个回调函数,该回调函数会在属性变化时触发.例如 ...