@@ -145,6 +145,33 @@ is_xen_kernel() {
145
145
return
146
146
}
147
147
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
+ }
148
175
149
176
# Taken over from SUSE mkinitrd
150
177
default_kernel_images () {
@@ -183,7 +210,8 @@ default_kernel_images() {
183
210
184
211
[ -L " $boot_dir /$kernel_image " ] && continue
185
212
[ " ${kernel_image%% .gz} " != " $kernel_image " ] && continue
186
- kernel_version=$( /usr/bin/get_kernel_version \
213
+
214
+ kernel_version=$( kernel_version_from_image \
187
215
$boot_dir /$kernel_image 2> /dev/null)
188
216
initrd_image=$( echo $kernel_image | sed -e " s|${regex} |initrd|" )
189
217
if [ " $kernel_image " != " $initrd_image " -a \
0 commit comments