一、前言

期初我是想弄一个分区存放自己的 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接口的对接流程和注意事项 随着互联网技术的发展和数字化时代的到来,API接口已经成为应用程序之间进行数据交换和通信的重要方式.API即应用程序接口,是一种定义.调用和交互的规范,使得不同应用 ...

  2. jenkins部署及gitlab联调

    jenkins部署及gitlab联调 目录 jenkins部署及gitlab联调 一.jenkins安装 1.环境优化 2.安装jdk java 环境 3.下载jenkins 4.启动Jenkins服 ...

  3. Vue源码学习(七):合并生命周期(混入Vue.Mixin)

    好家伙,   1.使用场景 现在来,来想一下,作为一个使用Vue的开发者,假设现在我们要使用created(),我们会如何使用 1.1.  .vue文件中使用 <template> < ...

  4. android 尺寸适配相关

    Android上常见度量单位 px(像素):屏幕上的点,绝对长度,与硬件相关. in(英寸):长度单位. mm(毫米):长度单位. pt(磅):1/72英寸,point. dp(与密度无关的像素):一 ...

  5. 11. 用Rust手把手编写一个wmproxy(代理,内网穿透等), 实现健康检查

    11. 用Rust手把手编写一个wmproxy(代理,内网穿透等), 实现健康检查 项目 ++wmproxy++ gite: https://gitee.com/tickbh/wmproxy gith ...

  6. junit4单元测试报错Invalid project specified

    junit4单元测试报错Invalid project specified. 前天在进行单元测试的时候出现了Invalid project specified的报错查了一下发现是项目名字的问题.项目名 ...

  7. .NET中的数组在内存中如何布局?

    总的来说,.NET的值类型和引用类型都映射一段连续的内存片段.不过对于值类型对象来说,这段内存只需要存储其字段成员,而对应引用类型对象,还需要存储额外的内容.就内存布局来说,引用类型有两个独特的存在, ...

  8. ❤️接近两万字 CSS之熟练掌握background,这一次帮你彻底弄懂背景属性❤️(建议收藏)

    作者:WangMin 格言:努力做好自己喜欢的每一件事 在项目中为了网页的美观,通常会给网页或者某个元素设置背景,这时就会用到 CSS中background属性 来实现这个效果,这个属性是一个很基本的 ...

  9. 02Java学习_注意事项和学习方法

    02_Java 开发注意事项细节和学习方法 目录 02_Java 开发注意事项细节和学习方法 注意事项 学习方法 注意事项 .java 是 Java 文件的拓展名.源文件的基本组成部分是类--clas ...

  10. RIPEMD加密技术

    摘要:RIPEMD(RACE Integrity Primitives Evaluation Message Digest)是一种密码散列函数,广泛应用于网络安全领域.本文首先介绍RIPEMD的起源和 ...