Skip to content

Portisch/idl4k

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

idl4k

=====

1.13.0.105

CPIO Script

Use this script to extract or repack an cpio archive

#!/bin/bash

UIMAGE=idl4k.bin
CPIONEW=rootfs-idl4k.cpio
INITRAMFSDIR=initramfs
KERNELDIR=../build/kernel/

case $1 in
	extract)

	#////////////////////////////////////////////////////////////
	# Checking for uImage magic word
	# http://linux-arm.org/git?p=u-boot-armdev.git;a=blob;f=include/image.h
	#////////////////////////////////////////////////////////////
	#
	echo ">>>>> Checking for uImage magic word ( 27051956 ) :"
	MAGICWORD=`dd if=${UIMAGE} ibs=1 count=4 | hexdump -v -e '4/1 "%02X"'`
	if [ '27051956' != "$MAGICWORD" ]
		then
			echo "Not a uImage: $MAGICWORD != 27051956"
			exit 1
	else
			echo "$UIMAGE acknowledged!"
	fi

	#////////////////////////////////////////////////////////////
	# Remove header from uImage
	#////////////////////////////////////////////////////////////
	#
	echo ">>>>> Remove header from $UIMAGE"
	IMAGEOLDGZ='Image.old.gz'
	dd if=${UIMAGE} bs=1 skip=64 of=${IMAGEOLDGZ}

	#////////////////////////////////////////////////////////////
	# Extracting kernel from uImage
	#////////////////////////////////////////////////////////////
	#
	echo ">>>>> Extracting kernel from $UIMAGE"
	gunzip ${IMAGEOLDGZ}

	#////////////////////////////////////////////////////////////
	#Extracting initramfs
	# www.garykessler.net/library/file_sigs.html
	# The end of the cpio archive is recognized with an empty file named 'TRAILER!!!' = '54 52 41 49 4C 45 52 21 21 21' (hexadecimal)
	#////////////////////////////////////////////////////////////
	#
	echo ">>>>> Extracting initramfs from kernel"
	CPIOSTART=`grep -a -b -m 1 -o '0707010' Image.old | head -1 | cut -f 1 -d :`
	CPIOEND=`grep -a -b -m 1 -o -P '\x54\x52\x41\x49\x4C\x45\x52\x21\x21\x21\x00\x00\x00\x00' Image.old | head -1 | cut -f 1 -d :`
	CPIOEND=$((CPIOEND + 11 + 3))
	CPIOSIZE=$((CPIOEND - CPIOSTART))
	OLDINITRAMFSDIR='initramfs'
	if [ "$CPIOSIZE" -le '0' ]
		then
			echo "initramfs.cpio not found"
			exit
	fi
	dd if=Image.old bs=1 skip=$CPIOSTART count=$CPIOSIZE > initramfs.old.cpio
	rm -rf $OLDINITRAMFSDIR
	mkdir -p $OLDINITRAMFSDIR
	cd $OLDINITRAMFSDIR
	cpio -v -i --no-absolute-filenames < ../initramfs.old.cpio
	cd ..
	rm -rf Image.old
	rm -rf initramfs.old.cpio
	echo ">>>>> CPIO arcive got extracted from binary"

	;;
	repack)
	#////////////////////////////////////////////////////////////
	# Create new cpio archive
	#////////////////////////////////////////////////////////////
	#
	cd ${INITRAMFSDIR}
	echo ">>>>> Create new cpio archive: $CPIONEW"
	find . "(" -path './.git' -o -name '.gitkeep' -o -name 'README.md' ")" -prune -o -print | cpio -C 1 -R root:root -H newc -o > ${KERNELDIR}${CPIONEW}
	
	;;
	*)
	echo "unknown command"

esac

Releases

No releases published

Packages

No packages published