[OE-core] [PATCH 16/16] init-install.sh: support multiple kernels and don't assume vmlinuz
Cal Sullivan
california.l.sullivan at intel.com
Tue Feb 27 21:15:11 UTC 2018
On 02/27/2018 01:46 AM, Anuj Mittal wrote:
> Hi Cal,
>
> On 02/27/2018 04:12 AM, California Sullivan wrote:
>> Since kernels will not necessarily be installed as vmlinuz anymore,
>> don't assume that's its name for either the bootloader config or the
>> copy of the kernel.
>>
>> Also, allow installing multiple kernels by searching for common kernel
>> names.
>>
>> Signed-off-by: California Sullivan <california.l.sullivan at intel.com>
>> ---
>> .../initrdscripts/files/init-install.sh | 37 ++++++++++++++++++++--
>> 1 file changed, 34 insertions(+), 3 deletions(-)
>>
>> diff --git a/meta/recipes-core/initrdscripts/files/init-install.sh b/meta/recipes-core/initrdscripts/files/init-install.sh
>> index dade059c8f1..713a83092bf 100644
>> --- a/meta/recipes-core/initrdscripts/files/init-install.sh
>> +++ b/meta/recipes-core/initrdscripts/files/init-install.sh
>> @@ -256,9 +256,34 @@ fi
>> umount /tgt_root
>> umount /src_root
>>
>> +echo "Looking for kernels to use as boot target.."
>> +# Find kernel to boot to
>> +# Give user options if multiple are found
>> +kernels="$(find /run/media/$1/ -type f \
>> + -name bzImage* -o -name zImage* \
>> + -o -name vmlinux* -o -name vmlinuz* \
>> + -o -name fitImage* \
>> + | sed s:.*/::)"
>> +if [ -n "$(echo $kernels)" ]; then
>> + # only one kernel entry if no space
>> + if [ -z "$(echo $kernels | grep " ")" ]; then
>> + kernel=$kernels
>> + echo "$kernel will be used as the boot target"
>> + else
>> + echo "Which kernel do we want to boot by default? The following kernels were found:"
>> + echo $kernels
>> + read answer
>> + kernel=$answer
>> + fi
>> +else
>> + echo "No kernels found, exiting..."
>> + exit 1
>> +fi
>> +
> We probably shouldn't be exiting this script at this point since we've
> already made the partitions and copied everything except the kernel.
>
> Since this script is invoked for installation after booting up, I guess
> that at this point we will have at least one kernel that we can install?
You're right. Instead of bailing out, we should print a message that no
kernels were found and take user input instead. We can also use this
input to attempt a copy of the kernel to install, since if it wasn't
found here it wouldn't be found below, either. I'll make these changes
in a v2.
>
>> # Handling of the target boot partition
>> mount $bootfs /boot
>> echo "Preparing boot partition..."
>> +
>> if [ -f /etc/grub.d/00_header -a $grub_version -ne 0 ] ; then
>> echo "Preparing custom grub2 menu..."
>> root_part_uuid=$(blkid -o value -s PARTUUID ${rootfs})
>> @@ -268,7 +293,7 @@ if [ -f /etc/grub.d/00_header -a $grub_version -ne 0 ] ; then
>> cat >$GRUBCFG <<_EOF
>> menuentry "Linux" {
>> search --no-floppy --fs-uuid $boot_uuid --set root
>> - linux /vmlinuz root=PARTUUID=$root_part_uuid $rootwait rw $5 $3 $4 quiet
>> + linux /$kernel root=PARTUUID=$root_part_uuid $rootwait rw $5 $3 $4 quiet
>> }
>> _EOF
>> chmod 0444 $GRUBCFG
>> @@ -282,10 +307,16 @@ if [ $grub_version -eq 0 ] ; then
>> echo "timeout 30" >> /boot/grub/menu.lst
>> echo "title Live Boot/Install-Image" >> /boot/grub/menu.lst
>> echo "root (hd0,0)" >> /boot/grub/menu.lst
>> - echo "kernel /vmlinuz root=$rootfs rw $3 $4 quiet" >> /boot/grub/menu.lst
>> + echo "kernel /$kernel root=$rootfs rw $3 $4 quiet" >> /boot/grub/menu.lst
>> fi
>>
>> -cp /run/media/$1/vmlinuz /boot/
>> +# Copy kernel artifacts. To add more artifacts just add to types
>> +# For now just support kernel types already being used by something in OE-core
>> +for types in bzImage zImage vmlinux vmlinuz fitImage; do
>> + for kernel in `find /run/media/$1/ -name $types*`; do
>> + cp $kernel /boot
>> + done
>> +done
> Since the boot partition is still 20MB, there's a chance that this might
> fail if there are enough kernels?
>
> Perhaps the kernel selection logic should move to the top with user
> choice and partition sizes be calculated accordingly?
Indeed. Good catch.
---
Cal
>
> Thanks,
> Anuj
More information about the Openembedded-core
mailing list