| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #!/usr/bin/env bash
- #
- # Copyright (c) 2020 Project CHIP Authors
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- #
- #
- # Description:
- # This script can be used to build an image file containing multiple
- # source binaries at specific offset in the image
- #
- set -e
- usage() {
- exitcode=0
- if [[ -n "$1" ]]; then
- exitcode=1
- echo "Error: $*"
- fi
- echo "Usage: $0 <image-size> <output-file> <offset1=input-file1> [<offset2=input-file2> ..]"
- exit "$exitcode"
- }
- [[ $# -ge 3 ]] || usage "Incorrect number of arguments"
- image_size="$1"
- image_size=$((image_size))
- [[ $? -eq 0 ]] || usage "Image size ($1) must be a number"
- [[ $image_size -gt 0 ]] || usage "Image size ($1) must be a valid number and greater than 0"
- # Create an empty <image_size> file containing all 0xff
- dd if=/dev/zero bs="$image_size" count=1 | tr '\000' '\377' >"$2"
- written=0
- # Argument 3 onwards have input files and corresponding offsets
- for item in "${@:3}"; do
- IFS='=' read -r start file <<<"$item"
- offset=$((start))
- [[ $? -eq 0 ]] || usage "Offset ($start) must be a number"
- [[ -r $file ]] || usage "Cannot read file $file"
- [[ $written -le $offset ]] || usage "Writing $file at $offset will overwrite previous segment"
- read -r _perms _ _user _group filesize _rest < <(ls -l "$file")
- ((written += filesize))
- [[ $written -lt $image_size ]] || usage "Writing $file at $offset will overflow image"
- dd if="$file" of="$2" conv=notrunc bs="$offset" seek=1
- done
|