linux制作 ext4镜像image 脚本demo

news2024/11/17 11:02:49

结构如下:
在这里插入图片描述
build_linux_targetfs.sh

#!/bin/bash

CHECK_MARK="\033[0;32m\xE2\x9C\x94\033[0m"
X_MARK="\033[0;1;31mX\033[0m"

export TOP_DIR=$PWD
export TARGET_IMAGE_PATH=$TOP_DIR/filesystem/targetfs-images
export BSP_IMAGE_PATH=${TOP_DIR}/../bsp_images
build_app=mpd

#usage
function usage() {
	echo "Usage:
               percp :                	build percp image
               pnc :                 		build pnc image
               map :                		build map image
               model :          		build model image
               platform_service :      	build platform_service image
               platform :          		build platform image
               parameter :     		build parameter image
	       all :				build all above images

	       example :
	       1. build one image:
	       ./build_linux_targetfs.sh percp
	       
	       2. build any numbers images:
	       ./build_linux_targetfs.sh percp pnc
	       or
	       ./build_linux_targetfs.sh percp pnc map
	       ......
	       
	       3. build all partitions image:
	       ./build_linux_targetfs.sh all
               "
}

#update bsp_images
function update_bsp_images() {

	FLASH_IMAGE_PATH=${BSP_IMAGE_PATH}/642-63663-0001-001_TS2/flash-images
	FLASH_FILE=${FLASH_IMAGE_PATH}/FileToFlash.txt	
	TEMP_FILE=${FLASH_IMAGE_PATH}/temp.txt
	FLASH_IMAGE_NAME=$TARGET_IMAGE_PATH/$1.img

	grep $1_ $FLASH_FILE > $TEMP_FILE

	NEW_MD5=$(md5sum ${FLASH_IMAGE_NAME} | awk -F " " {'print $1'})
	while read LINE
	do
		IMAGE_NAME=$(echo $LINE | awk -F " " {'print $3'})
		cp $FLASH_IMAGE_NAME $FLASH_IMAGE_PATH/$IMAGE_NAME
		sync

		BAK_MD5=$(echo $LINE | awk -F " " {'print $11'})
		if [ "${BAK_MD5}" != "${NEW_MD5}" ];then
   			sed -i 's/'${BAK_MD5}'/'${NEW_MD5}'/g' ${FLASH_FILE}
		fi
	done < $TEMP_FILE

	rm -f $TEMP_FILE

	echo -e "\033[2K\\r${CHECK_MARK} update $1.img to bsp_images successed!"
	sync
}

#create linux extend targetfs
function build_linux_extend_targetfs() {

	if [ ! -d $TARGET_IMAGE_PATH ];then
		mkdir -p $TARGET_IMAGE_PATH
		sync
	fi

	sudo dd if=/dev/zero of=$TARGET_IMAGE_PATH/$1.img bs=16384 count=$(($2/16384))
	ret_val_mkxfs=$?
	if [ $ret_val_mkxfs -ne 0 ]; then
		printf "${X_MARK} ***ERROR*** Failed to create the filesystem/targetfs/$1.img . error code = $ret_val_mkxfs ...\n"
		exit ${ret_val_mkxfs}
	fi

	sudo mkfs.ext4 $TARGET_IMAGE_PATH/$1.img
	sudo mkdir -p $3_bak
	sudo mount $TARGET_IMAGE_PATH/$1.img $3_bak
	sudo cp -raf $3/* $3_bak
	sudo umount -f $3_bak
	sudo rm -rf $3_bak
	sync

	echo -e "\033[2K\\r${CHECK_MARK} build $1.img successed!"

	if [ -d $BSP_IMAGE_PATH ];then
		update_bsp_images $1
	else
		echo -e "\033[2K\\r${CHECK_MARK} update $1.img to bsp_images error!"
	fi
}

#build parameter.img
function build_parameter() {

	IMAGE_SIZE=16777216
        ROOTFS_LOCAL_DIR=${TOP_DIR}/filesystem/targetfs/vehicle_parameter
	TARGET_IMAGE_NAME=parameter

	build_linux_extend_targetfs $TARGET_IMAGE_NAME $IMAGE_SIZE $ROOTFS_LOCAL_DIR
}

#build model.img
function build_model() {

	IMAGE_SIZE=6442450944
        ROOTFS_LOCAL_DIR=${TOP_DIR}/filesystem/targetfs/model
	TARGET_IMAGE_NAME=model

	build_linux_extend_targetfs $TARGET_IMAGE_NAME $IMAGE_SIZE $ROOTFS_LOCAL_DIR
}

#build platform_service.img
function build_platform_service() {

	IMAGE_SIZE=1073741824
        ROOTFS_LOCAL_DIR=${TOP_DIR}/filesystem/targetfs/platform_service
	TARGET_IMAGE_NAME=platform_service

	build_linux_extend_targetfs $TARGET_IMAGE_NAME $IMAGE_SIZE $ROOTFS_LOCAL_DIR
}

#build platform.img
function build_platform() {

	IMAGE_SIZE=2684354560
        ROOTFS_LOCAL_DIR=${TOP_DIR}/filesystem/targetfs/platform
	TARGET_IMAGE_NAME=platform

	build_linux_extend_targetfs $TARGET_IMAGE_NAME $IMAGE_SIZE $ROOTFS_LOCAL_DIR
}

#build map.img
function build_map() {

	IMAGE_SIZE=1289748480
        ROOTFS_LOCAL_DIR=${TOP_DIR}/filesystem/targetfs/map
	TARGET_IMAGE_NAME=map

	build_linux_extend_targetfs $TARGET_IMAGE_NAME $IMAGE_SIZE $ROOTFS_LOCAL_DIR
}

#build pnc.img
function build_pnc() {

	IMAGE_SIZE=1610612736
        ROOTFS_LOCAL_DIR=${TOP_DIR}/filesystem/targetfs/pnc
	TARGET_IMAGE_NAME=pnc

	build_linux_extend_targetfs $TARGET_IMAGE_NAME $IMAGE_SIZE $ROOTFS_LOCAL_DIR
}

#build percp.img
function build_percp() {

	IMAGE_SIZE=1289748480

        ROOTFS_LOCAL_DIR=${TOP_DIR}/filesystem/targetfs/percp
	TARGET_IMAGE_NAME=percp

	build_linux_extend_targetfs $TARGET_IMAGE_NAME $IMAGE_SIZE $ROOTFS_LOCAL_DIR
}

if [ $# -ge 1 ];then

	for i in "$@";do
		case "$i" in
			percp)
				build_percp
				;;
			pnc)
				build_pnc
				;;
			map)
				build_map
				;;
			platform)
				build_platform
				;;
			platform_service)
				build_platform_service
				;;
			model)
				build_model
				;;
			parameter)
				build_parameter
				;;
			all)
				build_percp
				build_pnc
				build_map
				build_platform
				build_platform_service
				build_model
				build_parameter
				;;
			?)
				usage
				;;
		esac
	done

else
	usage
fi	

readme 使用方法
example :
a. build one image:
./build_linux_targetfs.sh percp

b. build any numbers images:
       ./build_linux_targetfs.sh percp pnc
       or
       ./build_linux_targetfs.sh percp pnc platform
       ......
       
c. build all partitions image:
       ./build_linux_targetfs.sh all
  1. The target image:
    filesystem/targetfs-images

将需要打包进镜像的文件丢进target的对应文件下,先生成ext4文件进行,然后挂载,cp拷贝到镜像包,最后卸载,这样就做出了一个镜像包,
在这里插入图片描述
在这里插入图片描述
然后将文件替换,和md5 hash值,文件大小替换烧录文件里。记录烧录起始地址,结束地址,md5等等
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1234052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库表的内连接和外连接

1.内连接查询语法 -- 隐式内链接 SELECT 字段列表 FROM 表1&#xff0c;表2WHERE 条件&#xff1b; -- 显示内连接 select 字段列表 from 表1 [inner] join 表2 on 条件&#xff1b; 如果两个表没用进行内连接&#xff0c;会生成笛卡尔积。A集合和B集合全部元素进行排列组合。 …

关于校园网使用罗技flow功能

目录 情况概述问题及解决方案 情况概述 我目前设备是一台Macbook air m1处理器&#xff0c;学校给配了一台windows台式&#xff0c;台式机不能连蓝牙&#xff0c;不能连wifi&#xff0c;只能用网线&#xff0c;我的需求是想让mac和windows共用一套键鼠&#xff0c;在了解到罗技…

万宾科技智能井盖的效果怎么样?

日常出行过程中&#xff0c;人们最不想看到交通拥堵或者道路维修等现象&#xff0c;因为这代表出行受到影响甚至会导致不能按时赴约等。所以城市路面的安全和稳定&#xff0c;是市民朋友非常关心的话题。骑行在路上的时候&#xff0c;如果经过井盖时发出异常声响&#xff0c;骑…

福州大学《嵌入式系统综合设计》实验四:边缘检测

一、实验目的 BMCV 提供了一套基于 Sophon AI 芯片优化的机器视觉库&#xff0c;通过利用芯片的 TPU 和 VPP模块&#xff0c;可以完成色彩空间转换、尺度变换、仿射变换、透射变换、线性变换、画框、JPEG 编解码、BASE64 编解码、NMS、排序、特征匹配等操作。 本实验的目的是…

navicat --CSV导出数据乱码情况(三种情况解决方式)

CSV导出数据乱码情况分析及处理 在navicat 中有很多导出方式&#xff0c;大家都知道csv导出要比xlse要快很多&#xff0c;但是在使用csv导出时要防止乱码情况&#xff0c; 下面我列出三种处理方式&#xff08;如有其他方式大家可以帮忙补充一下&#xff09;&#xff1a; 文章目…

使用Python的Turtle库绘制一个心形图像(含详细Python代码与注释)

1.1引言&#xff1a; Python的Turtle库是一个非常实用的图形绘制库&#xff0c;它让我们可以使用简单的命令来绘制各种图形。这个库特别适合用来绘制几何图形&#xff0c;尤其是那些需要精细控制的图形。在本博客中&#xff0c;我们将使用Turtle库来绘制一个具体的图形。 1.2…

如何验证命令执行漏洞(无回显)

如何验证命令执行漏洞&#xff08;无回显&#xff09; 使用yakit&#xff0c;选择dnslog模块 点击生成一个可用域名 以dvwa为例 命令执行ping一下刚才的域名 随后yakit中会出现回显信息&#xff0c;以此证明拥有命令执行漏洞 信息&#xff0c;以此证明拥有命令执行漏洞

WMS系统先验后收策略

在制造业工厂的仓库管理中&#xff0c;确保物料的质量和数量是至关重要的。传统的仓库管理方式往往采用“先收后验”策略&#xff0c;即先接收物料&#xff0c;然后再进行质量检验。然而&#xff0c;这种方式存在一定的风险&#xff0c;例如不良品流入、数量不准确等问题。为了…

洛谷 P4568 [JLOI2011] 飞行路线 pytho解析

P4568 [JLOI2011] 飞行路线 pytho解析 时间&#xff1a;2023.11.20 题目地址&#xff1a;[JLOI2011] 飞行路线 题目分析 对于这个题呢就是最短路的问题了。那就可以用Dijkstra 算法&#xff0c;唯一不同的地方就是有免费的机票次数&#xff0c;那我们就先不考虑这个&#xf…

HTML+CSS+ElementUI搭建个人博客页面(纯前端)

网站演示 搭建过程 html部分 首先下载Vue2&#xff0c;ElementUI等插件&#xff0c;放在你的本地。我这里为了运行方便&#xff0c;把代码放在了一个框架里运行。 下载后引入部分 <link rel"stylesheet" href"{{URL::asset(elementui/lib/theme-chalk/ind…

最新最全系列之Selenium:传入webdriver驱动的新方法 Service()函数;以前的executable_path报警告,即将弃用

传入webdriver驱动的新方法 Service()函数&#xff1b;以前的executable_path报警告&#xff0c;即将弃用 以前的方法 举例&#xff1a;webdriver.Chrome(executable_pathdriver_path)&#xff1b;看提示警告&#xff0c;提示该方法即将被弃用&#xff1b;如下图&#xff1a; …

vue项目中element-ui对话框el-dialog嵌套显示时多了一个遮罩层解决办法

在对话框里又嵌套了一个对话框展示时&#xff0c;多了一个遮罩层&#xff0c;如下图所示&#xff1a; 解决办法如下&#xff1a; 给对话框添加append-to-body 属性&#xff0c;参考以下代码&#xff1a; <el-dialog :visible.sync"dialogVisible" append-to-body …

Midjourney绘画提示词Prompt参考教程

Midjourney绘画提示词Prompt参考教程&#xff1a;无需魔法使用。 一、AI工具 SparkAi&#xff1a; SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常…

【力扣】 209. 长度最小的子数组

【力扣】 209. 长度最小的子数组 文章目录 【力扣】 209. 长度最小的子数组1. 题目介绍2. 解法2.1 暴力求解2.2 前缀和 二分查找2.3 滑动窗口2.4 贪心回溯 3. Danger参考 1. 题目介绍 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 …

56、修改Integer缓存上限

第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a;修改Integer缓存上限 运行代码 Testpublic void integerTest() {int a 100;Integer b 100;System.out.println(a b);Integer a1 Integer.valueOf(127);Integer b1 127;System.out.println(a1 b1);Integer …

Spring实例化对象

默认proxyBeanMethods true&#xff0c;这种方法是用的代理模式创建对象&#xff0c;每次创建都是同一个对象&#xff0c;如果改为false每次都是不同的对象 FactoryBean的使用 定义的类A&#xff0c;造出来一个类B&#xff0c;可以在创造bean之前做一些自己的个性化操作

计算机显示msvcp140.dll丢失的解决方法,实测有效的5个方法分享

在日常的电脑操作中&#xff0c;常常遭遇某些错误讯息&#xff0c;如“缺少xxx.dll文件”&#xff0c;这些dll文件即为动态链接库文件&#xff0c;内含诸多可执行的程序码及数据。当启动某款应用时&#xff0c;系统将会自动调用与其相关的dll文件&#xff0c;其中msvcp140.dll便…

数据结构与算法之美学习笔记:24 | 二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树?

目录 前言二叉查找树&#xff08;Binary Search Tree&#xff09;二叉查找树的时间复杂度分析解答开篇内容小结 前言 本节课程思维导图&#xff1a; 二叉查找树最大的特点就是&#xff0c;支持动态数据集合的快速插入、删除、查找操作。我们之前说过&#xff0c;散列表也是支持…

从小米14安装不上应用说起【适配64位】

一、原因 某天早上&#xff0c;同事突然对我说我换了小米14pro手机但是安装不了公司的打卡软件&#xff0c;怎么办呀。一时间&#xff0c;我也不知道原因&#xff0c;看到给我发的安装不上的截图陷入了沉思。随即打开在git仓库里找到这个项目&#xff0c;到本地编译打开&#…