Linux实现HiTool的合并镜像功能
完成uboot、kernel、rootfs后,HiTool提供了界面工具来制作合并镜像。通过生成的文件分析发现,这个功能主要就是合并了多个二进制文件,其中指定区域段数据不足时使用0x00补全。知道规则后那么我们就可以做自己的合并镜像功能了,实现在完成编译后直接生成一个完整烧写镜像。
方式
这部分逻辑比较简单,因此就不用C语言编写了,直接使用shell脚本实现。其中主要涉及的指令为cat重定向和dd,它们分别用来进行文件拼接和空白区域填充功能。
实现
切换路径
最简单的脚本形式,第一行指定解释器,第二行移动路径到我的镜像输出路径
#!/bin/bash
cd out
删除旧的文件
这里定义合并后的镜像文件名称,如果这个文件以及存在那么就把它删除
outfile='img.flash'
if [ -f $outfile ]
then
rm -rf $outfile
fi
填充uboot
先设定生成的uboot文件名称,然后获取这个文件的长度,我这里镜像中uboot设定的区域长度是1M大小。拼接文件可以使用符号进行追加。因为合并文件中数据不足区域要补0,计算得到空缺长度addlen后,可以使用dd指令从zero中获取一块相同长度的数据填上,这样第一部分就完成啦。
file='u-boot-hi3516ev200.bin'
len=`stat -c "%s" $file`
alllen=$((1 * 1024 * 1024))
addlen=`expr $alllen - $len`
echo len=$len alllen=$alllen addlen=$addlen
cat $file $outfile
dd if=/dev/zero bs=$addlen count=1 $outfile
填充kernel
这部分语法与上面一致,其中kernel区域指定长度为4M大小。
file='uImage'
len=`stat -c "%s" $file`
alllen=$((4 * 1024 * 1024))
addlen=`expr $alllen - $len`
echo len=$len alllen=$alllen addlen=$addlen
cat $file $outfile
dd if=/dev/zero bs=$addlen count=1 $outfile
填充rootfs
file='rootfs_uclibc_64k.jffs2'
len=`stat -c "%s" $file`
alllen=$((11 * 1024 * 1024))
addlen=`expr $alllen - $len`
echo len=$len alllen=$alllen addlen=$addlen
cat $file $outfile
dd if=/dev/zero bs=$addlen count=1 $outfile
填充完根文件系统后,整个合并的镜像文件就算完成了。接着可以打印一下辅助信息做简说明要判断,HiTool工具提供了按地址烧写的操作,我们可以把需要填写的十六进制文件长度也显示出来。
echo
echo filepath: `pwd`/$outfile
alllen=`stat -c "%s" $outfile`
echo filesize: $alllen `printf "(HEX:%x)" $alllen`
echo
至此,把这些代码都写到一个脚本文件中,在make的时候调用一下就可以直接生成合并的镜像文件发出去啦。测试一下运行效果
Linux实现HiTool的合并镜像功能 相关文章
631 echarts调色盘:主题调色盘,全局调色盘,局部调色盘,渐变颜色的实现
03.调色盘的使用.html !DOCTYPE htmlhtml lang="en"head meta charset="UTF-8" meta name="viewport" content="width=device-width, initial-scale=1.0" meta http-equiv="X-UA-Compatible" content="ie=edge" titleDocument/title script src="lib/echarts.
js实现大数相加算法
1、题目:实现两个大数相加。 2、算法思路: 大数可能超出任何一种整数类型,会引发溢出问题,所以用字符串的格式存储大数: //js实现大数相加 function add(str1, str2) { if (Number(str1) Number(str2)) { var len = str1; } else { var len = str2; } var
Linux内核源码分析 -- 构造新 cred -- prepare_kernel_cred
prepare_kernel_cred - Prepare a set of credentials for a kernel service 使用指定进程的 real_cred 去构造一个新的 cred,不是引用,不是引用,不是引用,而是创建一个新的 cred 源码版本:Linux Kernel 5.9.9 prepare_kernel_cred /** * prepare_kernel
django 实现读写分离
主要目的:单个数据库进行读写操作频繁,降低速度,增加服务器读写数据库压力,为了解决这一问题,对数据库进行读写分离,将大大提升项目的性能。其基本原理是: 让主数据库处理事务性的增删改查,而从数据库处理查询操作,当主数据库因一些事务性操作导致数
安卓自动化测试--Momkey 自定义脚本实现自动化
MonkeyScript MS 是官方提供的,除了像猴子一样随机乱点之外,还可以通过编写脚本的形式,完成一系列固定的操作。MS 提供一整套完善的 API 来进行支持,主要还是基于坐标点的操作,包含常用的:点击、长按、输入、等待等操作。 脚本用法 1、LaunchActivity(p
Oracle-Rman数据备份
1、Linux系统下备份 开启归档日志 linux 启动归档日志 SQL SHUTDOWN IMMEDIATE; SQL STARTUP MOUNT; mkdir -p /u01/arch SQL alter system set log_archive_dest_1='location=/u01/arch'; SQL alter database archivelog; SQL alter database open; SQL arch
linux lvm分区在线扩容
转载:https://www.cnblogs.com/tiantianhappy/p/10143663.html 前言: 对lvm格式的 / 分区进行在线扩容 1.添加新的磁盘 略 2.查询磁盘情况 df -Thfdisk -l 3.如果没有找到 cd /sys/class/scsi_host/echo "- - -" host0/scan #接口扫描新加磁盘即可,如果输
SSH客户端工具连接Linux(有的也可以连接Windows、mac、、iOS等多系统平台)
要远程操作Linux的话还是得靠SSH工具,一般来说,Linux是打开了默认22端口的SSH的服务端,如果我们要远程它的话,就需要一个SSH客户。 我对一款好用的工具主要需要满足以下几点。 (1)连接服务器快速,稳定; (2)支持sftp或者ftp文件传输; (3)支持X11
如何实现一个圣杯布局
什么是圣杯布局 圣杯布局是为了讨论「三栏液态布局」的实现,最早的完美实现是由 Matthew Levine 在 2006 年写的一篇文章 《In Search of the Holy Grail》 ,它主要讲述了网页中关于最佳圣杯的实现方法。 它有以下几点要求: 上部(header)和下部(footer)各
springboot 如何使用自定义注解+aop实现全局日志持久化操作
1.自定一个注解 package com.hc.manager.common.aop.annotation; import java.lang.annotation.*; /** * LogAnnotation * * @author summer.chou * @version V1.0 * @date 2020年3月18日 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME