一、前言

期初我是想弄一个分区存放自己的 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. UI自动化项目1说明 | 网页计算器自动化测试项目

    需求: 1.对网页计算器, 进行加法的测试操作. 通过读取数据文件中的数据来执行用例. 2.网址: http://cal.apple886.com/ 测试点: 1.加法:1+1=2 2+9!=10 . ...

  2. DesignPattern-part1

    title: "modern C++ DesignPattern-Part1" date: 2018-04-03T16:06:33+08:00 lastmod: 2018-04-0 ...

  3. FastDFS入门

    一.系统架构 二.构成部分 1.Tracker Server:跟踪服务器,记录文件信息,可单台或集群部署. 2.Storage Server:存储服务器,文件存储位置,分卷或分组部署. 3.Clien ...

  4. web组态软件(BY组态)介绍

    BY组态是什么? BY组态面向工业物联网系统复杂的功能要求,通过"搭积木"的方式,拖拽组件到画布上,实现工业物联网可视化的web开发系统. BY组态适用领域 能源电力.物联网.智能 ...

  5. java_方法使用细节

    java_方法使用细节 1.一个方法想要返回多个值 思考?一个方法如何返回多个值 返回数组 class AA{ public int[] getSumAndSub(int n1, int n2){ / ...

  6. Django——后台添加的用户密码错误

    django项目中,当我们创建了user模型类,并生成了超级管理员,之后我们进入到admin后台页面中,添加一个用户,再去login页面登陆时,会提示我们 用户名或密码错误. 这时,我们第一时间会想到 ...

  7. keycloak~为keycloak-services项目添加第三方模块(首创)

    我们在对keycloak框架中的核心项目keycloak-services进行二次开发过程中,发现了一个问题,当时有这种需求,在keycloak-services中需要使用infinispan缓存,我 ...

  8. lora训练之偷师

    自stable diffusion开源之后AIGC绘画方向定制化百花齐放百家争鸣.而c站 https://civitai.com/ 也聚集了全球爱好者的各种微调训练模型分享. 其中以lora为首,应用 ...

  9. .NET 8.0 中有哪些新的变化?

    1性能提升 .NET 8在整个堆栈中带来了数千项性能改进 .默认情况下会启用一种名为动态配置文件引导优化 (PGO) 的新代码生成器,它可以根据实际使用情况优化代码,并且可以将应用程序的性能提高高达 ...

  10. 基础练习:FJ的字符串

    问题描述 FJ在沙盘上写了这样一些字符串: A1 = "A" A2 = "ABA" A3 = "ABACABA" A4 = "AB ...