Installing linux to eMMC w/o sdcard

I am working on a custom AM3352 based board and would like to know the best way to get linux (Ubuntu) onto the eMMC of the board. I have a serial port and a network interface. I went through https://www.digikey.com/eewiki/display/linuxonarm/BeagleBone+Black#BeagleBoneBlack-LinuxKernel and created an sd card image. I would like to mirror this on the eMMC device, but not sure the best way. Anyone have any suggestions?

Thanks

Rich

Hi @rwlroc, does your board have either an microSD or USB interface? With those two interface’s there are a few known ways to do this.

It can be done over the uart but has not really been well documented by the community.

Regards,

nope. Just serial and ethernet

I have u-boot running and I can tftp files to memory if that helps.

Awesome, if you can get into U-Boot, there is a lot that can be done.

How much RAM does your system have? As recent version’s of u-boot can write “dd” image to the media… But it has to fit in your memory…

mmc write ${loadaddr} 0x0

If your short on ram, i’d now look at booting into a custom “buildroot” image, something with just the minimal file system and network tools. (wget/mkfs.ext4/etc…) So while in the buildroot shell you can partition, format and create the final eMMC file system.

Regards,

I have 256MB. While this may get one board up and running, I have to figure out how to do this in production.

That’s going to be fun to deal with. :wink:

Using BuildRoot, i’d create an base Root File System that you will tfpd’ed over and that image would partition, format and copy the RootFile System over.

Regards,

I will take a look at that. I used to use diskless workstations long ago. Is there a way to NFS mount the file system after booting the kernel? Thanks for the help.

I added NFS client support to the kernel, so I am going to try mounting the rootfs over NFS. Hopefully, everything will fit. This should facilitate creating a production environment as I think I can automate the process.

Well I have hit a brick wall. I am not getting any output after “Starting kernel …”

  1. CPU is AM3352 with UART0 accessible. Ethernet, and 256MB DRAM
  2. I have built the Linux kernel
  3. I have my dtb file from my u-boot build (got the console out working)
  4. I boot my board manually over serial loading u-boot.
  5. Once at the U-Boot# prompt I issue:

tftpboot ${loadaddr} ${serverip}:${bootfile}

then

tftpboot ${fdtaddr} ${serverip}:${fdtfile}

followed by

tftpboot ${loadaddr} - ${fdtaddr}

Output is

## Flattended Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Loading Device Tree to 8df59000, end 8df63484

Starting kernel …

I have tried both console env settings of

console=ttyS0,115200n8
console=ttyO0,115200n8

I messed around with the kernel .config file in the area of debug output (see below). There was not any setting that would lead me to believe that UART0 is being used. The base address is set to CONFIG_DEBUG_UART_PHYS=0x44e09000, which I believe is UART0.

#
# arm Debugging
#
# CONFIG_ARM_PTDUMP_DEBUGFS is not set
CONFIG_UNWINDER_ARM=y
CONFIG_ARM_UNWIND=y
# CONFIG_DEBUG_USER is not set
CONFIG_DEBUG_LL=y
CONFIG_DEBUG_OMAP2UART1=y
# CONFIG_DEBUG_OMAP2UART2 is not set
# CONFIG_DEBUG_OMAP2UART3 is not set
# CONFIG_DEBUG_OMAP3UART3 is not set
# CONFIG_DEBUG_OMAP4UART3 is not set
# CONFIG_DEBUG_OMAP3UART4 is not set
# CONFIG_DEBUG_OMAP4UART4 is not set
# CONFIG_DEBUG_TI81XXUART1 is not set
# CONFIG_DEBUG_TI81XXUART2 is not set
# CONFIG_DEBUG_TI81XXUART3 is not set
# CONFIG_DEBUG_AM33XXUART1 is not set
# CONFIG_DEBUG_ZOOM_UART is not set
# CONFIG_DEBUG_ICEDCC is not set
# CONFIG_DEBUG_SEMIHOSTING is not set
# CONFIG_DEBUG_LL_UART_8250 is not set
# CONFIG_DEBUG_LL_UART_PL01X is not set
CONFIG_DEBUG_LL_INCLUDE=“debug/8250.S”
CONFIG_DEBUG_UART_8250=y
CONFIG_DEBUG_UART_PHYS=0x44e09000
CONFIG_DEBUG_UART_VIRT=0xfa06a000
CONFIG_DEBUG_UART_8250_SHIFT=2
CONFIG_DEBUG_UART_8250_WORD=y
# CONFIG_DEBUG_UART_8250_PALMCHIP is not set
# CONFIG_DEBUG_UART_8250_FLOW_CONTROL is not set
# CONFIG_DEBUG_UNCOMPRESS is not set
CONFIG_UNCOMPRESS_INCLUDE=“debug/uncompress.h”
CONFIG_EARLY_PRINTK=y
# CONFIG_ARM_KPROBES_TEST is not set
# CONFIG_PID_IN_CONTEXTIDR is not set
# CONFIG_CORESIGHT is not set
# end of arm Debugging

So I am stuck trying to get any serial output while the kernel is booting. Once I get something, I can move ahead with trying to boot the kernel and NFS mount the root partition.

OMT, the image that I am loading is ‘5.8.0-rc4-bone4.zImage’.

Thanks in advance for any help.

Rich

We usually have SERIAL_8250_OMAP_TTYO_FIXUP enabled so it’ll force ttyS*
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/tty/serial/8250/Kconfig#n414

But add “earlyprintk” to the bootargs’…

Close, you want

CONFIG_DEBUG_LL=y
CONFIG_DEBUG_AM33XXUART1=y
CONFIG_DEBUG_OMAP2PLUS_UART=y
CONFIG_EARLY_PRINTK=y

Regards,

Okay. I didn’t have the following two, but I had the others.
CONFIG_DEBUG_AM33XXUART1=y
CONFIG_DEBUG_OMAP2PLUS_UART=y

dumb question… where do I modify the bootargs (is it in the Boot options during Kernel Configuration)? If so, I don’t have any options.

Thanks again.

This still did not work. This is the what I have set for boot args when running Kernel Configuration:

CONFIG_CMDLINE=“earlyprintk=ttyS0,115200 console=ttyS0,115200”

Is there a different way the boot args are passed when I launch from u-boot via

U-Boot# bootz ${loadaddr} - ${fdtaddr}

PS: for what it is worth, here is the u-boot printenv output:

U-Boot# printenv
addr_fit=0x90000000
arch=arm
args_mmc=run finduuid;setenv bootargs console=${console} ${optargs} root=PARTUUID=${uuid} rw rootfstype=${mmcrootfstype}
baudrate=115200
board=epn11291
board_name=EPN11291
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_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 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=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 devtype mmc; setenv mmcdev 0; setenv bootpart 0:1 ; run boot
bootcmd_legacy_mmc1=setenv devtype mmc; setenv mmcdev 1; setenv bootpart 1:1 ; run boot
bootcmd_mmc0=devnum=0; run mmc_boot
bootcmd_mmc1=devnum=1; run mmc_boot
bootcmd_pxe=dhcp; if pxe get; then pxe boot; fi
bootcount=1
bootdelay=60
bootdir=/boot
bootenvfile=uEnv.txt
bootfile=5.8.0-rc4-bone4.zImage
bootm_size=0x10000000
bootpart=1:2
bootscript=echo Running bootscript from mmc${mmcdev} …; source ${loadaddr}
console=ttyS0,115200n8
cpu=armv7
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
dtboaddr=0x89000000
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;
ethaddr=f4:e1:1e:a9:c0:b4
fdt_addr_r=0x88000000
fdtaddr=0x88000000
fdtcontroladdr=8df64a10
fdtfile=epn11291.dtb
findfdt= setenv fdtfile epn11291.dtb;init_console = setenv console ttyS0,115200n8;static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off
finduuid=part uuid mmc ${bootpart} uuid
get_overlaystring=for overlay in $name_overlays;do;setenv overlaystring ${overlaystring}’#’${overlay};done;
if_netconsole=ping $serverip
importbootenv=echo Importing environment from mmc${mmcdev} …; env import -t ${loadaddr} ${filesize}
ipaddr=192.168.1.136
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}
loadimage=load ${devtype} ${bootpart} ${loadaddr} ${bootdir}/${bootfile}
loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz
mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi
mmcboot=mmc dev ${mmcdev}; devnum=${mmcdev}; setenv devtype mmc; if mmc rescan; then echo SD/MMC found on device ${mmcdev};if run loadimage; then run args_mmc; if test ${boot_fit} -eq 1; then run run_fit; else run mmcloados;fi;fi;fi;
mmcdev=0
mmcloados=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
name_fit=fitImage
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}
pb_eeprom_hdr=mw 82001000 ee3355aa; mw 82001004 35333341; mw 82001008 4c474250
preboot=run if_netconsole start_netconsole
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 ${addr_fit}#${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; setenv devplist
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#=f4:e1:1e:a9:c0:b4
serverip=192.168.1.123
soc=am33xx
start_netconsole=setenv ncip $serverip; setenv bootdelay 10; setenv stdin serial,nc; setenv stdout serial,nc; setenv stderr serial,nc; version
stderr=serial@44e09000
stdin=serial@44e09000
stdout=serial@44e09000
update_to_fit=setenv loadaddr ${addr_fit}; setenv bootfile ${name_fit}
vendor=flightcircuits
ver=U-Boot 2020.07-rc4-FlightCircuits-EPN11291+ (Jul 15 2020 - 21:39:00 -0400)

Environment size: 7245/131068 bytes
U-Boot#

earlyprintk has no options…

for bootargs, just set it right before you run bootz:

setenv bootargs console=ttyS0,115200n8 earlyprintk
bootz ${loadaddr} - ${fdtaddr}

Regards,

Thanks. I implemented these changes, but I am moving to booting u-boot-spl.bin from the boot loader via BOOTP, because for production, that is how it has to be as there is no other interface on the board I am working with.

I have been scratching my head all day on these error messages. I have tried following the code to see what it is looking for. I even added the define:

#define CONFIG_SPL_ETH_DEVICE "cpsw_emac0"

This did not appear to have any effect.

After the TFTP transfer of the u-boot-spl.bin file, the following is displayed on the serial port:

U-Boot SPL ...+ (Jul 22 2020 - 16:56:32 -0400)
WDT:   Not found!
Trying to boot from eth device
error: phy addr not found in dt
Syscon offset not found
cpsw read efuse mac failed
No ethernet found.

No Ethernet devices found
SPL: failed to boot from all boot devices
### ERROR ### Please RESET the board ###

I can’t seem to get tftp working from the u-boot-spl.bin image that is loading to SRAM. Any thoughts as to what is missing?

This porting process is so incredibly slow.

Additional information… I enabled debugging by adding

#define DEBUG
in
include/configs/ti_am335x_common.h

Not too much more information revealed that I can see.

U-Boot SPL 2020.07-rc4-FlightCircuits-EPN11291+ (Jul 22 2020 - 19:18:45 -0400)
0 0
size=x, ptr=18, limit=40: 81f00028

  • not found
    1 0
  • not found
    WDT: Not found by seq!
    WDT: Not found!
    spl_boot_device = 0x
    Trying to boot from eth device
    env_driver_lookup: No environment driver for location 2
    Using default environment
    size=x, ptr=f5, limit=135: 81f00040
    size=x, ptr=620, limit=758: 81f00138
    size=x, ptr=8, limit=760: 81f00758
    size=x, ptr=76, limit=7d6: 81f00760
    size=x, ptr=e, limit=7e6: 81f007d8
    size=x, ptr=9, limit=7f1: 81f007e8
    size=x, ptr=c, limit=800: 81f007f4
    size=x, ptr=a, limit=80a: 81f00800
    size=x, ptr=b, limit=817: 81f0080c
    size=x, ptr=8, limit=820: 81f00818
    size=x, ptr=7, limit=827: 81f00820
    size=x, ptr=8, limit=830: 81f00828
    size=x, ptr=a, limit=83a: 81f00830
    size=x, ptr=3, limit=83f: 81f0083c
    size=x, ptr=e, limit=84e: 81f00840
    size=x, ptr=9, limit=859: 81f00850
    size=x, ptr=c, limit=868: 81f0085c
    size=x, ptr=a, limit=872: 81f00868
    size=x, ptr=b, limit=87f: 81f00874
    size=x, ptr=8, limit=888: 81f00880
    size=x, ptr=7, limit=88f: 81f00888
    size=x, ptr=8, limit=898: 81f00890
    size=x, ptr=9, limit=8a1: 81f00898
    size=x, ptr=7, limit=8ab: 81f008a4
    size=x, ptr=e, limit=8ba: 81f008ac
    size=x, ptr=9, limit=8c5: 81f008bc
    size=x, ptr=c, limit=8d4: 81f008c8
    size=x, ptr=a, limit=8de: 81f008d4
    size=x, ptr=b, limit=8eb: 81f008e0
    size=x, ptr=8, limit=8f4: 81f008ec
    size=x, ptr=7, limit=8fb: 81f008f4
    size=x, ptr=8, limit=904: 81f008fc
    size=x, ptr=5, limit=909: 81f00904
    size=x, ptr=4, limit=910: 81f0090c
    size=x, ptr=e, limit=91e: 81f00910
    size=x, ptr=9, limit=929: 81f00920
    size=x, ptr=c, limit=938: 81f0092c
    size=x, ptr=a, limit=942: 81f00938
    size=x, ptr=b, limit=94f: 81f00944
    size=x, ptr=8, limit=958: 81f00950
    size=x, ptr=7, limit=95f: 81f00958
    size=x, ptr=8, limit=968: 81f00960
    size=x, ptr=4, limit=96c: 81f00968
    size=x, ptr=6, limit=972: 81f0096c
    size=x, ptr=e, limit=982: 81f00974
    size=x, ptr=9, limit=98d: 81f00984
    size=x, ptr=c, limit=99c: 81f00990
    size=x, ptr=a, limit=9a6: 81f0099c
    size=x, ptr=b, limit=9b3: 81f009a8
    size=x, ptr=8, limit=9bc: 81f009b4
    size=x, ptr=7, limit=9c3: 81f009bc
    size=x, ptr=8, limit=9cc: 81f009c4
    size=x, ptr=6, limit=9d2: 81f009cc
    size=x, ptr=9, limit=9dd: 81f009d4
    size=x, ptr=e, limit=9ee: 81f009e0
    size=x, ptr=9, limit=9f9: 81f009f0
    size=x, ptr=c, limit=a08: 81f009fc
    size=x, ptr=a, limit=a12: 81f00a08
    size=x, ptr=b, limit=a1f: 81f00a14
    size=x, ptr=8, limit=a28: 81f00a20
    size=x, ptr=7, limit=a2f: 81f00a28
    size=x, ptr=8, limit=a38: 81f00a30
    size=x, ptr=b, limit=a43: 81f00a38
    size=x, ptr=9, limit=a4d: 81f00a44
    size=x, ptr=e, limit=a5e: 81f00a50
    size=x, ptr=9, limit=a69: 81f00a60
    size=x, ptr=c, limit=a78: 81f00a6c
    size=x, ptr=a, limit=a82: 81f00a78
    size=x, ptr=b, limit=a8f: 81f00a84
    size=x, ptr=8, limit=a98: 81f00a90
    size=x, ptr=7, limit=a9f: 81f00a98
    size=x, ptr=8, limit=aa8: 81f00aa0
    size=x, ptr=7, limit=aaf: 81f00aa8
    size=x, ptr=f, limit=abf: 81f00ab0
    size=x, ptr=e, limit=ace: 81f00ac0
    size=x, ptr=9, limit=ad9: 81f00ad0
    size=x, ptr=c, limit=ae8: 81f00adc
    size=x, ptr=a, limit=af2: 81f00ae8
    size=x, ptr=b, limit=aff: 81f00af4
    size=x, ptr=8, limit=b08: 81f00b00
    size=x, ptr=7, limit=b0f: 81f00b08
    size=x, ptr=8, limit=b18: 81f00b10
    size=x, ptr=4, limit=b1c: 81f00b18
    size=x, ptr=7, limit=b23: 81f00b1c
    size=x, ptr=e, limit=b32: 81f00b24
    size=x, ptr=9, limit=b3d: 81f00b34
    size=x, ptr=c, limit=b4c: 81f00b40
    size=x, ptr=a, limit=b56: 81f00b4c
    size=x, ptr=b, limit=b63: 81f00b58
    size=x, ptr=8, limit=b6c: 81f00b64
    size=x, ptr=7, limit=b73: 81f00b6c
    size=x, ptr=8, limit=b7c: 81f00b74
    Initial value for argc=3
    Final value for argc=3
    size=x, ptr=4, limit=b80: 81f00b7c
    size=x, ptr=9, limit=b89: 81f00b80
    size=x, ptr=4, limit=b90: 81f00b8c
    size=x, ptr=e, limit=b9e: 81f00b90
    size=x, ptr=9, limit=ba9: 81f00ba0
    size=x, ptr=c, limit=bb8: 81f00bac
    size=x, ptr=a, limit=bc2: 81f00bb8
    size=x, ptr=b, limit=bcf: 81f00bc4
    size=x, ptr=8, limit=bd8: 81f00bd0
    size=x, ptr=7, limit=bdf: 81f00bd8
    size=x, ptr=8, limit=be8: 81f00be0
    size=x, ptr=18, limit=c00: 81f00be8
    size=x, ptr=4, limit=c04: 81f00c00
    No ethernet found.
    No Ethernet devices found
    SPL: failed to boot from all boot devices

ERROR ### Please RESET the board

@RobertCNelson,

Any insight as to why I am not getting ethernet in the u-boot-spl.bin image?

Hi @rwlroc,

Sorry i don’t have much experience with SPL boot over network. I think you need to ping the u-boot list:

https://lists.denx.de/listinfo/u-boot

There are a lot developers familiar with the AM335x bootrom, that might have a hint what is failing in SPL with your PHY wire setup…

Regards,

Thanks for all the help!

Rich

I am still at it…

I have given up for now on getting u-boot to network boot and I am serial booting. Once I get u-boot loaded and I load vmlinux into SDRAM and run bootelf, I get the following messages and then crash. Can you point me in the write direction to try something next. You mentioned Buildroot in the past. I followed the directions for how to build the kernel, so I thought I would try booting vmlinux to see what happens.

The addresses look a bit fishy as DRAM starts at 0x80000000 and the kernel is loaded at 0x82000000.

U-Boot# bootelf ${loadaddr}
Loading .head.text @ 0xc0008000 (504 bytes)
Loading .text @ 0xc0100000 (6834696 bytes)
Loading .rodata @ 0xc0800000 (2811779 bytes)
Loading .modinfo @ 0xc0aae783 (80306 bytes)
Loading .builtin_fw @ 0xc0ac2138 (48 bytes)
Loading __ksymtab @ 0xc0ac2168 (64368 bytes)
Loading __ksymtab_gpl @ 0xc0ad1cd8 (58572 bytes)
Loading __kcrctab @ 0xc0ae01a4 (21456 bytes)
Loading __kcrctab_gpl @ 0xc0ae5574 (19524 bytes)
Loading __ksymtab_strings @ 0xc0aea1b8 (196875 bytes)
Loading __param @ 0xc0b1a2c4 (4400 bytes)
Loading __modver @ 0xc0b1b3f4 (24 bytes)
Loading .notes @ 0xc0b1b40c (60 bytes)
Loading __ex_table @ 0xc0b1c000 (1576 bytes)
Loading .ARM.unwind_idx @ 0xc0b1c628 (333984 bytes)
Loading .ARM.unwind_tab @ 0xc0b6dec8 (26292 bytes)
Loading .vectors @ 0xffff0000 (32 bytes)
Loading .stubs @ 0xffff1000 (684 bytes)
Loading .init.text @ 0xc0c002e0 (169816 bytes)
Loading .exit.text @ 0xc0c29a38 (6092 bytes)
Loading .init.proc.info @ 0xc0c2b204 (728 bytes)
Loading .init.arch.info @ 0xc0c2b4dc (208 bytes)
Loading .init.tagtable @ 0xc0c2b5ac (16 bytes)
Loading .init.pv_table @ 0xc0c2b5bc (260 bytes)
Loading .init.data @ 0xc0c2c000 (270140 bytes)
Loading .data @ 0xc0d00000 (1115084 bytes)
Loading __bug_table @ 0xc0e103d0 (25872 bytes)
Clearing .bss @ 0xc0e16900 (324276 bytes)
## Starting application at 0xc0008000 ...
prefetch abort
pc : [<c0007ffc>]          lr : [<8ff76f99>]
reloc pc : [<b0893ffc>]    lr : [<80802f99>]
sp : 8df53c60  ip : 00000000     fp : 00000002
r10: 00000002  r9 : 8df53eb0     r8 : 00000000
r7 : 8df55e08  r6 : 8df55e10     r5 : 00000000  r4 : 00000000
r3 : c0008000  r2 : 0000000a     r1 : 8df55e10  r0 : 00000000
Flags: nzcv  IRQs off  FIQs on  Mode SVC_32
Code: 45468757 50154156 45312410 d57fd55f (dfd4f56d)
Resetting CPU ...

data abort