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