question about boot_params global variables

Valentin Vidić vvidic at valentin-vidic.from.hr
Wed Aug 17 06:04:57 EDT 2022


On Tue, Aug 16, 2022 at 05:55:33PM +0800, shiyu chou wrote:
> In arch x86 directory I found two global variables with the same
> name(master branch):
> 1.arch/x86/boot/main.c
> near line 18: struct boot_params boot_params __attribute__((aligned(16)));
> 2.arch/x86/kernel/setup.c
> near line 75: struct boot_params boot_params;
> Is that wrong to define two global variables with the same name? And when
> use extern to reference the variable,which one did it reference?

Same name would be a problem if these two variables end up in the same
binary program. However, as the comment in arch/x86/boot/main.c suggests:

/*
 * Main module for the real-mode kernel code
 */

first variable is part of a small real-mode kernel that runs first. It
finishes running by switching to the protected mode kernel that contains
the second variable:

        protected_mode_jump(boot_params.hdr.code32_start,
	                            (u32)&boot_params + (ds() << 4));

For more details see https://www.kernel.org/doc/html/latest/x86/boot.html

-- 
Valentin



More information about the Kernelnewbies mailing list