[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