We use cookies to provide our visitors with an optimal site experience. View our privacy notice and cookie notice to learn more about how we use cookies and how to manage your settings. By proceeding on our website you consent to the use of cookies.
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?
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.
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.
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 …”
CPU is AM3352 with UART0 accessible. Ethernet, and 256MB DRAM
I have built the Linux kernel
I have my dtb file from my u-boot build (got the console out working)
I boot my board manually over serial loading u-boot.
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. 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.
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.