This Quickstart provides you with the tools and know-how to install and work with the Yocto Linux Board Support Package (BSP) for the phyBOARD-WEGA-AM335x kit. This Quickstart shows you how to do everything from installing the appropriate tools and source, to building custom kernels, to deploying the OS, to exercising the software and hardware. Please refer to the phyCORE-AM335x Hardware Manual for specific information on board-level features such as jumper configuration, memory mapping and pin layout for the phyCORE-AM335x System on Module (SOM). Additionally, gain access to the SOM, mapper board, and baseboard schematics for the phyBOARD-WEGA-AM335x by registering at the following: http://phytec.com/support/registration/.
The following system requirements are necessary to successfully complete this Quickstart. Deviations from these requirements may suffice, or may have other workarounds.
Power source - Not included. There are two power options for the phyBOARD-WEGA, the board can be populated with a two-pin phoenix connector which uses a 5V power supply, or come with the Power Module 12-24V (PEB-POW-01) which uses a 12/24V power supply. The 2-pin phoenix connector included can be used to connect the power input of the phyBOARD-WEGA to a lab power supply or Wall Adapter. Wall Adapter solutions are orderable through PHYTEC for the 5V version (LQP-5V1.5A-Adapter-P) and 12-24V version (LQP-12V1.25A-Adapter-P).
This section is designed to get the board up-and-running with pre-built images.
Use the following as a reference for the connector interfaces on the phyBOARD-WEGA-AM335x that will be used in this Quickstart.
The section was designed to show you how to boot the phyBOARD-WEGA-AM335x with the pre-built demo images.
Not seeing any output on the console?
|
When finished with the kit demo, from the Linux command line use the reboot command to restart, or the poweroff command to shutdown the system. It is safe to remove power from the kit when reboot: System halted is printed on the console.
The Yocto Project is a Linux embedded development environment which provides layers of meta data and tools. PHYTEC's Yocto BSPs are based on the Poky meta layer, which consists of the bitbake build tool, Linux base recipes, and various scripts to define a rudimentary linux system. The openEmbedded meta layer is also included in this BSP and is made up of a collection of meta layers which provide recipes for many software packages. The meta-phytec layer contains recipes and classes common among all BSPs developed by PHYTEC. Within this layer is a SoC specific layer, such as meta-phyam335x, which defines configuration for barebox, the kernel, and software specific to the various PHYTEC boards using the AM335x.
In order to help get started with PHYTEC's Yocto BSP structure, the phyLinux script can be used to obtain all the BSP sources relevant to your hardware configuration without interfacing with git or repo. Detailed information on building this BSP from source is provided following the Development Host Setup section.
Yocto development requires certain packages to be installed. Run the following commands to ensure you have the packages installed:
sudo apt-get install gawk wget git-core diffstat unzip texinfo \ gcc-multilib build-essential chrpath socat \ libsdl1.2-dev xterm |
The above is the recommended package installation for development on a Ubuntu 14.04 LTS Linux distribution. For a breakdown of the packages as well as a list of packages required for other Linux distributions, see the "Required Packages for the Host Development System" section in the Yocto Project Reference Manual: http://www.yoctoproject.org/docs/1.7/ref-manual/ref-manual.html#required-packages-for-the-host-development-system |
Verify that the preferred shell for your Host PC is ''bash'' and not ''dash'':
sudo dpkg-reconfigure dash # Respond "No" to the prompt asking "Install dash as /bin/sh?" |
Download and install the repo tool. This tool is used to obtain Yocto source from Git.
cd /opt sudo mkdir bin # /opt/ directory has root permission, change the permissions so your user account can access this folder. In the following replace <user> with your specific username sudo chown -R <user>: bin cd bin curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ./repo #add directory that contains repo to your path chmod a+x repo |
Add the repo directory in your PATH, using export from the command line or permanently by including it in .bashrc:
PATH=/opt/bin/:$PATH |
Create a directory which will house your BSP development. In this example the BSP directory is /opt/PHYTEC_BSPs/. This is not a requirement and if another location is preferred (ex. ~/PHYTEC_BSPs) feel free to modify. We recommend using /opt over your HOME directory to avoid errors attributed to ~ syntax as well as the sudo requirement for the root filesystem and automation package building. We also recommend creating a package download directory (yocto_dl) separate from the yocto tree (yocto_ti), as it makes resetting the build environment easier and subsequent build times much faster.
sudo mkdir /opt/PHYTEC_BSPs cd /opt/ # /opt/ directory has root permission, change the permissions so your user account can access this folder. In the following replace <user> with your specific username sudo chown -R <user>: PHYTEC_BSPs cd PHYTEC_BSPs mkdir yocto_ti mkdir yocto_dl cd yocto_ti export YOCTO_DIR=`pwd` |
At this point you will now be able to navigate to the Yocto directory using the $YOCTO_DIR environment variable.
Download and run the init script phyLinux:
cd $YOCTO_DIR wget ftp://ftp.phytec.de/pub/Software/Linux/Yocto/Tools/phyLinux chmod +x phyLinux |
This script will use the repo tool to manage the various git repositories used in this BSP. Repo will automatically be detected by phyLinux if it is found in the PATH. During the execution of the script, you need to choose your processor platform, BSP release and hardware. The following are the available AM335x configurations:
The rest of the Quickstart assumes that the standard phyboard-wega-am335x-1 is used, although the other phyBOARD-WEGA configurations may be used if applicable.
# You can provide the SoC platform and BSP release as arguments, and then be prompted to choose your hardware configuration: ./phyLinux init -p am335x -r PD15.1.1 # Or simply run the init script and you will be prompted to choose the desired settings from a list of options ./phyLinux init |
After the configuration is set up, you can view the current settings by running:
./phyLinux info |
Run the Yocto build directory setup:
cd $YOCTO_DIR MACHINE=phyboard-wega-am335x-1 source sources/poky/oe-init-build-env build |
Add the the new download directory to build/conf/local.conf:
DL_DIR ?= "/opt/PHYTEC_BSPs/yocto_dl" |
The setup is complete and you now have everything to complete a build. It is suggested that you start with PHYTEC's hardware bringup image to verify functionality before building other images. Alternate images are located in various meta layers at meta*/recipes*/images/*.bb. They can be found using the command bitbake-layers show-recipes "*-image*" in $YOCTO_DIR/build/. Note that images that have been tested with this build are listed when the build directory is set up with the oe-init-build-env script.
The following will start a build from scratch including installation of the toolchain as well as barebox, Linux kernel, and root filesystem images.
cd $YOCTO_DIR/build MACHINE=phyboard-wega-am335x-1 bitbake --continue phytec-qt5demo-image |
All images generated by bitbake are deployed to $YOCTO_DIR/build/deploy/images/phyboard-wega-am335x-1:
Source Locations:
The build time will vary depending on the package selection and Host performance. Beyond the initial build, after making modifications to the BSP, a full build is not required. Use the following as a reference to take advantage of optimized build options and reduce the build time.
To rebuild Barebox:
bitbake barebox -f -c compile && bitbake barebox |
To rebuild the Linux kernel:
bitbake linux-ti -f -c compile ; bitbake linux-ti |
The Yocto project's Bitbake User Manual provides useful information regarding build options: http://www.yoctoproject.org/docs/1.7/bitbake-user-manual/bitbake-user-manual.html
We recommend you create your own layer and make changes to the existing BSP there. This will make it easier to update the BSP. Instructions and tips on creating your own layer are available here: http://www.yoctoproject.org/docs/current/dev-manual/dev-manual.html#creating-your-own-layer
To modify an existing recipe in your own layer, use a bbappend file. The following is an example of modifying the barebox 2015.02 recipe, barebox_2015.02.0-phy1.bb, located at $YOCTO_DIR/sources/meta-phytec/meta-phyam335x/recipes-bsp/barebox/
Create a ''recipes-bsp/barebox/'' directory in your own meta-layer to place the bbappend file in. Make sure that the new file matches the .bb file name exactly. Alternatively, you may use % after the underscore in place of the specific version for portability with future versions of the recipe.
mkdir $YOCTO_DIR/sources/<YOUR_META_LAYER>/recipes-bsp/barebox/ vim $YOCTO_DIR/sources/<YOUR_META_LAYER>/recipes-bsp/barebox/barebox_%.bbappend |
For information on how to write a recipe, see chapter 5.3 of the Yocto Development Manual: http://www.yoctoproject.org/docs/current/dev-manual/dev-manual.html#understanding-recipe-syntax
There are various ways to add a package to the BSP. For example, packages and package groups can be added to image recipes. See the Yocto Development manual for how to customize an image: http://www.yoctoproject.org/docs/current/dev-manual/dev-manual.html#usingpoky-extend-customimage-imagefeatures
The following instructions demonstrate how to add a package to the local build of the BSP. First, search for the corresponding recipe and which layer the recipe is in. This link is a useful tool for doing so: http://layers.openembedded.org/layerindex/branch/dizzy/layers/.
If the package is in the meta-openembedded layer, the recipe is already available in your build tree. Add the following line to $YOCTO_DIR/build/conf/local.conf:
IMAGE_INSTALL_append = " <package>" |
The leading whitespace between the " and the package name is necessary for the append command. |
If you need to add a layer to the BSP, clone or extract it to the $YOCTO_DIR/sources/ directory. Then, modify $YOCTO_DIR/build/conf/bblayers.conf to include this new layer in BBLAYERS:
BBLAYERS += "${BSPDIR}/sources/<new_layer>" |
The kernel configuration menu allows the user to adjust drivers and support included in a Linux Kernel build. run the following command from the build directory:
cd $YOCTO_DIR/build bitbake linux-ti -c menuconfig |
Then rebuild the kernel:
bitbake linux-ti -f -c compile ; bitbake linux-ti |
To rebuild the root filesystem:
bitbake --continue -f phytec-qt5demo-image |
The device tree is a data structure for describing hardware, and is a way of separating machine specific information from the kernel. For information on the device tree concept, devicetree.org is a good source: http://devicetree.org/Device_Tree_Usage
Device trees for PHYTEC products consist of a board DTS file, a SOM dtsi and a carrier board dtsi. The SOM dtsi includes the processor dtsi and contains definitions for all devices that are located on the SOM, such as NAND flash. Peripherals whose signals are routed through the SOM but whose hardware is located on the carrier board are defined in the carrier board dtsi, such as MMC. The board file then enables optional nodes that were defined in the dtsi files that pertain to this specific board configuration. For example, the phyBOARD -AM335x SOMs may or may not have SPI NOR flash populated. If it is populated, then SPI NOR should be enabled in the board dtsi rather than the SOM dtsi.
Additionally, there are separate dtsi files for various expansion boards, such as LCD-018: am335x-wega-peb-av-01.dtsi. For more information on enabling expansions in barebox, see Expansion Board Settings.
To disable a peripheral such as SPI NOR Flash, change the status of the serial_flash node in arch/arm/boot/dts/am335x-phycore-rdk.dts from "okay" to "disabled":
|
The kernel source directory has very good documentation and examples on what bindings are supported for specific peripherals: Documentation/devicetree/bindings/.
The process requires an SD card reader operational under Linux to format and access the Linux partition of the card. If you do not have SD card access under Linux then copying the bootloader and mounting the root filesystem on SD/MMC card will not be possible.
The SD card device name is of the form /dev/sd[b|c|d|e]. Run the following without and with the SD card connected:
ls /dev/sd* |
Unmount all partitions of the SD card, using the SD card device name from Step 1:
umount /dev/sd[b|c|d|e]* |
Load the sd-card image onto the SD card from the linux command line. This will format the appropriate partitions, as well as add Barebox, the kernel image, and the root filesystem to the card:
sudo dd if=phytec-qt5demo-image-phyboard-wega-am335x-1.sdcard of=/dev/sd[b|c|d|e] bs=1MB |
If modifying the kernel, remove the existing linuximage and device tree binary files:
rm /media/boot/linuximage rm /media/boot/oftree |
Load the new Linux kernel and device tree binary to the SD Card. Note that the default bootloader environment is configured to recognize "linuximage" and "oftree" as the kernel and dts respectively:
cp zImage /media/boot/linuximage; sync cp zImage-am335x-wega-rdk.dtb /media/boot/oftree; sync |
If modifying the root filesystem, remove the existing:
sudo rm -rf /media/rootfs/* |
Load the new filesystem to the SD Card:
sudo tar -zxf phytec-qt5demo-image-phyboard-wega-am335x-1.tar.gz -C /media/root/; sync |
Remove the existing barebox and MLO images:
rm /media/boot/barebox.bin rm /media/boot/MLO |
Copy the new images to the SD Card:
cp barebox.bin /media/boot/; sync cp MLO /media/boot/; sync |
The bootloader, one of the key software components included in the BSP, completes the required hardware initialization to download and run operating system images. The boot mode determines the location of the primary bootloader. The way the bootmode is selected depends on the revision of the carrier board. This is printed on the board, and is either 1405.0, 1405.1, or 1405.2.
If using 1405.0, short pin 8 of X70 (X_LCD_D2) to pin 13 of X71 (VCC3v3) as shown in the picture below:
Otherwise, if you are using 1405.1 or 1405.2, set the switch S1 on the baseboard to ON to force booting from SD card.
After application of power, approximately three seconds are allotted for the user to hit any key which will halt autoboot and enter Barebox.
help is a useful tool in Barebox to show available commands and usage. |
his BSP supports enabling and disabling various expansion boards that may be used along with the carrier board via the bootloader. This functionality allows for certain pin configurations to be added or removed from the device tree without needing to recompile the kernel. Please note that not all of these will be compatible with your specific board.
To view the available expansion boards:
ls /env/expansions/ . .. am335x-phytec-lcd-018-pba-b-01 am335x-phytec-lcd-018-pba-c-01 am335x-phytec-lcd-018-pcm-953 am335x-phytec-lcd-018-peb-av-02 am335x-wega-peb-av-01 am335x-wega-peb-eval-01 |
Enable an expansion board by adding it to /env/config-expansions:
edit /env/config-expansions |
You should see something similar to the following. By default, Barebox built with the phyBOARD-WEGA-AM335x configures the kernel to enable the HDMI adapter PEB-AV-01 as well as the user leds and buttons on the PEB-EVAL-01 expansion:
#!/bin/sh global linux.bootargs.dyn.video . /env/expansions/am335x-wega-peb-av-01 . /env/expansions/am335x-wega-peb-eval-01 global.linux.bootargs.dyn.video="video=HDMI-A-1:1024x768-32@60" |
The 3.12 kernel used by this BSP does not support device tree overlays. |
You can check the target's network settings by running the following:
devinfo eth0 |
The ethaddr variable is the MAC id of the target. This is a pre-programmed value which is read from the EEPROM and matches the sticker on the SOM. To modify any of the network settings, type:
edit /env/network/eth0 |
You should see something similar to the following, modify the variables to specify your network configuration for ETH0:
ipaddr=###.###.###.### netmask=###.###.###.### gateway=###.###.###.### serverip=###.###.###.### |
From any of the Barebox scripts, return to the Barebox prompt by pressing CTL+D to apply changes or CTL+C to cancel. To retain changes, at the Barebox prompt save the environment.
saveenv |
The target can be booted from on-board media or from a development host via network. In our standard configuration, this BSP release loads the kernel and root filesystem from the bootsource selected in the hardware.
For booting via network, the development host is connected to the phyBOARD-WEGA-AM335x with a serial cable and via Ethernet; the embedded board boots into the bootloader, then issues a TFTP request on the network and boots the kernel from the TFTP server on the host. Then, after decompressing the kernel into RAM and starting it, the kernel mounts its root filesystem via the NFS server on the host. This method is especially useful for development purposes as it provides a quick turnaround while testing the kernel and root filesystem.
To use the target stand-alone, the kernel and root filesystem have to be made persistent in the on-board media of the device. This is done by default in the kit, however if the kernel and root filesystem are not available in the on-board media or you would like to update them, refer to the Flashing Images section for information on flashing images.
When set in the dipswitch (Selecting Boot Modes section), the device is configured by default to boot the kernel and mount the root filesystem from flash. By simply resetting or power cycling the board the target will boot into Linux.
The nand boot entry can also be run from the Barebox shell:
boot nand |
The network-remote boot variant is intended to be used during development because of the frequent need to rebuild the Linux kernel and root filesystem. TFTP and NFS accelerate the development process. Reflashing the newest kernel and root file system to the SOM after every new build would be very cumbersome and time consuming. All that is needed is an Ethernet connection and a network aware bootloader which can fetch the kernel from a TFTP server.
Restart the board and stop autoboot to go into the Barebox shell. Run the command:
boot net |
The SD/MMC card boot variant is an alternative stand-alone boot option. All that is needed is a properly formatted (see the Creating a Bootable SD Card section of the Quickstart) SD/MMC card.
Restart the board and stop autoboot to go into the Barebox shell. Run the command:
boot mmc |
You may have custom boot requirements that are not covered by the four available boot files (nand, net, mmc, spi). If this is the case you can create your own custom boot entry specifying the kernel and root filesystem location.
In Barebox, create your own boot entry, for example named custom:
edit /env/boot/custom |
Use the following template to specify the location of the Linux kernel and root filesystem. Please note that the text in <> such as <kernel_loc_bootm.image>, <rootfs_loc_dyn.root>, and <nfs_root_path> are intended to be replaced with user specified values.
#!/bin/sh global.bootm.image="<kernel_loc_bootm.image>" global.bootm.oftree="<dts_loc_bootm.oftree>" nfsroot="<nfs_root_path>" bootargs-ip /env/config-expansions global.linux.bootargs.dyn.root="<rootfs_loc_dyn.root>" |
Once complete with file modifications exit the editor using CTRL+D. Save the environment:
saveenv |
To run your custom boot entry from the Barebox shell:
boot custom |
The device is configured by default to boot the kernel and mount the root filesystem from the bootsource set for Barebox in the dipswitch (Selecting Boot Modes). This default setting can be changed by adding or modifying the global.boot.default environment variable.
edit /env/init/bootsource |
Comment out the if else statements which set the boot sequence depending on the Barebox bootsource, and add the global.boot.default variable to set to the desired boot source. This variable can be set to any of the entries in /env/boot. For example, to set the default boot configuration to net, global.boot.default should be set in the following way:
global.boot.default=net |
Exit the editor by CTRL+D and save the environment (saveenv). On a reset or power cycle the new default boot source will take affect. Similarly it will be used in the Barebox shell when executing the following:
boot |
The phyBOARD-WEGA Development Kit is delivered with a pre-flashed bootloader. The following instructions for flashing images from TFTP or SD card will be useful if you want to:
The images to be flashed will need to be copied to the exported TFTP directory or the /boot partition of a properly formatted SD card as described in the Creating a Bootable SD Card section of the Quickstart.
After making all required connections, power on the board and enter Barebox:
If booting the bootloader from a source other than MMC, the /boot partition of the SD/MMC card will not automatically mount. To mount, execute the following commands each time you stop autoboot from Barebox or add them to /env/init/automount so this is done automatically:
|
If flashing from TFTP, additional setup to configure the Barebox environment variables to meet your network environment and development host settings is required. The current network settings can be checked in /env/network/eth0.
If you need to change you network configuration, type:
edit /env/network/eth0 |
Edit the settings as described in the Network Settings section of the Quickstart. Save the environment and reboot the board, this will automount your tftp server at boot to /mnt/tftp.
If you would like to upgrade, have custom Barebox requirements, or are interested in seeing the version you built in action, follow the steps below:
barebox.bin should be copied to your TFTP exported directory or the /boot partition of the SD card depending on your chosen flashing procedure.
Copy the new Barebox from your tftp-server or SD card into the module's RAM:
Method: TFTP
cp /mnt/tftp/barebox.bin . |
Method: SD/MMC
cp /boot/barebox.bin . |
Store the Barebox image into NAND Flash:
erase /dev/nand0.barebox.bb cp barebox.bin /dev/nand0.barebox.bb |
Copy the MLO into the module's RAM in the same manner as barebox.bin. To store the MLO in NAND Flash:
erase /dev/nand0.xload.bb cp MLO /dev/nand0.xload.bb |
To restore the barebox environment in NAND Flash to the default environment:
erase /dev/nand0.bareboxenv.bb |
If something goes wrong and you don’t have a bootloader anymore on your module you need to boot from an SD card into Barebox (set the DIP-switch as stated in Boot Configurations) and then do the flashing. See the Creating a Bootable SD Card section of this Quickstart for a description of how to create a bootable SD card. |
Placing the kernel into NAND Flash allows booting the system without the need for the TFTP hosted kernel image. This is the most common place to put the kernel in a stand-alone application. Normally development is done using a TFTP hosted kernel image until the configuration has become more stable and is unlikely to change frequently. Once stable, the kernel image can be moved to NAND Flash. This section assumes a Linux kernel with file name linuximage is available on the exported TFTP directory or /boot partition of the SD card depending on your chosen flashing procedure.
Erase the area of NAND Flash reserved for the kernel image and device tree binary partitions:
erase /dev/nand0.kernel.bb erase /dev/nand0.oftree.bb |
Copy the Linux kernel from your tftp-server or SD card and store it into the NAND Flash:
Method: TFTP
cp /mnt/tftp/linuximage /dev/nand0.kernel.bb cp /mnt/tftp/oftree /dev/nand0.oftree.bb |
Method: SD/MMC
cp /boot/linuximage /dev/nand0.kernel.bb cp /boot/oftree /dev/nand0.oftree.bb |
Similar to the Linux kernel, placing the root filesystem into NAND Flash allows booting the system without the need for a remote connection to the NFS server. This section assumes a root filesystem of the form root.ubifs available on the exported TFTP directory or /boot partition of the SD card depending on your chosen flashing procedure. Note that you should not flash Linux’s root filesystem into NAND the same way as you did with Linux kernel.
Ubifs keeps erase counters within the NAND in order to be able to balance write cycles equally over all NAND sectors. So if there’s already an ubifs on your module and you want to replace it with a new one, using erase and cp will also erase these erase counters, and this should be avoided. Instead, execute the following:
ubiformat /dev/nand0.root ubiattach /dev/nand0.root ubimkvol /dev/ubi0 root 0 |
Copy the root filesystem from your tftp-server or SD card and store it into the NAND Flash:
Method: TFTP
cp /mnt/tftp/phytec-qt5demo-image-phyboard-wega-am335x-1.ubifs /dev/ubi0.root |
Method: SD/MMC
cp /boot/phytec-qt5demo-image-phyboard-wega-am335x-1.ubifs /dev/ubi0.root |