Skip to content

Commit 162daf0

Browse files
watologo1haraldh
authored andcommitted
Use the uncompressed kernel file on arm and aarch to detect kernel version
This is due to file cannot read out the kernel version on these. Many thanks to Alexander Graf finding this in old SUSE mkinitrd code. Converted by Thomas Renninger. Signed-off-by: Thomas Renninger <[email protected]> https://bugzilla.suse.com/show_bug.cgi?id=908454 Signed-off-by: Thomas Renninger <[email protected]>
1 parent 01e60ca commit 162daf0

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

mkinitrd-suse.sh

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,33 @@ is_xen_kernel() {
145145
return
146146
}
147147

148+
# kernel_image_gz_from_image() and kernel_version_from_image() are helpers
149+
# for arm* kernels which produce zImage files which cannot be read from
150+
# get_kernel_version -> get rid of this workaround if possible
151+
kernel_image_gz_from_image() {
152+
local arch=$(uname -i)
153+
local r=${1}.gz
154+
155+
# uImage kernels can't be extracted directly. Use the vmlinux.gz instead
156+
r=${r//uImage/vmlinux}
157+
158+
# on ARM a zImage can't be extracted directly. Other platforms define it
159+
# as a gzipped vmlinux file, but not ARM. So only on ARM, use vmlinux.gz.
160+
if [[ $arch =~ arm ]] || [[ $arch =~ aarch ]]; then
161+
r=${r//zImage/vmlinux}
162+
fi
163+
164+
echo $r
165+
}
166+
167+
kernel_version_from_image() {
168+
local kernel_image="$1" kernel_image_gz=$(kernel_image_gz_from_image "$1")
169+
170+
if get_kernel_version "$kernel_image" 2>/dev/null; then
171+
return
172+
fi
173+
get_kernel_version "$kernel_image_gz" 2>/dev/null
174+
}
148175

149176
# Taken over from SUSE mkinitrd
150177
default_kernel_images() {
@@ -183,7 +210,8 @@ default_kernel_images() {
183210

184211
[ -L "$boot_dir/$kernel_image" ] && continue
185212
[ "${kernel_image%%.gz}" != "$kernel_image" ] && continue
186-
kernel_version=$(/usr/bin/get_kernel_version \
213+
214+
kernel_version=$(kernel_version_from_image \
187215
$boot_dir/$kernel_image 2> /dev/null)
188216
initrd_image=$(echo $kernel_image | sed -e "s|${regex}|initrd|")
189217
if [ "$kernel_image" != "$initrd_image" -a \

0 commit comments

Comments
 (0)