一个版本烧录过程中记录:fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img
关键词:dd、fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img等等。
一个典型的嵌入式系统是由uboot+kernel+rootfs组成的,其中uboot和kernel都是二进制,rootfs存在文件系统。
二进制在烧录的时候比较简单,将二进制数据写入存储设备固定地址;rootfs存在文件系统,所以需要对存储设备进行分区,然后在分区上建立文件系统。
对存储介质分区可以直接挂载,进行分区、挂载,然后将rootfs内容写入,即完成了rootfs更新。
或者创建一个普通image文件,然后将文件当成一个分区,在其上创建rootfs。创建的普通image文件,可以使raw image也可以是sparse image。
1. 二进制文件烧录
二进制文件更新比较简单,直接使用DD即可。
dd if=spl.bin of=/dev/sdc bs=1024 seek=33
2. fdisk创建分区
通过fdisk可以在一个物理设备上创建分区表,也可以在一个image文件上创建分区。
fdisk -l device将输出指定设备的分区信息,不指定device则显示系统所有设备的分区信息。
AME
fdisk - manipulate disk partition table SYNOPSIS
fdisk [options] device fdisk -l [device...]
fdisk device之后,输入m显示帮助信息。n新增一个分区表,p显示分区信息,w保存分区信息,q退出。
可以将分区命令输入到一个fdisk_input文件中,然后fdisk <fdisk_input读取分区命令并执行生成分区表。
cat > fdisk_input <<EOF
n
p p
w
EOF fdisk -u ${ALL_IN_ONE} <fdisk_input
退出后即可看到创建的分区。
3. 创建ext4的raw image文件系统
首先创建一个空白image文件,如果在设备上创建则直接使用。
然后调用mkfs.ext4在文件或者设备上创建ext4文件系统,将创建好的文件系统mount到一个目录。
将rootfs文件写入mount目录,并sync。
最后将文件系统进行umount。
dd if=/dev/zero of=${ROOTFS_EXT4} bs=1M count=${ROOTFS_SIZE}
mkfs.ext4 ${ROOTFS_EXT4} -F
mkdir -p /tmp/emmc
sudo mount -t ext4 ${ROOTFS_EXT4} /tmp/emmc -o data=journal,barrier=
sudo rm -rf /tmp/emmc/*
cd /tmp/emmc
sudo cpio -idm < ${ROOTFS_CPIO}
sync
cd -
sudo umount /tmp/emmc
即完成了文件系统创建。
4.创建ext4的sparse image文件系统
工具make_ext4fs可以创建稀疏ext4文件系统,制作出来的文件尺寸较小。
make_ext4fs -l 2018M -s rootfs.sparse ../target/
即可创建完成2018M大小的rootfs.spare image文件,文件来源于../target/目录。
5. sparse image和raw image互转
通过simg2img可以将sparse image转换成raw image,img2simg可以将raw image转换成sparse image。
Usage: simg2img <sparse_image_files> <raw_image_file>
Usage: img2simg <raw_image_file> <sparse_image_file> [<block_size>]
分别执行:
simg2img rootfs.sparse rootfs.sparse2raw
img2simg rootfs.ext4 rootfs.ext42sparse
结果如下:
rootfs.ext4: Linux rev 1.0 ext4 filesystem data, UUID=a8e84664--4ab2-8bd3-bb20ea25e1ee (extents) (large files) (huge files)
rootfs.ext4s: Android sparse image, version: 1.0, Total of -byte output blocks in input chunks.
rootfs.sparse: Android sparse image, version: 1.0, Total of -byte output blocks in input chunks.
rootfs.sparse2raw: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)
参考文档:
1.《http://2net.co.uk/tutorial/android-sparse-image-format》
一个版本烧录过程中记录:fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img的更多相关文章
- 记录ubuntu16.04版本安装过程中遇到的问题
记录ubuntu16.04版本安装和使用过程中遇到的些问题,方便以后查看,主要内容有: 1. ubuntu源替换 2. windows与vmware ubuntu文件夹共享 3. putty连接ubu ...
- DML过程中记录错误日志
当你插入几百万数据时,由于有几条脏数据而导致插入失败,是不是很恼火.10g R2之后有个新功能.将插入过程中失败的记录插入到还有一张表中. SQL> drop table test purge; ...
- 记录一个使用HttpClient过程中的一个bug
最近用HttpClient进行链接请求,开了多线程之后发现经常有线程hang住,查看线程dump java.lang.Thread.State: RUNNABLE at java.net.Socket ...
- 写一个小demo过程中遇到的各种问题 学生管理考勤系统(网页模拟)
添加与新增一些小玩意的1.0.3版本:传送门 各位带哥,这不是你们要的c++.java.c#作业哈 课上要求做个小作业,学生管理考勤系统,原本想着是个练手的好机会,结果只证实了我还是个弟中弟. 设想的 ...
- 安装Ubuntu版本linux过程中没有提示设置root用户密码问题的解决办法
原来ubunto不提倡设置root用户,系统安装成功后,root密码是随机的,那么在这种情况下如何得到root权限呐,具体方法如下: 终端中输入:sudo passwd root 此时重新设置原登录用 ...
- 记一个VS连接过程中找不到cpp的解决方法
在新增几个qt页面时,发现原来没动的几个cpp 连接报错了,错误均是qt的相关文件找不到 应该是moc文件没有生产或者没有被包含进工程.我想着既然我没动,应该不会是moc的原因,就在其他方向解决了很久 ...
- [.NET跨平台]Jeuxs独立版本的便利与过程中的一些坑
本文环境与前言 之前写过一篇相关的文章:在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验 当时的部署还是比较繁琐的,而且需要联网下载各种东西..有兴趣的可以看看, ...
- [.NET跨平台]Jexus独立版本的便利与过程中的一些坑
本文环境与前言 之前写过一篇相关的文章:在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验 当时的部署还是比较繁琐的,而且需要联网下载各种东西..有兴趣的可以看看, ...
- 重学 Java 设计模式:实战备忘录模式「模拟互联网系统上线过程中,配置文件回滚场景」
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 实现不了是研发的借口? 实现不了,有时候是功能复杂度较高难以实 ...
随机推荐
- 收到一个神盾局的offer,怎么样?
漫威十一年系列总结性的电影<复联4>正在热映,而衍生出的一部和漫威宇宙关联的美剧<神盾局特工>,今年我也在陆陆续续地看.一开始预期的是一部特工加一些科幻或魔幻元素的剧集,就图看 ...
- Jmeter工具使用初体验
一.Jmeter组成部分 一个完整的脚本必须包含以下三项,他们都在测试计划的子选项中,我们直接在测试计划上右键选择即可 线程组 取样器 监视器 二.脚本编写 1.创建线程组 2.添加取样器 我们这里添 ...
- 简单“三步”让你的网站支持https!
关于Let's Encrypt Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla.Cisco.Akamai.IdenTrust.EFF等组织人员发起 ...
- C language bit byte and word
bit:The smallest storage unit of a computer byte:Common computer storage unit word:Computer natural ...
- QGIS练手 - 数据
又熬夜了... 这篇博客可能会将QGIS数据管理部分和ArcGIS数据管理进行对比学习. 1. 本地数据文件与数据库(矢量) 1.1 文件 QGIS用的是shp文件.kml文件.geojson文件较多 ...
- 卡拉OK歌词原理和实现高仿Android网易云音乐
大家好,我们是爱学啊,继上一篇讲解了[LRC歌词原理和实现高仿Android网易云音乐],今天给大家带来一篇关于卡拉OK歌词原理和在Android上如何实现歌词逐字滚动的效果,本文来自[Android ...
- Android8.1 SystemUI源码分析之 电池时钟刷新
SystemUI源码分析相关文章 Android8.1 SystemUI源码分析之 Notification流程 分析之前再贴一下 StatusBar 相关类图 电池图标刷新 从上篇的分析得到电池图标 ...
- MongoDB 中聚合统计计算--$SUM表达式
我们一般通过表达式$sum来计算总和.因为MongoDB的文档有数组字段,所以可以简单的将计算总和分成两种:1,统计符合条件的所有文档的某个字段的总和:2,统计每个文档的数组字段里面的各个数据值的和. ...
- Appium常用指令
右键图片“在新标签页打开”可查看大图
- Codefest19受虐记
date: 2019-08-28 前言 比赛链接:Codefest 19 A题 思路: 这是一道水题.你对着样例递推打一个表出来,会发现结果三个一组循环. 例如:A = [3, 4, 7, 3, 4, ...