[OE-core] [PATCH 16/16] init-install.sh: support multiple kernels and don't assume vmlinuz

Cal Sullivan california.l.sullivan at intel.com
Wed Feb 28 03:03:38 UTC 2018


I wasn't able to get to this today for my v2. If this makes it in before 
feature freeze I will open a bug and fix it before m4.

Thanks,
Cal

On 02/27/2018 01:15 PM, Cal Sullivan wrote:
>
>
> 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