1 Star 0 Fork 0

Wangtake/scripts

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
pad_image 2.38 KB
一键复制 编辑 原始数据 按行查看 历史
henrisk 提交于 2016-08-18 14:56 . r16 tina linux v2.1 release
#!/bin/bash
function usage {
echo "Usage: prepare_image image_type kernel_image rootfs_image header_size"
echo "Padd root and kernel image to the correct size and append the jffs2 start marker as needed"
exit 1
}
function pad_file {
echo "Padding $1 to size $2"
dd if=$1 of=$1.paddingtempfile bs=$2 count=1 conv=sync &> /dev/null
mv $1.paddingtempfile $1
}
#filesize filestart padding
function calc_pad {
[ $((($1 + $2) & ($3 - 1))) == 0 ] && {
echo $1
return 0
}
echo $(((($1 + $2) | ($3 - 1)) + 1 - $2))
}
function prep_squash {
echo "kernel_size: $kernel_size"
echo "header_size: $header_size"
kernel_pad_size=$(calc_pad $kernel_size $header_size 32)
kernel_end=$(($header_size + $kernel_pad_size))
pad_file $kernel_image $kernel_pad_size
#4k
rootfs_pad_size=$(calc_pad $rootfs_size $kernel_end 4096)
pad_file $rootfs_image $rootfs_pad_size
echo -ne '\xde\xad\xc0\xde' >> $rootfs_image
#8k
rootfs_pad_size=$(calc_pad $rootfs_size $kernel_end 8192)
[ $rootfs_pad_size == rootfs_old_padsize ] || {
pad_file $rootfs_image $rootfs_pad_size
rootfs_old_padsize=$rootfs_pad_size
echo -ne '\xde\xad\xc0\xde' >> $rootfs_image
}
#64k
rootfs_pad_size=$(calc_pad $rootfs_size $kernel_end 65536)
[ $rootfs_pad_size == rootfs_old_padsize ] || {
pad_file $rootfs_image $rootfs_pad_size
rootfs_old_padsize=$rootfs_pad_size
echo -ne '\xde\xad\xc0\xde' >> $rootfs_image
}
#128k
rootfs_pad_size=$(calc_pad $rootfs_size $kernel_end 131072)
[ $rootfs_pad_size == rootfs_old_padsize ] || {
pad_file $rootfs_image $rootfs_pad_size
rootfs_old_padsize=$rootfs_pad_size
echo -ne '\xde\xad\xc0\xde' >> $rootfs_image
}
}
function prep_jffs2 {
kernel_pad_size=$(calc_pad $kernel_size $header_size $1)
pad_file $kernel_image $kernel_pad_size
}
image_type=$1
kernel_image=$2
rootfs_image=$3
header_size=$4
if [ -z "$image_type" ] || [ -z "$rootfs_image" ] || [ -z "$kernel_image" ] || [ -z "$header_size" ]; then
usage
fi
if [ ! -e "$rootfs_image" ] || [ -z "$kernel_image" ]; then
echo "input file not found"
exit 1
fi
kernel_size=$(stat -c "%s" "$kernel_image")
rootfs_size=$(stat -c "%s" "$rootfs_image")
if [ $kernel_size == 0 ] || [ $rootfs_size == 0 ]; then
echo "kernel or rootfs empty"
exit 1
fi
case $image_type in
squashfs )
prep_squash ;;
jffs2-64k )
prep_jffs2 65536 ;;
jffs2-128k )
prep_jffs2 131072 ;;
* )
echo "Unknown image type"
exit 1 ;;
esac
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/wangtake/scripts.git
git@gitee.com:wangtake/scripts.git
wangtake
scripts
scripts
r16-v2.1.y

搜索帮助