[U-Boot-Users] Why are some global vars part of the image, and some not?
Timur Tabi
timur at freescale.com
Sat Nov 4 01:07:07 CET 2006
Wolfgang Denk wrote:
> I'm not exactly sure what you mean by the "global vars" in the
> Subject line. The declaration you show here says "static". This may
> or may not be what you mean.
To me, a variable defined outside of a function is a global variable,
regardless as to whether it's "static" or not. Technically, these variables
are static globals, but I don't think removing the "static" would change what
I'm seeing. Would it?
>> As you can see, I defined two static volatile global vars: i2c_bus_num and
>> i2c_dev.
>
> Yes, and one of these is initialized with non-zero values (so it will
> go to the data segment), while the other is not (so it will go to
> bss).
I realized that about two minutes after I posted my email, which is why I
posted a follow-up.
> THis is perfectly OK. Just check the variables after U-Boot has been
> relocated to RAM and BSS has been initialized.
I can't. This code is used to initialize the I2C bus, which is used to
initialize SPD on DDR, which is obviously done before U-Boot is relocated.
These variables contain the I2C bus number. On some boards, SPD is on bus 0,
on some they're on bus 1. So the compile-time initializer needs to be the
right bus.
(An alternative would be to change i2c_read() and i2c_write() to take a bus
number as a parameter, but that would change hundreds of files).
--
Timur Tabi
Linux Kernel Developer @ Freescale
More information about the U-Boot
mailing list