heterogeneous multi-core architecture support for dronecode© 2015 qualcomm technologies, inc. all...

23
© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi - Core Architecture Support for Dronecode Mark Charlebois, March 24 th 2015

Upload: others

Post on 11-Jun-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Heterogeneous Multi-Core Architecture Support for Dronecode

Mark Charlebois, March 24th 2015

Page 2: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

● Qualcomm Technologies Inc (QTI) is a Silver member of Dronecode

● Dronecode has 2 main projects:

● https://www.dronecode.org/software/where-dronecode-used

Page 3: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

PX4 SW Stack

https://pixhawk.org/_detail/dev/px4_software_architecture.png?id=dev:software_architecture

Page 4: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

PX4 Software Architecture

● Today PX4 Firmware is based on NuttX

● NuttX supports:

● Single CPU

● Flat memory model

● Tasks

● PX4 Firmware uses devices for task synchronization

● Custom device drivers (ioctl, read, write, poll, …)

● Uses internal kernel structure data

Page 5: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.© 2015 Qualcomm Technologies, Inc. All rights reserved.

PX4 on SnapdragonTM 600 SoC

Page 6: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Snapdragon 600 SoC

● The APQ8064 SoC has a heterogeneous multi-core architecture

● Multi-core apps processor (4 KraitTM cores)

● LinuxTM

● SMP HexagonTM processor

● HW seen as 3 CPUs

● Runs an RTOS (QuRTTM)

● Single process, multiple threads

● Can run Linux

● Supported in upstream kernel

● Hexagon SDK provides a way to run SW on Hexagon● http://www.slideshare.net/QualcommDeveloperNetwork/21-hexagon-sdkmay919gg23

● Developing DSPAL layer for POSIX API

Page 7: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Hexagon™ DSP Processors in Snapdragon Products

Camera

Display

JPEG

Video

Other

• aDSP: Real-time

media & sensor

processing

Multimedia Fabric System Fabric

Krait

CPUAdreno

GPU

Krait

CPU

Krait

CPU

Krait

CPU

2MB L2

Misc.

Connectivity

Modem

Snapdragon 800

Fabric & Memory Controller

LPDDR3 LPDDR3

Hexagon

aDSP

Hexagon

mDSP

• mDSP: Dedicated modem processing

Audio

Sensors

Page 8: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Programmer’s View of Hexagon DSP HW Multi-threading

• Hexagon V5 includes three hardware threads

• Architected to look like a multi-core with communication

through shared memory

Thread 0

DU

XU

Shared Data Cache

L2

Cache /

TCM

Register File

DU

XU

Thread 1

DU

XU

Register File

DU

XU

Thread 2

DU

XU

Register File

DU

XU

Shared Instruction Cache

Page 9: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

PX4 on Hexagon

● QuRT for realtime

● Hexagon SDK used to port PX4

● Select files from old PX4 version used for initial port

● Demonstrated flights of drones with PX4 based SW on Hexagon

● Hexagon support in progress for upstream PX4

● DSPAL POSIX layer in development

● Requires support for thread based PX4 build

Page 10: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.© 2015 Qualcomm Technologies, Inc. All rights reserved.

PX4 Firmware Porting

Page 11: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Codebase Issues

● NuttX dependency, some code able to run under ROS

● Looking at creating clean backend separation

● Single CPU RTOS

● Lots of use of internal kernel data structures

● Tasks vs threads

● err, errx, exit(), _exit(), main

● Param

● NuttX uses memory segment and linker

● Unit test creates static array

● Difficult to split code across processors

Page 12: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Codebase Issues

● Time as uint64_t

● uint64_t varies per platform

● unsigned long on x86_64, unsigned long long on ARMv7hf/Krait

● Eigen

● Lots of C++ issues

● Is FLENS an option?

● (http://apfel.mathematik.uni-ulm.de/~lehn/FLENS/index.html)

● Device support

● Userspace device control vs kernel

● I2C, SPI, UART

Page 13: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Thread Based Port of PX4

● Created a fork of PX4/Firmware on Github

● https://github.com/mcharleb/Firmware

● Linux port of PX4/Firmware

● Intermediate step

● Single process, multiple threads, POSIX, user space

● Enables definition of abstraction layer

● Faster way to develop and test code

● Can be done in parallel with DSPAL work

Page 14: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Top Level Code Changes

● makefiles/

● firmware_linux.mk

● firmware_nuttx.mk

● toolchain_native.mk

● Use clang or gcc (tested clang 3.4, 3.5 and gcc 4.8, 4.9)

● setup.mk

● PX4_TARGET_OS (nuttx, linux)

● linux_elf.mk (create mainapp)

● module.mk

● -DPX4_MAIN=$(MODULE_COMMAND)_app_main

● tools/

● linux_apps.py (create list of built-in “apps”)

Page 15: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Board and Config files

● Moved to subdirs for each OS

● nuttx/

● NuttX board and config files

● linux/

● Linux board and config files

Page 16: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Code Change Highlights

● Minimal code change to track upstream

● Added abstraction headers

● src/platform

● px4_posix.h, px4_tasks.h, px4_defines.h, etc

● Added implementation directories

● src/platform/nuttx

● src/platform/linux

● Created basic shell to instantiate “apps” under Linux

● Similar to NuttX shell

● Runs built-in “apps” using app_main(argc, *argv[])

Page 17: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Code Change Highlights

● Virtual device used to maintain use of ioctl calls

● Modified Cdev → VCDev

● px4_open(“/dev/foo”)

● devmap[“/dev/foo”]->vcdev->dev_open(px4_dev_handle_t *h)

● Split backends where required

● foo_nuttx.cpp, foo_linux.cpp

● Converted process terminating calls

● err, errx, exit, _exit

Page 18: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Created Demo/Test Apps

● src/platform/linux/tests

● hello, hrt_test, vcdev_test

● int PX4_MAIN(int argc, char **argv) { … }

● Use socat to create ttyS0 for mavlink

● Finding lots of failure cases (i.e. memset of nullptr)

Page 19: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.© 2015 Qualcomm Technologies, Inc. All rights reserved.

The Future

Page 20: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Work To Do

● Add support for reading rc.S init in Linux port

● Finish DSPAL

● Need PX4 spec for user space control of I2C, SPI

● Upstream QuRT/DSPAL port

● Added support for missing mathlib support

● Vector, Matrix, Quaternion, isinfinite…

● Needed PX4 Param solution for Heterogeneous CPU usage

● Debugging

● Integrated with Qualcomm Diag framework

● Sensor, PWM drivers

● uORB/MuORB

● DDS?

Page 21: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Dronecode Future

PX4/APM

NuttX

Cortex m3/m4

PX4/APM/ROS

Linux

x86_64/Krait/ARMv7hf

PX4/APM

DSPAL/QuRT

Hexagon

Page 22: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.© 2015 Qualcomm Technologies, Inc. All rights reserved.

Page 23: Heterogeneous Multi-Core Architecture Support for Dronecode© 2015 Qualcomm Technologies, Inc. All rights reserved. Heterogeneous Multi-Core Architecture Support for Dronecode Mark

© 2015 Qualcomm Technologies, Inc. All rights reserved.

Not to be used, copied, reproduced , or modified in whole or in part, nor its contents revealed in any manner to others without the express written permission of Qualcomm Technologies, Inc.

Qualcomm is a trademark of QUALCOMM Incorporated, registered in the United States and other countries. All QUALCOMM Incorporated trademarks are used with permission. Other products and brand names may be trademarks or registered trademarks of their respective owners.

© 2015 Qualcomm Technologies, Inc. All rights reserved.

research.qualcomm.com