Newer
Older
# Copyright (c) 2009-2019 Robert Nelson <robertcnelson@gmail.com>
# Copyright (c) 2010 Mario Di Francesco <mdf-code@digitalexile.it>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
# Latest can be found at:
# https://github.com/RobertCNelson/omap-image-builder/blob/master/tools/setup_sdcard.sh
#REQUIREMENTS:
#uEnv.txt bootscript support
Robert Nelson
committed
BOOT_LABEL="BOOT"
unset USE_BETA_BOOTLOADER
unset USE_LOCAL_BOOT
unset LOCAL_BOOTLOADER
#Defaults
ROOTFS_TYPE=ext4
ROOTFS_LABEL=rootfs
DIR="$PWD"
TEMPDIR=$(mktemp -d)
echo "syncing media... $*"
sleep 300
done
}
keep_net_alive & KEEP_NET_ALIVE_PID=$!
cleanup_keep_net_alive () {
[ -e /proc/$KEEP_NET_ALIVE_PID ] && kill $KEEP_NET_ALIVE_PID
}
trap cleanup_keep_net_alive EXIT
is_element_of () {
testelt=$1
for validelt in $2 ; do
[ $testelt = $validelt ] && return 0
done
return 1
}
#########################################################################
#
# Define valid "--rootfs" root filesystem types.
#
#########################################################################
VALID_ROOTFS_TYPES="ext2 ext3 ext4 btrfs"
is_valid_rootfs_type () {
if is_element_of $1 "${VALID_ROOTFS_TYPES}" ] ; then
return 0
else
return 1
fi
}
check_root () {
if ! [ $(id -u) = 0 ] ; then
echo "$0 must be run as sudo user or root"
exit 1
fi
}
find_issue () {
check_root
ROOTFS=$(ls "${DIR}/" | grep rootfs)
if [ "x${ROOTFS}" != "x" ] ; then
echo "Debug: ARM rootfs: ${ROOTFS}"
else
echo "Error: no armel-rootfs-* file"
echo "Make sure your in the right dir..."
exit
fi
unset has_uenvtxt
unset check
check=$(ls "${DIR}/" | grep uEnv.txt | grep -v post-uEnv.txt | head -n 1)
if [ "x${check}" != "x" ] ; then
echo "Debug: image has pre-generated uEnv.txt file"
has_uenvtxt=1
fi
unset has_post_uenvtxt
unset check
check=$(ls "${DIR}/" | grep post-uEnv.txt | head -n 1)
if [ "x${check}" != "x" ] ; then
echo "Debug: image has post-uEnv.txt file"
has_post_uenvtxt="enable"
fi
}
check_for_command () {
if ! which "$1" > /dev/null ; then
echo -n "You're missing command $1"
NEEDS_COMMAND=1
if [ -n "$2" ] ; then
echo -n " (consider installing package $2)"
fi
echo
fi
}
detect_software () {
unset NEEDS_COMMAND
check_for_command mkfs.vfat dosfstools
check_for_command wget wget
check_for_command git git
check_for_command partprobe parted
if [ "x${build_img_file}" = "xenable" ] ; then
check_for_command kpartx kpartx
fi
if [ "${NEEDS_COMMAND}" ] ; then
echo ""
echo "Your system is missing some dependencies"
echo "Debian/Ubuntu: sudo apt-get install dosfstools git kpartx wget parted"
echo "Fedora: yum install dosfstools dosfstools git wget"
echo "Gentoo: emerge dosfstools git wget"
echo ""
exit
fi
unset test_sfdisk
test_sfdisk=$(LC_ALL=C sfdisk -v 2>/dev/null | grep 2.17.2 | awk '{print $1}')
if [ "x${test_sdfdisk}" = "xsfdisk" ] ; then
echo ""
echo "Detected known broken sfdisk:"
echo "See: https://github.com/RobertCNelson/netinstall/issues/20"
echo ""
exit
fi
unset wget_version
wget_version=$(LC_ALL=C wget --version | grep "GNU Wget" | awk '{print $3}' | awk -F '.' '{print $2}' || true)
case "${wget_version}" in
12|13)
#wget before 1.14 in debian does not support sni
echo "wget: [`LC_ALL=C wget --version | grep \"GNU Wget\" | awk '{print $3}' || true`]"
echo "wget: [this version of wget does not support sni, using --no-check-certificate]"
echo "wget: [http://en.wikipedia.org/wiki/Server_Name_Indication]"
dl="wget --no-check-certificate"
;;
*)
dl="wget"
;;
esac
dl_continue="${dl} -c"
dl_quiet="${dl} --no-verbose"
}
local_bootloader () {
echo ""
echo "Using Locally Stored Device Bootloader"
echo "-----------------------------"
mkdir -p ${TEMPDIR}/dl/
if [ "${spl_name}" ] ; then
cp ${LOCAL_SPL} ${TEMPDIR}/dl/
SPL=${LOCAL_SPL##*/}
echo "SPL Bootloader: ${SPL}"
fi
if [ "${boot_name}" ] ; then
cp ${LOCAL_BOOTLOADER} ${TEMPDIR}/dl/
UBOOT=${LOCAL_BOOTLOADER##*/}
echo "UBOOT Bootloader: ${UBOOT}"
fi
}
dl_bootloader () {
echo ""
echo "Downloading Device's Bootloader"
echo "-----------------------------"
minimal_boot="1"
mkdir -p ${TEMPDIR}/dl/${DIST}
mkdir -p "${DIR}/dl/${DIST}"
${dl_quiet} --directory-prefix="${TEMPDIR}/dl/" ${conf_bl_http}/${conf_bl_listfile}
if [ ! -f ${TEMPDIR}/dl/${conf_bl_listfile} ] ; then
echo "error: can't connect to rcn-ee.net, retry in a few minutes..."
exit
fi
boot_version=$(cat ${TEMPDIR}/dl/${conf_bl_listfile} | grep "VERSION:" | awk -F":" '{print $2}')
if [ "x${boot_version}" != "x${minimal_boot}" ] ; then
echo "Error: This script is out of date and unsupported..."
echo "Please Visit: https://github.com/RobertCNelson to find updates..."
exit
fi
if [ "${USE_BETA_BOOTLOADER}" ] ; then
ABI="ABX2"
else
ABI="ABI2"
fi
if [ "${spl_name}" ] ; then
SPL=$(cat ${TEMPDIR}/dl/${conf_bl_listfile} | grep "${ABI}:${conf_board}:SPL" | awk '{print $2}')
${dl_quiet} --directory-prefix="${TEMPDIR}/dl/" ${SPL}
SPL=${SPL##*/}
echo "SPL Bootloader: ${SPL}"
fi
if [ "${boot_name}" ] ; then
UBOOT=$(cat ${TEMPDIR}/dl/${conf_bl_listfile} | grep "${ABI}:${conf_board}:BOOT" | awk '{print $2}')
${dl} --directory-prefix="${TEMPDIR}/dl/" ${UBOOT}
UBOOT=${UBOOT##*/}
echo "UBOOT Bootloader: ${UBOOT}"
else
unset UBOOT
fi
if [ "x${oem_blank_eeprom}" = "xenable" ] ; then
if [ "x${conf_board}" = "xam335x_evm" ] ; then
ABI="ABI2"
conf_board="am335x_boneblack"
if [ "${spl_name}" ] ; then
blank_SPL=$(cat ${TEMPDIR}/dl/${conf_bl_listfile} | grep "${ABI}:${conf_board}:SPL" | awk '{print $2}')
${dl_quiet} --directory-prefix="${TEMPDIR}/dl/" ${blank_SPL}
blank_SPL=${blank_SPL##*/}
echo "blank_SPL Bootloader: ${blank_SPL}"
else
unset blank_SPL
fi
if [ "${boot_name}" ] ; then
blank_UBOOT=$(cat ${TEMPDIR}/dl/${conf_bl_listfile} | grep "${ABI}:${conf_board}:BOOT" | awk '{print $2}')
${dl} --directory-prefix="${TEMPDIR}/dl/" ${blank_UBOOT}
blank_UBOOT=${blank_UBOOT##*/}
echo "blank_UBOOT Bootloader: ${blank_UBOOT}"
else
unset blank_UBOOT
fi
if [ "x${conf_board}" = "xbeagle_x15" ] ; then
if [ ! "x${flasher_uboot}" = "x" ] ; then
if [ "${spl_name}" ] ; then
blank_SPL=$(cat ${TEMPDIR}/dl/${conf_bl_listfile} | grep "${ABI}:${conf_board}:SPL" | awk '{print $2}')
${dl_quiet} --directory-prefix="${TEMPDIR}/dl/" ${blank_SPL}
blank_SPL=${blank_SPL##*/}
echo "blank_SPL Bootloader: ${blank_SPL}"
else
unset blank_SPL
fi
if [ "${boot_name}" ] ; then
blank_UBOOT=$(cat ${TEMPDIR}/dl/${conf_bl_listfile} | grep "${ABI}:${conf_board}:BOOT" | awk '{print $2}')
${dl} --directory-prefix="${TEMPDIR}/dl/" ${blank_UBOOT}
blank_UBOOT=${blank_UBOOT##*/}
echo "blank_UBOOT Bootloader: ${blank_UBOOT}"
else
unset blank_UBOOT
fi
generate_soc () {
echo "#!/bin/sh" > ${wfile}
echo "format=1.0" >> ${wfile}
echo "" >> ${wfile}
if [ ! "x${conf_bootloader_in_flash}" = "xenable" ] ; then
echo "board=${board}" >> ${wfile}
echo "" >> ${wfile}
echo "bootloader_location=${bootloader_location}" >> ${wfile}
echo "bootrom_gpt=${bootrom_gpt}" >> ${wfile}
echo "" >> ${wfile}
echo "dd_spl_uboot_count=${dd_spl_uboot_count}" >> ${wfile}
echo "dd_spl_uboot_seek=${dd_spl_uboot_seek}" >> ${wfile}
if [ "x${build_img_file}" = "xenable" ] ; then
echo "dd_spl_uboot_conf=notrunc" >> ${wfile}
else
echo "dd_spl_uboot_conf=${dd_spl_uboot_conf}" >> ${wfile}
fi
echo "dd_spl_uboot_bs=${dd_spl_uboot_bs}" >> ${wfile}
echo "dd_spl_uboot_backup=/opt/backup/uboot/${spl_uboot_name}" >> ${wfile}
echo "" >> ${wfile}
echo "dd_uboot_count=${dd_uboot_count}" >> ${wfile}
echo "dd_uboot_seek=${dd_uboot_seek}" >> ${wfile}
if [ "x${build_img_file}" = "xenable" ] ; then
echo "dd_uboot_conf=notrunc" >> ${wfile}
else
echo "dd_uboot_conf=${dd_uboot_conf}" >> ${wfile}
fi
echo "dd_uboot_bs=${dd_uboot_bs}" >> ${wfile}
echo "dd_uboot_backup=/opt/backup/uboot/${uboot_name}" >> ${wfile}
else
echo "uboot_CONFIG_CMD_BOOTZ=${uboot_CONFIG_CMD_BOOTZ}" >> ${wfile}
echo "uboot_CONFIG_SUPPORT_RAW_INITRD=${uboot_CONFIG_SUPPORT_RAW_INITRD}" >> ${wfile}
echo "uboot_CONFIG_CMD_FS_GENERIC=${uboot_CONFIG_CMD_FS_GENERIC}" >> ${wfile}
echo "zreladdr=${conf_zreladdr}" >> ${wfile}
fi
echo "" >> ${wfile}
echo "boot_fstype=${conf_boot_fstype}" >> ${wfile}
echo "conf_boot_startmb=${conf_boot_startmb}" >> ${wfile}
echo "conf_boot_endmb=${conf_boot_endmb}" >> ${wfile}
echo "sfdisk_fstype=${sfdisk_fstype}" >> ${wfile}
echo "" >> ${wfile}
if [ "x${uboot_efi_mode}" = "xenable" ] ; then
echo "uboot_efi_mode=${uboot_efi_mode}" >> ${wfile}
echo "" >> ${wfile}
fi
echo "boot_label=${BOOT_LABEL}" >> ${wfile}
echo "rootfs_label=${ROOTFS_LABEL}" >> ${wfile}
echo "" >> ${wfile}
echo "#Kernel" >> ${wfile}
echo "dtb=${dtb}" >> ${wfile}
echo "serial_tty=${SERIAL}" >> ${wfile}
echo "usbnet_mem=${usbnet_mem}" >> ${wfile}
echo "" >> ${wfile}
echo "#Advanced options" >> ${wfile}
echo "#disable_ssh_regeneration=true" >> ${wfile}
echo "" >> ${wfile}
}
drive_error_ro () {
echo "-----------------------------"
echo "Error: for some reason your SD card is not writable..."
echo "Check: is the write protect lever set the locked position?"
echo "Check: do you have another SD card reader?"
echo "-----------------------------"
echo "Script gave up..."
exit
}
unmount_all_drive_partitions () {
echo ""
echo "Unmounting Partitions"
echo "-----------------------------"
NUM_MOUNTS=$(mount | grep -v none | grep "${media}" | wc -l)
## for (i=1;i<=${NUM_MOUNTS};i++)
for ((i=1;i<=${NUM_MOUNTS};i++))
do
DRIVE=$(mount | grep -v none | grep "${media}" | tail -1 | awk '{print $1}')
umount ${DRIVE} >/dev/null 2>&1 || true
done
echo "Zeroing out Drive"
echo "-----------------------------"
dd if=/dev/zero of=${media} bs=1M count=100 || drive_error_ro
sync
dd if=${media} of=/dev/null bs=1M count=100
sfdisk_options="--force --in-order --Linux --unit M"
sfdisk_boot_startmb="${conf_boot_startmb}"
sfdisk_boot_size_mb="${conf_boot_endmb}"
sfdisk_var_size_mb="${conf_var_startmb}"
if [ "x${option_ro_root}" = "xenable" ] ; then
sfdisk_var_startmb=$(($sfdisk_boot_startmb + $sfdisk_boot_size_mb))
sfdisk_rootfs_startmb=$(($sfdisk_var_startmb + $sfdisk_var_size_mb))
else
sfdisk_rootfs_startmb=$(($sfdisk_boot_startmb + $sfdisk_boot_size_mb))
fi
test_sfdisk=$(LC_ALL=C sfdisk --help | grep -m 1 -e "--in-order" || true)
if [ "x${test_sfdisk}" = "x" ] ; then
echo "log: sfdisk: 2.26.x or greater detected"
sfdisk_options="--force ${sfdisk_gpt}"
sfdisk_boot_startmb="${sfdisk_boot_startmb}M"
sfdisk_boot_size_mb="${sfdisk_boot_size_mb}M"
sfdisk_var_startmb="${sfdisk_var_startmb}M"
sfdisk_var_size_mb="${sfdisk_var_size_mb}M"
sfdisk_rootfs_startmb="${sfdisk_rootfs_startmb}M"
fi
if [ "x${option_ro_root}" = "xenable" ] ; then
echo "sfdisk: [$(LC_ALL=C sfdisk --version)]"
echo "sfdisk: [${sfdisk_boot_startmb},${sfdisk_boot_size_mb},${sfdisk_fstype},*]"
echo "sfdisk: [${sfdisk_var_startmb},${sfdisk_var_size_mb},,-]"
echo "sfdisk: [${sfdisk_rootfs_startmb},,,-]"
LC_ALL=C sfdisk ${sfdisk_options} "${media}" <<-__EOF__
${sfdisk_boot_startmb},${sfdisk_boot_size_mb},${sfdisk_fstype},*
${sfdisk_var_startmb},${sfdisk_var_size_mb},,-
${sfdisk_rootfs_startmb},,,-
__EOF__
media_rootfs_var_partition=3
else
echo "sfdisk: [$(LC_ALL=C sfdisk --version)]"
echo "sfdisk: [${sfdisk_boot_startmb},${sfdisk_boot_size_mb},${sfdisk_fstype},*]"
echo "sfdisk: [${sfdisk_rootfs_startmb},,,-]"
LC_ALL=C sfdisk ${sfdisk_options} "${media}" <<-__EOF__
${sfdisk_boot_startmb},${sfdisk_boot_size_mb},${sfdisk_fstype},*
${sfdisk_rootfs_startmb},,,-
sfdisk_single_partition_layout () {
sfdisk_options="--force --in-order --Linux --unit M"
sfdisk_boot_startmb="${conf_boot_startmb}"
sfdisk_var_size_mb="${conf_var_startmb}"
if [ "x${option_ro_root}" = "xenable" ] ; then
sfdisk_rootfs_startmb=$(($sfdisk_boot_startmb + $sfdisk_var_size_mb))
fi
test_sfdisk=$(LC_ALL=C sfdisk --help | grep -m 1 -e "--in-order" || true)
if [ "x${test_sfdisk}" = "x" ] ; then
echo "log: sfdisk: 2.26.x or greater detected"
sfdisk_options="--force ${sfdisk_gpt}"
sfdisk_boot_startmb="${sfdisk_boot_startmb}M"
sfdisk_var_size_mb="${sfdisk_var_size_mb}M"
if [ "x${option_ro_root}" = "xenable" ] ; then
sfdisk_rootfs_startmb="${sfdisk_rootfs_startmb}M"
fi
fi
if [ "x${option_ro_root}" = "xenable" ] ; then
echo "sfdisk: [$(LC_ALL=C sfdisk --version)]"
echo "sfdisk: [${sfdisk_boot_startmb},${sfdisk_var_size_mb},${sfdisk_fstype},*]"
echo "sfdisk: [${sfdisk_rootfs_startmb},,,-]"
LC_ALL=C sfdisk ${sfdisk_options} "${media}" <<-__EOF__
${sfdisk_boot_startmb},${sfdisk_var_size_mb},${sfdisk_fstype},*
${sfdisk_rootfs_startmb},,,-
__EOF__
media_rootfs_var_partition=2
else
echo "sfdisk: [$(LC_ALL=C sfdisk --version)]"
echo "sfdisk: [${sfdisk_options} ${media}]"
echo "sfdisk: [${sfdisk_boot_startmb},,${sfdisk_fstype},*]"
LC_ALL=C sfdisk ${sfdisk_options} "${media}" <<-__EOF__
${sfdisk_boot_startmb},,${sfdisk_fstype},*
unset dd_uboot
if [ ! "x${dd_uboot_count}" = "x" ] ; then
dd_uboot="${dd_uboot}count=${dd_uboot_count} "
fi
if [ ! "x${dd_uboot_seek}" = "x" ] ; then
dd_uboot="${dd_uboot}seek=${dd_uboot_seek} "
fi
if [ "x${build_img_file}" = "xenable" ] ; then
dd_uboot="${dd_uboot}conv=notrunc "
else
if [ ! "x${dd_uboot_conf}" = "x" ] ; then
dd_uboot="${dd_uboot}conv=${dd_uboot_conf} "
fi
fi
if [ ! "x${dd_uboot_bs}" = "x" ] ; then
dd_uboot="${dd_uboot}bs=${dd_uboot_bs}"
fi
if [ "x${oem_blank_eeprom}" = "xenable" ] ; then
uboot_blob="${blank_UBOOT}"
else
uboot_blob="${UBOOT}"
fi
echo "${uboot_name}: dd if=${uboot_blob} of=${media} ${dd_uboot}"
echo "-----------------------------"
dd if=${TEMPDIR}/dl/${uboot_blob} of=${media} ${dd_uboot}
echo "-----------------------------"
}
dd_spl_uboot_boot () {
unset dd_spl_uboot
if [ ! "x${dd_spl_uboot_count}" = "x" ] ; then
dd_spl_uboot="${dd_spl_uboot}count=${dd_spl_uboot_count} "
fi
if [ ! "x${dd_spl_uboot_seek}" = "x" ] ; then
dd_spl_uboot="${dd_spl_uboot}seek=${dd_spl_uboot_seek} "
fi
if [ "x${build_img_file}" = "xenable" ] ; then
dd_spl_uboot="${dd_spl_uboot}conv=notrunc "
else
if [ ! "x${dd_spl_uboot_conf}" = "x" ] ; then
dd_spl_uboot="${dd_spl_uboot}conv=${dd_spl_uboot_conf} "
fi
fi
if [ ! "x${dd_spl_uboot_bs}" = "x" ] ; then
dd_spl_uboot="${dd_spl_uboot}bs=${dd_spl_uboot_bs}"
fi
if [ "x${oem_blank_eeprom}" = "xenable" ] ; then
spl_uboot_blob="${blank_SPL}"
else
spl_uboot_blob="${SPL}"
fi
echo "${spl_uboot_name}: dd if=${spl_uboot_blob} of=${media} ${dd_spl_uboot}"
echo "-----------------------------"
dd if=${TEMPDIR}/dl/${spl_uboot_blob} of=${media} ${dd_spl_uboot}
echo "-----------------------------"
}
format_partition_error () {
echo "LC_ALL=C ${mkfs} ${mkfs_partition} ${mkfs_label}"
echo "Failure: formating partition"
exit
}
format_partition_try2 () {
unset mkfs_options
if [ "x${mkfs}" = "xmkfs.ext4" ] ; then
mkfs_options="${ext4_options}"
fi
echo "-----------------------------"
echo "BUG: [${mkfs_partition}] was not available so trying [${mkfs}] again in 5 seconds..."
partprobe ${media}
sync
sleep 5
echo "-----------------------------"
echo "Formating with: [${mkfs} ${mkfs_options} ${mkfs_partition} ${mkfs_label}]"
echo "-----------------------------"
LC_ALL=C ${mkfs} ${mkfs_options} ${mkfs_partition} ${mkfs_label} || format_partition_error
Robert Nelson
committed
}
Robert Nelson
committed
unset mkfs_options
if [ "x${mkfs}" = "xmkfs.ext4" ] ; then
mkfs_options="${ext4_options}"
fi
echo "Formating with: [${mkfs} ${mkfs_options} ${mkfs_partition} ${mkfs_label}]"
echo "-----------------------------"
Robert Nelson
committed
LC_ALL=C ${mkfs} ${mkfs_options} ${mkfs_partition} ${mkfs_label} || format_partition_try2
format_boot_partition () {
mkfs_partition="${media_prefix}${media_boot_partition}"
if [ "x${conf_boot_fstype}" = "xfat" ] ; then
mount_partition_format="vfat"
mkfs="mkfs.vfat -F 16"
mkfs_label="-n ${BOOT_LABEL}"
else
mount_partition_format="${conf_boot_fstype}"
mkfs="mkfs.${conf_boot_fstype}"
mkfs_label="-L ${BOOT_LABEL}"
fi
boot_drive="${conf_root_device}p${media_boot_partition}"
}
format_rootfs_partition () {
if [ "x${option_ro_root}" = "xenable" ] ; then
mkfs="mkfs.ext2"
else
mkfs="mkfs.${ROOTFS_TYPE}"
fi
mkfs_partition="${media_prefix}${media_rootfs_partition}"
mkfs_label="-L ${ROOTFS_LABEL}"
format_partition
rootfs_drive="${conf_root_device}p${media_rootfs_partition}"
if [ "x${option_ro_root}" = "xenable" ] ; then
mkfs="mkfs.${ROOTFS_TYPE}"
mkfs_partition="${media_prefix}${media_rootfs_var_partition}"
mkfs_label="-L var"
format_partition
rootfs_var_drive="${conf_root_device}p${media_rootfs_var_partition}"
}
create_partitions () {
unset bootloader_installed
media_boot_partition=1
media_rootfs_partition=2
unset ext4_options
if [ ! "x${uboot_supports_csum}" = "xtrue" ] ; then
#Debian Stretch, mfks.ext4 default to metadata_csum, 64bit disable till u-boot works again..
unset ext4_options
unset test_mke2fs
LC_ALL=C mkfs.ext4 -V &> /tmp/mkfs
test_mkfs=$(cat /tmp/mkfs | grep mke2fs | grep 1.43 || true)
if [ "x${test_mkfs}" = "x" ] ; then
unset ext4_options
else
ext4_options="-O ^metadata_csum,^64bit"
fi
fi
case "${bootloader_location}" in
fatfs_boot)
conf_boot_endmb=${conf_boot_endmb:-"12"}
Robert Nelson
committed
#mkfs.fat 4.1 (2017-01-24)
#WARNING: Not enough clusters for a 16 bit FAT! The filesystem will be
#misinterpreted as having a 12 bit FAT without mount option "fat=16".
#mkfs.vfat: Attempting to create a too large filesystem
#LC_ALL=C mkfs.vfat -F 16 /dev/sdg1 -n BOOT
#Failure: formating partition
#When using "E" this fails, however "0xE" works fine...
echo "Using sfdisk to create partition layout"
echo "Version: `LC_ALL=C sfdisk --version`"
echo "-----------------------------"
echo "Using dd to place bootloader on drive"
echo "-----------------------------"
if [ "x${bootrom_gpt}" = "xenable" ] ; then
sfdisk_gpt="--label gpt"
fi
if [ "x${uboot_efi_mode}" = "xenable" ] ; then
sfdisk_gpt="--label gpt"
fi
bootloader_installed=1
if [ "x${enable_fat_partition}" = "xenable" ] ; then
conf_boot_endmb=${conf_boot_endmb:-"96"}
conf_boot_fstype=${conf_boot_fstype:-"fat"}
sfdisk_fstype=${sfdisk_fstype:-"0xE"}
sfdisk_partition_layout
else
sfdisk_single_partition_layout
media_rootfs_partition=1
fi
;;
dd_spl_uboot_boot)
echo "Using dd to place bootloader on drive"
echo "-----------------------------"
if [ "x${bootrom_gpt}" = "xenable" ] ; then
sfdisk_gpt="--label gpt"
fi
if [ "x${uboot_efi_mode}" = "xenable" ] ; then
sfdisk_gpt="--label gpt"
fi
dd_uboot_boot
bootloader_installed=1
if [ "x${enable_fat_partition}" = "xenable" ] ; then
conf_boot_endmb=${conf_boot_endmb:-"96"}
conf_boot_fstype=${conf_boot_fstype:-"fat"}
Robert Nelson
committed
sfdisk_fstype=${sfdisk_fstype:-"0xE"}
if [ "x${uboot_efi_mode}" = "xenable" ] ; then
conf_boot_endmb="16"
conf_boot_fstype="fat"
sfdisk_fstype="U"
BOOT_LABEL="EFI"
sfdisk_partition_layout
else
sfdisk_single_partition_layout
media_rootfs_partition=1
fi
echo "Using sfdisk to create partition layout"
echo "Version: `LC_ALL=C sfdisk --version`"
echo "-----------------------------"
echo "Partition Setup:"
echo "-----------------------------"
Robert Nelson
committed
LC_ALL=C fdisk -l "${media}"
echo "-----------------------------"
if [ "x${build_img_file}" = "xenable" ] ; then
media_loop=$(losetup -f || true)
if [ ! "${media_loop}" ] ; then
echo "losetup -f failed"
echo "Unmount some via: [sudo losetup -a]"
echo "-----------------------------"
losetup -a
echo "sudo kpartx -d /dev/loopX ; sudo losetup -d /dev/loopX"
echo "-----------------------------"
exit
fi
losetup ${media_loop} "${media}"
kpartx -av ${media_loop}
sleep 1
sync
test_loop=$(echo ${media_loop} | awk -F'/' '{print $3}')
if [ -e /dev/mapper/${test_loop}p${media_boot_partition} ] && [ -e /dev/mapper/${test_loop}p${media_rootfs_partition} ] ; then
media_prefix="/dev/mapper/${test_loop}p"
else
ls -lh /dev/mapper/
echo "Error: not sure what to do (new feature)."
exit
fi
else
partprobe ${media}
fi
if [ "x${media_boot_partition}" = "x${media_rootfs_partition}" ] ; then
mount_partition_format="${ROOTFS_TYPE}"
format_rootfs_partition
else
format_boot_partition
format_rootfs_partition
fi
}
populate_boot () {
echo "Populating Boot Partition"
echo "-----------------------------"
if [ ! -d ${TEMPDIR}/disk ] ; then
mkdir -p ${TEMPDIR}/disk
fi
Robert Nelson
committed
if ! mount -t ${mount_partition_format} ${media_prefix}${media_boot_partition} ${TEMPDIR}/disk; then
echo "-----------------------------"
echo "BUG: [${media_prefix}${media_boot_partition}] was not available so trying to mount again in 5 seconds..."
partprobe ${media}
sync
sleep 5
echo "-----------------------------"
Robert Nelson
committed
if ! mount -t ${mount_partition_format} ${media_prefix}${media_boot_partition} ${TEMPDIR}/disk; then
echo "-----------------------------"
echo "Unable to mount ${media_prefix}${media_boot_partition} at ${TEMPDIR}/disk to complete populating Boot Partition"
echo "Please retry running the script, sometimes rebooting your system helps."
echo "-----------------------------"
exit
fi
lsblk | grep -v sr0
echo "-----------------------------"
if [ "${spl_name}" ] ; then
if [ -f ${TEMPDIR}/dl/${SPL} ] ; then
if [ ! "${bootloader_installed}" ] ; then
cp -v ${TEMPDIR}/dl/${SPL} ${TEMPDIR}/disk/${spl_name}
if [ "${boot_name}" ] ; then
if [ -f ${TEMPDIR}/dl/${UBOOT} ] ; then
if [ ! "${bootloader_installed}" ] ; then
cp -v ${TEMPDIR}/dl/${UBOOT} ${TEMPDIR}/disk/${boot_name}
echo "-----------------------------"
fi
fi
if [ "x${distro_defaults}" = "xenable" ] ; then
${dl_quiet} --directory-prefix="${TEMPDIR}/dl/" https://raw.githubusercontent.com/RobertCNelson/netinstall/master/lib/distro_defaults.scr
cp -v ${TEMPDIR}/dl/distro_defaults.scr ${TEMPDIR}/disk/boot.scr
fi
if [ "x${conf_board}" = "xam335x_boneblack" ] || [ "x${conf_board}" = "xam335x_evm" ] ; then
if [ ! "x${bbb_old_bootloader_in_emmc}" = "xenable" ] ; then
wfile="${TEMPDIR}/disk/bbb-uEnv.txt"
echo "##Rename as: uEnv.txt to override old bootloader in eMMC" > ${wfile}
echo "##These are needed to be compliant with Angstrom's 2013.06.20 u-boot." >> ${wfile}
else
wfile="${TEMPDIR}/disk/uEnv.txt"
echo "##These are needed to be compliant with Angstrom's 2013.06.20 u-boot." > ${wfile}
echo "" >> ${wfile}
echo "loadaddr=0x82000000" >> ${wfile}
echo "fdtaddr=0x88000000" >> ${wfile}
echo "rdaddr=0x88080000" >> ${wfile}
echo "" >> ${wfile}
echo "initrd_high=0xffffffff" >> ${wfile}
echo "fdt_high=0xffffffff" >> ${wfile}
echo "" >> ${wfile}
echo "##These are needed to be compliant with Debian 2014-05-14 u-boot." >> ${wfile}
echo "" >> ${wfile}
echo "loadximage=echo debug: [/boot/vmlinuz-\${uname_r}] ... ; load mmc 0:${media_rootfs_partition} \${loadaddr} /boot/vmlinuz-\${uname_r}" >> ${wfile}
echo "loadxfdt=echo debug: [/boot/dtbs/\${uname_r}/\${fdtfile}] ... ;load mmc 0:${media_rootfs_partition} \${fdtaddr} /boot/dtbs/\${uname_r}/\${fdtfile}" >> ${wfile}
echo "loadxrd=echo debug: [/boot/initrd.img-\${uname_r}] ... ; load mmc 0:${media_rootfs_partition} \${rdaddr} /boot/initrd.img-\${uname_r}; setenv rdsize \${filesize}" >> ${wfile}
echo "loaduEnvtxt=load mmc 0:${media_rootfs_partition} \${loadaddr} /boot/uEnv.txt ; env import -t \${loadaddr} \${filesize};" >> ${wfile}
echo "check_dtb=if test -n \${dtb}; then setenv fdtfile \${dtb};fi;" >> ${wfile}
Robert Nelson
committed
echo "check_uboot_overlays=if test -n \${enable_uboot_overlays}; then setenv enable_uboot_overlays ;fi;" >> ${wfile}
echo "loadall=run loaduEnvtxt; run check_dtb; run check_uboot_overlays; run loadximage; run loadxrd; run loadxfdt;" >> ${wfile}
echo "" >> ${wfile}
echo "mmcargs=setenv bootargs console=tty0 console=\${console} \${optargs} \${cape_disable} \${cape_enable} root=/dev/mmcblk0p${media_rootfs_partition} rootfstype=\${mmcrootfstype} \${cmdline}" >> ${wfile}
echo "" >> ${wfile}
echo "uenvcmd=run loadall; run mmcargs; echo debug: [\${bootargs}] ... ; echo debug: [bootz \${loadaddr} \${rdaddr}:\${rdsize} \${fdtaddr}] ... ; bootz \${loadaddr} \${rdaddr}:\${rdsize} \${fdtaddr};" >> ${wfile}
echo "" >> ${wfile}
if [ "x${conf_board}" = "xam335x_boneblack" ] || [ "x${conf_board}" = "xam335x_evm" ] || [ "x${conf_board}" = "xam335x_blank_bbbw" ] ; then
wfile="${TEMPDIR}/disk/nfs-uEnv.txt"
echo "##Rename as: uEnv.txt to boot via nfs" > ${wfile}
echo "" >> ${wfile}
echo "##https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt" >> ${wfile}
echo "" >> ${wfile}
echo "##SERVER: sudo apt-get install tftpd-hpa" >> ${wfile}
echo "##SERVER:" >> ${wfile}
echo "##SERVER: zImage boot:" >> ${wfile}
echo "##SERVER: TFTP_DIRECTORY defined in /etc/default/tftpd-hpa" >> ${wfile}
echo "##SERVER: zImage/*.dtb need to be located here:" >> ${wfile}
echo "##SERVER: TFTP_DIRECTORY/zImage" >> ${wfile}
echo "##SERVER: TFTP_DIRECTORY/dtbs/*.dtb" >> ${wfile}
echo "##SERVER:" >> ${wfile}
echo "##SERVER: uname_r boot:" >> ${wfile}
echo "##SERVER: TFTP_DIRECTORY defined in /etc/default/tftpd-hpa" >> ${wfile}
echo "##SERVER: Change TFTP_DIRECTORY to /NFSEXPORT/boot" >> ${wfile}
echo "##SERVER: TFTP_DIRECTORY/vmlinuz-\${uname_r}" >> ${wfile}
echo "##SERVER: TFTP_DIRECTORY/dtbs/\${uname_r}/*.dtb" >> ${wfile}
echo "" >> ${wfile}
echo "##client_ip needs to be set for u-boot to try booting via nfs" >> ${wfile}
echo "" >> ${wfile}
echo "client_ip=192.168.1.101" >> ${wfile}
echo "" >> ${wfile}
echo "#u-boot defaults: uncomment and override where needed" >> ${wfile}
echo "" >> ${wfile}
echo "#server_ip=192.168.1.100" >> ${wfile}
echo "#gw_ip=192.168.1.1" >> ${wfile}
echo "#netmask=255.255.255.0" >> ${wfile}
echo "#hostname=" >> ${wfile}
echo "#device=eth0" >> ${wfile}
echo "#autoconf=off" >> ${wfile}
echo "#root_dir=/home/userid/targetNFS" >> ${wfile}
echo "#nfs_options=,vers=3" >> ${wfile}
echo "#nfsrootfstype=ext4 rootwait fixrtc" >> ${wfile}
echo "" >> ${wfile}
echo "##use uname_r= only if TFTP SERVER is setup for uname_r boot:" >> ${wfile}
echo "#uname_r=" >> ${wfile}
echo "" >> ${wfile}
if [ -f "${DIR}/ID.txt" ] ; then
cp -v "${DIR}/ID.txt" ${TEMPDIR}/disk/ID.txt
fi
touch ${TEMPDIR}/disk/.imx8mq-evk
fi
if [ ${has_uenvtxt} ] ; then
if [ ! "x${bbb_old_bootloader_in_emmc}" = "xenable" ] ; then
cp -v "${DIR}/uEnv.txt" ${TEMPDIR}/disk/uEnv.txt
echo "-----------------------------"
cd ${TEMPDIR}/disk
sync
cd "${DIR}"/
echo "Debug: Contents of Boot Partition"
echo "-----------------------------"
ls -lh ${TEMPDIR}/disk/
du -sh ${TEMPDIR}/disk/
umount ${TEMPDIR}/disk || true
echo "Finished populating Boot Partition"
echo "-----------------------------"
kernel_detection () {
unset has_multi_armv7_kernel
unset check
check=$(ls "${dir_check}" | grep vmlinuz- | grep armv7 | grep -v lpae | head -n 1)
if [ "x${check}" != "x" ] ; then
armv7_kernel=$(ls "${dir_check}" | grep vmlinuz- | grep armv7 | grep -v lpae | head -n 1 | awk -F'vmlinuz-' '{print $2}')
echo "Debug: image has: v${armv7_kernel}"
has_multi_armv7_kernel="enable"
fi
unset has_multi_armv7_lpae_kernel
unset check
check=$(ls "${dir_check}" | grep vmlinuz- | grep armv7 | grep lpae | head -n 1)
if [ "x${check}" != "x" ] ; then
armv7_lpae_kernel=$(ls "${dir_check}" | grep vmlinuz- | grep armv7 | grep lpae | head -n 1 | awk -F'vmlinuz-' '{print $2}')
echo "Debug: image has: v${armv7_lpae_kernel}"
has_multi_armv7_lpae_kernel="enable"
fi
unset has_bone_kernel
unset check
check=$(ls "${dir_check}" | grep vmlinuz- | grep bone | head -n 1)
if [ "x${check}" != "x" ] ; then
bone_dt_kernel=$(ls "${dir_check}" | grep vmlinuz- | grep bone | head -n 1 | awk -F'vmlinuz-' '{print $2}')
echo "Debug: image has: v${bone_dt_kernel}"
has_bone_kernel="enable"
fi
unset has_ti_kernel
unset check
check=$(ls "${dir_check}" | grep vmlinuz- | grep ti | head -n 1)
if [ "x${check}" != "x" ] ; then
ti_dt_kernel=$(ls "${dir_check}" | grep vmlinuz- | grep ti | head -n 1 | awk -F'vmlinuz-' '{print $2}')
echo "Debug: image has: v${ti_dt_kernel}"
has_ti_kernel="enable"
fi
unset has_xenomai_kernel
unset check
check=$(ls "${dir_check}" | grep vmlinuz- | grep xenomai | head -n 1)
if [ "x${check}" != "x" ] ; then
xenomai_dt_kernel=$(ls "${dir_check}" | grep vmlinuz- | grep xenomai | head -n 1 | awk -F'vmlinuz-' '{print $2}')
echo "Debug: image has: v${xenomai_dt_kernel}"
has_xenomai_kernel="enable"
fi
kernel_select () {
unset select_kernel
if [ "x${conf_kernel}" = "xarmv7" ] || [ "x${conf_kernel}" = "x" ] ; then
if [ "x${has_multi_armv7_kernel}" = "xenable" ] ; then
select_kernel="${armv7_kernel}"
fi
fi
if [ "x${conf_kernel}" = "xarmv7_lpae" ] ; then
if [ "x${has_multi_armv7_lpae_kernel}" = "xenable" ] ; then
select_kernel="${armv7_lpae_kernel}"