1*cc4ad7daSAndroid Build Coastguard Worker#!/bin/bash 2*cc4ad7daSAndroid Build Coastguard Worker 3*cc4ad7daSAndroid Build Coastguard Workerset -e 4*cc4ad7daSAndroid Build Coastguard Worker 5*cc4ad7daSAndroid Build Coastguard WorkerROOTFS_PRISTINE=$1 6*cc4ad7daSAndroid Build Coastguard WorkerROOTFS=$2 7*cc4ad7daSAndroid Build Coastguard WorkerMODULE_PLAYGROUND=$3 8*cc4ad7daSAndroid Build Coastguard WorkerCONFIG_H=$4 9*cc4ad7daSAndroid Build Coastguard WorkerSYSCONFDIR=$5 10*cc4ad7daSAndroid Build Coastguard Worker 11*cc4ad7daSAndroid Build Coastguard Worker# create rootfs from rootfs-pristine 12*cc4ad7daSAndroid Build Coastguard Worker 13*cc4ad7daSAndroid Build Coastguard Workercreate_rootfs() { 14*cc4ad7daSAndroid Build Coastguard Worker rm -rf "$ROOTFS" 15*cc4ad7daSAndroid Build Coastguard Worker mkdir -p $(dirname "$ROOTFS") 16*cc4ad7daSAndroid Build Coastguard Worker cp -r "$ROOTFS_PRISTINE" "$ROOTFS" 17*cc4ad7daSAndroid Build Coastguard Worker find "$ROOTFS" -type d -exec chmod +w {} \; 18*cc4ad7daSAndroid Build Coastguard Worker find "$ROOTFS" -type f -name .gitignore -exec rm -f {} \; 19*cc4ad7daSAndroid Build Coastguard Worker if [ "$MODULE_DIRECTORY" != "/lib/modules" ] ; then 20*cc4ad7daSAndroid Build Coastguard Worker sed -i -e "s|/lib/modules|$MODULE_DIRECTORY|g" $(find "$ROOTFS" -name \*.txt -o -name \*.conf -o -name \*.dep) 21*cc4ad7daSAndroid Build Coastguard Worker sed -i -e "s|$MODULE_DIRECTORY/external|/lib/modules/external|g" $(find "$ROOTFS" -name \*.txt -o -name \*.conf -o -name \*.dep) 22*cc4ad7daSAndroid Build Coastguard Worker for i in "$ROOTFS"/*/lib/modules/* "$ROOTFS"/*/*/lib/modules/* ; do 23*cc4ad7daSAndroid Build Coastguard Worker version="$(basename $i)" 24*cc4ad7daSAndroid Build Coastguard Worker [ $version != 'external' ] || continue 25*cc4ad7daSAndroid Build Coastguard Worker mod="$(dirname $i)" 26*cc4ad7daSAndroid Build Coastguard Worker lib="$(dirname $mod)" 27*cc4ad7daSAndroid Build Coastguard Worker up="$(dirname $lib)$MODULE_DIRECTORY" 28*cc4ad7daSAndroid Build Coastguard Worker mkdir -p "$up" 29*cc4ad7daSAndroid Build Coastguard Worker mv "$i" "$up" 30*cc4ad7daSAndroid Build Coastguard Worker done 31*cc4ad7daSAndroid Build Coastguard Worker fi 32*cc4ad7daSAndroid Build Coastguard Worker 33*cc4ad7daSAndroid Build Coastguard Worker if [ "$SYSCONFDIR" != "/etc" ]; then 34*cc4ad7daSAndroid Build Coastguard Worker find "$ROOTFS" -type d -name etc -printf "%h\n" | while read -r e; do 35*cc4ad7daSAndroid Build Coastguard Worker mkdir -p "$(dirname $e/$SYSCONFDIR)" 36*cc4ad7daSAndroid Build Coastguard Worker mv $e/{etc,$SYSCONFDIR} 37*cc4ad7daSAndroid Build Coastguard Worker done 38*cc4ad7daSAndroid Build Coastguard Worker fi 39*cc4ad7daSAndroid Build Coastguard Worker} 40*cc4ad7daSAndroid Build Coastguard Worker 41*cc4ad7daSAndroid Build Coastguard Workerfeature_enabled() { 42*cc4ad7daSAndroid Build Coastguard Worker local feature=$1 43*cc4ad7daSAndroid Build Coastguard Worker grep KMOD_FEATURES $CONFIG_H | head -n 1 | grep -q \+$feature 44*cc4ad7daSAndroid Build Coastguard Worker} 45*cc4ad7daSAndroid Build Coastguard Worker 46*cc4ad7daSAndroid Build Coastguard Workerdeclare -A map 47*cc4ad7daSAndroid Build Coastguard Workermap=( 48*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/search-order-simple$MODULE_DIRECTORY/4.4.4/kernel/crypto/"]="mod-simple.ko" 49*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/search-order-simple$MODULE_DIRECTORY/4.4.4/updates/"]="mod-simple.ko" 50*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/search-order-same-prefix$MODULE_DIRECTORY/4.4.4/foo/"]="mod-simple.ko" 51*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/search-order-same-prefix$MODULE_DIRECTORY/4.4.4/foobar/"]="mod-simple.ko" 52*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-a.ko"]="mod-loop-a.ko" 53*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-b.ko"]="mod-loop-b.ko" 54*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-c.ko"]="mod-loop-c.ko" 55*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-d.ko"]="mod-loop-d.ko" 56*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-e.ko"]="mod-loop-e.ko" 57*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-f.ko"]="mod-loop-f.ko" 58*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-g.ko"]="mod-loop-g.ko" 59*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-h.ko"]="mod-loop-h.ko" 60*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-i.ko"]="mod-loop-i.ko" 61*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-j.ko"]="mod-loop-j.ko" 62*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/detect-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-k.ko"]="mod-loop-k.ko" 63*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/search-order-external-first$MODULE_DIRECTORY/4.4.4/foo/"]="mod-simple.ko" 64*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/search-order-external-first$MODULE_DIRECTORY/4.4.4/foobar/"]="mod-simple.ko" 65*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/search-order-external-first/lib/modules/external/"]="mod-simple.ko" 66*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/search-order-external-last$MODULE_DIRECTORY/4.4.4/foo/"]="mod-simple.ko" 67*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/search-order-external-last$MODULE_DIRECTORY/4.4.4/foobar/"]="mod-simple.ko" 68*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/search-order-external-last/lib/modules/external/"]="mod-simple.ko" 69*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/search-order-override$MODULE_DIRECTORY/4.4.4/foo/"]="mod-simple.ko" 70*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/search-order-override$MODULE_DIRECTORY/4.4.4/override/"]="mod-simple.ko" 71*cc4ad7daSAndroid Build Coastguard Worker ["test-dependencies$MODULE_DIRECTORY/4.0.20-kmod/kernel/fs/foo/"]="mod-foo-b.ko" 72*cc4ad7daSAndroid Build Coastguard Worker ["test-dependencies$MODULE_DIRECTORY/4.0.20-kmod/kernel/"]="mod-foo-c.ko" 73*cc4ad7daSAndroid Build Coastguard Worker ["test-dependencies$MODULE_DIRECTORY/4.0.20-kmod/kernel/lib/"]="mod-foo-a.ko" 74*cc4ad7daSAndroid Build Coastguard Worker ["test-dependencies$MODULE_DIRECTORY/4.0.20-kmod/kernel/fs/"]="mod-foo.ko" 75*cc4ad7daSAndroid Build Coastguard Worker ["test-init/"]="mod-simple.ko" 76*cc4ad7daSAndroid Build Coastguard Worker ["test-remove/"]="mod-simple.ko" 77*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/show-depends$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-a.ko"]="mod-loop-a.ko" 78*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/show-depends$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-b.ko"]="mod-loop-b.ko" 79*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/show-depends$MODULE_DIRECTORY/4.4.4/kernel/mod-simple.ko"]="mod-simple.ko" 80*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/show-exports/mod-loop-a.ko"]="mod-loop-a.ko" 81*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/softdep-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-a.ko"]="mod-loop-a.ko" 82*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/softdep-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-b.ko"]="mod-loop-b.ko" 83*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/install-cmd-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-a.ko"]="mod-loop-a.ko" 84*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/install-cmd-loop$MODULE_DIRECTORY/4.4.4/kernel/mod-loop-b.ko"]="mod-loop-b.ko" 85*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/force$MODULE_DIRECTORY/4.4.4/kernel/"]="mod-simple.ko" 86*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/oldkernel$MODULE_DIRECTORY/3.3.3/kernel/"]="mod-simple.ko" 87*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/oldkernel-force$MODULE_DIRECTORY/3.3.3/kernel/"]="mod-simple.ko" 88*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/alias-to-none$MODULE_DIRECTORY/4.4.4/kernel/"]="mod-simple.ko" 89*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/module-param-kcmdline$MODULE_DIRECTORY/4.4.4/kernel/"]="mod-simple.ko" 90*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/external/lib/modules/external/"]="mod-simple.ko" 91*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/module-from-abspath/home/foo/"]="mod-simple.ko" 92*cc4ad7daSAndroid Build Coastguard Worker ["test-modprobe/module-from-relpath/home/foo/"]="mod-simple.ko" 93*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/modules-order-compressed$MODULE_DIRECTORY/4.4.4/kernel/drivers/block/cciss.ko"]="mod-fake-cciss.ko" 94*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/modules-order-compressed$MODULE_DIRECTORY/4.4.4/kernel/drivers/scsi/hpsa.ko"]="mod-fake-hpsa.ko" 95*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/modules-order-compressed$MODULE_DIRECTORY/4.4.4/kernel/drivers/scsi/scsi_mod.ko"]="mod-fake-scsi-mod.ko" 96*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/modules-outdir$MODULE_DIRECTORY/4.4.4/kernel/drivers/block/cciss.ko"]="mod-fake-cciss.ko" 97*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/modules-outdir$MODULE_DIRECTORY/4.4.4/kernel/drivers/scsi/hpsa.ko"]="mod-fake-hpsa.ko" 98*cc4ad7daSAndroid Build Coastguard Worker ["test-depmod/modules-outdir$MODULE_DIRECTORY/4.4.4/kernel/drivers/scsi/scsi_mod.ko"]="mod-fake-scsi-mod.ko" 99*cc4ad7daSAndroid Build Coastguard Worker ["test-modinfo/mod-simple-i386.ko"]="mod-simple-i386.ko" 100*cc4ad7daSAndroid Build Coastguard Worker ["test-modinfo/mod-simple-x86_64.ko"]="mod-simple-x86_64.ko" 101*cc4ad7daSAndroid Build Coastguard Worker ["test-modinfo/mod-simple-sparc64.ko"]="mod-simple-sparc64.ko" 102*cc4ad7daSAndroid Build Coastguard Worker ["test-modinfo/mod-simple-sha1.ko"]="mod-simple.ko" 103*cc4ad7daSAndroid Build Coastguard Worker ["test-modinfo/mod-simple-sha256.ko"]="mod-simple.ko" 104*cc4ad7daSAndroid Build Coastguard Worker ["test-modinfo/mod-simple-pkcs7.ko"]="mod-simple.ko" 105*cc4ad7daSAndroid Build Coastguard Worker ["test-modinfo/external/lib/modules/external/mod-simple.ko"]="mod-simple.ko" 106*cc4ad7daSAndroid Build Coastguard Worker) 107*cc4ad7daSAndroid Build Coastguard Worker 108*cc4ad7daSAndroid Build Coastguard Workergzip_array=( 109*cc4ad7daSAndroid Build Coastguard Worker "test-depmod/modules-order-compressed$MODULE_DIRECTORY/4.4.4/kernel/drivers/block/cciss.ko" 110*cc4ad7daSAndroid Build Coastguard Worker ) 111*cc4ad7daSAndroid Build Coastguard Worker 112*cc4ad7daSAndroid Build Coastguard Workerxz_array=( 113*cc4ad7daSAndroid Build Coastguard Worker "test-depmod/modules-order-compressed$MODULE_DIRECTORY/4.4.4/kernel/drivers/scsi/scsi_mod.ko" 114*cc4ad7daSAndroid Build Coastguard Worker ) 115*cc4ad7daSAndroid Build Coastguard Worker 116*cc4ad7daSAndroid Build Coastguard Workerzstd_array=( 117*cc4ad7daSAndroid Build Coastguard Worker "test-depmod/modules-order-compressed$MODULE_DIRECTORY/4.4.4/kernel/drivers/scsi/hpsa.ko" 118*cc4ad7daSAndroid Build Coastguard Worker ) 119*cc4ad7daSAndroid Build Coastguard Worker 120*cc4ad7daSAndroid Build Coastguard Workerattach_sha256_array=( 121*cc4ad7daSAndroid Build Coastguard Worker "test-modinfo/mod-simple-sha256.ko" 122*cc4ad7daSAndroid Build Coastguard Worker ) 123*cc4ad7daSAndroid Build Coastguard Worker 124*cc4ad7daSAndroid Build Coastguard Workerattach_sha1_array=( 125*cc4ad7daSAndroid Build Coastguard Worker "test-modinfo/mod-simple-sha1.ko" 126*cc4ad7daSAndroid Build Coastguard Worker ) 127*cc4ad7daSAndroid Build Coastguard Worker 128*cc4ad7daSAndroid Build Coastguard Workerattach_pkcs7_array=( 129*cc4ad7daSAndroid Build Coastguard Worker "test-modinfo/mod-simple-pkcs7.ko" 130*cc4ad7daSAndroid Build Coastguard Worker ) 131*cc4ad7daSAndroid Build Coastguard Worker 132*cc4ad7daSAndroid Build Coastguard Workercreate_rootfs 133*cc4ad7daSAndroid Build Coastguard Worker 134*cc4ad7daSAndroid Build Coastguard Workerfor k in "${!map[@]}"; do 135*cc4ad7daSAndroid Build Coastguard Worker dst=${ROOTFS}/$k 136*cc4ad7daSAndroid Build Coastguard Worker src=${MODULE_PLAYGROUND}/${map[$k]} 137*cc4ad7daSAndroid Build Coastguard Worker 138*cc4ad7daSAndroid Build Coastguard Worker if [[ $dst = */ ]]; then 139*cc4ad7daSAndroid Build Coastguard Worker install -d "$dst" 140*cc4ad7daSAndroid Build Coastguard Worker install -t "$dst" "$src" 141*cc4ad7daSAndroid Build Coastguard Worker else 142*cc4ad7daSAndroid Build Coastguard Worker install -D "$src" "$dst" 143*cc4ad7daSAndroid Build Coastguard Worker fi 144*cc4ad7daSAndroid Build Coastguard Workerdone 145*cc4ad7daSAndroid Build Coastguard Worker 146*cc4ad7daSAndroid Build Coastguard Worker# start poking the final rootfs... 147*cc4ad7daSAndroid Build Coastguard Worker 148*cc4ad7daSAndroid Build Coastguard Worker# compress modules with each format if feature is enabled 149*cc4ad7daSAndroid Build Coastguard Workerif feature_enabled ZLIB; then 150*cc4ad7daSAndroid Build Coastguard Worker for m in "${gzip_array[@]}"; do 151*cc4ad7daSAndroid Build Coastguard Worker gzip "$ROOTFS/$m" 152*cc4ad7daSAndroid Build Coastguard Worker done 153*cc4ad7daSAndroid Build Coastguard Workerfi 154*cc4ad7daSAndroid Build Coastguard Worker 155*cc4ad7daSAndroid Build Coastguard Workerif feature_enabled XZ; then 156*cc4ad7daSAndroid Build Coastguard Worker for m in "${xz_array[@]}"; do 157*cc4ad7daSAndroid Build Coastguard Worker xz "$ROOTFS/$m" 158*cc4ad7daSAndroid Build Coastguard Worker done 159*cc4ad7daSAndroid Build Coastguard Workerfi 160*cc4ad7daSAndroid Build Coastguard Worker 161*cc4ad7daSAndroid Build Coastguard Workerif feature_enabled ZSTD; then 162*cc4ad7daSAndroid Build Coastguard Worker for m in "${zstd_array[@]}"; do 163*cc4ad7daSAndroid Build Coastguard Worker zstd --rm $ROOTFS/$m 164*cc4ad7daSAndroid Build Coastguard Worker done 165*cc4ad7daSAndroid Build Coastguard Workerfi 166*cc4ad7daSAndroid Build Coastguard Worker 167*cc4ad7daSAndroid Build Coastguard Workerfor m in "${attach_sha1_array[@]}"; do 168*cc4ad7daSAndroid Build Coastguard Worker cat "${MODULE_PLAYGROUND}/dummy.sha1" >>"${ROOTFS}/$m" 169*cc4ad7daSAndroid Build Coastguard Workerdone 170*cc4ad7daSAndroid Build Coastguard Worker 171*cc4ad7daSAndroid Build Coastguard Workerfor m in "${attach_sha256_array[@]}"; do 172*cc4ad7daSAndroid Build Coastguard Worker cat "${MODULE_PLAYGROUND}/dummy.sha256" >>"${ROOTFS}/$m" 173*cc4ad7daSAndroid Build Coastguard Workerdone 174*cc4ad7daSAndroid Build Coastguard Worker 175*cc4ad7daSAndroid Build Coastguard Workerfor m in "${attach_pkcs7_array[@]}"; do 176*cc4ad7daSAndroid Build Coastguard Worker cat "${MODULE_PLAYGROUND}/dummy.pkcs7" >>"${ROOTFS}/$m" 177*cc4ad7daSAndroid Build Coastguard Workerdone 178*cc4ad7daSAndroid Build Coastguard Worker 179*cc4ad7daSAndroid Build Coastguard Workertouch testsuite/stamp-rootfs 180