gen_initramfs.sh (469e87e89fd61de804bd29f6dd0380a399b567a7) | gen_initramfs.sh (65e00e04e5aea34b256814cfa21b32e3b94a2402) |
---|---|
1#!/bin/sh 2# Copyright (C) Martin Schlemmer <azarah@nosferatu.za.org> 3# Copyright (C) 2006 Sam Ravnborg <sam@ravnborg.org> 4# 5# Released under the terms of the GNU GPL 6# 7# Generate a cpio packed initramfs. It uses gen_init_cpio to generate | 1#!/bin/sh 2# Copyright (C) Martin Schlemmer <azarah@nosferatu.za.org> 3# Copyright (C) 2006 Sam Ravnborg <sam@ravnborg.org> 4# 5# Released under the terms of the GNU GPL 6# 7# Generate a cpio packed initramfs. It uses gen_init_cpio to generate |
8# the cpio archive, and then compresses it. | 8# the cpio archive. |
9# This script assumes that gen_init_cpio is located in usr/ directory 10 11# error out on errors 12set -e 13 14usage() { 15cat << EOF 16Usage: 17$0 [-o <file>] [-l <dep_list>] [-u <uid>] [-g <gid>] {-d | <cpio_source>} ... | 9# This script assumes that gen_init_cpio is located in usr/ directory 10 11# error out on errors 12set -e 13 14usage() { 15cat << EOF 16Usage: 17$0 [-o <file>] [-l <dep_list>] [-u <uid>] [-g <gid>] {-d | <cpio_source>} ... |
18 -o <file> Create compressed initramfs file named <file> using 19 gen_init_cpio and compressor depending on the extension | 18 -o <file> Create initramfs file named <file> by using gen_init_cpio |
20 -l <dep_list> Create dependency list named <dep_list> 21 -u <uid> User ID to map to user ID 0 (root). 22 <uid> is only meaningful if <cpio_source> is a 23 directory. "squash" forces all files to uid 0. 24 -g <gid> Group ID to map to group ID 0 (root). 25 <gid> is only meaningful if <cpio_source> is a 26 directory. "squash" forces all files to gid 0. 27 <cpio_source> File list or directory for cpio archive. --- 129 unchanged lines hidden (view full) --- 157 echo "${dirlist}" | \ 158 while read x; do 159 list_parse $x 160 parse $x 161 done 162 fi 163} 164 | 19 -l <dep_list> Create dependency list named <dep_list> 20 -u <uid> User ID to map to user ID 0 (root). 21 <uid> is only meaningful if <cpio_source> is a 22 directory. "squash" forces all files to uid 0. 23 -g <gid> Group ID to map to group ID 0 (root). 24 <gid> is only meaningful if <cpio_source> is a 25 directory. "squash" forces all files to gid 0. 26 <cpio_source> File list or directory for cpio archive. --- 129 unchanged lines hidden (view full) --- 156 echo "${dirlist}" | \ 157 while read x; do 158 list_parse $x 159 parse $x 160 done 161 fi 162} 163 |
165# if only one file is specified and it is .cpio file then use it direct as fs 166# if a directory is specified then add all files in given direcotry to fs 167# if a regular file is specified assume it is in gen_init_cpio format | |
168input_file() { 169 source="$1" 170 if [ -f "$1" ]; then | 164input_file() { 165 source="$1" 166 if [ -f "$1" ]; then |
167 # If a regular file is specified, assume it is in 168 # gen_init_cpio format |
|
171 header "$1" | 169 header "$1" |
172 is_cpio="$(echo "$1" | sed 's/^.*\.cpio\(\..*\)\{0,1\}/cpio/')" 173 if [ $2 -eq 0 -a ${is_cpio} = "cpio" ]; then 174 cpio_file=$1 175 echo "$1" | grep -q '^.*\.cpio\..*' && is_cpio_compressed="compressed" 176 [ -n "$dep_list" ] && echo "$1" >> $dep_list 177 return 0 178 fi | |
179 print_mtime "$1" >> $cpio_list 180 cat "$1" >> $cpio_list 181 if [ -n "$dep_list" ]; then 182 echo "$1 \\" >> $dep_list 183 cat "$1" | while read type dir file perm ; do 184 if [ "$type" = "file" ]; then 185 echo "$file \\" >> $dep_list 186 fi 187 done 188 fi 189 elif [ -d "$1" ]; then | 170 print_mtime "$1" >> $cpio_list 171 cat "$1" >> $cpio_list 172 if [ -n "$dep_list" ]; then 173 echo "$1 \\" >> $dep_list 174 cat "$1" | while read type dir file perm ; do 175 if [ "$type" = "file" ]; then 176 echo "$file \\" >> $dep_list 177 fi 178 done 179 fi 180 elif [ -d "$1" ]; then |
181 # If a directory is specified then add all files in it to fs |
|
190 dir_filelist "$1" 191 else 192 echo " ${prog}: Cannot open '$1'" >&2 193 exit 1 194 fi 195} 196 197prog=$0 198root_uid=0 199root_gid=0 200dep_list= | 182 dir_filelist "$1" 183 else 184 echo " ${prog}: Cannot open '$1'" >&2 185 exit 1 186 fi 187} 188 189prog=$0 190root_uid=0 191root_gid=0 192dep_list= |
201cpio_file= | |
202cpio_list=$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX) 203output="/dev/stdout" | 193cpio_list=$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX) 194output="/dev/stdout" |
204output_file="/dev/stdout" 205is_cpio_compressed= 206compr="gzip -n -9 -f" | |
207 208while [ $# -gt 0 ]; do 209 arg="$1" 210 shift 211 case "$arg" in 212 "-l") # files included in initramfs - used by kbuild 213 dep_list="$1" 214 echo "deps_initramfs := \\" > $dep_list 215 shift 216 ;; | 195 196while [ $# -gt 0 ]; do 197 arg="$1" 198 shift 199 case "$arg" in 200 "-l") # files included in initramfs - used by kbuild 201 dep_list="$1" 202 echo "deps_initramfs := \\" > $dep_list 203 shift 204 ;; |
217 "-o") # generate compressed cpio image named $1 218 output_file="$1" 219 output=$cpio_list 220 echo "$output_file" | grep -q "\.gz$" \ 221 && [ -x "`which gzip 2> /dev/null`" ] \ 222 && compr="gzip -n -9 -f" 223 echo "$output_file" | grep -q "\.bz2$" \ 224 && [ -x "`which bzip2 2> /dev/null`" ] \ 225 && compr="bzip2 -9 -f" 226 echo "$output_file" | grep -q "\.lzma$" \ 227 && [ -x "`which lzma 2> /dev/null`" ] \ 228 && compr="lzma -9 -f" 229 echo "$output_file" | grep -q "\.xz$" \ 230 && [ -x "`which xz 2> /dev/null`" ] \ 231 && compr="xz --check=crc32 --lzma2=dict=1MiB" 232 echo "$output_file" | grep -q "\.lzo$" \ 233 && [ -x "`which lzop 2> /dev/null`" ] \ 234 && compr="lzop -9 -f" 235 echo "$output_file" | grep -q "\.lz4$" \ 236 && [ -x "`which lz4 2> /dev/null`" ] \ 237 && compr="lz4 -l -9 -f" 238 echo "$output_file" | grep -q "\.cpio$" && compr="cat" | 205 "-o") # generate cpio image named $1 206 output="$1" |
239 shift 240 ;; 241 "-u") # map $1 to uid=0 (root) 242 root_uid="$1" 243 [ "$root_uid" = "-1" ] && root_uid=$(id -u || echo 0) 244 shift 245 ;; 246 "-g") # map $1 to gid=0 (root) --- 6 unchanged lines hidden (view full) --- 253 exit 0 254 ;; 255 *) 256 case "$arg" in 257 "-"*) 258 unknown_option 259 ;; 260 *) # input file/dir - process it | 207 shift 208 ;; 209 "-u") # map $1 to uid=0 (root) 210 root_uid="$1" 211 [ "$root_uid" = "-1" ] && root_uid=$(id -u || echo 0) 212 shift 213 ;; 214 "-g") # map $1 to gid=0 (root) --- 6 unchanged lines hidden (view full) --- 221 exit 0 222 ;; 223 *) 224 case "$arg" in 225 "-"*) 226 unknown_option 227 ;; 228 *) # input file/dir - process it |
261 input_file "$arg" "$#" | 229 input_file "$arg" |
262 ;; 263 esac 264 ;; 265 esac 266done 267 | 230 ;; 231 esac 232 ;; 233 esac 234done 235 |
268# If output_file is set we will generate cpio archive and compress it | 236# If output_file is set we will generate cpio archive |
269# we are careful to delete tmp files | 237# we are careful to delete tmp files |
270if [ -z ${cpio_file} ]; then 271 timestamp= 272 if test -n "$KBUILD_BUILD_TIMESTAMP"; then 273 timestamp="$(date -d"$KBUILD_BUILD_TIMESTAMP" +%s || :)" 274 if test -n "$timestamp"; then 275 timestamp="-t $timestamp" 276 fi | 238timestamp= 239if test -n "$KBUILD_BUILD_TIMESTAMP"; then 240 timestamp="$(date -d"$KBUILD_BUILD_TIMESTAMP" +%s || :)" 241 if test -n "$timestamp"; then 242 timestamp="-t $timestamp" |
277 fi | 243 fi |
278 cpio_tfile="$(mktemp ${TMPDIR:-/tmp}/cpiofile.XXXXXX)" 279 usr/gen_init_cpio $timestamp ${cpio_list} > ${cpio_tfile} 280else 281 cpio_tfile=${cpio_file} | |
282fi | 244fi |
283rm ${cpio_list} 284if [ "${is_cpio_compressed}" = "compressed" ]; then 285 cat ${cpio_tfile} > ${output_file} 286else 287 (cat ${cpio_tfile} | ${compr} - > ${output_file}) \ 288 || (rm -f ${output_file} ; false) 289fi 290[ -z ${cpio_file} ] && rm ${cpio_tfile} 291exit 0 | 245usr/gen_init_cpio $timestamp $cpio_list > $output 246rm $cpio_list |