Linux镜像模式,Linux实现HiTool的合并镜像功能

本文介绍了如何使用Shell脚本来实现Linux系统的HiTool合并镜像功能,包括将uboot、kernel和rootfs合并成一个完整的烧写镜像。脚本主要利用cat和dd命令进行文件拼接和空白区域填充,通过统计文件长度和计算填充长度来确保镜像的正确生成。最终,脚本会输出合并后的镜像文件及其大小信息,方便后续的烧录操作。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值