In the part I of this Getting started walkthrough, we have seen the steps of building the rtems source for the beagleboneblack Board Support Package (BSP). In this part we’ll use the hello.exe from the testsuite, make it into an SD card image and run it in original BBB hardware.
Generating the RTEMS image
Firstly, we’ll need u-boot to boot the image into the hardware. We’ll be using a recent version of U-Boot for the process. We need to use the mkimage from u-boot to create the bootable image.
Once we have the hello.exe from
we’ll make an image from it in the following steps.
1 2 3 4 arm-rtems5-objcopy hello.exe -O binary app.bin gzip -9 app.bin mkimage -A arm -O linux -T kernel -a 0x80000000 -e 0x80000000 -n RTEMS -d app.bin.gz rtems-app.img
The options are for :
- -A : Architecture
- -O : OS
- -T : Type of image
- -a : load address
- -e : entry point
- -n : image name
- -d : The image data file
and finally the
rtems-app.imgis the name of the image
The uEnv.txt file
After this we can copy this img file to the Fat formatted SD card and include a uEnv.txt in the root directory with the following content
1 2 3 4 setenv bootdelay 5 uenvcmd=run boot boot=fatload mmc 0 0x80800000 rtems-app.img ; fatload mmc 0 0x88000000 am335x-boneblack.dtb ; bootm 0x80800000 - 0x88000000
The uEnv.txt file sets any variable BEFORE the image boots, so this is the right place to tell the bootloader which files to load and the memory addr of the boot image.
The Device Tree file
It is now compulsory to use a device tree blob (dtb) file to load the device tree during bootin. So we need the am335x-boneblack.dtb file.
We’ll use a mirror to the official device-tree rebasing. We can use this link
there’s a makefile provided, we’ll just build the am335x-boneblack.dtb
the command will look something like this
We will use the freebsd sources to build the required device tree blob, i.e.,
1 2 3 4 5 git clone https://github.com/freebsd/freebsd.git MACHINE='arm' freebsd/sys/tools/fdt/make_dtb.sh \ freebsd/sys \ freebsd/sys/gnu/dts/arm/am335x-boneblack.dts \ $(pwd)
Note for RTEMS libbsd users : The dtb from the following commit has been tested with libbsd:
19a6ceb89dbacf74697d493e48c388767126d418, the latest master from FreeBSD is known to have some issues with the RTEMS-libbsd apps. RTEMS apps without libbsd CAN use the latest master of freebsd.
Once we have the dtb file, we’ll again copy it into the root of the SD card that we have.
Running it in BBB
Now that we have everything set, our final step is to run it in a REAl hardware. I’m using a USB TO UART TTL 3.3V FT232RL breakout board to connect it to my computer. This, I found was the cheapest option available, you just need a few jumper cables and it’s as good as an FTDI adapter cable.
rev C of the beaglebone black tries to read uEnv.txt from microSD card using internal, factory-flashed uBoot instance on eMMC. You can follow this guide (assuming you want to prepare the microSD directly from the factory-flashed debian instance of your beaglebone black), then copy 3 files to the boot partition created: uEnv.txt, am335x-boneblack.dtb and rtems-app.img (no MLO needed).
Then we’ll install the SD card and power up everything.
To access the console from computer, we’ll use
screen tool for linux
environment like this …
1 sudo screen /dev/ttyUSB0 115200
And Voila! It’s running !!!
Note: If you want to flash the eMMC with new uBoot instansce, you can follow the following guide with slight modification:
1 2 3 4 alias armmake='make CROSS_COMPILE=arm-rtems5- ' armmake distclean armmake am335x_evm_config armmake
And then add the u-boot.img and MLO files to the SD card. That’s the end of the Getting started tutorial, I hope that I have stated the steps clearly. In case of any doubt, or if you’d like to add or discuss some point. Please do comment below.
Thanks for stopping by!