mirror of
https://github.com/systemd/systemd
synced 2024-07-21 18:24:38 +00:00
90-loaderentry: support installing device trees
Like the cmdline file we look for a devicetree file in $KERNEL_INSTALL_CONF_ROOT, /etc/kernel and /usr/lib/kernel. If it is present we look for the specified device tree that comes with the kernel we're adding and install it into $ENTRY_DIR_ABS and add a devicetree stanza to the loader entry. Unfortunately it seems there is no common consensus on where to install device tree blobs, so we have to look in a few different places for it.
This commit is contained in:
parent
f3d1d7609d
commit
2bca841137
|
@ -115,6 +115,43 @@ install -m 0644 "$KERNEL_IMAGE" "$KERNEL_DEST" || {
|
|||
}
|
||||
chown root:root "$KERNEL_DEST" || :
|
||||
|
||||
if [ -n "$KERNEL_INSTALL_CONF_ROOT" ]; then
|
||||
if [ -f "$KERNEL_INSTALL_CONF_ROOT/devicetree" ]; then
|
||||
read -r DEVICETREE <"$KERNEL_INSTALL_CONF_ROOT/devicetree"
|
||||
fi
|
||||
elif [ -f /etc/kernel/devicetree ]; then
|
||||
read -r DEVICETREE </etc/kernel/devicetree
|
||||
elif [ -f /usr/lib/kernel/devicetree ]; then
|
||||
read -r DEVICETREE </usr/lib/kernel/devicetree
|
||||
fi
|
||||
if [ -n "$DEVICETREE" ]; then
|
||||
for prefix in \
|
||||
"/boot/dtb-$KERNEL_VERSION" \
|
||||
"/boot/dtbs/$KERNEL_VERSION" \
|
||||
"/lib/firmware/$KERNEL_VERSION/device-tree" \
|
||||
"/lib/linux-image-$KERNEL_VERSION" \
|
||||
"/lib/modules/$KERNEL_VERSION/dtb"
|
||||
do
|
||||
[ -f "$prefix/$DEVICETREE" ] || continue
|
||||
DEVICETREE_SRC="$prefix/$DEVICETREE"
|
||||
break
|
||||
done
|
||||
|
||||
[ -n "$DEVICETREE_SRC" ] || {
|
||||
echo "Error: could not find device tree blob '$DEVICETREE'." >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
DEVICETREE_DEST="$ENTRY_DIR_ABS/${DEVICETREE##*/}"
|
||||
DEVICETREE_ENTRY="$ENTRY_DIR/${DEVICETREE##*/}"
|
||||
|
||||
install -m 0644 "$DEVICETREE_SRC" "$DEVICETREE_DEST" || {
|
||||
echo "Error: could not copy '$DEVICETREE_SRC' to '$DEVICETREE_DEST'." >&2
|
||||
exit 1
|
||||
}
|
||||
chown root:root "$DEVICETREE_DEST" || :
|
||||
fi
|
||||
|
||||
shift "$INITRD_OPTIONS_SHIFT"
|
||||
# All files listed as arguments, and staged files starting with "initrd" are installed as initrds.
|
||||
for initrd in "${KERNEL_INSTALL_STAGING_AREA}"/microcode* "${@}" "${KERNEL_INSTALL_STAGING_AREA}"/initrd*; do
|
||||
|
@ -154,6 +191,7 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
|
|||
[ -n "$SORT_KEY" ] && echo "sort-key $SORT_KEY"
|
||||
echo "options $BOOT_OPTIONS"
|
||||
echo "linux $KERNEL_ENTRY"
|
||||
[ -n "$DEVICETREE_ENTRY" ] && echo "devicetree $DEVICETREE_ENTRY"
|
||||
|
||||
have_initrd=
|
||||
for initrd in "${KERNEL_INSTALL_STAGING_AREA}"/microcode* "${@}" "${KERNEL_INSTALL_STAGING_AREA}"/initrd*; do
|
||||
|
|
Loading…
Reference in a new issue