FANDOM


IntroductionEdit

Cameras based on the Digic 6 processor differ significantly from previous generation cameras. CHDK support is for these cameras is a work-in-progress as of late 2016. The page collects information relevant to creating CHDK ports for Digic 6 cameras.

It is likely that some of this applies to Digic 6+ and Digic 7, but only limited analysis has been done.

Significant differences from prior Digic versionsEdit

  • The main CPU is now a Cortex-R4 (armv7 architecture). Digic 7 appears to use a different CPU, possibly Cortex A9.
  • The majority of Canon firmware code is in the Thumb2 instruction set. The varying size of instructions makes disassembly significantly more difficult, and prevents existing CHDK tools from working on these firmwares.
  • Several other CPUs exist, including an Xtensa core.
  • The display is (probably) driven by a TAKUMI GPU, somehow connected to the Xtensa core
  • Viewport and bitmap display frame buffer formats have changed significantly

Digic 6 ProcessorsEdit

As mentioned above, Digic 6 contains multiple different CPUs

MariusEdit

The main ARM core where CHDK and the main Canon firmware runs

ZicoEdit

The Xtensa core responsible for the GPU. Strings like "mzrm" refer to Marius / Zico communication.

OmarEdit

Unknown. ARM?

ToolsEdit

Configuring CHDK capstone toolsEdit

capdis and Finsig thumb2 depend on the capstone disassembly engine, and must be enabled in the CHDK build configuration.

Capstone version 4.0.x is recommended. A windows build compatible with the CHDK compiler GUI and windows toolchain is available from https://app.box.com/s/qqooc6yuofo8c9rnwafnxiu0stism7ij

The official pre-built windows packages from the capstone download page can also used, but may require linking to the dll import library (-lcapstone_dll) rather than the static library. In this case, included capstone.dll must be on the path when capdis or finsig_thumb2 are run.

Capstone 3.x (3.0.4 or later) is deprecated and support will be removed from the CHDK source in the future. If used, a patch to avoid a serious bug related to blx instruction alignment is required. Using unpatched capstone 3.x versions will result in incorrect disassembly and incorrectly output from Finsig_thumb2. The patch & pre-built win32 capstone library are available here : capstone-mingw-chdk-3.0.4-patched-2016-01-11_1.zip

For Linux, install using your package manager if it provides capstone 4.0, or download capstone source from the capstone download link. 4.0.x can be built and used as is, while 3.0.x must be patched using one of the capstone-...blx-align.patch files found under tools/patches in the CHDK source.

Follow the instructions in the capstone COMPILE.TXT file to build the source (essentially ./make.sh and then sudo ./make.sh install ).

To build the CHDK capstone tools, the following should be set in your localbuildconf.inc. Replace /path/to/capstone with the location where the capstone library is installed.

# Define this to enable building of tools using the capstone library (http://www.capstone-engine.org/)
# Required to rebuild stubs for thumb2 / digic 6 firmware
OPT_CAPSTONE_TOOLS=1
 
# Set the following if capstone includes are not in the default search path
CAPSTONE_TOOLS_INC=-I/path/to/capstone/include
 
# Set the following to the options required to link to the capstone library.
# At a minimum, -lcapstone or similar is required. If the library is not
# on the default search path, -L/path/to/capstone is also required
CAPSTONE_TOOLS_LINK=-L/path/to/capstone -lcapstone


NOTES:

  1. To build capdis, you must use make extras or make capdis (capdis.exe on windows) in the CHDK build tree tools directory. It will be removed if you make clean, so you may wish to copy the executable elsewhere.
  1. The current CHDK build process will produce a warning message ( WARNING! Incorrect dissassembly is likely ) if the blx instruction alignment bug has not been correctly patched. It is very easy to not notice this warning as it will be buried deep the build output log.
  2. Some Linux distros may include pre-compiled capstone packages. If it's a 3.x version it will have the blx instruction alignment bug and must not be used. If 4.0.x is available, it should work.


ARM documentationEdit

PortsEdit

Known Digic 6 (and later) ports and porting attempts

Working portsEdit

Ports with usable builds available

Partial portsEdit

Other ports that were started but don't yet have published usable builds

Useful forum threadsEdit

General topics related to Digic 6 development

Community content is available under CC-BY-SA unless otherwise noted.