Embedded Systems / F&S Boards

Loading OS onto the board

Before we build our own operating system, let us explore, the operating system which F&S already built for efus MX8MP board. It will help us to learn how to load an already built OS onto a board, explore its features and identify its deficiencies. With your Fedora VM booted up, perform these actions:

  1. Create a folder on your host PC (in this article we’ll assume the folder is “d:\work”).
  2. In Oracle VirtualBox Manager, right-click your VM → Settings… → Shared Folders.
  3. At the right side of the window, there’s a bluish icon with a green + sign for adding a new shared folder. Click it.
  4. Type path to your folder on your host PC into “Folder Path:” (e.g., d:\work).
  5. Type mount point location into “Mount point:” textbox. This is the folder in the virtualized file system, where content of the host PC’s folder will be mapped to. For example: /mnt/work
  6. Check “Auto-mount” checkbox. Click OK button.
  7. Click OK button again.
  8. From your Fedora VM, Open MATE terminal.
  9. Browse to the folder, where built OS is located.
    cd /home/developer/fsimx8mp-Y2025.12/binaries

  10. Locate file with .sysimg extension.
    ll *.sysimg

  11. Copy it to your host PC’s file system:
    cp *.sysimg /mnt/work

  12. On your host PC, run Rufus. If you don’t have it, get it here.
  13. Insert an SD card to your host PC.
  14. Run Rufus.
  15. Choose your SD card drive from “Device” combobox.
  16. Click “SELECT” button. Navigate to the folder where your “sysimg” file is. By default Rufus won’t display files with “sysimg” extension. Use combobox in the bottom right part of the open file dialog to choose “All files (*.*)”.
  17. Find your “.sysimg” file and click Open button.
  18. Leave all other settings in Rufus at their default values. The Rufus window should similar to this:
  19. Press START button.
  20. When Rufus finishes, safely remove SD card from your host PC and insert it into baseboard of your efus MX8MP board.
  21. SD card was prepared by Rufus in a way, that it contains 2 partitions. The first partition has FAT file system on it. The first parition contains operating system kernel file and multiple different DTB files (DTB = device tree blob), which are, simply put, files containing hardware drivers. The second partition is formatted with ext4 file system and therefore your Windows OS very likely won’t show it to you.
  22. Assuming you are successfuly connected to your embedded board over serial cable with PuTTY, used
    reboot

    command to reboot the board. Pay attention to the boot messages. As soon as
    Hit any key to stop autoboot:
    message appears, hit any key on the keyboard to stop autoboot. This will cause boot process to stop in so called
    U-boot. Use command

    version

    to print out U-Boot version number.

  23. Once successfuly confirmed you are in U-Boot, use this command to list all mmc devices:
    mmc list

    Expected output: FSL_SDHC: 0 (eMMC)
    FSL_SDHC: 2 The output tells which number is assigned to eMMC – the internal MMC memory of the board (likely 0) and which number is assinged to your SD Card (likely 2).

  24. Select your SD card and verify it’s readable:
    mmc dev 2
    mmc rescan

  25. List content of your SD card:
    ls mmc 2

    Expected output: you should see a list of files on your SD Card. Entire OS kernel is in a file named Image. You should also see several files all with *.dtb extension.

  26. A more versatile command for listing content of your SD Card is:
    fatls mmc 2:1

    This lists content of FAT file system from MMC device number 2 (SD Card) from its partion 1. As stated above, your SD card should have two partitions at this point. However fatls mmc 2:2 command will not work, because partition 2 has ext4 file system on it. You can list content of partion 2 too, however, you have to use this command:

    ext4ls mmc 2:2

    This will list the content of root file system.

  27. To verify, that your SD card is indeed paritioned according to the description above, use this command:
    mmc part

  28. Next step is to inspect current boot settings, which are stored in 3 environment variables: kernel fdt rootfs
    printenv kernel fdt rootfs

    Expected output:
    kernel=mmc rescan; load mmc 0 . Image
    fdt=mmc rescan; load mmc 0 0x43100000 efusmx8mp.dtb; booti 40480000 - 0x43100000
    rootfs=root=/dev/mmcblk0p2 rootwait

  29. Update kernel environment variable so that kernel is loaded from Image file from SD Card:
    setenv kernel 'mmc dev 2; mmc rescan; load mmc 2:1 0x40480000 Image'

  30. Update fdt environment variable so that device tree blob is loaded from efusmx8mp.dtb file from SD Card:
    setenv fdt 'mmc dev 2; mmc rescan; load mmc 2:1 0x43100000 efusmx8mp.dtb; booti 0x40480000 - 0x43100000'

    Instead of `efusmx8mp.dtb` you may use any filename of your choice from your SD card, which contains the correct device tree blob (flattened device tree, i.e., drivers) for your hardware.

  31. Update rootfs environment variable so that root file system is loaded from partition 2 of your Card:
    setenv rootfs 'root=/dev/mmcblk2p2 rootwait'

  32. Finally, before we proceed to boot, take a look at set_bootargs environment variable:
    printenv set_bootargs

    set_bootargs environment variable is configured in such a way, that if its content was executed within shell, it would set bootargs environment variable. In doing so, it will also use content of rootfs environment variable which have just set. A run command does just that. It executes value of an environment variable within a shell. Do that now:

    run set_bootargs

  33. Finally, proceed with OS boot:
    boot

Important: As we did not execute saveenv command before executing boot, the environment variables were not saved. Therefore, if you reboot the board again, it will boot to the previous (original) OS build with its original root file system and original device tree blob. Thefeore, the above description is useful for testing a certain build of an operating system, because if anything fails, you can simply reboot the board and boot back to previous (and hopefully stable) operating system. Later, we will explore how to copy the components of the operating system (kernel, device tree and root file system) to the primary MMC (the eMMC) of the board so that it loads your new OS from its internal memory and not from SD card.

Documentation notice

Information may change over time

Created

Technical details on this page may change as vendor tools, board support packages, operating system images, and runtime versions evolve.

This page was last technically reviewed on June 24, 2026. If your setup differs from the one described here, please contact us for help.