Colibri imx6ull 256 NAND device tree modification to support 7 inch touch display resolution and touch

Hi,
I am working on Colibri iMX6ULL SoM with 256MB NAND flash, currently on Colibri Eval board v3 and then on Viola board. I have earlier worked on colibri imx7 using torizon core. But now I am using yocto. How can I do -

  1. Change the display resolution and enable touch for colibri imx6ull on colibri eval board ?
  2. Change the display resolution and enable touch for colibri imx6ull on colibri viola board ?
  3. If these require changes in device tree, how do I do that and compile the device tree in yocto?

Frankly yocto is a bit difficult as I am using it for the first time.
Thanks in advance.

Hi, I’m the Toradex AI Assistant. The Toradex Support team will follow up with you shortly!

Did you like my answer?

:+1: :-1:


Hello,

To modify the device tree for your Colibri iMX6ULL to support a 7-inch touch display on both the Colibri Eval and Viola boards using Yocto, you can use Device Tree Overlays (DTO). This method allows you to make specific changes without recompiling the entire device tree, which is particularly useful for adjusting display settings and enabling touch functionality.

Steps to Modify the Device Tree:

  1. Understand Device Tree Overlays (DTO):

    • DTOs are small fragments of the device tree that can be added or removed as needed. They allow you to enable or disable hardware components dynamically.
  2. Identify the Required Changes:

    • Determine the specific changes needed for your display and touch controller. This typically involves setting the correct resolution and enabling the touch interface in the device tree.
  3. Create a Custom DTO:

    • Start by examining existing overlays for similar hardware in the Toradex device-tree-overlays repository.
    • Create a new overlay file (e.g., my_display_overlay.dts) with the necessary modifications for your display and touch controller.
  4. Compile the DTO:

    • Use the Device Tree Compiler (DTC) to compile your .dts file into a .dtbo file. This can be done using a command like:
      dtc -I dts -O dtb -o my_display_overlay.dtbo my_display_overlay.dts
      
  5. Deploy the DTO:

    • Place the compiled .dtbo file in the appropriate directory on your boot partition.
    • Edit the overlays.txt file on the boot partition to include your new overlay:
      fdt_overlays=my_display_overlay.dtbo
      
  6. Reboot the System:

    • After making these changes, reboot your system to apply the new device tree settings.

Compiling and Deploying in Yocto:

  • If you are integrating these changes into a Yocto build, you will need to add your overlay to the Yocto project. This involves creating a custom layer or modifying an existing one to include your overlay.
  • Use the bitbake tool to build your image with the new device tree settings.

By following these steps, you should be able to adjust the display resolution and enable touch functionality on your Colibri iMX6ULL using Yocto. If you encounter any issues, ensure that your overlay is correctly formatted and that all necessary hardware components are enabled in the device tree.

Best regards,
Toradex AI Assistant.

Please, also check if these links can help you solve your problem:

imx6ULL custom device tree.

I think device tree overlays are not allowed on NAND flash. It is only used for imx6ull with emmc. Please let me know the device tree modification details.

Hi @mansijc

Sorry, but can I first ask about what is your project goals here?
Are you working on a new product or are you upgrading an existing product that’s already on the market?
Not sure if I understood correctly, but are you replacing the colibri imx7 modules with Torizon OS for the Colibri iMX6ULL NAND? :upside_down_face:

I’m asking this because both the Colibri iMX6ULL and the Viola Carrier Board are relatively old products and are not indicated for the development of new products. And from the description of your issue, it seems that you are quite early in the development phase.

Hi @allan.tx,

Thank you for responding to my query. Here is a brief about the project -
It is a Nurse Call System for hospitals and Care Homes. The company that has contracted me for this development is mainly a marketing company selling medical instruments to hospitals. This is their first venture in product development. This product will have 4 versions. The one that I am working on now is the basic version. Linux SoMs are being used for two modules that are connected over Ethernet/WiFi to the IP network and one of these is connected to other smaller micro controller based units over RS485. Colibri iMx6ULL was selected to meet the hardware cost factor. While selecting Colibri iMx6ULL, there was no information stating that this should not be used for new product development. Even Toradex team did not mention this to me.

I work as an independent consultant with companies that want to develop products in embedded domain in India and outside. I have used Linux SoMs offered by companies and zeroed in on Toradex because of quality of hardware and support. I have directly worked with local Toradex team earlier where I used Colibri iMx7 and it was a success. Apart from that I have used Colibri iMx6. In both case (iMx7/6) I used Torizon Core. I am facing a bit of challenge with Yocto. That is where I need some guidance. I need links that give me exact direction to use Yocto for -

  1. changing device tree and including those changes in the build.
  2. auto launch my application on boot.
    I received pointers this morning from Toradex team. I will try those now and update the results here.

Regards,
Mansij

Hi @mansijc

Thanks for providing the context.

Sorry if I misunderstood, I think it makes sense for your use case.

I didn’t mean to say that “it should not be used”, but that you may want to also evaluate other low-end modules such as the Verdin AM62.
The Verdin family offers a better scalability to higher-end devices and using Torizon OS makes it easier and faster to develop your application.

But now with the context, I understand that you have already evaluated it.


In this article, under Kernel Compilation you can find the instructions to compile the device tree for the imx6ull

and in this article under Customize the Kernel you can find how to integrate it with your Yocto project.

Hi @allan.tx ,

Thank you for sharing the details. I followed the link - Build Linux Kernel from Source Code | Toradex Developer Center as pointed out by you. I started with u-boot. After following all steps I came to Configure U-Boot. When I use command
mansij@mansij-Inspiron-N5050:~/workdir/u-boot$ make mproper
it gives me an error stating -
*** Configuration file “.config” not found!

*** Please run some configurator (e.g. “make oldconfig” or
*** “make menuconfig” or “make xconfig”).
Here I tried using make oldconfig and that gives me -


mansij@mansij-Inspiron-N5050:~/workdir/u-boot$ make oldconfig
scripts/kconfig/conf --oldconfig Kconfig
.config:181:warning: symbol value ‘’ invalid for TEXT_BASE
.config:196:warning: symbol value ‘’ invalid for SYS_LOAD_ADDR
.config:270:warning: symbol value ‘’ invalid for SYS_UBOOT_START
*

  • Restart config…
  • General setup

Local version - append to U-Boot release (LOCALVERSION)
Automatically append version information to the version string (LOCALVERSION_AUTO) [Y/n/?] y
Optimization level

  1. Optimize for size (CC_OPTIMIZE_FOR_SIZE)
  1. Optimize for speed (CC_OPTIMIZE_FOR_SPEED)
  2. Optimize for debugging (CC_OPTIMIZE_FOR_DEBUG)
    choice[1-3?]: 1
    Allow compiler to uninline functions marked ‘inline’ in full U-Boot (OPTIMIZE_INLINING) [N/y/?] n
    Enable Link Time Optimizations (LTO) [N/y/?] n
    Select U-Boot be run as a bootloader for XEN Virtual Machine (XEN) [N/y/?] n
    Add arch, board, vendor and soc variables to default environment (ENV_VARS_UBOOT_CONFIG) [N/y/?] n
    Number of DRAM banks (NR_DRAM_BANKS) [4] 4
    Enable kernel command line setup (SYS_BOOT_GET_CMDLINE) [N/y/?] n
    Enable kernel board information setup (SYS_BOOT_GET_KBD) [N/y/?] n
    Use a custom location for the initial stack pointer address (HAS_CUSTOM_SYS_INIT_SP_ADDR) [N/y/?] n
    Enable malloc() pool before relocation (SYS_MALLOC_F) [Y/?] y
    Size of malloc() pool before relocation (SYS_MALLOC_F_LEN) [0x2000] 0x2000
    Define memory for Dynamic allocation (SYS_MALLOC_LEN) [0x400000] 0x400000
    Inform valgrind about memory allocations (VALGRIND) [N/y/?] n
    64bit physical address support (PHYS_64BIT) [Y/?] y
    64bit fdt address support (FDT_64BIT) [Y/?] y
    Recreate an ELF image from raw U-Boot binary (REMAKE_ELF) [N/y/?] n
    Build target special images (BUILD_TARGET)
    Define a maximum size for the U-Boot image (HAS_BOARD_SIZE_LIMIT) [N/y/?] n
    Use a custom location for the U-Boot linker script (SYS_CUSTOM_LDSCRIPT) [N/y/?] n
    Address in memory to use by default (SYS_LOAD_ADDR) (NEW)

What do I use for SYS_LOAD_ADDR ?
If I use make menuconfig, it gives me the .config - U-Boot 2025.01 Configuration menu. Is there a a link that gives the configuration to be used in this menu for colibri imx6ull?
Regards,
Mansij