summaryrefslogtreecommitdiff
path: root/packages/linux-kernel/build-linux-firmware.sh
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2021-01-16 12:59:47 +0100
committerChristian Poessinger <christian@poessinger.com>2021-01-16 12:59:47 +0100
commit062d7e0868d7918d386c11fb4e97f5019c2f66ce (patch)
tree1109c2f0a3c3c16bcc5a15e0b60b8c0f36da2aea /packages/linux-kernel/build-linux-firmware.sh
parent76f293633fb5feefcc7acd74d4edeea69b60ea5c (diff)
downloadvyos-build-062d7e0868d7918d386c11fb4e97f5019c2f66ce.tar.gz
vyos-build-062d7e0868d7918d386c11fb4e97f5019c2f66ce.zip
Kernel: T3223: retrieve firmware information from Kernel module binary itself
Diffstat (limited to 'packages/linux-kernel/build-linux-firmware.sh')
-rwxr-xr-xpackages/linux-kernel/build-linux-firmware.sh39
1 files changed, 10 insertions, 29 deletions
diff --git a/packages/linux-kernel/build-linux-firmware.sh b/packages/linux-kernel/build-linux-firmware.sh
index 4483c9ae..95d8ca56 100755
--- a/packages/linux-kernel/build-linux-firmware.sh
+++ b/packages/linux-kernel/build-linux-firmware.sh
@@ -12,10 +12,6 @@ LINUX_SRC="linux"
LINUX_FIRMWARE="linux-firmware"
KERNEL_VAR_FILE=${CWD}/kernel-vars
-# Some firmware files might not be easy to extract (e.g. Intel iwlwifi drivers)
-# thus we simply ammend them "manually"
-ADD_FW_FILES="iwlwifi*"
-
if [ ! -d ${LINUX_SRC} ]; then
echo "Kernel source missing"
exit 1
@@ -30,13 +26,12 @@ fi
result=()
# Retrieve firmware blobs from source files
-cd ${LINUX_SRC}
-FW_FILES=$(../list-required-firmware.py -c ../x86_64_vyos_defconfig -s drivers/net 2>/dev/null)
+FW_FILES=$(find ${LINUX_SRC}/debian/linux-image/lib/modules/${KERNEL_VERSION}${KERNEL_SUFFIX}/kernel/drivers/net -name *.ko | xargs modinfo | grep "^firmware:" | awk '{print $2}')
# Debian package will use the descriptive Git commit as version
GIT_COMMIT=$(cd ${CWD}/${LINUX_FIRMWARE}; git describe --always)
VYOS_FIRMWARE_NAME="vyos-linux-firmware"
-VYOS_FIRMWARE_DIR="${CWD}/${VYOS_FIRMWARE_NAME}_${GIT_COMMIT}-0_all"
+VYOS_FIRMWARE_DIR="${VYOS_FIRMWARE_NAME}_${GIT_COMMIT}-0_all"
if [ -d ${VYOS_FIRMWARE_DIR} ]; then
# remove Debian package folder and deb file from previous runs
rm -rf ${VYOS_FIRMWARE_DIR}*
@@ -46,36 +41,22 @@ mkdir -p ${VYOS_FIRMWARE_DIR}
# Copy firmware file from linux firmware repository into
# assembly folder for the vyos-firmware package
SED_REPLACE="s@${CWD}/${LINUX_FIRMWARE}/@@"
-for FW_PATH in ${FW_FILES}; do
- FW_FILE=$(basename $FW_PATH)
- res=()
- for tmp in $(find ${CWD}/linux-firmware -type f -name ${FW_FILE} | sed -e ${SED_REPLACE})
- do
- res+=( "$tmp" )
- done
-
- for FILE in ${res[@]}; do
+for FILE in ${FW_FILES}; do
+ if [ -f ${LINUX_FIRMWARE}/${FILE} ]; then
FW_DIR="${VYOS_FIRMWARE_DIR}/lib/firmware/$(dirname ${FILE})"
mkdir -p ${FW_DIR}
echo "I: install firmware: ${FILE}"
- cp ${CWD}/linux-firmware/${FILE} ${FW_DIR}
- done
-done
-
-# Install additional firmware files that could not be autodiscovered
-for FW in ${ADD_FW_FILES}
-do
- FW_DIR="${VYOS_FIRMWARE_DIR}/lib/firmware/$(dirname ${FW})"
- mkdir -p ${FW_DIR}
- echo "I: install firmware: ${FW}"
- cp ${CWD}/linux-firmware/${FW} ${FW_DIR}
+ cp ${CWD}/${LINUX_FIRMWARE}/${FILE} ${FW_DIR}
+ else
+ echo "I: firmware file not found: ${FILE}"
+ fi
done
echo "I: Create linux-firmware package"
-cd ${CWD}
+rm -f ${VYOS_FIRMWARE_NAME}_*.deb
fpm --input-type dir --output-type deb --name ${VYOS_FIRMWARE_NAME} \
--maintainer "VyOS Package Maintainers <maintainers@vyos.net>" \
--description "Binary firmware for various drivers in the Linux kernel" \
- --version ${GIT_COMMIT} --deb-compression gz -C ${VYOS_FIRMWARE_DIR}
+ --architecture all --version ${GIT_COMMIT} --deb-compression gz -C ${VYOS_FIRMWARE_DIR}
rm -rf ${VYOS_FIRMWARE_DIR}