summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2019-01-09 11:05:00 +0100
committerSimon Rettberg2019-01-09 11:05:00 +0100
commitff62f60278f4ce11b8ccbba38c73dc6c0bab2760 (patch)
tree7be39dd9f2fd3587d38d23a2a5230c941039e8f7
parent[run-virt] fix buggy return statement (diff)
downloadmltk-ff62f60278f4ce11b8ccbba38c73dc6c0bab2760.tar.gz
mltk-ff62f60278f4ce11b8ccbba38c73dc6c0bab2760.tar.xz
mltk-ff62f60278f4ce11b8ccbba38c73dc6c0bab2760.zip
Kill REQUIRED_FIRMWARE; extract required firmware from modinfo
-rw-r--r--core/includes/kernel.inc100
-rw-r--r--core/rootfs/rootfs-stage31/module.build1
-rw-r--r--core/rootfs/rootfs-stage31/module.conf67
-rw-r--r--core/rootfs/rootfs-stage32/module.build1
4 files changed, 73 insertions, 96 deletions
diff --git a/core/includes/kernel.inc b/core/includes/kernel.inc
index 97f98e71..8208dcd4 100644
--- a/core/includes/kernel.inc
+++ b/core/includes/kernel.inc
@@ -60,48 +60,60 @@ copy_kernel_modules () {
local KERNEL_MODULES_DIR="lib/modules/${TARGET_KERNEL_LONG}"
local KERNEL_MODULES_LIST=""
- local REQUIRED_KERNEL_MODULES_EXPANDED=""
local KERNEL_MODULE=""
local KERNEL_MODULE_PATH=""
local ELEM=""
+ local MODLIST="$(mktemp)"
+ local FWLIST="$(mktemp)"
# Do some fancy stuff to allow wildcards etc. in required kernel modules.
cd "${KERNEL_MODULES_DIR}"
- for KERNEL_MODULE in ${REQUIRED_KERNEL_MODULES}; do
- for ELEM in $KERNEL_MODULE; do
- echo $ELEM | grep '\*' && pwarning "Could not expand '$ELEM'." && continue
- REQUIRED_KERNEL_MODULES_EXPANDED+=" $ELEM"
- done
+ for ELEM in ${REQUIRED_KERNEL_MODULES}; do
+ [ -e "$ELEM" ] || continue
+ if [ -f "$ELEM" ]; then
+ echo "$ELEM" >> "$MODLIST"
+ elif [ -d "$ELEM" ]; then
+ find "$ELEM" -type f -name "*.ko" >> "$MODLIST"
+ else
+ perror "Wut"
+ fi
done
cd - 2>/dev/null
- pinfo "Expanded the list of $(echo "$REQUIRED_KERNEL_MODULES" | wc -w) required kernel modules to $(echo "$REQUIRED_KERNEL_MODULES_EXPANDED" | wc -w)"
+ pinfo "Expanded the list of $( echo "$REQUIRED_KERNEL_MODULES" | wc -w ) required kernel modules to $( < "$MODLIST" sort -u | wc -l )"
#
# now loop over given modules and locate them
#
- for KERNEL_MODULE in ${REQUIRED_KERNEL_MODULES_EXPANDED}; do
+ for KERNEL_MODULE in $( < "$MODLIST" sort -u ); do
local KERNEL_MODULE_PATH="${KERNEL_MODULES_DIR}/${KERNEL_MODULE}"
- if grep "^${KERNEL_MODULE}$" "${KERNEL_BASE_DIR}/${KERNEL_MODULES_DIR}/modules.builtin" >/dev/null; then
+ if grep -Fxq "${KERNEL_MODULE}" "${KERNEL_BASE_DIR}/${KERNEL_MODULES_DIR}/modules.builtin"; then
pdebug "Already built-in ${KERNEL_MODULE}."
elif [ -e "${KERNEL_MODULE_PATH}" ]; then
pdebug "Copying '${KERNEL_MODULE_PATH}'"
KERNEL_MODULES_LIST+=" ${KERNEL_MODULE_PATH}"
+ modinfo "${KERNEL_MODULE_PATH}" | grep '^firmware:' | awk '{print $2}' >> "$FWLIST"
else
pwarning "Module ${KERNEL_MODULE} not found. Skipping. (might cause problems on certain clients!)"
continue
fi
# check for dependencies
- local DEPS=$(grep "${KERNEL_MODULE}:" "${KERNEL_BASE_DIR}/${KERNEL_MODULES_DIR}/modules.dep" | cut -d ":" -f2-)
+ local DEPS=$(grep "^${KERNEL_MODULE}:" "${KERNEL_BASE_DIR}/${KERNEL_MODULES_DIR}/modules.dep" | cut -d ":" -f2-)
if [ ! -z "$DEPS" ]; then
for DEP in $DEPS; do
+ if ! [ -e "${KERNEL_BASE_DIR}/${KERNEL_MODULES_DIR}/$DEP" ]; then
+ pwarning "Could not find dependency '$DEP' of '$KERNEL_MODULE'"
+ continue
+ fi
pdebug "Adding dep: ${KERNEL_MODULES_DIR}/$DEP"
KERNEL_MODULES_LIST+=" ${KERNEL_MODULES_DIR}/$DEP"
+ modinfo "${KERNEL_BASE_DIR}/${KERNEL_MODULES_DIR}/$DEP" | grep '^firmware:' | awk '{print $2}' >> "$FWLIST"
done
else
pdebug "${KERNEL_MODULE} has no dependencies."
fi
done
+ rm -f -- "$MODLIST"
if [ ! -z "${KERNEL_MODULES_LIST}" ]; then
local COUNT=$(echo "${KERNEL_MODULES_LIST}" | wc -w)
@@ -113,33 +125,23 @@ copy_kernel_modules () {
# generate modules map files
#
# first strip modules.order of all the modules we don't use
- cat "${KERNEL_MODULES_DIR}/modules.order" | grep -E "$(echo ${REQUIRED_KERNEL_MODULES} | tr '\ ' '|' | tr '_' '.' | tr '-' '.')" \
+ < "${KERNEL_MODULES_DIR}/modules.order" grep -E "$(echo ${REQUIRED_KERNEL_MODULES} | tr '\ ' '|' | tr '_' '.' | tr '-' '.')" \
>> "${TARGET_BUILD_DIR}/${KERNEL_MODULES_DIR}/modules.order"
# copy list of builtin kernel modules
cp "${KERNEL_MODULES_DIR}/modules.builtin" "${TARGET_BUILD_DIR}/${KERNEL_MODULES_DIR}"
# with modules.order and modules.builtin, we can run depmod for the rest of the files
depmod -b "${TARGET_BUILD_DIR}" -a "${TARGET_KERNEL_LONG}"
- # go back to wherever we were
- cd "${OLD_DIR}" || perror "Could not cd back to ${OLD_DIR}."
-}
-
-copy_firmware () {
-
- pinfo "Copying firmware for kernel ${SYSTEM_KERNEL_LONG}..."
- [ -z "${REQUIRED_FIRMWARE}" ] && perror "REQUIRED_FIRMWARE is empty. Check your config file."
-
- check_kernel_base_dir
-
- local OLD_DIR=$(pwd)
- #
- # process firmware list
#
+ # Firmware
+ pinfo "Copying firmware for kernel ${TARGET_KERNEL_LONG}..."
+
cd "${KERNEL_BASE_DIR}" || perror "Could not cd to ${KERNEL_BASE_DIR}"
local FIRMWARE_DIR="lib/firmware"
local FIRMWARE_SYSTEM_LIST=""
local FIRMWARE_BUILD_LIST=""
- for FIRMWARE in ${REQUIRED_FIRMWARE}; do
+ local HAS_MISSING=0
+ for FIRMWARE in $( < "${FWLIST}" sort -u ); do
local FOUND=0
# check for firmware in the build directory of the kernel
for CANDIDATE in "${FIRMWARE_DIR}/${FIRMWARE}" "${FIRMWARE_DIR}/${TARGET_KERNEL_LONG}/${FIRMWARE}"; do
@@ -150,31 +152,29 @@ copy_firmware () {
fi
done
- # dont look under / if KERNEL_BASE_DIR is already /
- #if [ "x${KERNEL_BASE_DIR}" == "x/" ]; then
- # [ $FOUND -ne 1 ] && pwarning "Neither '${FIRMWARE_DIR}/${FIRMWARE}' nor '${FIRMWARE_DIR}/${TARGET_KERNEL_LONG}/${FIRMWARE}' found on the system"
- # continue
- #fi
-
- # if we didn't found it in the kernel build directory, check for firmware in the system firmware directory
- #if [ $FOUND -ne 1 ]; then
- for CANDIDATE in "/${FIRMWARE_DIR}/${FIRMWARE}" "/${FIRMWARE_DIR}/${SYSTEM_KERNEL_LONG}/${FIRMWARE}"; do
- if [ -e "${CANDIDATE}" ]; then
- if [ $(echo "${CANDIDATE}" | grep -c "${SYSTEM_KERNEL_LONG}") -eq 0 ]; then
- pdebug "Copying from system: '${CANDIDATE}'"
- FIRMWARE_SYSTEM_LIST+=" ${CANDIDATE}"
- else
- pdebug "Copying from system: '${CANDIDATE}' to ${FIRMWARE_DIR}/${TARGET_KERNEL_LONG}/${FIRMWARE}"
- FIRMWARE_SYSTEM_LIST+=" /${FIRMWARE_DIR}/${SYSTEM_KERNEL_LONG}/${FIRMWARE}"
+ # if we didn't find it in the kernel build directory, and kernel to use is not the system kernel, check for firmware in the system firmware directory
+ if [ "x${KERNEL_BASE_DIR}" != "x/" ] && [ $FOUND -ne 1 ]; then
+ for CANDIDATE in "/${FIRMWARE_DIR}/${FIRMWARE}" "/${FIRMWARE_DIR}/${SYSTEM_KERNEL_LONG}/${FIRMWARE}"; do
+ if [ -e "${CANDIDATE}" ]; then
+ if [ $(echo "${CANDIDATE}" | grep -c "${SYSTEM_KERNEL_LONG}") -eq 0 ]; then
+ pdebug "Copying from system: '${CANDIDATE}'"
+ FIRMWARE_SYSTEM_LIST+=" ${CANDIDATE}"
+ else
+ pdebug "Copying from system: '${CANDIDATE}' to ${FIRMWARE_DIR}/${TARGET_KERNEL_LONG}/${FIRMWARE}"
+ FIRMWARE_SYSTEM_LIST+=" /${FIRMWARE_DIR}/${SYSTEM_KERNEL_LONG}/${FIRMWARE}"
+ fi
+ FOUND=1
fi
- FOUND=1
- fi
- done
- #fi
+ done
+ fi
- [ $FOUND -ne 1 ] && pwarning "Neither '${FIRMWARE_DIR}/${FIRMWARE}' nor '${FIRMWARE_DIR}/${TARGET_KERNEL_LONG}/${FIRMWARE}' "\
- " was found on the system. Skipping. (might cause problems on certain clients!)"
+ if [ $FOUND -ne 1 ]; then
+ [ "$HAS_MISSING" -eq 0 ] && pwarning "!! MISSING FIRMWARE !!"
+ HAS_MISSING=$(( HAS_MISSING + 1 ))
+ pwarning "'${FIRMWARE}' not found."
+ fi
done
+ rm -f -- "$FWLIST"
for LIST in "${FIRMWARE_SYSTEM_LIST}" "${FIRMWARE_BUILD_LIST}"; do
[ -z "${LIST}" ] && continue
@@ -183,6 +183,7 @@ copy_firmware () {
pinfo "Copying $COUNT firmware to target directory."
tarcopy "${LIST}" "${TARGET_BUILD_DIR}"
done
+ [ "$HAS_MISSING" -ne 0 ] && pinfo "$HAS_MISSING firmware files not found :-("
# only for kernel-openslx
# post-process to fix the path of the firmwares found on the system unter /lib/firmware/$(uname -r)
@@ -193,12 +194,13 @@ copy_firmware () {
cd "${TARGET_BUILD_DIR}/lib/firmware/${SYSTEM_KERNEL_LONG}" || perror "old kernel but no old kernel"
tarcopy "$(ls)" "${TARGET_BUILD_DIR}/lib/firmware/${TARGET_KERNEL_LONG}/"
cd -
- rm -r "${TARGET_BUILD_DIR}/lib/firmware/${SYSTEM_KERNEL_LONG}" || perror "something went very wrong..."
+ rm -r -- "${TARGET_BUILD_DIR}/lib/firmware/${SYSTEM_KERNEL_LONG}" || perror "something went very wrong..."
else
pdebug "No ${TARGET_BUILD_DIR}/lib/firmware/${SYSTEM_KERNEL_LONG} directory, skipping the merge."
fi
fi
+ # go back to wherever we were
cd "${OLD_DIR}" || perror "Could not cd back to ${OLD_DIR}."
}
diff --git a/core/rootfs/rootfs-stage31/module.build b/core/rootfs/rootfs-stage31/module.build
index 49377a90..024aadd0 100644
--- a/core/rootfs/rootfs-stage31/module.build
+++ b/core/rootfs/rootfs-stage31/module.build
@@ -54,7 +54,6 @@ post_copy() {
# copy kernel, modules and firmware
copy_kernel_modules
- copy_firmware
copy_kernel
}
diff --git a/core/rootfs/rootfs-stage31/module.conf b/core/rootfs/rootfs-stage31/module.conf
index 186fa942..33b51b5d 100644
--- a/core/rootfs/rootfs-stage31/module.conf
+++ b/core/rootfs/rootfs-stage31/module.conf
@@ -9,66 +9,43 @@ REQUIRED_MODULES="
haveged
"
REQUIRED_KERNEL_MODULES="
- kernel/drivers/net/ethernet/*.ko
- kernel/drivers/net/ethernet/*/*.ko
- kernel/drivers/net/ethernet/*/*/*.ko
- kernel/drivers/net/ethernet/*/*/*/*.ko
- kernel/drivers/video/sis/sisfb.ko
- kernel/drivers/video/via/viafb.ko
- kernel/drivers/acpi/video.ko
- kernel/drivers/ssb/ssb.ko
kernel/drivers/acpi/acpi_ipmi.ko
- kernel/drivers/char/ipmi/*.ko
kernel/drivers/acpi/button.ko
- kernel/drivers/gpu/drm/drm*.ko
- kernel/drivers/gpu/drm/*/*.ko
- kernel/drivers/gpu/drm/*/*/*.ko
+ kernel/drivers/acpi/video.ko
+ kernel/drivers/block/nbd.ko
+ kernel/drivers/char/ipmi
+ kernel/drivers/gpu/drm
+ kernel/drivers/hid/hid-cherry.ko
kernel/drivers/hid/hid-generic.ko
+ kernel/drivers/hid/hid.ko
+ kernel/drivers/hid/usbhid/usbhid.ko
kernel/drivers/i2c/algos/i2c-algo-bit.ko
kernel/drivers/i2c/i2c-core.ko
- kernel/drivers/usb/usb-common.ko
- kernel/drivers/usb/core/usbcore.ko
+ kernel/drivers/net/ethernet
kernel/drivers/net/netconsole.ko
- kernel/drivers/hid/hid.ko
- kernel/drivers/hid/hid-cherry.ko
- kernel/drivers/hid/usbhid/usbhid.ko
- kernel/drivers/platform/x86/wmi.ko
+ kernel/drivers/parport/parport.ko
kernel/drivers/platform/x86/mxm-wmi.ko
+ kernel/drivers/platform/x86/wmi.ko
+ kernel/drivers/ssb/ssb.ko
+ kernel/drivers/usb/core/usbcore.ko
+ kernel/drivers/usb/usb-common.ko
+ kernel/drivers/video/backlight/adp8860_bl.ko
+ kernel/drivers/video/backlight/adp8870_bl.ko
+ kernel/drivers/video/sis/sisfb.ko
+ kernel/drivers/video/via/viafb.ko
+ kernel/fs/aufs/aufs.ko
kernel/fs/configfs/configfs.ko
- kernel/fs/nfs_common/nfs_acl.ko
- kernel/fs/nfs/nfs.ko
kernel/fs/fscache/fscache.ko
kernel/fs/lockd/lockd.ko
+ kernel/fs/nfs/nfs.ko
+ kernel/fs/nfs_common/nfs_acl.ko
kernel/fs/squashfs/squashfs.ko
kernel/fs/xfs/xfs.ko
- kernel/net/sunrpc/sunrpc.ko
- kernel/net/sunrpc/auth_gss/auth_rpcgss.ko
kernel/net/802/stp.ko
kernel/net/bridge/bridge.ko
+ kernel/net/sunrpc/auth_gss/auth_rpcgss.ko
+ kernel/net/sunrpc/sunrpc.ko
kernel/ubuntu/aufs/aufs.ko
- kernel/fs/aufs/aufs.ko
- kernel/drivers/block/nbd.ko
- kernel/drivers/parport/parport.ko
- kernel/drivers/video/backlight/adp8860_bl.ko
- kernel/drivers/video/backlight/adp8870_bl.ko
- kernel/fs/xfs/xfs.ko
-"
-REQUIRED_FIRMWARE="
- 3com/
- amdgpu/
- e100/
- matrox/
- r128/
- radeon/
- RTL8192E/
- RTL8192SE/
- rtl_nic/
- tigon/
- i915/
- intel/
- cxgb3/
- cxgb4/
- mellanox/
"
REQUIRED_LIBRARIES="
libnss_files
diff --git a/core/rootfs/rootfs-stage32/module.build b/core/rootfs/rootfs-stage32/module.build
index d9df3cba..2cf3e9e5 100644
--- a/core/rootfs/rootfs-stage32/module.build
+++ b/core/rootfs/rootfs-stage32/module.build
@@ -126,7 +126,6 @@ post_copy() {
# copy kernel, modules and firmware
copy_kernel_modules
- copy_firmware
copy_kernel
# Try to fetch distro logo