* idea: library support for grub2
@ 2009-07-04 1:48 Bean
2009-07-04 4:26 ` Pavel Roskin
0 siblings, 1 reply; 6+ messages in thread
From: Bean @ 2009-07-04 1:48 UTC (permalink / raw)
To: The development of GRUB 2
Hi,
Library is an archive file that contains unlinked object files. We can
use library function both statically or dynamically. In the former
case, we link the objects together to form an executable image, in the
later case, we load the object at runtime and resolve symbols, much
like the modules.
With library, the size of kernel can be reduced dramatically. Now, the
kernel only contains platform specific function. To build a kernel
image, we link the kernel and other required module, then link any
unresolved function from the library, this way, only the function that
are actually used is in the kernel.
As native library format of the building os could vary, we should use
a format that's specific to grub, perhaps something similar to cpio.
--
Bean
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: idea: library support for grub2
2009-07-04 1:48 idea: library support for grub2 Bean
@ 2009-07-04 4:26 ` Pavel Roskin
2009-07-04 7:04 ` Bean
0 siblings, 1 reply; 6+ messages in thread
From: Pavel Roskin @ 2009-07-04 4:26 UTC (permalink / raw)
To: The development of GRUB 2
On Sat, 2009-07-04 at 09:48 +0800, Bean wrote:
> Hi,
>
> Library is an archive file that contains unlinked object files. We can
> use library function both statically or dynamically. In the former
> case, we link the objects together to form an executable image, in the
> later case, we load the object at runtime and resolve symbols, much
> like the modules.
>
> With library, the size of kernel can be reduced dramatically. Now, the
> kernel only contains platform specific function. To build a kernel
> image, we link the kernel and other required module, then link any
> unresolved function from the library, this way, only the function that
> are actually used is in the kernel.
What matters is the size of the linked and compressed kernel image
(core.img) and not the bare kernel (kernel.img). Yes, we can have some
savings, but I don't expect anything dramatic.
We would only gain size reduction for the code that is in the kernel,
but is not used by any module linked into the kernel image. I don't
think there will be a lot of such code. Whatever modules we link, the
image will need to output formatted strings, handle filesystems,
partitions, disks.
> As native library format of the building os could vary, we should use
> a format that's specific to grub, perhaps something similar to cpio.
The price will be a greatly increased complexity of the build system. I
think it would be better to simplify it first.
--
Regards,
Pavel Roskin
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: idea: library support for grub2
2009-07-04 4:26 ` Pavel Roskin
@ 2009-07-04 7:04 ` Bean
2009-07-04 14:27 ` Pavel Roskin
0 siblings, 1 reply; 6+ messages in thread
From: Bean @ 2009-07-04 7:04 UTC (permalink / raw)
To: The development of GRUB 2
On Sat, Jul 4, 2009 at 12:26 PM, Pavel Roskin<proski@gnu.org> wrote:
> On Sat, 2009-07-04 at 09:48 +0800, Bean wrote:
>> Hi,
>>
>> Library is an archive file that contains unlinked object files. We can
>> use library function both statically or dynamically. In the former
>> case, we link the objects together to form an executable image, in the
>> later case, we load the object at runtime and resolve symbols, much
>> like the modules.
>>
>> With library, the size of kernel can be reduced dramatically. Now, the
>> kernel only contains platform specific function. To build a kernel
>> image, we link the kernel and other required module, then link any
>> unresolved function from the library, this way, only the function that
>> are actually used is in the kernel.
>
> What matters is the size of the linked and compressed kernel image
> (core.img) and not the bare kernel (kernel.img). Yes, we can have some
> savings, but I don't expect anything dramatic.
Hi,
The current size:
text data bss dec hex filename
4036 0 0 4036 fc4 kernel_img-kern_misc.o
3520 0 0 3520 dc0 kernel_img-kern_i386_pc_startup.o
3440 1504 0 4944 1350 kernel_img-symlist.o
3056 0 2064 5120 1400 kernel_img-kern_dl.o
2900 0 24544 27444 6b34 kernel_img-kern_disk.o
1384 64 40 1488 5d0 kernel_img-kern_fs.o
1204 4 64 1272 4f8 kernel_img-kern_env.o
1104 0 16 1120 460 kernel_img-kern_mm.o
1052 0 0 1052 41c kernel_img-kern_corecmd.o
964 320 0 1284 504 kernel_img-kern_parser.o
872 0 272 1144 478 kernel_img-kern_i386_pc_init.o
748 36 64 848 350 kernel_img-kern_term.o
572 0 16 588 24c kernel_img-kern_partition.o
556 0 0 556 22c kernel_img-kern_file.o
536 0 0 536 218 kernel_img-kern_device.o
524 0 0 524 20c kernel_img-kern_main.o
432 0 0 432 1b0 kernel_img-kern_i386_dl.o
384 0 0 384 180 kernel_img-kern_list.o
336 0 2640 2976 ba0 kernel_img-kern_err.o
288 4 0 292 124 kernel_img-term_i386_vga_common.o
276 20 256 552 228 kernel_img-kern_rescue_reader.o
264 20 0 284 11c kernel_img-kern_rescue_parser.o
208 0 32 240 f0 kernel_img-kern_i386_tsc.o
192 0 0 192 c0 kernel_img-kern_i386_pc_mmap.o
156 0 0 156 9c kernel_img-kern_handler.o
144 0 0 144 90 kernel_img-kern_command.o
96 16 0 112 70 kernel_img-kern_reader.o
92 96 0 188 bc kernel_img-term_i386_pc_console.o
56 0 0 56 38 kernel_img-kern_i386_pit.o
52 0 0 52 34 kernel_img-kern_generic_millisleep.o
32 0 0 32
20 kernel_img-kern_generic_rtc_get_time_ms.o
24 0 16 40 28 kernel_img-kern_time.o
The biggest part is kern/misc.c, all are library function, many
function in startup can also be moved to library. And with library,
symlist.c is not needed as well, which saves another 3k.
>
> We would only gain size reduction for the code that is in the kernel,
> but is not used by any module linked into the kernel image. I don't
> think there will be a lot of such code. Whatever modules we link, the
> image will need to output formatted strings, handle filesystems,
> partitions, disks.
>
>> As native library format of the building os could vary, we should use
>> a format that's specific to grub, perhaps something similar to cpio.
>
> The price will be a greatly increased complexity of the build system. I
> think it would be better to simplify it first.
Actually, I'm also thinking about unifying the object format. We can
write a program to convert from platform specific object file to an
unified elf format, this would simplify the build process for system
like osx, and the dynamic loader can be unified as well, which may
save some code.
--
Bean
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: idea: library support for grub2
2009-07-04 7:04 ` Bean
@ 2009-07-04 14:27 ` Pavel Roskin
2009-07-04 14:46 ` Bean
0 siblings, 1 reply; 6+ messages in thread
From: Pavel Roskin @ 2009-07-04 14:27 UTC (permalink / raw)
To: The development of GRUB 2, Bean
Quoting Bean <bean123ch@gmail.com>:
> The biggest part is kern/misc.c, all are library function, many
> function in startup can also be moved to library.
It doesn't matter by itself. If the modules linked into the the
kernel image use most functions in that library, there will be little
of no saving.
> And with library,
> symlist.c is not needed as well, which saves another 3k.
Perhaps I misunderstand something in your proposal. I don't see how
introducing a library would eliminate symlist.c.
We'll need a list of symbols for modules to use, whether those symbols
are in the kernel or in the library. In fact, we'll need two lists
instead of one - one for the kernel and one for the library.
We could use hashes instead of symbol names to make the symlist
shorter (but hashes won't compress as well, so it's not a sure win).
We can enumerate the symbols - that would compress better. Or we can
resolve all kernel symbols in the modules and eliminate the symlist.
But it's a completely separate issue.
> Actually, I'm also thinking about unifying the object format. We can
> write a program to convert from platform specific object file to an
> unified elf format, this would simplify the build process for system
> like osx, and the dynamic loader can be unified as well, which may
> save some code.
Yes, refactoring of the build system would be helpful.
--
Regards,
Pavel Roskin
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: idea: library support for grub2
2009-07-04 14:27 ` Pavel Roskin
@ 2009-07-04 14:46 ` Bean
2009-07-04 15:59 ` Bean
0 siblings, 1 reply; 6+ messages in thread
From: Bean @ 2009-07-04 14:46 UTC (permalink / raw)
To: The development of GRUB 2
On Sat, Jul 4, 2009 at 10:27 PM, Pavel Roskin<proski@gnu.org> wrote:
> Quoting Bean <bean123ch@gmail.com>:
>
>> The biggest part is kern/misc.c, all are library function, many
>> function in startup can also be moved to library.
>
> It doesn't matter by itself. If the modules linked into the the kernel
> image use most functions in that library, there will be little of no saving.
>
Many string and char function are rarely used, and the unicode
function is used only by some fs.
>> And with library,
>> symlist.c is not needed as well, which saves another 3k.
>
> Perhaps I misunderstand something in your proposal. I don't see how
> introducing a library would eliminate symlist.c.
>
> We'll need a list of symbols for modules to use, whether those symbols are
> in the kernel or in the library. In fact, we'll need two lists instead of
> one - one for the kernel and one for the library.
>
> We could use hashes instead of symbol names to make the symlist shorter (but
> hashes won't compress as well, so it's not a sure win). We can enumerate
> the symbols - that would compress better. Or we can resolve all kernel
> symbols in the modules and eliminate the symlist. But it's a completely
> separate issue.
The reason for symlist is to export function from kernel, but we can
move the kernel to a module as well, therefore eliminating symlist
altogether. With library, we can walk the module list (including
kernel), and linked the unresolved function when generating core.img.
--
Bean
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: idea: library support for grub2
2009-07-04 14:46 ` Bean
@ 2009-07-04 15:59 ` Bean
0 siblings, 0 replies; 6+ messages in thread
From: Bean @ 2009-07-04 15:59 UTC (permalink / raw)
To: The development of GRUB 2
>>> And with library,
>>> symlist.c is not needed as well, which saves another 3k.
>>
>> Perhaps I misunderstand something in your proposal. I don't see how
>> introducing a library would eliminate symlist.c.
>>
>> We'll need a list of symbols for modules to use, whether those symbols are
>> in the kernel or in the library. In fact, we'll need two lists instead of
>> one - one for the kernel and one for the library.
>>
>> We could use hashes instead of symbol names to make the symlist shorter (but
>> hashes won't compress as well, so it's not a sure win). We can enumerate
>> the symbols - that would compress better. Or we can resolve all kernel
>> symbols in the modules and eliminate the symlist. But it's a completely
>> separate issue.
>
> The reason for symlist is to export function from kernel, but we can
> move the kernel to a module as well, therefore eliminating symlist
> altogether. With library, we can walk the module list (including
> kernel), and linked the unresolved function when generating core.img.
Hi,
Actually, perhaps the most space saving method is not to use module in
kernel. We could link kernel.img, modules and unresolved function into
a single image, this image only export one symbol, the firmware
structure, which is used to invoke platform specific function, such as
firmware.get_mmap, etc.
For external module, the function is loaded from library, although
this means there are two version of the function in memory, one static
linked in kernel, one dynamic loaded, but memory is generally not an
issue, it's the size of core.img that matters, and we don't want to
expand it by adding the exported symbol table there.
There is also another usage for this method, now we can use two
different version of function with the same name. For example, we
could have two grub_printf, a simple version used in kernel, and a
full version in the library.
--
Bean
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-07-04 15:59 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-04 1:48 idea: library support for grub2 Bean
2009-07-04 4:26 ` Pavel Roskin
2009-07-04 7:04 ` Bean
2009-07-04 14:27 ` Pavel Roskin
2009-07-04 14:46 ` Bean
2009-07-04 15:59 ` Bean
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.