[U-Boot] environment variables crc

Hello all,
I've copied a flash image of one board to another one and changed the ethaddr (environment variable) of course when I start Uboot now the system says: CRC bad, using default environment variables. Now what I would like to do is recalculate that CRC, change it in the image and then copy it to the second board. Can anyone tell me how I can calculate the CRC and where it is located. I already understood that it's a CRC32.
Any other ideas are also welcome... Maybe It's even possible with the crc32 command of Uboot but then again I would need the location of the CRC and which data is used to calculate it.
Thanks a lot
Regards,
Gerrit

On Monday 20 April 2009 11:46:22 Gerrit Van Damme wrote:
I've copied a flash image of one board to another one and changed the ethaddr (environment variable) of course when I start Uboot now the system says: CRC bad, using default environment variables. Now what I would like to do is recalculate that CRC, change it in the image and then copy it to the second board. Can anyone tell me how I can calculate the CRC and where it is located. I already understood that it's a CRC32.
"saveenv". the CRC is the first 4 bytes of the environment and is calculated using the environment. -mike

Mike Frysinger wrote:
On Monday 20 April 2009 11:46:22 Gerrit Van Damme wrote:
I've copied a flash image of one board to another one and changed the ethaddr (environment variable) of course when I start Uboot now the system says: CRC bad, using default environment variables. Now what I would like to do is recalculate that CRC, change it in the image and then copy it to the second board. Can anyone tell me how I can calculate the CRC and where it is located. I already understood that it's a CRC32.
"saveenv". the CRC is the first 4 bytes of the environment and is calculated using the environment. -mike
Hey Mike,
Thanks for your answer.
The saveenv command doesn't work for me because then the default env variables are stored and this is what I want to avoid.
It's already a good thing that I can see that the first 4 bytes really look like the CRC of the environment. So this was really helpfull info. Now you tell me it's calculated using the environment. In the source code I found the env variables crc calculated for a size of ENV_SIZE, but I was unable to see how it was defined. Do you have more info on this?
Is the environment data (for crc calculation) terminated by a certain char (or sequence of chars) ?
Thanks and regards,
Gerrit

Dear Gerrit Van Damme,
In message 49ED809D.5030702@mgb-tech.com you wrote:
The saveenv command doesn't work for me because then the default env variables are stored and this is what I want to avoid.
Then change the environment before running saveenv? Or even better - adjust the default environment so it matches your needs. What's the problem?
It's already a good thing that I can see that the first 4 bytes really look like the CRC of the environment. So this was really helpfull info. Now you tell me it's calculated using the environment. In the source code I found the env variables crc calculated for a size of ENV_SIZE, but I was unable to see how it was defined. Do you have more info on this?
Hmmm... "grep" is your friend.
Is the environment data (for crc calculation) terminated by a certain char (or sequence of chars) ?
No. Not for CRC calculation.
Best regards,
Wolfgang Denk

Dear Wolgang Denk,
Wolfgang Denk wrote:
Dear Gerrit Van Damme,
In message 49ED809D.5030702@mgb-tech.com you wrote:
The saveenv command doesn't work for me because then the default env variables are stored and this is what I want to avoid.
Then change the environment before running saveenv? Or even better - adjust the default environment so it matches your needs. What's the problem?
Thing is I would like to bypass the Uboot commands. Maybe I'll explain my problem a little more detailed. We're using a taskit panelcard based on the Atmel at91sam9261. Atmel provides some boot assistant software (SAM-BA) which allows you to create images and clone them. Now we set up a complete system on the taskit and now we want to start cloning. We were succesfull on this part the only thing is the MAC address sits also in this flash image. We created a script which gets the original MAC address from the board. Inserts it in the flash image file and then writes it to the board. And then we got the CRC error because we didn't recalculate the CRC. We want to include the CRC calculation in our SAM-BA script so that everything is already set and we can skip the Uboot part. This is why I needed some specific info on the CRC calculation.
But if I'm unable to calculate the CRC I'll have to go for a second (Uboot) script to set up the environment. But it wont be highly appreciated by our production team :-)
It's already a good thing that I can see that the first 4 bytes really look like the CRC of the environment. So this was really helpfull info. Now you tell me it's calculated using the environment. In the source code I found the env variables crc calculated for a size of ENV_SIZE, but I was unable to see how it was defined. Do you have more info on this?
Hmmm... "grep" is your friend.
Indeed that's true... but only if you're already friends with "Linux"
Is the environment data (for crc calculation) terminated by a certain char (or sequence of chars) ?
No. Not for CRC calculation.
Best regards,
Wolfgang Denk
Thanks for your answer Wolfgang
Regards,
Gerrit
participants (3)
-
Gerrit Van Damme
-
Mike Frysinger
-
Wolfgang Denk