Make mcuboot less mynewt style
Remove most of mynewt specific stuff to a separate port package. This
should make mcuboot less "mynewt'y" and slightly easier to port to.
- Mynewt specific stuff moved to boot/mynewt.
- Sample app moved from apps/boot to boot/mynewt.
- Use MYNEWT_VAL macro only on mynewt port.
- BOOTUTIL_* and MYNEWT_VAL() usage moved to MCUBOOT_ defines.
diff --git a/boot/mynewt/README.md b/boot/mynewt/README.md
new file mode 100644
index 0000000..ef924d5
--- /dev/null
+++ b/boot/mynewt/README.md
@@ -0,0 +1,6 @@
+# mcuboot - apps/boot
+
+This sample app implements a boot loader for the Mynewt OS (apache.mynewt.org).
+This app requires the following Mynewt repositories:
+ * @mcuboot (this one)
+ * @apache-mynewt-core
diff --git a/boot/mynewt/include/mynewt/config.h b/boot/mynewt/include/mynewt/config.h
new file mode 100644
index 0000000..9be051d
--- /dev/null
+++ b/boot/mynewt/include/mynewt/config.h
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+#ifndef __BOOT_CONFIG_H__
+#define __BOOT_CONFIG_H__
+
+#include "syscfg/syscfg.h"
+
+#if MYNEWT_VAL(BOOT_SERIAL)
+#define MCUBOOT_SERIAL 1
+#endif
+#if MYNEWT_VAL(BOOTUTIL_VALIDATE_SLOT0)
+#define MCUBOOT_VALIDATE_SLOT0 1
+#endif
+#if MYNEWT_VAL(BOOTUTIL_SIGN_EC256)
+#define MCUBOOT_SIGN_EC256 1
+#endif
+#if MYNEWT_VAL(BOOTUTIL_SIGN_RSA)
+#define MCUBOOT_SIGN_RSA 1
+#endif
+#if MYNEWT_VAL(BOOTUTIL_SIGN_EC)
+#define MCUBOOT_SIGN_EC 1
+#endif
+#if MYNEWT_VAL(BOOTUTIL_USE_MBED_TLS)
+#define MCUBOOT_USE_MBED_TLS 1
+#endif
+#if MYNEWT_VAL(BOOTUTIL_USE_TINYCRYPT)
+#define MCUBOOT_USE_TINYCRYPT 1
+#endif
+
+#endif /* __BOOT_CONFIG_H__ */
diff --git a/boot/mynewt/pkg.yml b/boot/mynewt/pkg.yml
new file mode 100644
index 0000000..c1c0cc7
--- /dev/null
+++ b/boot/mynewt/pkg.yml
@@ -0,0 +1,35 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+pkg.name: boot/mynewt
+pkg.type: app
+pkg.description: "Mynewt port of mcuboot"
+pkg.author: "Fabio Utzig <utzig@apache.org>"
+pkg.homepage: "http://mynewt.apache.org/"
+pkg.keywords:
+ - loader
+
+pkg.deps:
+ - "@mcuboot/boot/bootutil"
+ - "@apache-mynewt-core/kernel/os"
+ - "@apache-mynewt-core/sys/console/stub"
+
+pkg.deps.BOOT_SERIAL.OVERWRITE:
+ - "@apache-mynewt-core/sys/console/full"
+ - "@mcuboot/boot/boot_serial"
diff --git a/boot/mynewt/src/main.c b/boot/mynewt/src/main.c
new file mode 100755
index 0000000..9cf4737
--- /dev/null
+++ b/boot/mynewt/src/main.c
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include <assert.h>
+#include <stddef.h>
+#include <inttypes.h>
+#include "syscfg/syscfg.h"
+#include <flash_map/flash_map.h>
+#include <os/os.h>
+#include <bsp/bsp.h>
+#include <hal/hal_bsp.h>
+#include <hal/hal_system.h>
+#include <hal/hal_flash.h>
+#ifdef MCUBOOT_SERIAL
+#include <hal/hal_gpio.h>
+#include <boot_serial/boot_serial.h>
+#include <sysinit/sysinit.h>
+#endif
+#include <console/console.h>
+#include "bootutil/image.h"
+#include "bootutil/bootutil.h"
+
+#define BOOT_AREA_DESC_MAX (256)
+#define AREA_DESC_MAX (BOOT_AREA_DESC_MAX)
+
+#ifdef MCUBOOT_SERIAL
+#define BOOT_SER_CONS_INPUT 128
+#endif
+
+int
+main(void)
+{
+ struct boot_rsp rsp;
+ int rc;
+
+#ifdef MCUBOOT_SERIAL
+ sysinit();
+#else
+ flash_map_init();
+ hal_bsp_init();
+#endif
+
+#ifdef MCUBOOT_SERIAL
+ /*
+ * Configure a GPIO as input, and compare it against expected value.
+ * If it matches, await for download commands from serial.
+ */
+ hal_gpio_init_in(BOOT_SERIAL_DETECT_PIN, BOOT_SERIAL_DETECT_PIN_CFG);
+ if (hal_gpio_read(BOOT_SERIAL_DETECT_PIN) == BOOT_SERIAL_DETECT_PIN_VAL) {
+ boot_serial_start(BOOT_SER_CONS_INPUT);
+ assert(0);
+ }
+#endif
+ rc = boot_go(&rsp);
+ assert(rc == 0);
+
+ hal_system_start((void *)(rsp.br_image_addr + rsp.br_hdr->ih_hdr_size));
+
+ return 0;
+}
diff --git a/boot/mynewt/syscfg.yml b/boot/mynewt/syscfg.yml
new file mode 100644
index 0000000..de4f190
--- /dev/null
+++ b/boot/mynewt/syscfg.yml
@@ -0,0 +1,50 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# Package: boot/mynewt
+
+syscfg.defs:
+ BOOT_LOADER:
+ description: 'Set to indicate that this app is a bootloader.'
+ value: 1
+ BOOT_SERIAL:
+ description: 'Support image upgrade over serial within bootloader'
+ value: 0
+ BOOTUTIL_VALIDATE_SLOT0:
+ description: 'Validate image at slot 0 on each boot.'
+ value: 0
+ BOOTUTIL_SIGN_RSA:
+ description: 'Images are signed using RSA2048.'
+ value: 0
+ BOOTUTIL_SIGN_EC:
+ description: 'Images are signed using ECDSA NIST P-224.'
+ value: 0
+ BOOTUTIL_SIGN_EC256:
+ description: 'Images are signed using ECDSA NIST P-256.'
+ value: 0
+ BOOTUTIL_USE_MBED_TLS:
+ description: 'Use mbed TLS for crypto operations.'
+ value: 0
+ BOOTUTIL_USE_TINYCRYPT:
+ description: 'Use tinycrypt for crypto operations.'
+ value: 0
+
+syscfg.vals:
+ SYSINIT_CONSTRAIN_INIT: 0
+ OS_SCHEDULING: 0
+ OS_CPUTIME_TIMER_NUM: -1