Hi everyone,
When I run following command in TX2
sudo fw_printenv
I get this error
Cannot parse config file '/etc/fw_env.config': No such file or directory
Is there anyone can tell me what is the content of fw_env.config for Jetson TX2 so that I can use fw_printenv and fw_setenv?
Thank in advance.
I am guessing U-Boot would need to be modified to use this. Currently those settings come from one of these places:
- Hard coded in U-Boot (e.g., build time configuration).
- Original device tree used directly by U-Boot.
- Modified device tree as passed on by earlier boot stages.
- "/boot/extlinux/extlinux.conf" (though this is somewhat limited on current releases).
âextlinux.confâ is an example of something U-Boot was configured to look for. I suppose it is possible to modify the U-Boot in a Jetson and in some way have it read â/etc/fw_env.configâ, but mostly it wouldnât be useful. I say this because of how the device tree itself is used in earlier boot stages and modified before passing it on to U-Boot. I say âmostlyâ because if you were to add this method of working with variables it might be possible you are doing something custom which the existing device tree and environment will not have issues with.
hello Quang_OpenStack,
are you able to have uart connected to have serial console message?
if yes, you should be able to enter u-boot environment by pause the kernel booting and use printenv/setenv commands directly.
thanks
@linuxdev, thank for your suggestion. I will research more on it.
@JerryChang, I want to use fw_printenv & fw_setenv in user platform, not in uboot. Do you have any suggestion?
Thank.
@JerryChang,
I create /etc/fw_env.config with data like this
/dev/mmcblk0p1 0x0000 0x2000
However, when I run fw_printenv, I got
Warning: Bad CRC, using default environment
And it only show the default uboot environments; my real uboot environments are different.
So, I think I set wrong content in /etc/fw_env.config.
Could you provide me the content of /etc/fw_env.config that contain exactly memory address where uboot environment is saved?
Thank
Hi,
Are there anyone has solution for this problem?
Itâs very kind if someone can give me some suggestions.
Thank in advance!
Just a thought on thisâŠdevice tree and other boot environment actually exist and may be used in stages prior to U-Boot, and U-Boot gets much of its environment by what is passed to it from earlier stages. This is why extlinux.conf is no longer useful in specifying the FDT entry for device treeâŠit wonât do as expected since earlier stages need access to a device tree to modify and pass on to U-Boot.
Those earlier boot stages cannot read ext4, and the information they do read is in binary format in partitions. I suspect that your fw_setenv utility would not only require its configuration in a partition instead of ext4, but would probably also require boot stages prior to U-Boot to be modified (which isnât going to be possible). Youâve not described any specific use-case (meaning it is hard to talk about alternatives), but simply using the bootloader like other embedded systems probably isnât going to succeed.
Look at the U-Boot source code, specifically include/configs/p2771-0000.h, for the environment area definitions. By default, itâs located at the end of the second boot partition, /dev/mmcblk0boot1 on the Linux side of things.
So try using
/dev/mmcblk0boot1 0x3FE000 0x2000
BTW, I ran into an issue with this when I went to enable redundancy for the environment area, since the end of that partition also contains a GPT-style partition table used by the pre-U-boot bootloaders (mb1 and cboot). Putting two copies of the U-Boot environment there overwrote part of the GPT, making the system unbootable. I fixed this for my own builds by moving the environment area back by an extra 36*512 bytes to leave room for the GPT.
I know very little about mmcblk0boot1. However, by definition, this is the result of a driver (and not necessarily the exact content of a partitionâŠthough perhaps it is this plus a set of ioctl calls). All I can do is speculate.
Itâs hard to say what the specific source of the data is for this device special file. If this is related to MB0 or MB1 (and MB1 is related to MB0 because MB0 hands off to MB1), then it is too late to make any change which would actually have any desired effect if done through the device driver. The changes would have to have already been made even before cboot, and any effect would need to be present at or before cboot. The device driver itself might change something, but the board was set up and initialized for this long before the Linux kernel ever started. I would consider the analogy of someone reading a book, and at a later date the author makes a correctionâŠthe person who read the uncorrected book would never see the change.
Probably a better question would be what use-case are you interested in? What do you actually want to occur if you can ignore what tools are used to cause the change? Perhaps there is another way.
FYI, much of the early boot process is closed source. Itâs easy to change U-Boot, but anything earlier than this might be a problem.
On an MMC device , there are four âhardâ partitions - boot0, boot1, rpmb (parameter block), and the âgeneralâ partition. The first three are typically used for booting, and the general partition is for use by the operating system. The block devices on the Linux side just map to those partitions; the naming, while similar to NVIDIAâs mb1/mb2 naming, is just coincidental.
On the TX2, the NVIDIA-provided binary-only files (bootloaders etc.) are populated in boot0 and potentially boot1, with that GPT (for locating the boot-related binaries in the boot0/boot1 partitions) at the end of boot1.
I only mentioned the environment issue in case someone else decides they want to customize U-Boot and potentially run into the same problem I did⊠it took a while to track down the cause, precisely because the NVIDIA-provided bootloaders are closed source.
Dear matthew.madison,
Your suggestion works well, thank so much.
i can use fw_printenv with content of /etc/fw_env.config
/dev/mmcblk0boot1 0x3FE000 0x2000
@linuxdev, thank for sharing your experiment.
1 Like
Hi, we are also having an issue with this. We have a new environment and have moved some of general data partitions around (not boot1, to our knowledge) but when we save the environment with U-Bootâs saveenv we can no longer get past mb1.
Come to think of it, itâs possible our new environment is too large. At boot we see
*** Warning - bad CRC, using default environment
And at the end of a printenv we see:
Environment size: 5814/131067 bytes
Which is way over CONFIG_ENV_SIZE 0x2000 (8192). L4T U-Boot reported ~4000/8188. Does anyone know how we can âloadenvâ?
Edit: We solved this. We had three issues:
- CONFIG_ENV_SIZE was too large, 0x20000 instead of 0x2000
- CONFIG_SYS_MMC_ENV_PART was set to 0, instead of 2 (mmcblk0boot1)
- CONFIG_ENV_OFFSET was indeed set to 0x3FE000 (0x400000-0x2000) however we ended up setting this to 0x0 as /dev/mmcblk0boot1 is unused until a 16KB table starting at 0x3fbe00.
Iâd like to discuss 3 a little further. /dev/mmcblk0boot1 looks like this:
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003fbe00 a2 a0 d0 eb e5 b9 33 44 87 c0 68 b6 b7 26 99 c7 |......3D..h..&..|
003fbe10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003fbe20 00 00 00 00 00 00 00 00 3f 00 00 00 00 00 00 00 |........?.......|
003fbe30 00 00 00 00 00 00 00 00 42 00 43 00 54 00 00 00 |........B.C.T...|
003fbe40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003fbe80 a2 a0 d0 eb e5 b9 33 44 87 c0 68 b6 b7 26 99 c7 |......3D..h..&..|
003fbe90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003fbea0 40 00 00 00 00 00 00 00 3f 02 00 00 00 00 00 00 |@.......?.......|
003fbeb0 00 00 00 00 00 00 00 00 6d 00 62 00 31 00 00 00 |........m.b.1...|
003fbec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003fbf00 a2 a0 d0 eb e5 b9 33 44 87 c0 68 b6 b7 26 99 c7 |......3D..h..&..|
003fbf10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003fbf20 40 02 00 00 00 00 00 00 3f 04 00 00 00 00 00 00 |@.......?.......|
003fbf30 00 00 00 00 00 00 00 00 6d 00 62 00 31 00 5f 00 |........m.b.1._.|
003fbf40 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |b...............|
003fbf50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003fbf80 a2 a0 d0 eb e5 b9 33 44 87 c0 68 b6 b7 26 99 c7 |......3D..h..&..|
003fbf90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003fbfa0 40 04 00 00 00 00 00 00 bf 04 00 00 00 00 00 00 |@...............|
003fbfb0 00 00 00 00 00 00 00 00 4d 00 42 00 31 00 5f 00 |........M.B.1._.|
003fbfc0 42 00 43 00 54 00 00 00 00 00 00 00 00 00 00 00 |B.C.T...........|
003fbfd0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003fc000 a2 a0 d0 eb e5 b9 33 44 87 c0 68 b6 b7 26 99 c7 |......3D..h..&..|
003fc010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003fc020 c0 04 00 00 00 00 00 00 3f 05 00 00 00 00 00 00 |........?.......|
003fc030 00 00 00 00 00 00 00 00 4d 00 42 00 31 00 5f 00 |........M.B.1._.|
003fc040 42 00 43 00 54 00 5f 00 62 00 00 00 00 00 00 00 |B.C.T._.b.......|
003fc050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003fc080 a2 a0 d0 eb e5 b9 33 44 87 c0 68 b6 b7 26 99 c7 |......3D..h..&..|
003fc090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003fc0a0 40 05 00 00 00 00 00 00 3f 06 00 00 00 00 00 00 |@.......?.......|
003fc0b0 00 00 00 00 00 00 00 00 73 00 70 00 65 00 2d 00 |........s.p.e.-.|
003fc0c0 66 00 77 00 00 00 00 00 00 00 00 00 00 00 00 00 |f.w.............|
003fc0d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003fc100 a2 a0 d0 eb e5 b9 33 44 87 c0 68 b6 b7 26 99 c7 |......3D..h..&..|
003fc110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003fc120 40 06 00 00 00 00 00 00 3f 07 00 00 00 00 00 00 |@.......?.......|
003fc130 00 00 00 00 00 00 00 00 73 00 70 00 65 00 2d 00 |........s.p.e.-.|
003fc140 66 00 77 00 5f 00 62 00 00 00 00 00 00 00 00 00 |f.w._.b.........|
003fc150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003fc180 a2 a0 d0 eb e5 b9 33 44 87 c0 68 b6 b7 26 99 c7 |......3D..h..&..|
003fc190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003fc1a0 40 07 00 00 00 00 00 00 3f 09 00 00 00 00 00 00 |@.......?.......|
003fc1b0 00 00 00 00 00 00 00 00 6d 00 62 00 32 00 00 00 |........m.b.2...|
003fc1c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003fc200 a2 a0 d0 eb e5 b9 33 44 87 c0 68 b6 b7 26 99 c7 |......3D..h..&..|
003fc210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003fc220 40 09 00 00 00 00 00 00 3f 0b 00 00 00 00 00 00 |@.......?.......|
003fc230 00 00 00 00 00 00 00 00 6d 00 62 00 32 00 5f 00 |........m.b.2._.|
003fc240 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |b...............|
003fc250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003fc280 a2 a0 d0 eb e5 b9 33 44 87 c0 68 b6 b7 26 99 c7 |......3D..h..&..|
003fc290 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003fc2a0 40 0b 00 00 00 00 00 00 3f 0d 00 00 00 00 00 00 |@.......?.......|
003fc2b0 00 00 00 00 00 00 00 00 6d 00 74 00 73 00 2d 00 |........m.t.s.-.|
003fc2c0 70 00 72 00 65 00 62 00 6f 00 6f 00 74 00 00 00 |p.r.e.b.o.o.t...|
003fc2d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003fc300 a2 a0 d0 eb e5 b9 33 44 87 c0 68 b6 b7 26 99 c7 |......3D..h..&..|
003fc310 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003fc320 40 0d 00 00 00 00 00 00 3f 0f 00 00 00 00 00 00 |@.......?.......|
003fc330 00 00 00 00 00 00 00 00 6d 00 74 00 73 00 2d 00 |........m.t.s.-.|
003fc340 70 00 72 00 65 00 62 00 6f 00 6f 00 74 00 5f 00 |p.r.e.b.o.o.t._.|
003fc350 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |b...............|
003fc360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003fc380 a2 a0 d0 eb e5 b9 33 44 87 c0 68 b6 b7 26 99 c7 |......3D..h..&..|
003fc390 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003fc3a0 40 0f 00 00 00 00 00 00 47 0f 00 00 00 00 00 00 |@.......G.......|
003fc3b0 00 00 00 00 00 00 00 00 53 00 4d 00 44 00 00 00 |........S.M.D...|
003fc3c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003fc400 a2 a0 d0 eb e5 b9 33 44 87 c0 68 b6 b7 26 99 c7 |......3D..h..&..|
003fc410 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003fc420 48 0f 00 00 00 00 00 00 4f 0f 00 00 00 00 00 00 |H.......O.......|
003fc430 00 00 00 00 00 00 00 00 53 00 4d 00 44 00 5f 00 |........S.M.D._.|
003fc440 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |b...............|
003fc450 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
003ffe00 45 46 49 20 50 41 52 54 00 00 01 00 5c 00 00 00 |EFI PART....\...|
003ffe10 43 fe b0 0b 00 00 00 00 ff 3f 00 00 00 00 00 00 |C........?......|
003ffe20 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
003ffe30 df 3f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.?..............|
003ffe40 00 00 00 00 00 00 00 00 df 3f 00 00 00 00 00 00 |.........?......|
003ffe50 0d 00 00 00 80 00 00 00 82 c5 0a 35 00 00 00 00 |...........5....|
003ffe60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00400000
There is a 0x1e00 gap between 0x3FE000 (start of the U-Boot env) and 0x3ffe00 (start of the 512B EFI block).
Why does L4T try to fit a 0x2000 U-Boot env into a 0x1e00 gap? I believe this is a bug that will only show when U-Boot env is >7680B (0x1e00) in size.
We moved this to 0x0 as it appears to be unused.