CBoot Configuration for Net Boot - DTB and Kernel Locations

Hello,

I am attempting to network boot the Jetson AGX Xavier using the Jetson AGX Xavier dev kit. However, I am running into an error in which the jetson.dtb file cannot be found on the TFTP server (see UART console output below). This is because this file is located on a mounted drive on the server. The issue is, however, that the server is running on a device whose root TFTP server directory cannot be modified, and the directory the Jetson is currently looking in for the jetson.dtb is read-only on the server device. Therefore, I need to modify the expected location for the jetson.dtb and kernel images for the net boot CBOOT configuration. Where are these default locations specified? I did a global search in the CBOOT source code and could not find any location for the string “jetson.dtb”.

[0002.915] I> Hit any key to stop autoboot:	4	3	2	1
[0004.922] initializing target
[0004.922] calling apps_init()
[0004.923] starting app kernel_boot_app
[0004.942] I> found decompressor handler: lz4-legacy
[0004.943] I> decompressing BMP blob ...
[0004.953] I> Kernel type = Normal
[0004.954] I> ########## Net boot ##########
[0004.954] I> EQoS: Init
[0006.957] I> Wait till auto-calibration completes...
[0006.958] I> Configuring PHY
[0007.018] I> Start auto-negotiation
[0007.019] I> Wait till it completes...
[0010.020] I> MAC addr 48:b0:2d:2b:76:63
[0010.020] I> DHCP: Init: Requesting IP ...
[0010.020] I> netif status changed 0.0.0.0
[0010.022] I> netif status changed 192.168.1.2
[0010.521] I> Our IP: 192.168.1.2
[0010.521] TFTP Client: Init
[0010.521] TFTP Client: Server IP: 192.168.1.1
[0010.521] TFTP Client: Send RRQ, file: jetson.dtb
[0010.580] TFTP Client: Error received: code: 1, msg: File not found
[0010.580] E> Failed to get jetson.dtb
[0010.581] I> netif status changed 192.168.1.2
[0010.582] E> Net boot failed, err: 724239362

Hi abotelho1994,

Please reference below topic steps with TFTP boot:

Hi @carolyuu, thanks the response. I have already done steps 3-4 and 6-8 as you suggested but unfortunately I cannot complete steps 1, 2 and 5 as my server machine is not running Linux but instead has its own proprietary command line application the user has access to. And none of those commands allow you to change the TFTP server settings. You are only allowed to turn the TFTP server on or off. Given that, I was wondering if there was any edits that could be made to CBOOT or any other JetPack files that would allow the jetson.dtb and boot.img to be found in directories within the root TFTP server directory. Essentially, I need the net boot process of CBOOT to look for the following two files when attempting to TFTP boot:

  1. /rmc0/boot.img
  2. /rmc0/jetson.dtb

Any further assistance you can provide is a huge help. Thanks!

@carolyuu Disregard my prior messages. I just received instructions from the vendor of our server machine regarding configuring the TFTP server settings, and can now change the root directory. I will try to complete the rest of your steps and will mark this as solved if it all works out.

@carolyuu so we got further, and are now seeing that the files are being found on the server. The jetson.dtb is able to be successfully retrieved, but the boot.img is failing to be retrieved mid-download (see console output below). Any idea as to what could be causing this?

[0001.301] I> Welcome to Cbootÿâmrq initialized
fmon_post initialized
ÿá
[0001.301] I> Cboot Version: t194-38d30025
[0001.302] I> CPU-BL Params @ 0xf2820000
[0001.302] I>  0) Base:0x00000000 Size:0x00000000
[0001.305] I>  1) Base:0xf1100000 Size:0x00100000
[0001.310] I>  2) Base:0xf2000000 Size:0x00200000
[0001.314] I>  3) Base:0xf1200000 Size:0x00200000
[0001.319] I>  4) Base:0xf1000000 Size:0x00100000
ÿâclk_set_parent failed for clk i2c2, parent pll_aon (-22)
clk_set_parent failed for clk i2c8, parent pll_aon (-22)
clk_dt_late initialized
machine_check initialized
pm_post initialized
dbells initialized
avfs_clk_platform_post initialized
dmce initialized
cvc initialized
ccplex_avfs_hw_init: nafll_cluster0: not monitored
ccplex_avfs_hw_init: nafll_cluster1: not monitored
ccplex_avfs_hw_init: nafll_cluster2: not monitored
ccplex_avfs_hw_init: nafll_cluster3: not monitored
avfs_clk_mach_post initialized
regulator_post initialized
rm initialized
sc7_diag initialized
thermal_test initialized
serial_late initialized
clk_post initialized
clk_dt_post initialized
mc_reg initialized
pg_post initialized
dyn_modules initialized
sku_debugfs initialized
speedo_debugfs initialized
adc_debugfs initialized
clk_debugfs initialized
ÿá[0001.323] I>  5) Base:0xf0f00000 Size:0x00100000
[0001.403] I>  6) Base:0xf3800000 Size:0x00400000
[0001.407] I>  7) Base:0xf1c00000 Size:0x00400000
[0001.412] I>  8) Base:0xf0e00000 Size:0x00100000
[0001.416] I>  9) Base:0xf0d00000 Size:0x00100000
[0001.421] I> 10) Base:0xf3000000 Size:0x00800000
[0001.425] I> 11) Base:0x40000000 Size:0x00040000
[0001.429] I> 12) Base:0xf0c00000 Size:0x00100000
[0001.434] I> 13) Base:0x40046000 Size:0x00002000
[0001.438] I> 14) Base:0x40048000 Size:0x00002000
[0001.443] I> 15) Base:0xac000000 Size:0x00004000
ÿâemc_debugfs initialized
dvs_debugfs initialized
fmon_debugfs initialized
vmon_debugfs initialized
pg_debugfs initialized
profile_fs initialized
debugfs_cons initialized
mail_fs initialized
profile initialized
cvc_debugfs initialized
dmce_debugfs initialized
ec_debugfs initialized
rm_debugfs initialized
soctherm_debug initialized
gr_reader initialized
mods initialized
dt_fs initialized
debugfs_mrq initialized
debug_mrq initialized
debug_safereg initialized
initializing target
calling apps_init()
starting app shell
entering main console loop
] ÿá[0001.447] I> 16) Base:0x4004a000 Size:0x00002000
[0001.502] I> 17) Base:0xf0b00000 Size:0x00100000
[0001.507] I> 18) Base:0x4004c000 Size:0x00002000
[0001.511] I> 19) Base:0xf2200000 Size:0x00600000
[0001.516] I> 20) Base:0x4004e000 Size:0x00002000
[0001.520] I> 21) Base:0xf0ad0000 Size:0x0000c000
[0001.524] I> 22) Base:0x00000000 Size:0x00000000
[0001.529] I> 23) Base:0xf0ae0000 Size:0x00020000
[0001.533] I> 24) Base:0xf6000000 Size:0x02000000
[0001.538] I> 25) Base:0x40050000 Size:0x00002000
[0001.542] I> 26) Base:0x40040000 Size:0x00006000
[0001.547] I> 27) Base:0xf1800000 Size:0x00400000
[0001.551] I> 28) Base:0xf4c00000 Size:0x01400000
[0001.556] I> 29) Base:0xf1400000 Size:0x00400000
[0001.560] I> 30) Base:0x00000000 Size:0x00000000
[0001.565] I> 31) Base:0x00000000 Size:0x00000000
[0001.569] I> 32) Base:0xf8000000 Size:0x08000000
[0001.574] I> 33) Base:0x00000000 Size:0x00000000
[0001.578] I> 34) Base:0xf3c00000 Size:0x01000000
[0001.582] I> 35) Base:0xab000000 Size:0x01000000
[0001.587] I> 36) Base:0xa0000000 Size:0x0b000000
[0001.591] I> 37) Base:0xf2800000 Size:0x00800000
[0001.596] I> 38) Base:0x80000000 Size:0x20000000
[0001.600] I> 39) Base:0xb0000000 Size:0x08000000
[0001.605] I> 40) Base:0x00000000 Size:0x00000000
[0001.609] I> 41) Base:0x00000000 Size:0x00000000
[0001.614] I> 42) Base:0x00000000 Size:0x00000000
[0001.618] I> 43) Base:0x00000000 Size:0x00000000
[0001.623] I> 44) Base:0x00000000 Size:0x00000000
[0001.627] I> 45) Base:0x00000000 Size:0x00000000
[0001.632] GIC-SPI Target CPU: 0
[0001.635] Interrupts Init done
[0001.637] calling constructors
[0001.640] initializing heap
[0001.643] I> Heap: [0xa069ab80 ... 0xab000000]
[0001.647] initializing threads
[0001.650] initializing timers
[0001.653] creating bootstrap completion thread
[0001.657] top of bootstrap2()
[0001.660] CPU: MIDR: 0x4E0F0040, MPIDR: 0x80000000
[0001.665] initializing platform
[0001.668] E> DEVICE_PROD: Invalid value data = 0, size = 0.
[0001.673] W> device prod register failed
[0001.677] I> Bl_dtb @0xaaf00000
[0001.683] W> "plugin-manager" doesn't exist, creating
[0001.685] W> "ids" doesn't exist, creating
[0001.689] W> "connection" doesn't exist, creating
[0001.693] W> "configs" doesn't exist, creating
[0001.706] E> failed to read label property for node 227404: 13
[0001.710] E> failed to read reg property for node 227492: 13
[0001.713] E> failed to read label property for node 227544: 13
[0001.716] E> failed to read label property for node 227612: 13
[0001.721] E> failed to read label property for node 227648: 13
[0001.727] E> failed to read label property for node 227684: 13
[0001.733] E> failed to read reg property for node 227752: 13
[0001.738] E> failed to read label property for node 227804: 13
[0001.744] I> Find /i2c@3160000's alias i2c0
[0001.747] I> Reading eeprom i2c=0 address=0x50
[0001.776] I> Device at /i2c@3160000:0x50
[0001.777] I> Reading eeprom i2c=0 address=0x56
[0001.801] I> Device at /i2c@3160000:0x56
[0001.802] I> Find /i2c@3180000's alias i2c2
[0001.802] I> Reading eeprom i2c=2 address=0x54
[0001.804] E> I2C: slave not found in slaves.
[0001.804] E> I2C: Could not write 0 bytes to slave: 0x00a8 with repeat start true.
[0001.805] E> I2C_DEV: Failed to send register address 0x00000000.
[0001.806] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xa8 at 0x00000000 via instance 2.
[0001.815] E> eeprom: Failed to read I2C slave device
[0001.820] I> Eeprom read failed 0x3526070d
[0001.824] I> Reading eeprom i2c=2 address=0x57
[0001.828] E> I2C: slave not found in slaves.
[0001.832] E> I2C: Could not write 0 bytes to slave: 0x00ae with repeat start true.
[0001.840] E> I2C_DEV: Failed to send register address 0x00000000.
[0001.846] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xae at 0x00000000 via instance 2.
[0001.855] E> eeprom: Failed to read I2C slave device
[0001.860] I> Eeprom read failed 0x3526070d
[0001.864] I> Reading eeprom i2c=2 address=0x52
[0001.868] E> I2C: slave not found in slaves.
[0001.872] E> I2C: Could not write 0 bytes to slave: 0x00a4 with repeat start true.
[0001.880] E> I2C_DEV: Failed to send register address 0x00000000.
[0001.886] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xa4 at 0x00000000 via instance 2.
[0001.895] E> eeprom: Failed to read I2C slave device
[0001.900] I> Eeprom read failed 0x3526070d
[0001.905] I> Find /i2c@c240000's alias i2c1
[0001.908] I> Reading eeprom i2c=1 address=0x52
[0001.914] E> I2C: slave not found in slaves.
[0001.916] E> I2C: Could not write 0 bytes to slave: 0x00a4 with repeat start true.
[0001.924] E> I2C_DEV: Failed to send register address 0x00000000.
[0001.930] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xa4 at 0x00000000 via instance 1.
[0001.939] E> eeprom: Retry to read I2C slave device.
[0001.944] E> I2C: slave not found in slaves.
[0001.948] E> I2C: Could not write 0 bytes to slave: 0x00a4 with repeat start true.
[0001.956] E> I2C_DEV: Failed to send register address 0x00000000.
[0001.962] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xa4 at 0x00000000 via instance 1.
[0001.971] E> eeprom: Failed to read I2C slave device
[0001.976] I> Eeprom read failed 0x3526070d
[0001.980] I> Reading eeprom i2c=1 address=0x50
[0001.984] E> I2C: slave not found in slaves.
[0001.988] E> I2C: Could not write 0 bytes to slave: 0x00a0 with repeat start true.
[0001.996] E> I2C_DEV: Failed to send register address 0x00000000.
[0002.002] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xa0 at 0x00000000 via instance 1.
[0002.011] E> eeprom: Retry to read I2C slave device.
[0002.016] E> I2C: slave not found in slaves.
[0002.020] E> I2C: Could not write 0 bytes to slave: 0x00a0 with repeat start true.
[0002.028] E> I2C_DEV: Failed to send register address 0x00000000.
[0002.034] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xa0 at 0x00000000 via instance 1.
[0002.043] E> eeprom: Failed to read I2C slave device
[0002.048] I> Eeprom read failed 0x3526070d
[0002.052] I> create_pm_ids: id: 2888-0004-400-L, len: 15
[0002.057] I> config: mem-type:00,power-config:00,misc-config:00,modem-config:00,touch-config:00,display-config:00,, len: 93
[0002.068] I> create_pm_ids: id: 2822-0000-700-K, len: 15
[0002.073] I> config: mem-type:00,power-config:00,misc-config:00,modem-config:00,touch-config:00,display-config:00,, len: 93
[0002.084] I> Adding plugin-manager/ids/2888-0004-400=/i2c@3160000:module@0x50
[0002.092] W> "i2c@3160000" doesn't exist, creating
[0002.096] W> "module@0x50" doesn't exist, creating
[0002.101] I> Adding plugin-manager/ids/2822-0000-700=/i2c@3160000:module@0x56
[0002.108] W> "module@0x56" doesn't exist, creating
[0002.114] I> Adding plugin-manager/cvm
[0002.116] W> "chip-id" doesn't exist, creating
[0002.120] I> Adding plugin-manager/chip-id/A02P
[0002.125] I> Plugin-manager override starting
[0002.129] I> node /plugin-manager/fragement-tegra-wdt-en matches
[0002.137] I> node /plugin-manager/fragement-soft-wdt matches
[0002.146] I> node /plugin-manager/fragment-pcie-c5-rp matches
[0002.150] I> node /plugin-manager/fragment-tegra-ufs-lane10 matches
[0002.164] I> Disable plugin-manager status in FDT
[0002.164] I> Plugin-manager override finished successfully
[0002.165] I> gpio framework initialized
[0002.166] I> tegrabl_gpio_driver_register: register 'nvidia,tegra194-gpio' driver
[0002.174] I> tegrabl_gpio_driver_register: register 'nvidia,tegra194-gpio-aon' driver
[0002.180] I> tegrabl_tca9539_init: i2c bus: 1, slave addr: 0x46
[0002.188] W> fetch_driver_phandle_from_dt: failed to get node with compatible ti,tca9539
[0002.196] W> fetch_driver_phandle_from_dt: failed to get node with compatible nxp,tca9539
[0002.202] W> tegrabl_tca9539_init: failed to fetch phandle from dt
[0002.208] I> tegrabl_tca9539_init: i2c bus: 1, slave addr: 0x44
[0002.216] W> fetch_driver_phandle_from_dt: failed to get node with compatible ti,tca9539
[0002.223] W> fetch_driver_phandle_from_dt: failed to get node with compatible nxp,tca9539
[0002.230] W> tegrabl_tca9539_init: failed to fetch phandle from dt
[0002.237] I> fixed regulator driver initialized
[0002.251] I> register 'maxim' power off handle
[0002.252] I> virtual i2c enabled
[0002.253] I> registered 'maxim,max20024' pmic
[0002.253] I> tegrabl_gpio_driver_register: register 'max20024-gpio' driver
[0002.259] I> Boot-device: eMMC
[0002.261] I> Boot_device: SDMMC_BOOT instance: 3
[0002.270] I> sdmmc-3 params source = boot args
[0002.270] I> create_pm_ids: id: 2888-0004-400-L, len: 15
[0002.275] I> config: mem-type:00,power-config:00,misc-config:00,modem-config:00,touch-config:00,display-config:00,, len: 93
[0002.286] I> create_pm_ids: id: 2822-0000-700-K, len: 15
[0002.292] I> config: mem-type:00,power-config:00,misc-config:00,modem-config:00,touch-config:00,display-config:00,, len: 93
[0002.303] I> sdmmc bdev is already initialized
[0002.307] I> sdmmc-3 params source = boot args
[0002.338] I> Found 17 partitions in SDMMC_BOOT (instance 3)
[0002.350] I> Found 42 partitions in SDMMC_USER (instance 3)
[0002.359] I> enabling 'vdd-hdmi-5v0' regulator
[0002.364] I> regulator 'vdd-hdmi-5v0' already enabled
[0002.364] E> tegrabl_display_init_regulator: hdmi cable is not connected
[0002.365] E> tegrabl_display_get_pdata, failed to parse dtb settings
[0002.368] E> invalid display type
[0002.372] E> invalid display type
[0002.373] E> cannot find any other nvdisp nodes
[0002.373] E> no valid display unit config found in dtb
[0002.375] W> display init failed
[0002.375] I> Load in CBoot Boot Options partition and parse it
[0002.387] I> boot-order :-
[0002.387] I> 1.net
[0002.387] I> tftp-server-ip: 192.168.1.1
[0002.389] W> parse_ip_info: static-ip info is not required, only tftp-server-ip is required.
[0002.397] W> Failed to parse GUID
[0002.400] I> boot-dev-order :-
[0002.403] I> 1.net
[0002.405] I> Hit any key to stop autoboot:	4	3	2	1
[0004.413] initializing target
[0004.413] calling apps_init()
[0004.414] starting app kernel_boot_app
[0004.433] I> found decompressor handler: lz4-legacy
[0004.434] I> decompressing BMP blob ...
[0004.445] I> Kernel type = Normal
[0004.445] I> ########## Net boot ##########
[0004.445] I> EQoS: Init
[0006.448] I> Wait till auto-calibration completes...
[0006.449] I> Configuring PHY
[0006.509] I> Start auto-negotiation
[0006.510] I> Wait till it completes...
[0009.511] I> MAC addr 48:b0:2d:2b:76:63
[0009.511] I> DHCP: Init: Requesting IP ...
[0009.511] I> netif status changed 0.0.0.0
[0009.516] I> netif status changed 192.168.1.2
[0010.012] I> Our IP: 192.168.1.2
[0010.012] TFTP Client: Init
[0010.012] TFTP Client: Server IP: 192.168.1.1
[0010.012] TFTP Client: Send RRQ, file: jetson.dtb
##
[0010.224] TFTP Client: Last packet received
[0010.225] TFTP Client: Send RRQ, file: boot.img
################################################################################
################################################################################
################################################################################
################################################################################
######[0061.553] E> Failed to get boot.img
[0061.554] I> netif status changed 192.168.1.2
[0061.554] E> Net boot failed, err: 724239618

Does your tftp server support RFC 7440?

Hi abotelho1994,

Please generate encrypt kernel again and copy to your host tftpboot folder and restart xinetd service.
Then reboot your Xavier device to check again.

Hi @carolyuu,

After doing what you mentioned, we are still receiving the same exact error.

Hi @user100090,

I am not sure at the moment, I can check on that.

Hi abotelho1994,

Are you using the same BSP package to generate encrypt kernel Image?

Hi @user100090,

Yes, RFC 7440 is supported by the TFTP server.

Hi @carolyuu,

I am not sure exactly what you mean. I am using L4T r32.7.2 and am using the following commands to generate both the encrypted boot.img and DTB:

./l4t_sign_image.sh --file bootloader/boot.img --chip 0x19 --type kernel
./l4t_sign_image.sh --file rootfs/boot/tegra194-p2888-0001-p2822-0000.dtb --chip 0x19 --type kernel-dtb

I am flashing the dev kit using the following command:

sudo ./flash.sh jetson-agx-xavier-devkit mmcblk0p1

As of now I am still seeing the same error: the boot.img downloads from the TFTP server for a certain amount of time and then freezes before ultimately failing. The jetson.dtb is downloading from the TFTP server with no issues.

Hi abotelho1994,

Can you try attached “boot.zip” kernel Image?
This is generate from r32.7.2. please replace this one to your host tftpboot folder.
boot.zip (295 Bytes)

Hi @carolyuu,

Thanks for the response. I grabbed that zip file and extracted the contents and then copied over the boot.img to my TFTP server to use for the net boot instead of my original one. This time it looks like it was not downloaded at all and timed out instantly. Take a look at the snippet of UART console output below for more info.

[0004.468] I> ########## Net boot ##########
[0004.468] I> EQoS: Init
[0006.471] I> Wait till auto-calibration completes...
[0006.472] I> Configuring PHY
[0006.532] I> Start auto-negotiation
[0006.533] I> Wait till it completes...
[0009.533] I> MAC addr 48:b0:2d:2b:74:27
[0009.534] I> DHCP: Init: Requesting IP ...
[0009.534] I> netif status changed 0.0.0.0
[0009.539] I> netif status changed 192.168.10.102
[0010.034] I> Our IP: 192.168.10.102
[0010.035] TFTP Client: Init
[0010.035] TFTP Client: Server IP: 192.168.10.103
[0010.035] TFTP Client: Send RRQ, file: jetson.dtb
##
[0010.247] TFTP Client: Last packet received
[0010.247] TFTP Client: Send RRQ, file: boot.img
[0040.263] E> Failed to get boot.img
[0040.264] I> netif status changed 192.168.10.102
[0040.264] E> Net boot failed, err: 724239618

Is there a TFTP server side log to say why this failed? For example, maybe it shows there was an attempt, but permission denied.

Hi @linuxdev,

On the server side, the /var/log/messages log shows the following when I grep ‘tftp’ during the download attempt:

Jan  1 04:06:57 dts xinetd[25356]: START: tftp pid=11392 from=::ffff:192.168.10.102
Jan  1 04:06:58 dts in.tftpd[11393]: Client ::ffff:192.168.10.102 finished jetson.dtb
Jan  1 04:07:57 dts in.tftpd[11394]: Client ::ffff:192.168.10.102 finished boot.img
Jan  1 04:07:57 dts in.tftpd[11394]: Client ::ffff:192.168.10.102 timed out

So I know the error is timeout related, but it occurs after a portion of the boot.img has already been downloaded, and times out at the same spot every time.

How do you know it is at the same spot? If it is at the same exact byte offset, then that is significant, but if it is just an approximation, then although useful, it isn’t “a smoking gun”. I wish the log had more detail. Is it possible to increase log detail on the TFTP server?

Secondarily, is server address itself IPv6 or IPv4? I am suspicious of IPv6 support on the bootloader and Jetson side and have had a lot of past issues with IPv6.

Hi @linuxdev,

I am only assuming it is at the same spot because on the UART console, "#"s get printed as the download proceeds, and the download is halting at the same exact number of '#"s printed for each attempt.

I have added four of the ‘-v’ options to the TFTP server args to make the logging verbose but it does not seem to give me any more information than what I have already sent.

The server address is IPv4.

Hi abotelho1994,

Are you add -s in /etc/xinetd.d/tftp?
example:
server_args = -s /home/carol/tftpboot

Hi @carolyuu,

Yes, we do have the -s option. For us, it is as follows:

server_args = -s /rmc_shares/rmc0

Hi abotelho1994,

Can you change the path and create tftpboot folder like below?

server_args = -s /home/<username>/tftpboot

Copy jetson.dtb and boot.img to this folder and try again.