15. FAQs

15.1. Why does “ERROR: Unable to map memory @ 0xa2000000…” appear after applying a custom DTBO using name_overlays from SDK 11.1 with EdgeAI?

15.1.1. Background

Starting with Processor SDK 11.1, the k3-am62a7-sk-edgeai.dtbo overlay is automatically applied by default in the AM62A board environment (ti-u-boot). This is set via the name_overlays variable in U-Boot, as seen in board/ti/am62ax/am62ax.env

15.1.2. Issue

If you add or override overlays using uEnv.txt (e.g. for enabling IMX219 camera support), you may unintentionally replace the default name_overlays value. This means the essential EdgeAI memory carve-out overlay (k3-am62a7-sk-edgeai.dtbo) is no longer applied. As a result, EdgeAI applications may fail to allocate memory, showing errors such as:

APP_LOG: ERROR: Unable to map memory @ 0xa2000000 of size 3288576 bytes !!!

15.1.3. Who is affected?

EdgeAI users upgrading to SDK 11.1 (or newer) who apply custom device tree overlays and do not re-apply the EdgeAI carve-out overlay.

15.1.4. Solution

Always include k3-am62a7-sk-edgeai.dtbo in your overlays when customizing name_overlays in uEnv.txt or at the U-Boot prompt. For example - To enable IMX219 camera support

name_overlays=ti/k3-am62a7-sk-edgeai.dtbo ti/k3-am62x-sk-csi2-imx219.dtbo

This ensures the memory region required by EdgeAI applications is reserved.

15.1.4.1. Summary Table

Table 15.1 Summary

SDK Version

Default EdgeAI Overlay

Action Needed When Customizing Overlays

≤ 10.1

None

Only add your required overlays

≥ 11.1

EdgeAI overlay applied

Must re-apply EdgeAI overlay when overriding name_overlays

Tip

If you encounter memory mapping errors after customizing overlays, verify that the EdgeAI carve-out overlay is present in your configuration.

15.2. Getting Error when trying to capture from multiple USB cameras simultaneously

This is a common issue faced in the industry with many USB cameras. You may get errors like Failed to allocate required memory. when tying to capture simultaneously from more than one usb cameras.

The root cause for this issue is that most of the USB cameras requests for more BW than actually required. If the use case is to capture only from 2 USB cameras , it can be done by connecting one of them to USB type-C port since it is internally connected to a separate instance of USB controller. But if the use case is to capture from more than 2 cameras, you need to modify the UVC driver to override the BW allocation.

The root cause and work around is explained in detail in this blog Multiple UVC cameras on linux

To apply the work around to our SDK, use below steps

  1. Download and install Processor SDK Linux

  2. Get the patch to add bandwidth_cap parameter to uvcvideo kernel module uvcvideo patch

  3. Apply the patch to kernel source in Processor SDK Linux Install path. Please refer to PSDK building kernel

  4. Compile only uvcvideo module using below command

    make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- am62ax_evm_a53_defconfig
    make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- ./drivers/media/usb/uvc/uvcvideo.ko
    
  5. Copy ./drivers/media/usb/uvc/uvcvideo.ko to sk

  6. Remove uvcvideo module and install modified version using below commands

    rmmmod uvcvideo
    insmod uvcvideo.ko
    
  7. Set the desired BW cap as shown below

    echo 1200 >  /sys/module/uvcvideo/parameters/bandwidth_cap
    

Note

The unit of BW here is Bytes/125us, you can estimate the approximate BW requirement by multiplying fps with size/frame