This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

PROCESSOR-SDK-AM335X: Ethernet boot

Part Number: PROCESSOR-SDK-AM335X
Other Parts Discussed in Thread: AM3352, TPS65217

I am trying to configure my BeagleBone Black to boot from ethernet. I found these instructions on your website that is exactly what I need to do, flash the emmc from ethernet, only the links are broken to the patches required. Do these files exist?
website:
https://processors.wiki.ti.com/index.php/Sitara_Uniflash_Flash_Programming_with_Linux

file needed:
am335x_uboot_flasher_patches_psdkl_2_0_0_0.tar.gz

I just can't seem to get past making a uboot image that looks for ethernet to boot.  

In another tread it was mentioned that this these files are no longer needed as the patches are incorporated in the latest SDK which I am using.  So I guess my question is how do I make a uboot and MLO image that is configured to boot from ethernet?

  • Hi Eric,

    Erik Dragos said:
    I am trying to configure my BeagleBone Black to boot from ethernet.

    Are you trying to use (1) Ethernet boot all the way (have the AM335x ROM bootloader loading SPL/U-Boot via Ethernet, and the proceed to Kernel etc. loading over Ethernet, or are you planning on just using (2) U-Boot from eMMC/SD card, and then have perform U-Boot perform the loading of Kernel, DTB, and filesystem over Ethernet?

    If it is (1), you currently will need some minor modifications to allow for Ethernet boot in U-Boot, see this post here for details: https://e2e.ti.com/support/processors/f/791/p/848835/3140356#3140356  Then, you also need to be aware of that Ethernet boot requires changing the device boot mode via SYSBOOT[x] pins, which are exposed on the BeagleBone Black pin headers. Once that works follow the steps below (2)...

    If you only need (2), further down in that same E2E support thread (e2e.ti.com/.../3143716 I referred to earlier is an example of how U-Boot can be setup (via ENV settings) and commands that can be issued to load Kernel, DTB over NFS, and then mount rootfs over NFS as well.

    Regards, Andreas

  • Initially I would like to implement (1) and I realize the SYSBOOT pins require changing.  Now that I think about it this may not be practical for my application as a complete boot from Ethernet would be time consuming, correct?

    What I am trying to accomplish is a way to verify emmc content via ethernet.  I thought that booting from ethernet and reflashing the emmc could be a brut force method to achieve this goal but as stated before, the boot time might be excessive.

    What I am dealing with is a BBB in a 'black box' with only ethernet access after the initial load and deployment.  I need a way to verify the code has not changed and nothing has been written to the emmc such as malicious code when this 'black box' is returned for service.  This can be accomplished in a number of ways by either rewriting the entire emmc upon return, effective overwriting anything that might have changed, which is what generated this question, or by write protecting the emmc after the initial load (do you know if this is even possible?) or creating a checksum of the entire emmc at production and then comparing this checksum upon return ( I don't know if something like this is possible as the OS probably writes file to the emmc while running, is this correct?  

    Can you offer any insight to my predicament?

    Erik

  • Hi Erik,

    Erik Dragos said:
     Now that I think about it this may not be practical for my application as a complete boot from Ethernet would be time consuming, correct?

    Ethernet boot is not really any more time consuming than MMC/SD boot, at least not in a way that is much noticeable.

    Erik Dragos said:
    What I am trying to accomplish is a way to verify emmc content via ethernet.  I thought that booting from ethernet and reflashing the emmc could be a brut force method to achieve this goal but as stated before, the boot time might be excessive.

    If you want to verify eMMC contents you could load the eMMC content to DDR (potentially in pieces, to make it fit), and then use MD5 or SHA1 (or even CRC32) commands in U-Boot to calculate a checksum from U-Boot prompt, and compare with something you calculate on a host PC. See CONFIG_CMD_CRC32, CONFIG_CMD_MD5SUM, and CONFIG_CMD_SHA1SUM. You can script/automate this via U-Boot ENV scripting if you like, or on the host side (via 'expect'/'autoexpect' controlling a serial terminal).

    Erik Dragos said:
    or by write protecting the emmc after the initial load (do you know if this is even possible?)

    eMMCs usually have a write-protect hardware signal that you could use. Exposed through a jumper, or connected to a GPIO under SW control.

    There is also a way to set an eMMC write protection in SW. For example somebody submitted a patch on the U-Boot mailing list doing just that (https://lists.denx.de/pipermail/u-boot/2015-December/237810.html) however it doesn't look like this solution has gotten merged and made official. But still something you might be able to use, at least the concept;

    Regards, Andreas

  • Andreas,

    As for the last two ideas it doesn't sound like I could confirm CRC only using ethernet.  And the problem with the write protect would be in the case of a required image update, the black box would have to be disassembled and reflashed.  

    Since you mentioned boot time over ethernet would be comparable to mmc/sd boot time I'm leaning back to this method.  

    In the link you provided it seems the fix for boot-over-ethernet is more of a hack using that patch you created.  Is this still the case?  I guess I need a new procedure.  I was using this link which was old

    -processors.wiki.ti.com/.../Ubuntu_12.04_Set_Up_to_Network_Boot_an_AM335x_Based_Platform-

    Will this newer link allow a full boot from ethernet without needing the emmc or sd memories?

    -software-dl.ti.com/.../How_to_Setup_Ubuntu_1404_Network_Boot.html-

    Erik

  • Erik,

    Erik Dragos said:
    Since you mentioned boot time over ethernet would be comparable to mmc/sd boot time I'm leaning back to this method.  

    Yes if Ethernet is really your only connection method that would be a way to do it.

    Erik Dragos said:
    In the link you provided it seems the fix for boot-over-ethernet is more of a hack using that patch you created.  Is this still the case?  

    Yes this small change is needed to make it work with our current Linux SDKv6.x, at least on the hardware platform I had used (AM335x GP EVM), and the reasons are explained in the patches commit message. Like it is indicated, a cleaner method would be to use DTS for SPL, but this would require creating a new defconfig plus a dedicated device tree file for Ethernet boot. I'll see that I can find some time next week to look into this again, as ultimately that needs to work out of the box in our SDKs, one way or the other.

    Erik Dragos said:

    Don't use this, this is old/outdated (and will be removed sometime this year).

    Erik Dragos said:

    Will this newer link allow a full boot from ethernet without needing the emmc or sd memories?

    -software-dl.ti.com/.../How_to_Setup_Ubuntu_1404_Network_Boot.html-

    Yes those steps should apply. This is the official documentation resource. I remember getting it to work based on the concept shown there. However you still need to apply the patch I had pointed to to SPL to make it work (let me know should you find out otherwise).

    Regards, Andreas

  • Andreas,

    I'm following the latest instructions but running into a problem with my DHCP server.  It does not start.  There is an error in syslog stating:

    "no option named vendor-class-indentifier in space DHCP"  if I modify the dhcpd.config file to remove the if-then conditional statements the DHCP server will start.  Does vendor-class-identifer no longer exist?  I am running Ubuntu 19.10 with the latest isc-dhcp-server. 

  • Hi Erik,

    Erik Dragos said:
    "no option named vendor-class-indentifier in space DHCP"  if I modify the dhcpd.config file to remove the if-then conditional statements the DHCP server will start.  Does vendor-class-identifer no longer exist?  I am running Ubuntu 19.10 with the latest isc-dhcp-server. 

    I don't know that but probably something that shouldn't be too hard to find out if needed.

    For reference, here's an extract from my /etc/dhcp/dhcpd.conf that I have been using successfully:

    subnet 192.168.1.0 netmask 255.255.255.0 {
      # Configuration for Ethernet-based boot of TI EVMs
      range dynamic-bootp 192.168.1.50 192.168.1.99;
      if substring (option vendor-class-identifier, 0, 10) = "AM335x ROM"
      {
        filename "u-boot-spl.bin";
      }
      elsif substring (option vendor-class-identifier, 0, 17) = "AM335x U-Boot SPL"
      {
        filename "u-boot.img";
      }
    
      # General DHCP address range
      range 192.168.1.100 192.168.1.200;
    }

    I'm running the same server as you do, but I'm on 18.04.

    a0797059@jiji:~
    $ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 18.04.4 LTS
    Release:        18.04
    Codename:       bionic
    a0797059@jiji:~
    $ dpkg -l | grep dhcp
    ii  isc-dhcp-client                            4.3.5-3ubuntu7.1                                 amd64        DHCP client for automatically obtaining an IP address
    ii  isc-dhcp-common                            4.3.5-3ubuntu7.1                                 amd64        common manpages relevant to all of the isc-dhcp packages
    ii  isc-dhcp-server                            4.3.5-3ubuntu7.1                                 amd64        ISC DHCP server for automatic IP address assignment

    Regards, Andreas

  • Andreas,

    Could you send me your DHCP.config file or post here?  I'm wondering if something else is missing in this file.

    Erik

  • Andreas,

    Please disregard,  I found a typo. Thanks again dyslexia!

  • Hi Erik,

    Glad to her. Also once your network-based boot works please close this thread by marking the most appropriate answer.

    Regards, Andreas

  • Andreas,

    I know this is a noob question but how do I install your patch?  Admittedly, Linux is not my native language.

  • Hi Erik,

    that PATCH was in what is called "mailbox format", and the way to apply it to U-Boot would be using the following steps...

    1. Navigate to U-Boot directory of the TI SDK
    2. Use 'git am <patch_name.patch>'
    3. And then build U-Boot normally (see SDK documentation)

    Regards, Andreas

  • Andreas,

    Thanks I'll give that a shot.  BTW, is forcing RGMII the only thing this patch does?  Would strapping the SYSBOOT pins 5 and 6 high do the same thing?  BTW, I have SYSBOOT configured as 01000.  I'm assuming as long as EMAC1 is first in the boot sequence that should work.

  • Hi Erik,

    Erik Dragos said:
    .  BTW, is forcing RGMII the only thing this patch does?

    Yes. As for the SYSBOOT pins, that approach may or may not work, so I'd recommend experimenting with that. Also I did that on an AM335x GP EVM, not on the BeagleBone Black, where the PHY setup may or may not be different (have not examined that in detail). If you can't get it to work at all I'll see that I can produce a working example for the BeagleBone Black but I probably wouldn't get to it until later this week.

    Regards,
    Andreas

  • Andreas,

    I'll experiment.  BTW, is there file I can look at to see the boot output as you posted in the other thread or are you using the serial debug console to view progress?

  • Erik,

    you would need to have a serial console cable connected, at last for your bringup attempts. U-Boot does not have the capability to log output into a file.

    Regards, Andreas

  • Andreas,

    I'm about at my wits end with this.  I think I have the TFTP and DHCP servers configured.  I've copied and renamed the boot files to the tftboot directory. I connected the serial console cable and get output on normal EMMC boots so I know that is working.  Then configure SYSBOOT pins as 01000 (a configuration that boots from EMAC1 first) and get nothing on the console.  Then tried to strap SYSBOOT 6 and 7 high, still no output.  Then tried to install your patch but GIT want's my name or email or something so it won't install.  I'm not sure what to do at this point.  I'm not a software engineer, just a hardware engineer trying to get this concept working and I think I'm in way over my head.  But I do thank you for your time

    Erik

  • Andreas,

    I had some time to regroup.  Seems the problem I was having was additional packages that I had installed to try to get this to work.  I started over with a fresh Ubuntu install and now see a partial boot on my debug console.  It stops after the zImage download with a FDT_ERR_BADMAGIC error.  I'm not sure what this means or if this is caused by another issue that i have.  Seems when I setup Ubuntu network connection for manual mode as defined in the document I get warnings from the network manager that the connection failed even though I see downloading wire Wireshark.  Then Ubuntu turns off the network connection, which of course, interrupts the boot process.  Do you know why Ubuntu thinks there is a connection issue?  Is there a way that I can force the network connection to stay active?  

    BTW, I have not installed your patch.  I don't know how.  Is there a way I can cut and paste this patch into a file?

    Best,

    Erik

  • Hi Erik,

    Erik Dragos said:
    I started over with a fresh Ubuntu install and now see a partial boot on my debug console.  It stops after the zImage download with a FDT_ERR_BADMAGIC error.

    Thanks for the update and the efforts on your side to try to get this going, that definitely seems promising.

    Can you share a log of how far you got? If you try loading zImage, that means you already got to U-Boot prompt?

    Erik Dragos said:
    Seems when I setup Ubuntu network connection for manual mode as defined in the document I get warnings from the network manager that the connection failed even though I see downloading wire Wireshark.

    Great, I wanted to suggest you use Wireshark to get your initial SPL load working, but seems like you are already past that point.

    Erik Dragos said:
    Do you know why Ubuntu thinks there is a connection issue?  Is there a way that I can force the network connection to stay active?  

    Not sure, maybe the repeated driver probe causes the connection to drop briefly on the AM335x side, which triggers what you describe in Ubuntu. I think I have seen issues like this before but I don't remember exactly. Some quick comments:

    1. Are you using Ubuntu from within a VM? If so, try using a machine that is running Ubuntu natively.
    2. Try a different network adapter. I've been using USB-based network adapters successfully to create a separate network for my development boards.
    3. Connect to your board through a passive hub. This way, the PHY link between the Ubuntu machine and the hub will stay alive. This may help telling us where the issue is, if it is with the PHY link or some higher-layer issue.

    Erik Dragos said:
    BTW, I have not installed your patch.  I don't know how.  Is there a way I can cut and paste this patch into a file?

    I'd still recommend you get git setup and working. You could also just look at the patch and see what it changes. It contains some "context", and a few edits to lines that are prefixed with "+" which are additions which you could copy & paste into the respective file. And then of course re-build U-Boot.

    Anyways since you had issues with Git user name and email, here's how you set those up (from https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup):

    $ git config --global user.name "John Doe"
    $ git config --global user.email johndoe@example.com

    If you still have no luck I'll give this a try early next week.

    Regards, Andreas

  • Andreas,

    Which log file would you like to see?  Below is all that I see from my serial-usb debug window using screen.  I can see in Wireshark that u-boot-spl-restore.bin is requested and sent first.  Then zImage is requested and send.

    These are the files that are found in the board_support/prebuilt-images directory of the SDK directory tree.  They've been renamed to match my dhcpd.conf file. I don't see the u-boot-restore.img file being requested though.  I did not get a u-boot prompt. zImage is probably being requested from the conditional statement in the dhcpd.conf file.  Let me check to make sure I don't have an error in that conditional statement.

    Unfortunately I don't have a hub or usb-ethernet adapter (although that would be awesome as I wouldn't have to keep switching back and forth to the internet) as I'm, like most people these days, working from home.

    U-Boot SPL 2019.01-g029e4c009a (Oct 19 2019 - 23:14:52 +0000)
    Trying to boot from eth device

    Warning: eth_cpsw using MAC address from ROM
    eth0: eth_cpsw
    eth_cpsw Waiting for PHY auto negotiation to complete... done
    link up on port 0, speed 100, full duplex
    BOOTP broadcast 1
    BOOTP broadcast 2
    BOOTP broadcast 3
    DHCP client bound to address 192.168.2.3 (1259 ms)
    Using eth_cpsw device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'zImage'.
    Load address: 0x82000000
    Loading: #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
    #################################################################
    ##############################################
    3.2 MiB/s
    done
    Bytes transferred = 4227584 (408200 hex)
    fdt_root: FDT_ERR_BADMAGIC

  • Hi Erik,

    Erik Dragos said:
    Which log file would you like to see?  Below is all that I see from my serial-usb debug window using screen.  I

    Yes that's what I wanted to see. And it shows that SPL is able to load stuff over the network so you don't need my earlier patch.

    But it looks like you are feeding the Kernel zImage (via dhcp config) to SPL for the next step instead of U-Boot.

    So you need to instead feed it the actual u-boot.img U-Boot image. The zImage (Linux Kernel) only gets loaded after that by U-Boot. And usually it gets loaded over NFS, alongside the device tree file. Here is how NFS boot could look like once you are at U-Boot prompt (this is loading SPL and U-Boot from SD Card, so ignore the first part, since you are loading those over network).

    U-Boot SPL 2019.01-g8b90adfb16 (Jul 07 2019 - 10:08:45 +0000)
    Trying to boot from MMC2
    
    
    U-Boot 2019.01-g8b90adfb16 (Jul 07 2019 - 10:08:45 +0000)
    
    CPU  : AM335X-GP rev 2.1
    Model: TI AM335x BeagleBone Black
    DRAM:  512 MiB
    NAND:  0 MiB
    MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
    Loading Environment from FAT... <ethaddr> not set. Validating first E-fuse MAC
    Net:   eth0: ethernet@4a100000
    Warning: usb_ether MAC addresses don't match:
    Address in ROM is          de:ad:be:ef:00:01
    Address in environment is  6c:ec:eb:ba:cb:c9
    , eth1: usb_ether
    Hit any key to stop autoboot:  0 
    => env set serverip 10.0.1.38 && env set bootfile zImage-am335x-evm.bin && env set rootpath /opt/ti-processor-sdk-linux-am335x-evm-06.00.00.07/nfs/arago-tiny-image-am335x-evm && env set nfsopts nfsvers=3,nolock && run findfdt; run netboot
    Booting from network ...
    ethernet@4a100000 Waiting for PHY auto negotiation to complete. done
    link up on port 0, speed 100, full duplex
    BOOTP broadcast 1
    BOOTP broadcast 2
    BOOTP broadcast 3
    DHCP client bound to address 10.0.1.74 (1276 ms)
    link up on port 0, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 10.0.1.38; our IP address is 10.0.1.74
    Filename 'zImage-am335x-evm.bin'.
    Load address: 0x82000000
    Loading: #################################################################
    	 #################################################################
    	 #################################################################
    	 #################################################################
    	 ##################
    	 4 MiB/s
    done
    Bytes transferred = 4080128 (3e4200 hex)
    link up on port 0, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 10.0.1.38; our IP address is 10.0.1.74
    Filename 'am335x-boneblack.dtb'.
    Load address: 0x88000000
    Loading: ###
    	 3.5 MiB/s
    done
    Bytes transferred = 36717 (8f6d hex)
    ## Flattened Device Tree blob at 88000000
       Booting using the fdt blob at 0x88000000
       Loading Device Tree to 8fff4000, end 8fffff6c ... OK
    
    Starting kernel ...
    
    [    0.000000] Booting Linux on physical CPU 0x0
    [    0.000000] Linux version 4.19.38-g4dae378bbe (oe-user@oe-host) (gcc version 8.3.0 (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36))) #1 PREEMPT Sun Jul 7 04:39:33 UTC 2019
    [    0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
    [    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
    [    0.000000] OF: fdt: Machine model: TI AM335x BeagleBone Black
    [    0.000000] Memory policy: Data cache writeback
    [    0.000000] efi: Getting EFI parameters from FDT:
    [    0.000000] efi: UEFI not found.
    [    0.000000] cma: Reserved 48 MiB at 0x9d000000
    [    0.000000] CPU: All CPU(s) started in SVC mode.
    [    0.000000] AM335X ES2.1 (sgx neon)
    <cut>

    Regards, Andreas

  • Andreas,

    Thanks for the reference! We're almost there.  I found a typo in my dhcpd.conf file so u-boot-restore-img failed and then defaulted to zImage (the last statement in that file)

    I corrected this and now I see u-boot-spl-restore.bin load, then u-boot-restore.img load but then it's looking pxelinux.cfg which it can't find.  Then goes on to look for boot.scr.uimg which it also can't find.  Then loads zImage and wants to load am335x-boneblack.dtb but can't find that in my /tftpboot directory (which it is)  It's looking in /dtb/ for this file. Should I create a /dtb directory off root for this file?  Do I need to install something else for those other missing files?

    BTW, I have those BOOTSYS pins 6 and 7 strapped high so maybe that works after all.. 

  • Erik,

    Erik Dragos said:
    Then loads zImage and wants to load am335x-boneblack.dtb but can't find that in my /tftpboot directory (which it is)  It's looking in /dtb/ for this file. Should I create a /dtb directory off root for this file?  Do I need to install something else for those other missing files?

    Always please post a log.

    Also our Linux SDK comes with TFTP and NFS setup scripts (under bin/setup-tftp.sh and bin/setup-targetfs-nfs.sh), please execute those, or at least look at those. They will setup the needed servers and copy all files in place needed for a successful network boot.

    Regards, Andreas

  • Ah, no I had not run those scripts.  i didn't know about them.  I simply installed the SDK.  Before I run these scripts are there other scripts or a setup procedure that I should have followed for the SDK?

  • Erik,

    well there is a top-level setup.sh script that would install all of those things and should result in a system that boots your BeagleBone from network all the way to Linux prompt. It would be good to use that as a known-good reference point however the thing is that the SDK is setup to have the BeagleBone load SPL and U-Boot from SD card, and only then pick up loading from network, whereas you want to do network boot all the way starting with ROM. The good news is you can already boot to U-Boot prompt only using network. And the SDK scheme should take care of the part from thereon. The problem you may run into is that you may need changes to your U-Boot environment to be able to go from network-loaded U-Boot to network-loaded Kernel/Linux. The SDK installer scripts do customize the U-Boot environment but the scheme depends on being able to store/load that updated environment from a FAT partition... which in your case you don't have. So we may need to customize the environment by updating U-Boot itself. But first you would want to experiment with commands at the U-Boot prompt to get the Linux boot to work (see the command I entered in the example I posted earlier, may want to try something like that once you reach U-Boot prompt when booted from network).

    Regards, Andreas

  • Andreas,

    Here's a problem.  I tried to run setup.sh.  It failed as it only supports Ubuntu 12.04, 14.04, 16.04 and 18.04.  I'm running 19.10.  I see a bunch of packages to install in the setup-packages script, many of which I have not installed.  I did run setup-tftp.sh but setup-targetfs-nfs.sh failed due to other dependencies.  Since setup.sh won't run can I install the /bin/scripts in order (as they are called in setup.sh) or is it best I downgrade to Unbuntu 18.04?

  • Andreas,

    I manually installed the setup scripts including all the packages that I was missing.  It's still is looking for pxeconfig.  Below is the boot process as reported from the serial console.  Any ideas?

    ast 1
    BOOTP broadcast 2
    BOOTP broadcast 3
    DHCP client bound to address 192.168.2.3 (1263 ms)
    Using eth_cpsw device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'u-boot-restore.img'.
    Load address: 0x82000000
    Loading: *#################################################################
    #################################################################
    ##########################
    3.5 MiB/s
    done
    Bytes transferred = 797488 (c2b30 hex)


    U-Boot 2019.01-g029e4c009a (Oct 19 2019 - 23:14:52 +0000)

    CPU : AM335X-GP rev 2.1
    Model: TI AM335x BeagleBone Black
    DRAM: 512 MiB
    NAND: 0 MiB
    MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
    Loading Environment from FAT... eth0: ethernet@4a100000
    Warning: usb_ether MAC addresses don't match:
    Address in ROM is de:ad:be:ef:00:01
    Address in environment is b0:d5:cc:fd:82:d7
    , eth1: usb_ether
    Hit any key to stop autoboot: 2 1
    U-Boot SPL 2019.01-g029e4c009a (Oct 19 2019 - 23:14:52 +0000)
    Trying to boot from eth device

    Warning: eth_cpsw using MAC address from ROM
    eth0: eth_cpsw
    eth_cpsw Waiting for PHY auto negotiation to complete... done
    link up on port 0, speed 100, full duplex
    BOOTP broadc<ethaddr> not set. Validating first E-fuse MAC
    Net: ###############
    ############################## 0
    switch to partitions #0, OK
    mmc1(part 0) is current device
    Scanning mmc 1:1...
    switch to partitions #0, OK
    mmc1(part 0) is current device
    SD/MMC found on device 1
    ** File not found /boot/zImage **
    ## Error: "bootcmd_nand0" not defined
    starting USB...
    USB0: Port not available.
    link up on port 0, speed 100, full duplex
    BOOTP broadcast 1
    DHCP client bound to address 192.168.2.3 (2 ms)
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'zImage'.
    Load address: 0x82000000
    Loading: *#################################################################
    #################################################################
    #####################################################################################
    ###92.168.2.3
    Filename 'pxelinux.cfg/01-b0-d5-cc-fd-82-d5'.
    Load address: 0x80100000
    Loading: *
    TFTP error: 'File not found' (1)
    Not retrying...
    Retrieving file: pxelinux.cfg/C0A80203
    link up on port 0, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'pxelinux.cfg/C0A80203'.
    Load address: 0x80100000
    Loading: *
    TFTP error: 'File not found' (1)
    Not retrying...
    Retrieving file: pxelinux.cfg/C0A8020
    link up on port 0, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'pxelinux.cfg/C0A8020'.
    Load address: 0xetrying...
    Retrieving file: pxelinux.cfg/C0A802
    0000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'pxelinux.cfg/C0A802'.
    Load address: 0x80100000
    Loading: *
    TFTP error: 'File not found' (1)
    Not retrying...
    Retrieving file: pxelinux.cfg/C0A80
    link up on port 0, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'pxelinux.cfg/C0A80'.
    Load address: 0x80100000
    Loading: *
    TFTP error: 'File not found' (1)
    Not retrying...
    Retrieving file: pxelinux.cfg/C0A8
    link up on port name 'pxelinux.cfg/C0A8'.
    Load address: 0x80100000
    Loading: *
    TFTP error: 'File not found' (1)
    Not retrying...
    Retrieving file: pxelinux.cfg/C0A
    link up on port 0, speed 100, full duplex
    Using ethernet@4a1092.168.2.3
    Filename 'pxelinux.cfg/C0A'.
    Load address: 0x8010ing...
    Retrieving file: pxelinux.cfg/C0
    link up on port 0, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'pxelinux.cfg/C0'.
    Load address: 0x80100000
    Loading: *
    TFTP error: 'File not found' (1)
    Not retrying...
    Retrieving file: pxelinux.cfg/C
    link up on port 0, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'pxelinux.cfg/C'.
    Load address: 0x80100000
    Loading: *
    TFTP error: 'File not found' (1)
    Not retrying...
    Retrieving file: pxelinux.cfg/default-arm-am33xx
    link up on port 0, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 1address: 0x80100000
    Loading: *
    TFTP error: 'File not found' (1)
    Not retrying...
    Retrieving file: pxelinux.cfg/default-arm
    link up on port 0, speed 100, full duplex
    Using ethernet@is 192.168.2.3
    Filename 'pxelinux.cfg/default-arm'.
    Load address: 0x80100000
    Loading: *
    TFTP error: 'File not found' (1)
    Not retrying...
    Retrieving file: pxelinux.cfg/default
    link up on port 0, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'pxelinux.cfg/default'.
    Load address: 0x80100000
    Loading: *
    TFTP error: 'File not found' (1)
    Not retrlink up on port 0, speed 100, full duplex
    BOOTP broadcast 1
    DHCP client bound to address 192.168.2.3 (2 ms)
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'boot.scr.uimg'.
    Load address: 0x80000000
    Loading: *
    TFTP error: 'File not found' (1)
    Not retrying...
    DHCP client bound to address 192.168.2.3 (2 ms)
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'zImage'.
    Load address: 0x82000000
    Loading: *#################################################################
    #######################################################################################
    #################################################################
    ############################
    5.7 MiB/s
    done
    Bytes transferred = 4227584 (408200 hex)
    link up on port 0, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'dtb/am335x-boneblack.dtb'.
    Load address: 0x88000000
    Loading: *
    TFTP error: 'File not found' (1)
    Not retrying...
    libfdt fdt_check_header(): FDT_ERR_BADMAGIC
    7[r[999;999H[6n8Scanning disk mmc@48060000.blk...
    Disk mmc@48060000.blk not ready
    Scanning disk mmc@481d8000.blk...
    Found 3 disks
    ## Starting EFI application at 82000000 ...
    EFI stub: Booting Linux Kernel...
    EFI stub: Using DTB from configuration table
    EFI stub: Exiting boot services and installing virtual address map...
    data abort
    pc : [<9ff68964>] lr : [<9ff68a4d>]
    reloc pc : [<80800964>] lr : [<80800a4d>]
    sp : 9df3a894 ip : 00000000 fp : 00000000
    r10: 9ff68000 r9 : 9df47eb8 r8 : 20028040
    r7 : 00000004 r6 : 00000028 r5 : 9cb280e0 r4 : 9ff68c50
    r3 : 20038ca0 r2 : 00000050 r1 : 9ff68c50 r0 : ffffffff
    Flags: NzCv IRQs off FIQs on Mode SVC_32
    Code: 46216120 f874f000 bd106120 4b36b5f0 (b314681c)
    UEFI image [0x9cb29000:0x9cf32fff] '/dtb\am335x-boneblack.dtb'
    Resetting CPU ...

    resetting ...
    #########################
    5.6 MiB/s
    done
    Bytes transferred = 4227584 (408200 hex)
    missing environment variable: pxeuuid
    Retrieving file: pxelinux.cfg/01-b0-d5-cc-fd-82-d5
    link up on port 0, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 180100000
    Loading: *
    TFTP error: 'File not found' (1)
    Not rlink up on port 0, speed 100, full duplex
    Using ethernet@4a100, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    File0000 device
    TFTP from server 192.168.2.1; our IP address is 10000
    Loading: *
    TFTP error: 'File not found' (1)
    Not retry92.168.2.3
    Filename 'pxelinux.cfg/default-arm-am33xx'.
    Load 4a100000 device
    TFTP from server 192.168.2.1; our IP address ying...
    Config file not found
    starting USB...
    USB0: Port not available.
    link up on port 0, speed 100, full duplex
    BOOTP broadcast 1
    #######################
    ####################

  • Can you interrupt the boot to get to U-Boot prompt, and then issue an "env print" command, and post the entire output here?

    Regards, Andreas

  • How can I do that?  I do see a prompt that says "hit any key to continue boot" but it just continues to boot without hitting any keys?  

    Do I need to install and configure pxelinux?

  • Got it.  The prompt went by so quick I though it said different.  

    Hit any key to stop autoboot: 2 1 0
    => env print
    arch=arm
    args_mmc=run finduuid;setenv bootargs console=${console} ${optargs} root=PARTUUID=${uuid} rw rootfstype=${mmcrootfstype}
    baudrate=115200
    board=am335x
    board_name=A335BNLT
    board_rev=00C0
    board_serial=4016BBBK048E
    boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
    boot_efi_binary=if fdt addr ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr ${fdtcontroladdr};fi;load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootarm.efi; if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi
    boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf}
    boot_fdt=try
    boot_fit=0
    boot_net_usb_start=usb start
    boot_prefixes=/ /boot/
    boot_script_dhcp=boot.scr.uimg
    boot_scripts=boot.scr.uimg boot.scr
    boot_syslinux_conf=extlinux/extlinux.conf
    boot_targets=mmc0 legacy_mmc0 mmc1 legacy_mmc1 nand0 pxe dhcp
    bootcmd=if test ${boot_fit} -eq 1; then run update_to_fit; fi; run findfdt; run init_console; run envboot; run distro_bootcmd
    bootcmd_dhcp=run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi;setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; setenv efi_old_vci ${bootp_vci};setenv efi_old_arch ${bootp_arch};setenv bootp_vci PXEClient:Arch:00010:UNDI:003000;setenv bootp_arch 0xa;if dhcp ${kernel_addr_r}; then tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r}; else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi;fi;setenv bootp_vci ${efi_old_vci};setenv bootp_arch ${efi_old_arch};setenv efi_fdtfile;setenv efi_old_arch;setenv efi_old_vci;
    bootcmd_legacy_mmc0=setenv mmcdev 0; setenv bootpart 0:2 ; run mmcboot
    bootcmd_legacy_mmc1=setenv mmcdev 1; setenv bootpart 1:2 ; run mmcboot
    bootcmd_mmc0=setenv devnum 0; run mmc_boot
    bootcmd_mmc1=setenv devnum 1; run mmc_boot
    bootcmd_nand=run nandboot
    bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi
    bootcount=16
    bootdelay=2
    bootdir=/boot
    bootenvfile=uEnv.txt
    bootfile=zImage
    bootm_size=0x10000000
    bootpart=0:2
    bootscript=echo Running bootscript from mmc${mmcdev} ...; source ${loadaddr}
    console=ttyO0,115200n8
    cpu=armv7
    dfu_alt_info_emmc=rawemmc raw 0 3751936;boot part 1 1;rootfs part 1 2;MLO fat 1 1;MLO.raw raw 0x100 0x200;u-boot.img.raw raw 0x300 0x1000;u-env.raw raw 0x1300 0x200;spl-os-args.raw raw 0x1500 0x200;spl-os-image.raw raw 0x1700 0x6900;spl-os-args fat 1 1;spl-os-image fat 1 1;u-boot.img fat 1 1;uEnv.txt fat 1 1
    dfu_alt_info_mmc=boot part 0 1;rootfs part 0 2;MLO fat 0 1;MLO.raw raw 0x100 0x200;u-boot.img.raw raw 0x300 0x1000;u-env.raw raw 0x1300 0x200;spl-os-args.raw raw 0x1500 0x200;spl-os-image.raw raw 0x1700 0x6900;spl-os-args fat 0 1;spl-os-image fat 0 1;u-boot.img fat 0 1;uEnv.txt fat 0 1
    dfu_alt_info_nand=SPL part 0 1;SPL.backup1 part 0 2;SPL.backup2 part 0 3;SPL.backup3 part 0 4;u-boot part 0 5;u-boot-spl-os part 0 6;kernel part 0 8;rootfs part 0 9
    dfu_alt_info_ram=kernel ram 0x80200000 0x4000000;fdt ram 0x80f80000 0x80000;ramdisk ram 0x81000000 0x4000000
    distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
    efi_dtb_prefixes=/ /dtb/ /dtb/current/
    envboot=mmc dev ${mmcdev}; if mmc rescan; then echo SD/MMC found on device ${mmcdev};if run loadbootscript; then run bootscript;else if run loadbootenv; then echo Loaded env from ${bootenvfile};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;fi;fi;
    eth1addr=b0:d5:cc:fd:82:d7
    ethaddr=b0:d5:cc:fd:82:d5
    fdt_addr_r=0x88000000
    fdtaddr=0x88000000
    fdtcontroladdr=9df3b0d8
    fdtfile=undefined
    findfdt=if test $board_name = A335BONE; then setenv fdtfile am335x-bone.dtb; fi; if test $board_name = A335BNLT; then setenv fdtfile am335x-boneblack.dtb; fi; if test $board_name = A335PBGL; then setenv fdtfile am335x-pocketbeagle.dtb; fi; if test $board_name = BBBW; then setenv fdtfile am335x-boneblack-wireless.dtb; fi; if test $board_name = BBG1; then setenv fdtfile am335x-bonegreen.dtb; fi; if test $board_name = BBGW; then setenv fdtfile am335x-bonegreen-wireless.dtb; fi; if test $board_name = BBBL; then setenv fdtfile am335x-boneblue.dtb; fi; if test $board_name = BBEN; then setenv fdtfile am335x-sancloud-bbe.dtb; fi; if test $board_name = A33515BB; then setenv fdtfile am335x-evm.dtb; fi; if test $board_name = A335X_SK; then setenv fdtfile am335x-evmsk.dtb; fi; if test $board_name = A335_ICE && test $ice_mii = rmii; then setenv fdtfile am335x-icev2.dtb; fi; if test $board_name = A335_ICE && test $ice_mii = mii; then setenv fdtfile am335x-icev2-prueth.dtb; fi; if test $fdtfile = undefined; then echo WARNING: Could not determine device tree to use; fi;
    finduuid=part uuid mmc ${bootpart} uuid
    fit_bootfile=fitImage
    fit_loadaddr=0x90000000
    get_overlaystring=for overlay in $overlay_files;do;setenv overlaystring ${overlaystring}'#'${overlay};done;
    ice_mii=mii
    importbootenv=echo Importing environment from mmc${mmcdev} ...; env import -t ${loadaddr} ${filesize}
    init_console=if test $board_name = A335_ICE; then setenv console ttyO3,115200n8;else setenv console ttyO0,115200n8;fi;
    kernel_addr_r=0x82000000
    load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile}
    loadaddr=0x82000000
    loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenvfile}
    loadbootscript=load mmc ${mmcdev} ${loadaddr} boot.scr
    loadfdt=load ${devtype} ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}
    loadfit=run args_mmc; run run_fit;
    loadimage=load ${devtype} ${bootpart} ${loadaddr} ${bootdir}/${bootfile}
    loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz
    mmc_boot=if mmc dev ${devnum}; then setenv devtype mmc; run scan_dev_for_boot_part; fi
    mmcboot=mmc dev ${mmcdev}; setenv devnum ${mmcdev}; setenv devtype mmc; if mmc rescan; then echo SD/MMC found on device ${mmcdev};if run loadimage; then if test ${boot_fit} -eq 1; then run loadfit; else run mmcloados;fi;fi;fi;
    mmcdev=0
    mmcloados=run args_mmc; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdtaddr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
    mmcrootfstype=ext4 rootwait
    mtdids=nand0=nand.0
    mtdparts=mtdparts=nand.0:128k(NAND.SPL),128k(NAND.SPL.backup1),128k(NAND.SPL.backup2),128k(NAND.SPL.backup3),256k(NAND.u-boot-spl-os),1m(NAND.u-boot),128k(NAND.u-boot-env),128k(NAND.u-boot-env.backup1),8m(NAND.kernel),-(NAND.file-system)
    nandargs=setenv bootargs console=${console} ${optargs} root=${nandroot} rootfstype=${nandrootfstype}
    nandboot=echo Booting from nand ...; run nandargs; nand read ${fdtaddr} NAND.u-boot-spl-os; nand read ${loadaddr} NAND.kernel; bootz ${loadaddr} - ${fdtaddr}
    nandroot=ubi0:rootfs rw ubi.mtd=NAND.file-system,2048
    nandrootfstype=ubifs rootwait=1
    netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=dhcp
    netboot=echo Booting from network ...; setenv autoload no; dhcp; run netloadimage; run netloadfdt; run netargs; bootz ${loadaddr} - ${fdtaddr}
    netloadfdt=tftp ${fdtaddr} ${fdtfile}
    netloadimage=tftp ${loadaddr} ${bootfile}
    nfsopts=nolock
    partitions=uuid_disk=${uuid_gpt_disk};name=bootloader,start=384K,size=1792K,uuid=${uuid_gpt_bootloader};name=rootfs,start=2688K,size=-,uuid=${uuid_gpt_rootfs}
    pxefile_addr_r=0x80100000
    ramargs=setenv bootargs console=${console} ${optargs} root=${ramroot} rootfstype=${ramrootfstype}
    ramboot=echo Booting from ramdisk ...; run ramargs; bootz ${loadaddr} ${rdaddr} ${fdtaddr}
    ramdisk_addr_r=0x88080000
    ramroot=/dev/ram0 rw
    ramrootfstype=ext2
    rdaddr=0x88080000
    rootpath=/export/rootfs
    run_fit=bootm ${fit_loadaddr}#${fdtfile}${overlaystring}
    scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run scan_dev_for_efi;
    scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done
    scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; fi; for prefix in ${efi_dtb_prefixes}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then run load_efi_dtb; fi;done;if test -e ${devtype} ${devnum}:${distro_bootpart} efi/boot/bootarm.efi; then echo Found EFI removable media binary efi/boot/bootarm.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing...; fi; setenv efi_fdtfile
    scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi
    scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done
    scriptaddr=0x80000000
    serial#=4016BBBK048E
    soc=am33xx
    spiargs=setenv bootargs console=${console} ${optargs} root=${spiroot} rootfstype=${spirootfstype}
    spiboot=echo Booting from spi ...; run spiargs; sf probe ${spibusno}:0; sf read ${loadaddr} ${spisrcaddr} ${spiimgsize}; bootz ${loadaddr}
    spibusno=0
    spiimgsize=0x362000
    spiroot=/dev/mtdblock4 rw
    spirootfstype=jffs2
    spisrcaddr=0xe0000
    static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off
    stderr=serial@44e09000
    stdin=serial@44e09000
    stdout=serial@44e09000
    update_to_fit=setenv loadaddr ${fit_loadaddr}; setenv bootfile ${fit_bootfile}
    usb_boot=usb start; if usb dev ${devnum}; then setenv devtype usb; run scan_dev_for_boot_part; fi
    usbnet_devaddr=de:ad:be:ef:00:01
    vendor=ti
    ver=U-Boot 2019.01-g029e4c009a (Oct 19 2019 - 23:14:52 +0000)

    Environment size: 10100/131068 bytes
    =>

  • Any ideas as to what I might be missing or how to configure pxelinux?

  • Hi Erik,

    as far as I can tell PXE boot is not directly supported by our current SDK. You need to use the "legacy network boot" which will directly pull various boot artifacts Kernel, DTB) from the remote server rather than going through a server-side configuration file as PXE does.

    Can you please see this post: https://e2e.ti.com/support/processors/f/791/p/829981/3069891#3069891

    Then, try running the "DHCP boot" at the U-Boot prompt:

    # run bootcmd_dhcp

    If this doesn't work, try invoking the netboot command at U-Boot prompt as follows:

    # run netboot

    If you still have issues I'll see that I can re-create your setup here locally.

    Regards, Andreas

  • Andreas,

    The commands listed above did not work.  But at the U-Boot prompt I entered the command that I saw in your listing (modified) and got much further!  The BeagleBone started to boot, I think.  I got the flashing blue LEDs (which eventually stopped flashing) with the serial debug reporting unable to mount root filesystem.  Log attached below.

    U-Boot SPL 2019.01-g029e4c009a (Oct 19 2019 - 23:14:52 +0000)
    Trying to boot from eth device

    Warning: eth_cpsw using MAC address from ROM
    eth0: eth_cpsw
    eth_cpsw Waiting for PHY auto negotiation to complete... done
    link up on port 0, speed 100, full duplex
    BOOTP broadcast 1
    BOOTP broadcast 2
    BOOTP broadcast 3
    DHCP client bound to address 192.168.2.3 (1257 ms)
    Using eth_cpsw device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'u-boot-restore.img'.
    Load address: 0x82000000
    Loading: *#################################################################
    ###############T ##################################################
    ##########################
    128.9 KiB/s
    done
    Bytes transferred = 797488 (c2b30 hex)


    U-Boot 2019.01-g029e4c009a (Oct 19 2019 - 23:14:52 +0000)

    CPU : AM335X-GP rev 2.1
    Model: TI AM335x BeagleBone Black
    DRAM: 512 MiB
    NAND: 0 MiB
    MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
    Loading Environment from FAT... <ethaddr> not set. Validating first E-fuse MAC
    Net: eth0: ethernet@4a100000
    Warning: usb_ether MAC addresses don't match:
    Address in ROM is de:ad:be:ef:00:01
    Address in environment is b0:d5:cc:fd:82:d7
    , eth1: usb_ether
    Hit any key to stop autoboot: 2 0

    =>env set bootfile zImage && env set rootpath /home/lab/ti-processor-sdk-linux-am335x-evm-06.01.00.08/filesystem/arago-tiny-image-am335x-evm && env set nfsopts nfsvers=3,nolock && run findfdt; run net-boot

    Booting from network ...
    link up on port 0, speed 100, full duplex
    BOOTP broadcast 1
    BOOTP broadcast 2
    BOOTP broadcast 3
    DHCP client bound to address 192.168.2.3 (1007 ms)
    link up on port 0, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'zImage'.
    Load address: 0x82000000
    Loading: *#################################################################
    #################################################################
    #################################################################
    #################################################################
    ############################
    337.9 KiB/s
    done
    Bytes transferred = 4227584 (408200 hex)
    link up on port 0, speed 100, full duplex
    Using ethernet@4a100000 device
    TFTP from server 192.168.2.1; our IP address is 192.168.2.3
    Filename 'am335x-boneblack.dtb'.
    Load address: 0x88000000
    Loading: *###
    1 MiB/s
    done
    Bytes transferred = 36717 (8f6d hex)
    ## Flattened Device Tree blob at 88000000
    Booting using the fdt blob at 0x88000000
    Loading Device Tree to 8fff4000, end 8fffff6c ... OK

    Starting kernel ...

    [ 0.000000] Booting Linux on physical CPU 0x0
    [ 0.000000] Linux version 4.19.59-g5f8c1c6121 (oe-user@oe-host) (gcc version 8.3.0 (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36))) #1 PREEMPT Sat Oct 19 17:17:25 UTC 2019
    [ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
    [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
    [ 0.000000] OF: fdt: Machine model: TI AM335x BeagleBone Black
    [ 0.000000] Memory policy: Data cache writeback
    [ 0.000000] efi: Getting EFI parameters from FDT:
    [ 0.000000] efi: UEFI not found.
    [ 0.000000] cma: Reserved 48 MiB at 0x9d000000
    [ 0.000000] CPU: All CPU(s) started in SVC mode.
    [ 0.000000] AM335X ES2.1 (sgx neon)
    [ 0.000000] random: get_random_bytes called from start_kernel+0xa4/0x434 with crng_init=0
    [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 129920
    [ 0.000000] Kernel command line: console=ttyO0,115200n8 root=/dev/nfs nfsroot=192.168.2.1:/home/lab/ti-processor-sdk-linux-am335x-evm-06.01.00.08/filesystem/arago-tiny-image-am335x-evm,nfsvers=3,nolock rw ip=dhcp
    [ 0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
    [ 0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
    [ 0.000000] Memory: 455952K/524288K available (9216K kernel code, 309K rwdata, 2692K rodata, 1024K init, 253K bss, 19184K reserved, 49152K cma-reserved, 0K highmem)
    [ 0.000000] Virtual kernel memory layout:
    [ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
    [ 0.000000] fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
    [ 0.000000] vmalloc : 0xe0800000 - 0xff800000 ( 496 MB)
    [ 0.000000] lowmem : 0xc0000000 - 0xe0000000 ( 512 MB)
    [ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
    [ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
    [ 0.000000] .text : 0x(ptrval) - 0x(ptrval) (10208 kB)
    [ 0.000000] .init : 0x(ptrval) - 0x(ptrval) (1024 kB)
    [ 0.000000] .data : 0x(ptrval) - 0x(ptrval) ( 310 kB)
    [ 0.000000] .bss : 0x(ptrval) - 0x(ptrval) ( 254 kB)
    [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
    [ 0.000000] rcu: Preemptible hierarchical RCU implementation.
    [ 0.000000] Tasks RCU enabled.
    [ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
    [ 0.000000] IRQ: Found an INTC at 0x(ptrval) (revision 5.0) with 128 interrupts
    [ 0.000000] OMAP clockevent source: timer2 at 24000000 Hz
    [ 0.000016] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
    [ 0.000034] clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
    [ 0.000043] OMAP clocksource: timer1 at 24000000 Hz
    [ 0.000201] timer_probe: no matching timers found
    [ 0.000369] Console: colour dummy device 80x30
    [ 0.000399] WARNING: Your 'console=ttyO0' has been replaced by 'ttyS0'
    [ 0.000405] This ensures that you still see kernel messages. Please
    [ 0.000410] update your kernel commandline.
    [ 0.000459] Calibrating delay loop... 996.14 BogoMIPS (lpj=4980736)
    [ 0.089171] pid_max: default: 32768 minimum: 301
    [ 0.089353] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
    [ 0.089365] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
    [ 0.090119] CPU: Testing write buffer coherency: ok
    [ 0.090182] CPU0: Spectre v2: using BPIALL workaround
    [ 0.090985] Setting up static identity map for 0x80100000 - 0x80100060
    [ 0.091125] rcu: Hierarchical SRCU implementation.
    [ 0.091434] EFI services will not be available.
    [ 0.092679] devtmpfs: initialized
    [ 0.099657] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
    [ 0.100027] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
    [ 0.100050] futex hash table entries: 256 (order: -1, 3072 bytes)
    [ 0.103437] pinctrl core: initialized pinctrl subsystem
    [ 0.104158] DMI not present or invalid.
    [ 0.104574] NET: Registered protocol family 16
    [ 0.106713] DMA: preallocated 256 KiB pool for atomic coherent allocations
    [ 0.125033] l4_wkup_cm:clk:0010:0: failed to disable
    [ 0.177533] cpuidle: using governor ladder
    [ 0.177565] cpuidle: using governor menu
    [ 0.182216] OMAP GPIO hardware version 0.1
    [ 0.190755] No ATAGs?
    [ 0.190772] hw-breakpoint: debug architecture 0x4 unsupported.
    [ 0.203206] edma 49000000.edma: TI EDMA DMA engine driver
    [ 0.206013] SCSI subsystem initialized
    [ 0.206464] media: Linux media interface: v0.10
    [ 0.206505] videodev: Linux video capture interface: v2.00
    [ 0.206594] pps_core: LinuxPPS API ver. 1 registered
    [ 0.206603] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
    [ 0.206623] PTP clock support registered
    [ 0.206654] EDAC MC: Ver: 3.0.0
    [ 0.207778] omap-mailbox 480c8000.mailbox: omap mailbox rev 0x400
    [ 0.208341] Advanced Linux Sound Architecture Driver Initialized.
    [ 0.209612] clocksource: Switched to clocksource timer1
    [ 0.216992] NET: Registered protocol family 2
    [ 0.217774] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes)
    [ 0.217806] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
    [ 0.217845] TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
    [ 0.217883] TCP: Hash tables configured (established 4096 bind 4096)
    [ 0.217984] UDP hash table entries: 256 (order: 0, 4096 bytes)
    [ 0.218002] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
    [ 0.218142] NET: Registered protocol family 1
    [ 0.218698] RPC: Registered named UNIX socket transport module.
    [ 0.218710] RPC: Registered udp transport module.
    [ 0.218716] RPC: Registered tcp transport module.
    [ 0.218722] RPC: Registered tcp NFSv4.1 backchannel transport module.
    [ 0.219840] hw perfevents: enabled with armv7_cortex_a8 PMU driver, 5 counters available
    [ 0.221027] Initialise system trusted keyrings
    [ 0.221395] workingset: timestamp_bits=14 max_order=17 bucket_order=3
    [ 0.225516] squashfs: version 4.0 (2009/01/31) Phillip Lougher
    [ 0.226243] NFS: Registering the id_resolver key type
    [ 0.226283] Key type id_resolver registered
    [ 0.226290] Key type id_legacy registered
    [ 0.226329] ntfs: driver 2.1.32 [Flags: R/O].
    [ 0.228409] Key type asymmetric registered
    [ 0.228425] Asymmetric key parser 'x509' registered
    [ 0.228496] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 245)
    [ 0.228509] io scheduler noop registered
    [ 0.228515] io scheduler deadline registered
    [ 0.228733] io scheduler cfq registered (default)
    [ 0.228743] io scheduler mq-deadline registered
    [ 0.228750] io scheduler kyber registered
    [ 0.230593] pinctrl-single 44e10800.pinmux: 142 pins, size 568
    [ 0.276506] Serial: 8250/16550 driver, 10 ports, IRQ sharing enabled
    [ 0.280306] 44e09000.serial: ttyS0 at MMIO 0x44e09000 (irq = 30, base_baud = 3000000) is a 8250
    [ 0.907639] console [ttyS0] enabled
    [ 0.913254] omap_rng 48310000.rng: Random Number Generator ver. 20
    [ 0.919797] random: fast init done
    [ 0.923426] random: crng init done
    [ 0.939221] brd: module loaded
    [ 0.948591] loop: module loaded
    [ 0.954207] libphy: Fixed MDIO Bus: probed
    [ 1.029692] davinci_mdio 4a101000.mdio: davinci mdio revision 1.6, bus freq 1000000
    [ 1.037394] davinci_mdio 4a101000.mdio: detected phy mask fffffffe
    [ 1.044704] libphy: 4a101000.mdio: probed
    [ 1.048747] davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, driver SMSC LAN8710/LAN8720
    [ 1.058831] cpsw 4a100000.ethernet: Detected MACID = b0:d5:cc:fd:82:d5
    [ 1.065617] cpsw 4a100000.ethernet: initialized cpsw ale version 1.4
    [ 1.072085] cpsw 4a100000.ethernet: ALE Table size 1024
    [ 1.077364] cpsw 4a100000.ethernet: cpts: overflow check period 500 (jiffies)
    [ 1.085874] i2c /dev entries driver
    [ 1.091325] cpuidle: enable-method property 'ti,am3352' found operations
    [ 1.098431] sdhci: Secure Digital Host Controller Interface driver
    [ 1.104765] sdhci: Copyright(c) Pierre Ossman
    [ 1.109907] omap_gpio 44e07000.gpio: Could not set line 6 debounce to 200000 microseconds (-22)
    [ 1.118647] omap_hsmmc 48060000.mmc: Got CD GPIO
    [ 1.123808] omap_hsmmc 48060000.mmc: Linked as a consumer to regulator.1
    [ 1.157360] omap_hsmmc 481d8000.mmc: Linked as a consumer to regulator.1
    [ 1.189886] sdhci-pltfm: SDHCI platform and OF driver helper
    [ 1.197174] ledtrig-cpu: registered to indicate activity on CPUs
    [ 1.208515] NET: Registered protocol family 10
    [ 1.214599] Segment Routing with IPv6
    [ 1.218508] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
    [ 1.225261] NET: Registered protocol family 17
    [ 1.230179] Key type dns_resolver registered
    [ 1.234729] omap_voltage_late_init: Voltage driver support not added
    [ 1.242078] Loading compiled-in X.509 certificates
    [ 1.278549] mmc1: new high speed MMC card at address 0001
    [ 1.285278] mmcblk1: mmc1:0001 S10004 3.56 GiB
    [ 1.291649] mmcblk1boot0: mmc1:0001 S10004 partition 1 4.00 MiB
    [ 1.298776] mmcblk1boot1: mmc1:0001 S10004 partition 2 4.00 MiB
    [ 1.305142] mmcblk1rpmb: mmc1:0001 S10004 partition 3 4.00 MiB, chardev (244:0)
    [ 1.315131] mmcblk1: p1 p2
    [ 1.322713] tps65217 0-0024: TPS65217 ID 0xe version 1.2
    [ 1.471882] tda998x 0-0070: found TDA19988
    [ 1.478738] tilcdc 4830e000.lcdc: bound 0-0070 (ops tda998x_ops)
    [ 1.484864] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
    [ 1.491521] [drm] No driver support for vblank timestamp query.
    [ 1.497794] [drm] Cannot find any crtc or sizes
    [ 1.502982] [drm] Initialized tilcdc 1.0.0 20121205 for 4830e000.lcdc on minor 0
    [ 1.510615] omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz
    [ 1.518043] omap_i2c 4819c000.i2c: bus 2 rev0.11 at 100 kHz
    [ 1.524353] cpu cpu0: Linked as a consumer to regulator.3
    [ 1.529911] cpu cpu0: Dropping the link to regulator.3
    [ 1.535413] cpu cpu0: Linked as a consumer to regulator.3
    [ 1.542119] hctosys: unable to open rtc device (rtc0)
    [ 1.560927] net eth0: initializing cpsw version 1.12 (0)
    [ 1.660724] SMSC LAN8710/LAN8720 4a101000.mdio:00: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=4a101000.mdio:00, irq=POLL)
    [ 1.678935] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
    [ 2.560243] [drm] Cannot find any crtc or sizes
    [ 4.800730] cpsw 4a100000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
    [ 4.829683] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
    [ 4.859791] Sending DHCP requests ., OK
    [ 4.903695] IP-Config: Got DHCP answer from 192.168.2.1, my address is 192.168.2.3
    [ 4.911855] IP-Config: Complete:
    [ 4.915249] device=eth0, hwaddr=b0:d5:cc:fd:82:d5, ipaddr=192.168.2.3, mask=255.255.255.0, gw=255.255.255.255
    [ 4.925931] host=192.168.2.3, domain=, nis-domain=(none)
    [ 4.931880] bootserver=192.168.2.1, rootserver=192.168.2.1, rootpath=
    [ 4.931896] nameserver0=192.168.2.1
    [ 4.944441] ALSA device list:
    [ 4.947436] No soundcards found.
    [ 100.967238] VFS: Unable to mount root fs via NFS, trying floppy.
    [ 100.974614] VFS: Cannot open root device "nfs" or unknown-block(2,0): error -6
    [ 100.982075] Please append a correct "root=" boot option; here are the available partitions:
    [ 100.991230] 0100 65536 ram0
    [ 100.991404] (driver?)
    [ 100.997739] 0101 65536 ram1
    [ 100.997751] (driver?)
    [ 101.004313] 0102 65536 ram2
    [ 101.004429] (driver?)
    [ 101.010788] 0103 65536 ram3
    [ 101.010950] (driver?)
    [ 101.017227] 0104 65536 ram4
    [ 101.017337] (driver?)
    [ 101.023701] 0105 65536 ram5
    [ 101.023816] (driver?)
    [ 101.030276] 0106 65536 ram6
    [ 101.030280] (driver?)
    [ 101.036407] 0107 65536 ram7
    [ 101.036410] (driver?)
    [ 101.042593] 0108 65536 ram8
    [ 101.042596] (driver?)
    [ 101.048722] 0109 65536 ram9
    [ 101.048725] (driver?)
    [ 101.054866] 010a 65536 ram10
    [ 101.054870] (driver?)
    [ 101.061112] 010b 65536 ram11
    [ 101.061115] (driver?)
    [ 101.067328] 010c 65536 ram12
    [ 101.067331] (driver?)
    [ 101.073557] 010d 65536 ram13
    [ 101.073560] (driver?)
    [ 101.079783] 010e 65536 ram14
    [ 101.079787] (driver?)
    [ 101.085998] 010f 65536 ram15
    [ 101.086001] (driver?)
    [ 101.092248] b300 3735552 mmcblk1
    [ 101.092253] driver: mmcblk
    [ 101.099078] b301 98304 mmcblk1p1 00000000-01
    [ 101.099081]
    [ 101.105918] b302 3636224 mmcblk1p2 00000000-02
    [ 101.105921]
    [ 101.112776] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
    [ 101.121085] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0) ]---

    A few questions:

    1. I have no idea where pxelinux came from.  I did not set that up nor do I understand why it was called. How can I prevent that from being called in the future?  There must be a configuration file still screwed up somewhere.

    2. In what file can I add the 'set env' command that I entered at the U-Boot prompt?

    3. How do I continue to mount the root fs?

    I'm almost there.  And I sincerely thank you for all your help thus far.  You've been a real trooper!  Just a few more missing pieces to this puzzle.

    Erik

  • Erik,

    Erik Dragos said:
    1. I have no idea where pxelinux came from.  I did not set that up nor do I understand why it was called. How can I prevent that from being called in the future?  There must be a configuration file still screwed up somewhere.

    This comes from the default list of boot targets (env print boot_targets) declared the AM335x-specific configuration header file include/configs/am335x_evm.h through the BOOT_TARGET_DEVICES definition.

    Erik Dragos said:
    2. In what file can I add the 'set env' command that I entered at the U-Boot prompt?

    If you want to to make the simplified network boot the default you need to update aforementioned include/configs/am335x_evm.h header file in a manner similar like this:

    diff --git a/include/configs/am335x_evm.h b/include/configs/am335x_evm.h
    index def39d2fc3..f76890672f 100644
    --- a/include/configs/am335x_evm.h
    +++ b/include/configs/am335x_evm.h
    @@ -84,14 +84,20 @@
      # define BOOT_TARGET_DHCP(func)
      #endif
    
    +#define BOOTENV_DEV_NET(devtypeu, devtypel, instance) \
    +       "bootcmd_" #devtypel "=" \
    +       "run netboot\0"
    +
    +#define BOOTENV_DEV_NAME_NET(devtypeu, devtypel, instance) \
    +       #devtypel " "
    +
      #define BOOT_TARGET_DEVICES(func) \
             func(MMC, mmc, 0) \
             func(LEGACY_MMC, legacy_mmc, 0) \
             func(MMC, mmc, 1) \
             func(LEGACY_MMC, legacy_mmc, 1) \
             func(NAND, nand, 0) \
    -       BOOT_TARGET_PXE(func) \
    -       BOOT_TARGET_DHCP(func)
    +       func(NET, net, na)
    
      #include <config_distro_bootcmd.h>
    

    You can add additional commands to be executed by inserting them into the line that says "run netboot\0" in a manner like this: "command1; command2; run netboot\0".

    Erik Dragos said:
    3. How do I continue to mount the root fs?

    Your Kernel can't find the NFS-exported rootfs at the given path that you specified (/home/lab/ti-processor-sdk-linux-am335x-evm-06.01.00.08/filesystem/arago-tiny-image-am335x-evm). You should double-check that your NFS server is running, which should look something like this...

    a0797059@jiji:~/git/u-boot (ti-u-boot-2020.01)
    $ sudo service nfs-kernel-server status
    [sudo] password for a0797059:
    ● nfs-server.service - NFS server and services
       Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
       Active: active (exited) since Fri 2020-03-13 10:55:51 CDT; 3 weeks 3 days ago
     Main PID: 1105 (code=exited, status=0/SUCCESS)
        Tasks: 0 (limit: 4915)
       CGroup: /system.slice/nfs-server.service
    
    Mar 13 10:55:51 jiji systemd[1]: Starting NFS server and services...
    Mar 13 10:55:51 jiji systemd[1]: Started NFS server and services.

    Then check that your specific folder is "exported" correctly via /etc/exports, like this (ignore my path names obviously, it needs to march what your machine is setup for):

    $ cat /etc/exports
    # /etc/exports: the access control list for filesystems which may be exported
    #               to NFS clients.  See exports(5).
    #
    # Example for NFSv2 and NFSv3:
    # /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
    #
    # Example for NFSv4:
    # /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
    # /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
    #
    /home/a0797059/rootfs/tisdk-rootfs-image-am65xx-evm-20191224041724 *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
    /home/a0797059/rootfs/tisdk-rootfs-image-am65xx-evm-20200111021842 *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
    /opt/procsdk-linux-am57xx-evm-06.02.00.81/targetNFS *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
    /opt/procsdk-linux-am437x-evm-06.01.00.08/targetNFS *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
    /opt/procsdk-linux-am65xx-evm-06.01.00.08/targetNFS *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

    All this is usually setup and taken care of by the SDK setup/installer scripts.

    Regards, Andreas

  • Thanks for the info Andreas.  As I mentioned earlier the main setup.sh installer script will not run on Ubuntu 19.10.  I ran the individual setup scripts located in the /bin directory.  Obviously something was not setup correctly do this.  Do I need to rebuild the u-boot images after running the scripts?  I simply copied the u-boot files that were already in the pre-built images directory to my tftpboot directory.  I think this would have gone a lot smoother had the SDK supported Ubuntu 19.10.

  • Hi Erik,

    Erik Dragos said:
    As I mentioned earlier the main setup.sh installer script will not run on Ubuntu 19.10.

    It is not expected to work, as the SDK requires Ubuntu 18.04. Usually we target current Ubuntu LTS releases with our SDKs to keep effort/testing to a reasonable level, as most/all other vendors do too. So ideally yes you'd need to setup a machine with that, or use a VM inside your machine. Still, it would not have been completely seamless as what you are doing is not directly supported by the SDK (network boot all the way without any physical boot media) so some tweaks are needed.

    Erik Dragos said:
    Do I need to rebuild the u-boot images after running the scripts?

    You need to re-build U-Boot after making the changes to the header file I outlined, and then populate that updated SPL/MLO and U-Boot into your TFTP server directory.

    Regards, Andreas

  • Andreas,

    I reinstalled Ubuntu 18.04 and reinstalled the SDK.  The setup script now seems to install everything but I still have the same issues.  Before I rebuild the uboot images I want to revisit the NFS server.  The NFS server is running.  The boot process still hangs on the loading of arago-tiny-image-am335x-evm.  It still can't find this file and neither can I.  This closest I see is in the "filesystem" directory off the ti-processor-sdk main directory with a filename arago-tiny-image-am335x-evm.ubi. My exports file:

    # /etc/exports: the access control list for filesystems which may be exported
    # to NFS clients. See exports(5).
    #
    # Example for NFSv2 and NFSv3:
    # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
    #
    # Example for NFSv4:
    # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
    # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
    #
    /opt/ti-processor-sdk-linux-am335x-evm-06.01.00.08/targetNFS *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

    This is all that is there.  Should there be a arago-tiny-image-am335x-evm directory in targetNFS?  Where can I find arago-tiny-image-am335x-evm?

  • Hi Erik,

    Erik Dragos said:
    /opt/ti-processor-sdk-linux-am335x-evm-06.01.00.08/targetNFS *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

    Looks like you did the installation of the host side correctly, as it added the appropriate export. For reference below is when I did it, and you see the same export getting added to the end of my 'exports' file...  You can also see the contents of the exported rootfs.

    adannenb@beast:/opt/ti-processor-sdk-linux-am335x-evm-06.01.00.08
    $ sudo bin/setup-targetfs-nfs.sh 
    [sudo] password for adannenb: 
    --------------------------------------------------------------------------------
    In which directory do you want to install the target filesystem?(if this directory does not exist it will be created)
    [ /opt/ti-processor-sdk-linux-am335x-evm-06.01.00.08/targetNFS ] 
    --------------------------------------------------------------------------------
    
    --------------------------------------------------------------------------------
    This step will extract the target filesystem to /opt/ti-processor-sdk-linux-am335x-evm-06.01.00.08/targetNFS
    
    Note! This command requires you to have administrator priviliges (sudo access) 
    on your host.
    Press return to continue
    
    Multiple filesystems found.
            1:tisdk-rootfs-image-am335x-evm.tar.xz
            2:tisdk-docker-rootfs-image-am335x-evm.tar.xz
    
    Enter Number of rootfs Tarball: [1] 
    
    
    Successfully extracted tisdk-rootfs-image-am335x-evm.tar.xz to /opt/ti-processor-sdk-linux-am335x-evm-06.01.00.08/targetNFS
    --------------------------------------------------------------------------------
    
    --------------------------------------------------------------------------------
    This step will set up the SDK to install binaries in to:
        /opt/ti-processor-sdk-linux-am335x-evm-06.01.00.08/targetNFS/home/root/am335x-evm
    
    The files will be available from /home/root/am335x-evm on the target.
    
    This setting can be changed later by editing Rules.make and changing the
    EXEC_DIR or DESTDIR variable (depending on your SDK).
    
    Press return to continue
    Rules.make edited successfully..
    --------------------------------------------------------------------------------
    
    --------------------------------------------------------------------------------
    This step will export your target filesystem for NFS access.
    
    Note! This command requires you to have administrator priviliges (sudo access) 
    on your host.
    Press return to continue
    
    [ ok ] Stopping nfs-kernel-server (via systemctl): nfs-kernel-server.service.
    [ ok ] Starting nfs-kernel-server (via systemctl): nfs-kernel-server.service.
    --------------------------------------------------------------------------------
    adannenb@beast:/opt/ti-processor-sdk-linux-am335x-evm-06.01.00.08
    $ cat /etc/exports
    # /etc/exports: the access control list for filesystems which may be exported
    #		to NFS clients.  See exports(5).
    #
    # Example for NFSv2 and NFSv3:
    # /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
    #
    # Example for NFSv4:
    # /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
    # /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
    #
    
    /opt/ti-processor-sdk-linux-am335x-evm-06.00.00.07/nfs/arago-tiny-image-am335x-evm *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
    /opt/ti-processor-sdk-linux-am335x-evm-06.00.00.07/targetNFS *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
    /opt/ti-processor-sdk-linux-am57xx-evm-06.02.00.81/targetNFS *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
    /opt/ti-processor-sdk-linux-am65xx-evm-06.00.00.07/targetNFS *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
    /opt/ti-processor-sdk-linux-am335x-evm-06.01.00.08/targetNFS *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
    adannenb@beast:/opt/ti-processor-sdk-linux-am335x-evm-06.01.00.08
    $ ll targetNFS/
    total 84
    drwxr-xr-x 21 root     root     4096 Oct 19 21:19 ./
    drwxr-xr-x  9 adannenb adannenb 4096 Apr  9 10:07 ../
    drwxr-xr-x  2 root     root     4096 Oct 19 21:20 bin/
    drwxr-xr-x  2 root     root     4096 Oct 19 21:13 boot/
    drwxr-xr-x  2 root     root     4096 Oct 19 15:17 dev/
    drwxr-xr-x 57 root     root     4096 Oct 19 21:21 etc/
    drwxr-xr-x  3 root     root     4096 Oct 19 15:17 home/
    drwxr-xr-x  2 root     root     4096 Oct 19 15:17 include/
    drwxr-xr-x  9 root     root     4096 Oct 19 21:17 lib/
    lrwxrwxrwx  1 root     root       19 Oct 19 21:19 linuxrc -> /bin/busybox.nosuid
    drwxr-xr-x  2 root     root     4096 Oct 19 15:17 media/
    drwxr-xr-x  3 root     root     4096 Oct 19 21:14 mnt/
    drwxr-xr-x  5 root     root     4096 Oct 19 21:15 opt/
    dr-xr-xr-x  2 root     root     4096 Oct 19 15:17 proc/
    drwxr-xr-x  2 root     root     4096 Oct 19 21:21 run/
    drwxr-xr-x  2 root     root     4096 Oct 19 21:20 sbin/
    drwxr-xr-x  3 root     root     4096 Oct 19 17:46 srv/
    dr-xr-xr-x  2 root     root     4096 Oct 19 15:17 sys/
    drwxrwxrwt  2 root     root     4096 Oct 19 15:17 tmp/
    drwxr-xr-x 11 root     root     4096 Oct 19 21:14 usr/
    drwxr-xr-x  9 root     root     4096 Oct 19 21:15 var/
    drwxr-xr-x  3 root     root     4096 Oct 19 19:17 www/
    
    

    Erik Dragos said:
    This is all that is there.  Should there be a arago-tiny-image-am335x-evm directory in targetNFS?  Where can I find arago-tiny-image-am335x-evm?

    You don't need any arago tiny image. Just make sure to set the 'rootpath' ENV variable in U-Boot to match your export as setup by the SDK in /etc/exports, like shown below, as used as part of your command sequence:

    env set rootpath '/opt/ti-processor-sdk-linux-am335x-evm-06.01.00.08/targetNFS'

    Regards, Andreas

  • Andreas,

    Success!!  That was the missing piece.  Trying to piece together information from various posts got too confusing.  My beaglebone black is has now completely booted from the network.  Now on to rebuilding uboot so that I don't have to stop at the uboot prompt to change the environment.  Thank you so much for your help and patience!!  I may have uboot build questions so I'll leave this open for now.

  • Andreas,

    I attempted to rebuild u-boot but lost my network boot with these new files.  I used am335x_evm_defconfig while compiling.  The SDK uboot build instructions only lists this file for the beaglebone black but interesting does not list this file to use for network boot as defined here:

    software-dl.ti.com/.../Foundational_Components_U-Boot.html

    I then copied and renamed these files to my /tftpboot directory

    MLO > MLO

    u-boot.bin > u-boot-spl-restore.bin

    u-boot.img > u-boot-restore.img

    I wanted to test these rebuilt files first to make sure I can still boot using the u-boot prompt command before I modified the am335x_evm.h file as you suggested.  Before I make those modifications I just wanted to confirm what I have done with rebuilding u-boot. Is this outcome expected or should I have modified a file to get back where I was?

    Erik

  • Andreas,

    I made the modifications that you suggested to the am335x_evm.h file and rebuilt the u-boot files.  I am now back to network boot, however I still have to stop at the uboot prompt to issue the following command.

    env set rootpath /opt/ti-processor.../targetnfs && env set nfsopts nfsvers=3,nolock && run findfdt; run netboot

    to completely boot.  In what file is the filesystem rootpath set?  and where can I add the nfs options listed above?  I would like to get nonstop network boot.  What additional files need to be changed?

  • Hi Erik,

    Erik Dragos said:
     I used am335x_evm_defconfig while compiling.  The SDK uboot build instructions only lists this file for the beaglebone black but interesting does not list this file to use for network boo

    am335x_evm_defconfig is the right defconfig to use for BBB network boot. Documentation might have gotten slightly out of sync with that.

    Erik Dragos said:

    I then copied and renamed these files to my /tftpboot directory

    MLO > MLO

    u-boot.bin > u-boot-spl-restore.bin

    u-boot.img > u-boot-restore.img

    For U-Boot on AM335x doing network boot you need to grab the below two files from the U-Boot build, see http://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/Foundational_Components_U-Boot.html#booting-u-boot-from-the-network. MLO is NOT a file you need in this case, that is used for SD media based boot. And those names need to match whatever is in your DHCP configuration so you need to copy/rename them or update the DHCP configuration as needed, your choice.

    • u-boot-spl.bin (inside the 'spl' folder)
    • u-boot.img

    Regards, Andreas

  • Andreas,

    Thanks, I figured out my error with moving u-boot files.  Is there a way to boot completely without breaking into the u-boot prompt?  Why do I have to enter this command at the u-boot prompt?

    env set rootpath /opt/ti-processor.../targetnfs && env set nfsopts nfsvers=3,nolock && run findfdt; run netboot

  • Erik Dragos said:

    Thanks, I figured out my error with moving u-boot files.  Is there a way to boot completely without breaking into the u-boot prompt?  Why do I have to enter this command at the u-boot prompt?

    env set rootpath /opt/ti-processor.../targetnfs && env set nfsopts nfsvers=3,nolock && run findfdt; run netboot

    You either need to save your environment (after you made that addition via 'env set' you mentioned) somewhere where U-Boot can retrieve it later (such as into the eMMC, but for this you need to update as shown here https://e2e.ti.com/support/processors/f/791/p/892695/3303578#3303578), or change/hard-code that change to 'rootpath' you made directly into the U-Boot env by way of updating the board-specific configuration header file (as pointed to earlier, see https://e2e.ti.com/support/processors/f/791/p/892324/3308107#3308107).

    Regards, Andreas

  • Ah! I overlooked your comment about adding commands.  I did that and rebuilt uboot.  I now have a complete boot from the network.  Thank you so much for your help!  And patience.

    Best regards,

    Erik

  • Hi Erik,

    Erik Dragos said:
    I'd like to run a java application.  I copied the java run files to a directory in the targetNFS file system.  I can see this java directory in my serial debug window after logging in but when I try to execute java in the /bin/java executable directory I get a "command not found" error.

    Can you please create a new E2E thread for this using an appropriate $SUBJECT line, as this is a completely different topic now. I tried splitting this thread but the system reported an error so I don't think it went through so I need you to do it on your end. Keeping posts centered around a specific concern helps building a good database of questions & answers.

    Regards, Andreas