custom u-boot on Xavier (Solved)

Albert,

CBoot doesn’t present a version number as such. Something we should probably add, but since we’re providing it in source format, any rebuild w/modified source would be a different version anyway.

The rootfs boot feature (a la U-Boot) isn’t implemented yet, but it is in the works. Hopefully it will be ready in time for the next JetPack release for Xavier Jetson.

Tom

Tom,

Any progress in CBoot wrt supporting booting multiple kernels off eEMC? We are working on kernel modifications and need this functionality in order to test booting various kernels… Let us know if you have any estimates on its availability.

Thanks,
-albertr

Thank you, Tom on enabling custom kernel booting through cboot. I was able to build the cboot_t194.bin using the cboot_src after enabling CONFIG_ENABLE_EXTLINUX_BOOT=1.

This helps greatly in our development.

Though, I should let you know that if an FDT entry is not present in the extlinux.conf file, the boot fails. This is because CONFIG_DT_ENABLE is present by default and when CONFIG_ENABLE_EXTLINUX_BOOT is set, it expects a FDT entry. I think, cboot can be updated to fall back to the one installed on the system.

But, congratulations on bringing this capability to cboot!

Anish,

I’m new to custom kernel development so I might be naive but where did you find the CONFIG_ENABLE_EXTLINUX_BOOT option? I’m not able to find it in the latest (32.2.1) cboot source.

Thanks,
Nathan

Hello,

I have not looked at the R32.2.1 cboot source yet.

The file that should contain this CONFIG in the R32.2 cboot source was:
./bootloader/partner/t18x/cboot/platform/t194/l4t.mk

This might have changed in the R32.2.1 tree.

Note: I have found out that if this option is turned on and if netbooting is enabled (through cbo.dtb), the Xavier doesn’t boot. This could be just my observation but I can either have extlinux.conf feature turned on or network booting.

That’s the correct .mk file, Anish. Thanks. It shouldn’t have changed in 32.2, we just never enabled it (slated for full use in R32.3 for AGX).

WayneW - please file an NVBug for the ‘CBO and net boot don’t work together’ problem that is mentioned above. I’m surprised at that info, since network boot is just another boot ‘target’, regardless of whether it’s arrived at via the built-in (BL) boot options, or from parsing a cbo.dtb file.

Anish - can you post your cbo.dts file please?

Hello,

Thank you.

Please find attached my cbo.dts file and the serial console log that I see.
Xavier-cboot-extlinux-and-network-error.txt (19.8 KB)
cbo.dts.txt (825 Bytes)

Although I’m not an expert on T194 network boot, it does appear that you’ve gotten the CBO.DTS right - your board should try SD, then USB, then network. I can see that this is the exact boot sequence in your boot log, too, and it does get an IP from DHCP and load the boot.img from TFTP. So that’s all working as expected. But somewhere along the line, it gets a DATA ABORT. I’ll get Wayne, etc. to file a bug for this behavior and get the guys that wrote that part of CBoot to debug it.

Is the boot.img you are trying to load (and kernel-dtb) from TFTP the exact same as the kernel that boots normally if you don’t use a CBO (or use CBO but make the boot order ‘sd usb emmc net’)? i.e. on AGX, I believe it’s the kernel image in the ‘kernel’ or ‘LNX’ partition. They need to be the same at first, then you can build your own kernel image and attempt to boot it from the network. But to prove that network boot is working OK on your board, please use the same kernel image that boots OK from ‘disk’.

Tom

Hello Tom,

Yes, it’s the same boot.img that I have currently booted on the Xavier which has “emmc” before “net” in the cbo.dtb. Also, with this setup I do get the option to choose between different kernels through the extlinux.conf file setup.

If I run the original cboot_194.bin file (shipped with JetPack), the same kernel image (boot.img + dtb) boots fine on the Xavier.

Hi anish.aney,

Please modify “boot-order” and “tftp-server-ip” in your cbo.dts, like below:

/dts-v1/;

/ {
        compatible = "nvidia,cboot-options-v1";
        boot-configuration {
                boot-order = "net", "emmc0", "usb0", "sd0";
                tftp-server-ip = /bits/ 8 <10 19 106 118>;
                dhcp-enabled;
                /* remove dhcp-enabled if uncommenting static-ip configuration */
                /* static-ip = /bits/ 8 <0 0 0 0>;
                 * ip-netmask = /bits/ 8 <255 255 255 0>;
                 * ip-gateway = /bits/ 8 <0 0 0 0>;
                 */
        };
};

Then following below setps to flash cbo.dtb

Generate cbo.dtb
$ dtc -I dts -O dtb -o cbo.dtb cbo.dts
Flash cbo.dtb
$ sudo ./flash -k CPUBL-CFG -r jetson-xavier mmcblk0p1

Hello carolyuu,

I have made the change you mentioned. “tftp-server-ip” was correct in my previous attachment, I had just masked it, so I kept it as it was.

However, it didn’t make any difference to the error:

[0001.126] I> Welcome to Cboot
[0001.126] I> Cboot Version: t194-274b0259
bfmon_post initialized
a[0001.126] I> CPU-BL Params @ 0xea820000
[0001.127] I>  0) Base:0x00000000 Size:0x00000000
[0001.128] I>  1) Base:0xe9100000 Size:0x00100000
[0001.132] I>  2) Base:0xea000000 Size:0x00200000
[0001.137] I>  3) Base:0xe9200000 Size:0x00200000
[0001.141] I>  4) Base:0xe9000000 Size:0x00100000
[0001.145] I>  5) Base:0xe8f00000 Size:0x00100000
[0001.150] I>  6) Base:0xeb800000 Size:0x00400000
[0001.154] I>  7) Base:0xe9c00000 Size:0x00400000
bclk_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
a[0001.159] I>  8) Base:0xe8e00000 Size:0x00100000
[0001.228] I>  9) Base:0xe8d00000 Size:0x00100000
[0001.233] I> 10) Base:0xeb000000 Size:0x00800000
[0001.237] I> 11) Base:0x40000000 Size:0x00040000
[0001.242] I> 12) Base:0xe8c00000 Size:0x00100000
[0001.246] I> 13) Base:0x40046000 Size:0x00002000
[0001.250] I> 14) Base:0x40048000 Size:0x00002000
[0001.255] I> 15) Base:0xab000000 Size:0x00004000
[0001.259] I> 16) Base:0x4004a000 Size:0x00002000
[0001.264] I> 17) Base:0xe8b00000 Size:0x00100000
[0001.268] I> 18) Base:0x4004c000 Size:0x00002000
[0001.273] I> 19) Base:0xea200000 Size:0x00600000
[0001.277] I> 20) Base:0x4004e000 Size:0x00002000
[0001.282] I> 21) Base:0xe8ad0000 Size:0x0000c00bemc_debugfs initialized
dvs_debugfs initialized
a
[0001.291] I> 22) Base:0x00000000 Size:0x0000000bfmon_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
]a
[0001.341] I> 23) Base:0xe8ae0000 Size:0x00020000
[0001.346] I> 24) Base:0xee000000 Size:0x02000000
[0001.350] I> 25) Base:0x40050000 Size:0x00002000
[0001.355] I> 26) Base:0x40040000 Size:0x00006000
[0001.359] I> 27) Base:0xe9800000 Size:0x00400000
[0001.364] I> 28) Base:0xecc00000 Size:0x01400000
[0001.368] I> 29) Base:0xe9400000 Size:0x00400000
[0001.373] I> 30) Base:0x00000000 Size:0x00000000
[0001.377] I> 31) Base:0x00000000 Size:0x00000000
[0001.381] I> 32) Base:0xf8000000 Size:0x08000000
[0001.386] I> 33) Base:0xf0000000 Size:0x08000000
[0001.390] I> 34) Base:0xebc00000 Size:0x01000000
[0001.395] I> 35) Base:0xaa000000 Size:0x01000000
[0001.399] I> 36) Base:0xa0000000 Size:0x0a000000
[0001.404] I> 37) Base:0xea800000 Size:0x00800000
[0001.408] I> 38) Base:0x80000000 Size:0x20000000
[0001.413] I> 39) Base:0xb0000000 Size:0x08000000
[0001.417] I> 40) Base:0x00000000 Size:0x00000000
[0001.422] I> 41) Base:0x00000000 Size:0x00000000
[0001.426] I> 42) Base:0x00000000 Size:0x00000000
[0001.431] I> 43) Base:0x00000000 Size:0x00000000
[0001.435] I> 44) Base:0x00000000 Size:0x00000000
[0001.440] I> 45) Base:0x00000000 Size:0x00000000
[0001.444] GIC-SPI Target CPU: 0
[0001.447] Interrupts Init done
[0001.450] calling constructors
[0001.453] initializing heap
[0001.455] I> Heap: [0xa068d588 ... 0xaa000000]
[0001.460] initializing threads
[0001.463] initializing timers
[0001.465] creating bootstrap completion thread
[0001.470] top of bootstrap2()
[0001.472] CPU: MIDR: 0x4E0F0040, MPIDR: 0x80000000
[0001.477] initializing platform
[0001.480] E> DEVICE_PROD: Invalid value data = 0, size = 0.
[0001.485] W> device prod register failed
[0001.489] I> Bl_dtb @0xa9f00000
[0001.492] I> gpio framework initialized
[0001.503] I> tegrabl_gpio_driver_register: register 'nvidia,tegra194-gpio' driver
[0001.509] I> tegrabl_gpio_driver_register: register 'nvidia,tegra194-gpio-aon' driver
[0001.511] I> tegrabl_tca9539_init: i2c bus: 1, slave addr: 0x46
[0001.521] E> fetch_driver_phandle_from_dt: failed to get node with compatible ti,tca9539
[0001.529] E> fetch_driver_phandle_from_dt: failed to get node with compatible nxp,tca9539
[0001.533] W> tegrabl_tca9539_init: failed to fetch phandle from dt
[0001.539] I> tegrabl_tca9539_init: i2c bus: 1, slave addr: 0x44
[0001.547] E> fetch_driver_phandle_from_dt: failed to get node with compatible ti,tca9539
[0001.555] E> fetch_driver_phandle_from_dt: failed to get node with compatible nxp,tca9539
[0001.561] W> tegrabl_tca9539_init: failed to fetch phandle from dt
[0001.569] I> fixed regulator driver initialized
[0001.582] I> register 'maxim' power off handle
[0001.583] I> virtual i2c enabled
[0001.583] I> registered 'maxim,max20024' pmic
[0001.584] I> tegrabl_gpio_driver_register: register 'max20024-gpio' driver
[0001.589] I> Boot-device: eMMC
[0001.592] I> Boot_device: SDMMC_BOOT instance: 3
[0001.598] I> sdmmc-3 params source = boot args
[0001.601] I> sdmmc bdev is already initialized
[0001.605] I> sdmmc-3 params source = boot args
[0001.611] I> Found 15 partitions in SDMMC_BOOT (instance 3)
[0001.617] I> Found 37 partitions in SDMMC_USER (instance 3)
[0001.621] E> "plugin-manager" doesn't exist, creating
[0001.625] E> "ids" doesn't exist, creating
[0001.630] E> "connection" doesn't exist, creating
[0001.634] E> "configs" doesn't exist, creating
[0001.640] I> Find /i2c@3160000's alias i2c0
[0001.642] I> Reading eeprom i2c=0 address=0x50
[0001.672] I> Device at /i2c@3160000:0x50
[0001.672] I> Reading eeprom i2c=0 address=0x56
[0001.696] I> Device at /i2c@3160000:0x56
[0001.697] I> Find /i2c@3180000's alias i2c2
[0001.698] I> Reading eeprom i2c=2 address=0x54
[0001.699] E> I2C: slave not found in slaves.
[0001.700] E> I2C: Could not write 0 bytes to slave: 0x00a8 with repeat start true.
[0001.701] E> I2C_DEV: Failed to send register address 0x00000000.
[0001.701] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xa8 at 0x00000000 via instance 2.
[0001.710] E> eeprom: Failed to read I2C slave device
[0001.715] I> Eeprom read failed 0x3526070d
[0001.719] I> Reading eeprom i2c=2 address=0x57
[0001.724] E> I2C: slave not found in slaves.
[0001.728] E> I2C: Could not write 0 bytes to slave: 0x00ae with repeat start true.
[0001.735] E> I2C_DEV: Failed to send register address 0x00000000.
[0001.741] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xae at 0x00000000 via instance 2.
[0001.750] E> eeprom: Failed to read I2C slave device
[0001.755] I> Eeprom read failed 0x3526070d
[0001.759] I> Reading eeprom i2c=2 address=0x52
[0001.764] E> I2C: slave not found in slaves.
[0001.768] E> I2C: Could not write 0 bytes to slave: 0x00a4 with repeat start true.
[0001.776] E> I2C_DEV: Failed to send register address 0x00000000.
[0001.781] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xa4 at 0x00000000 via instance 2.
[0001.791] E> eeprom: Failed to read I2C slave device
[0001.795] I> Eeprom read failed 0x3526070d
[0001.800] I> Find /i2c@c240000's alias i2c1
[0001.803] I> Reading eeprom i2c=1 address=0x52
[0001.809] E> I2C: slave not found in slaves.
[0001.812] E> I2C: Could not write 0 bytes to slave: 0x00a4 with repeat start true.
[0001.820] E> I2C_DEV: Failed to send register address 0x00000000.
[0001.825] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xa4 at 0x00000000 via instance 1.
[0001.835] E> eeprom: Retry to read I2C slave device.
[0001.840] E> I2C: slave not found in slaves.
[0001.844] E> I2C: Could not write 0 bytes to slave: 0x00a4 with repeat start true.
[0001.851] E> I2C_DEV: Failed to send register address 0x00000000.
[0001.857] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xa4 at 0x00000000 via instance 1.
[0001.866] E> eeprom: Failed to read I2C slave device
[0001.871] I> Eeprom read failed 0x3526070d
[0001.875] I> Reading eeprom i2c=1 address=0x50
[0001.880] E> I2C: slave not found in slaves.
[0001.884] E> I2C: Could not write 0 bytes to slave: 0x00a0 with repeat start true.
[0001.892] E> I2C_DEV: Failed to send register address 0x00000000.
[0001.897] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xa0 at 0x00000000 via instance 1.
[0001.907] E> eeprom: Retry to read I2C slave device.
[0001.912] E> I2C: slave not found in slaves.
[0001.915] E> I2C: Could not write 0 bytes to slave: 0x00a0 with repeat start true.
[0001.923] E> I2C_DEV: Failed to send register address 0x00000000.
[0001.929] E> I2C_DEV: Could not read 256 registers of size 1 from slave 0xa0 at 0x00000000 via instance 1.
[0001.938] E> eeprom: Failed to read I2C slave device
[0001.943] I> Eeprom read failed 0x3526070d
[0001.947] I> create_pm_ids: id: 2888-0001-400-J, len: 15
[0001.952] I> config: mem-type:00,power-config:00,misc-config:00,modem-config:00,touch-config:00,display-config:00,, len: 93
[0001.963] I> create_pm_ids: id: 2822-0000-600-D, len: 15
[0001.969] I> config: mem-type:00,power-config:00,misc-config:00,modem-config:00,touch-config:00,display-config:00,, len: 93
[0001.980] I> Adding plugin-manager/ids/2888-0001-400=/i2c@3160000:module@0x50
[0001.987] E> "i2c@3160000" doesn't exist, creating
[0001.991] E> "module@0x50" doesn't exist, creating
[0001.996] I> Adding plugin-manager/ids/2822-0000-600=/i2c@3160000:module@0x56
[0002.003] E> "module@0x56" doesn't exist, creating
[0002.009] I> Adding plugin-manager/cvm
[0002.011] E> "chip-id" doesn't exist, creating
[0002.015] I> Adding plugin-manager/chip-id/A02
[0002.020] I> Plugin-manager override starting
[0002.025] I> node /plugin-manager/fragement-tegra-wdt-en matches
[0002.032] I> node /plugin-manager/fragement-soft-wdt matches
[0002.040] I> node /plugin-manager/fragment-pcie-c5-rp matches
[0002.044] I> node /plugin-manager/fragment-tegra-ufs-lane10 matches
[0002.052] I> node /plugin-manager/fragment-p2888@0 matches
[0002.064] I> Disable plugin-manager status in FDT
[0002.065] I> Plugin-manager override finished successfully
[0002.076] I> enabling 'vdd-hdmi-5v0' regulator
[0002.082] I> regulator 'vdd-hdmi-5v0' already enabled
[0002.082] E> tegrabl_display_init_regulator: hdmi cable is not connected
[0002.083] E> tegrabl_display_get_pdata, failed to parse dtb settings
[0002.089] E> invalid display type
[0002.094] E> invalid display type
[0002.095] E> cannot find any other nvdisp nodes
[0002.096] E> no valid display unit config found in dtb
[0002.101] W> display init failed
[0002.103] I> Load in CBoot Boot Options partition and parse it
[0002.110] I> boot-order :-
[0002.111] I> 1.net
[0002.113] I> 2.emmc0
[0002.115] I> 3.usb0
[0002.117] I> 4.sd0
[0002.119] I> tftp-server-ip: 10.134.30.24
[0002.123] W> parse_ip_info: static-ip info is not required, only tftp-server-ip is required.
[0002.131] E> Failed to parse GUID
[0002.134] I> Hit any key to stop autoboot:	4	3	2	1
[0004.142] initializing target
[0004.142] calling apps_init()
[0004.143] starting app kernel_boot_app
[0004.146] I> found decompressor handler: lz4-legacy
[0004.147] I> decompressing BMP blob ...
[0004.147] C> failed to decompress, err=-48
[0004.147] C> Failure during decompressing (err: 1785331754)
[0004.148] E> decompression failed (err=1785331754)
[0004.148] E> failed to decompress blob, err=1785331754
[0004.153] E> tegrabl_load_bmp_blob: BMP blob initialization failed
[0004.159] W> Loading bmp blob to memory failed
[0004.164] I> Kernel type = Normal
[0004.167] I> Loading kernel & kernel-dtb from network ...
[0004.172] I> EQoS: Init
[0006.177] I> Wait till auto-calibration completes...
[0006.178] I> Configuring PHY
[0006.238] I> Start auto-negotiation
[0006.239] I> Wait till auto-negotiation completes...
[0009.240] I> MAC addr 00:04:4b:cb:a0:01
[0009.240] I> DHCP: Init: Requesting IP ...
[0009.240] I> netif status changed 0.0.0.0
[0009.275] I> netif status changed 10.134.30.211
[0009.741] I> Our IP: 10.134.30.211
[0009.741] TFTP Client: Init
[0009.741] TFTP Client: Server IP: 10.134.30.24
[0009.742] TFTP Client: Send RRQ, file: tegra194-p2888-0001-p2822-0000.dtb
##
[0009.854] TFTP Client: Last packet received
[0009.854] TFTP Client: Send RRQ, file: boot.img
################################################################################
################################################################################
################################################################################
######################################################################
[0022.289] TFTP Client: Last packet received
[0022.290] I> netif status changed 10.134.30.211
[0022.291] I> T19x: Authenticate kernel (bin_type: 37), max size 0x4000000
[0022.686] I> T19x: Authenticate kernel-dtb (bin_type: 38), max size 0x400000
[0022.692] I> Kernel hdr @0xa06a0000
[0022.692] I> Kernel dtb @0x90000000
[0022.692] I> decompressor handler not found
[0022.693] I> Copying kernel image (0 bytes) from 0xa06a0000 to 0x80080000 ... [0022.693] I> Done
[0022.693] W> Ramdisk image path not found
[0022.694] I> Updated bpmp info to DTB
[0022.696] I> Ramdisk: Base: 0x91000000; Size: 0x0
[0022.700] I> Updated initrd info to DTB
[0022.703] W> WARN: Fail to override "console=none" in commandline
[0022.709] E> tegrabl_linuxboot_add_disp_param, du 0 failed to get display params
[0022.716] E> tegrabl_linuxboot_add_disp_param, du 0 failed to get display params
[0022.724] E> tegrabl_linuxboot_add_disp_param, du 0 failed to get display params
[0022.731] W> No valid slot number is found in scratch register
[0022.737] W> Return default slot: _a
[0022.740] I> Active slot suffix: 
[0022.743] I> add_boot_slot_suffix: slot_suffix = 
[0022.748] I> Linux Cmdline: root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyTCU0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 rootfstype=ext4 video=tegrafb no_console_suspend=1 earlycon=tegra_comb_uart,mmio32,0x0c168000 gpt usbcore.old_scheme_first=1 tegraid=19.1.2.0.0 maxcpus=8 boot.slot_suffix= boot.ratchetvalues=0.4.2 vpr=0x8000000@0xf0000000 sdhci_tegra.en_boot_part_access=1 
[0022.783] I> Updated bootarg info to DTB
[0022.786] W> MAC addr invalid!
[0022.789] E> Failed to get WIFI MAC address
[0022.793] W> MAC addr invalid!
[0022.796] E> Failed to get Bluetooth MAC address
[0022.801] I> eeprom_get_mac_addr: MAC (type: 2): 00:04:4b:cb:a0:01
[0022.808] E> "plugin-manager" doesn't exist, creating
[0022.812] I> Adding /chosen/plugin-manager/cvm
[0022.816] E> "chip-id" doesn't exist, creating
[0022.820] I> Adding /chosen/plugin-manager/chip-id
[0022.825] E> "configs" doesn't exist, creating
[0022.829] I> Adding /chosen/plugin-manager/configs
[0022.834] E> "ids" doesn't exist, creating
[0022.838] I> Adding /chosen/plugin-manager/ids
[0022.842] E> "odm-data" doesn't exist, creating
[0022.846] I> Adding /chosen/plugin-manager/odm-data
[0022.855] E> "memory" doesn't exist, creating
[0022.856] I> [0] START: 0x80000000, END: 0xab000000
[0022.860] I> [1] START: 0xab004000, END: 0xe8ad0000
[0022.865] I> [2] START: 0xe8adc000, END: 0xe8ae0000
[0022.869] I> dram_block larger than 80000000
[0022.874] I> [3] START: 0x100000000, END: 0x480000000
[0022.878] I> added [base:0x80000000, size:0x2b000000] to /memory
[0022.884] I> added [base:0xab200000, size:0x3d800000] to /memory
[0022.890] I> added [base:0x100000000, size:0x380000000] to /memory
[0022.898] I> Updated memory info to DTB
[0022.900] E> add_disp_param: failed to get display params for du=0
[0022.907] E> "reset" doesn't exist, creating
[0022.911] I> NVG: Logical CPU: 0; MPIDR: 0x80000000
[0022.915] I> Enabled cpu-0 (mpidr: 0x0) node in FDT
[0022.920] I> NVG: Logical CPU: 1; MPIDR: 0x80000001
[0022.924] I> Enabled cpu-1 (mpidr: 0x1) node in FDT
[0022.929] I> NVG: Logical CPU: 2; MPIDR: 0x80000100
[0022.934] I> Enabled cpu-2 (mpidr: 0x100) node in FDT
[0022.939] I> NVG: Logical CPU: 3; MPIDR: 0x80000101
[0022.943] I> Enabled cpu-3 (mpidr: 0x101) node in FDT
[0022.948] I> NVG: Logical CPU: 4; MPIDR: 0x80000200
[0022.953] I> Enabled cpu-4 (mpidr: 0x200) node in FDT
[0022.958] I> NVG: Logical CPU: 5; MPIDR: 0x80000201
[0022.963] I> Enabled cpu-5 (mpidr: 0x201) node in FDT
[0022.967] I> NVG: Logical CPU: 6; MPIDR: 0x80000300
[0022.972] I> Enabled cpu-6 (mpidr: 0x300) node in FDT
[0022.977] I> NVG: Logical CPU: 7; MPIDR: 0x80000301
[0022.982] I> Enabled cpu-7 (mpidr: 0x301) node in FDT
[0022.988] E> "misc-data" doesn't exist, creating
[0022.991] I> Boot-device: eMMC
[0022.994] I> Add boot-sdmmc to plugin-manager/misc-data
[0022.999] I> Add storage-sdmmc to plugin-manager/misc-data
[0023.005] W> Unknown storage device
[0023.008] I> Add serial number:0423418010107 as DT property
[0023.015] I> Plugin-manager override starting
[0023.018] I> node /plugin-manager/fragement-tegra-wdt-en matches
[0023.025] I> node /plugin-manager/fragement-soft-wdt matches
[0023.033] I> node /plugin-manager/fragment-pcie-c5-rp matches
[0023.037] I> node /plugin-manager/fragment-tegra-ufs-lane10 matches
[0023.045] I> node /plugin-manager/fragment-p2888@0 matches
[0023.057] I> Disable plugin-manager status in FDT
[0023.057] I> Plugin-manager override finished successfully
[0023.058] 
[0023.059] -----------------------------------------------
[0023.062] Synchronous Exception: DATA ABORT (FAR: 0)
[0023.067] -----------------------------------------------
[0023.072] PAR_ELX: 0x80f
[0023.075] 
[0023.076] ESR 0x96000007: ec 0x25, il 0x1, iss 0x7
[0023.080] -----------------------------------------------
[0023.086]  [Stack Trace]
[0023.088] 
[0023.089] => pc:0xA0643044, sp:0xA0692920
[0023.093] => pc:0xA063B480, sp:0xA0692B50
[0023.097] => pc:0xA063D248, sp:0xA0692BC0
[0023.101] => pc:0xA063E8A4, sp:0xA0692CC0
[0023.104] => pc:0xA060F2D4, sp:0xA0693500
[0023.108] => pc:0xA060F39C, sp:0xA0693630
[0023.112] => pc:0xA060F1BC, sp:0xA0693680
[0023.116] => pc:0xA060E73C, sp:0xA06936B0
[0023.120] => pc:0xA060E710, sp:0xA06936C0
[0023.124] -----------------------------------------------
[0023.129] iframe 0xa0692830:
[0023.132] x0  0x               0 x1  0x               0 x2  0x              43 x3  0x              73
[0023.141] x4  0x               0 x5  0x               a x6  0x               0 x7  0x               0
[0023.150] x8  0x        90000000 x9  0x           39110 x10 0x           390c4 x11 0x        a0692c7c
[0023.159] x12 0x        90000000 x13 0x        a069334c x14 0x        a46a0018 x15 0x             200
[0023.168] x16 0x            1500 x17 0x               0 x18 0x               0 x19 0x        ffffffe8
[0023.177] x20 0x        a065f4f0 x21 0x              20 x22 0x        a0692cc0 x23 0x        a0692e72
[0023.186] x24 0x        a065d7f4 x25 0x             68d x26 0x        a0692cc0 x27 0x        a065d7f3
[0023.195] x28 0x             171 x29 0x        a0692b50 lr  0x        a0643680 sp  0x        a0692920
[0023.205] elr 0x        a0643044
[0023.208] spsr 0x        a0000209
[0023.211] -----------------------------------------------
[0023.216] panic (caller 0xa0601238): die
[0023.220] HALT: spinning forever...

Hi anish.aney,

Please make sure your steps is the same with below:

1. Create /etc/xinetd.d/tftp:
service tftp
{
protocol        = udp
port            = 69
socket_type     = dgram
wait            = yes
user            = nobody
server          = /usr/sbin/in.tftpd
server_args     = -s /home/carol/tftpboot
disable         = no
}

2. Create tftpboot folder
   $ mkdir /home/<username>/tftpboot
   $ cp boot_sigheader.img.encrypt /home/carol/tftpboot/boot.img
   $ cp tegra194-p2888-0001-p2822-0000_sigheader.dtb.encrypt /home/carol/tegra194-p2888-0001-p2822-0000.dtb

3. Restart xinetd service:
   $ sudo service xinetd restart 

4. Change boot order with cbo.dts  (#17 steps)
5. Generate cbo.dtb
   $ dtc -I dts -O dtb -o cbo.dtb cbo.dts

6. Flash cbo.dtb
   $ sudo ./flash -k CPUBL-CFG -r jetson-xavier mmcblk0p1

Hello Carol,

I have been successfully booting images off of TFTP server. The issue is that when extlinux capability is turned on in the cboot_t194.bin and cbo.dts is updated to boot off of TFTP first, the system hangs as seen in the attached logs.

A cboot_t194.bin built without extlinux support successfully boots the boot.img/*.dtb off of TFTP server.

Hi Anish,

Could you share what you’ve done in cboot source?

Also, I would like to know what is turned on and what is off now?

I have been successfully booting images off of TFTP server. The issue is that when extlinux capability is turned on in the cboot_t194.bin and cbo.dts is updated to boot off of TFTP first, the system hangs as seen in the attached logs.

It sounds like even disabling TFTP server and directly boot from emmc failed.

Hello Wayne,

The diff with the original cboot_src is below:

diff -rpubw cboot_orig/bootloader/partner/t18x/cboot/platform/t194/l4t.mk cboot_src/bootloader/partner/t18x/cboot/platform/t194/l4t.mk
--- cboot_orig/bootloader/partner/t18x/cboot/platform/t194/l4t.mk	2019-07-16 19:41:34.000000000 -0400
+++ cboot_src/bootloader/partner/t18x/cboot/platform/t194/l4t.mk	2019-09-10 08:09:02.484738302 -0400
@@ -16,6 +16,7 @@ GLOBAL_DEFINES += \
 	CONFIG_ENABLE_ETHERNET_BOOT=1 \
 	CONFIG_ENABLE_USB_MS=1 \
 	CONFIG_ENABLE_SECURE_BOOT=1 \
+	CONFIG_ENABLE_EXTLINUX_BOOT=1 \
 	CONFIG_ENABLE_DISPLAY=1 \
 	CONFIG_ENABLE_SHELL=1
 
Only in cboot_src: out

Regarding your second commend (#22), I didn’t understand why you say that booting from emmc fails. Here’s what’s failing and working for me:

cbo.dtb having “emmc” before “net” :

  1. With no change to the cboot source code, booting off of emmc works as expected. But of course no option to choose between different kernel entries present under /boot because of lack of support for CONFIG_ENABLE_EXTLINUX_BOOT.
  2. Adding CONFIG_ENABLE_EXTLINUX_BOOT=1 to the cboot_src also works as expected where during the boot process a kernel selection menu appears.

cbo.dtb having “net” before “emmc” :

  1. With no change to the cboot source code, booting the signed boot.img and *.dtb files off of the TFTP server works as expected.
  2. But when CONFIG_ENABLE_EXTLINUX_BOOT=1 is added to the cboot source code, the above method fails.

As you can see in the log that it downloads the boot.img and *.dtb files from the TFTP server, authenticates it, strips it off of the authentication tokens, loads it at the kernel_load_address, sets the kernel cmdline, but fails when (I think) tries to load the kernel at the address.

Since I couldn’t deduce anything from the failure information, it’s difficult for me to figure out what went wrong.

In brief, the error can be reproduced if

  1. Put net boot priority before emmc
  2. Enable CONFIG_ENABLE_EXTLINUX_BOOT in l4t.mk

Is that correct?

Hello Wayne,

Yes, that’s correct.

Hi anish,

Thanks for confirm. I am checking this with our internal team.

May I know what is your purpose to enable CONFIG_ENABLE_EXTLINUX_BOOT? Are you trying to implement something similar to PXE boot?

Hello Wayne,

Thank you.

As you may know that our company, Concurrent Real-Time develops a Real-Time OS called RedHawk. We release RedHawk for both x86, x86_64 and ARM64 architectures. We have been releasing RedHawk on top L4T kernels on all of NVIDIA’s Jetson platforms except NANO which will be released soon.

Regarding turning on the CONFIG_ENABLE_EXTLINUX_BOOT option in cboot, we usually release 6 flavors of RedHawk kernels and this feature helps us toggle between the kernels during boot time instead of flashing them each time. This feature also lets us compare the behavior of a bug between L4T kernel vs RedHawk kernel(s).

Regarding PXE booting, we currently have a mechanism to boot the Xaviers off of a TFTP server using the cbo.dtb file. But if we can get extlinux.conf file to be loaded from the TFTP server, if there’s such a plan, that will be great. But that’s not needed as such.

However, we want this bug fixed so that we could go back and forth between “net” boot vs “emmc” boot as we like.

Hope that answers your question.