ArtOS 快速开发框架

ArtOS 快速开发框架

首页
ArtOS框架
使用文档视频教程
Micropython
官方文档学习教程固件开发
发现
树莓派ESP32
生态圈
智能生活直播物联工业物联Node-RED
开发资源
开发板软件资源器件资源
关于ArtOS
登录 →
ArtOS 快速开发框架

ArtOS 快速开发框架

首页 ArtOS框架
使用文档视频教程
Micropython
官方文档学习教程固件开发
发现
树莓派ESP32
生态圈
智能生活直播物联工业物联Node-RED
开发资源
开发板软件资源器件资源
关于ArtOS
登录
  1. 首页
  2. Micropython
  3. 固件开发
  4. 将自己的代码打包进MicroPython固件中

将自己的代码打包进MicroPython固件中

0
  • 固件开发
  • 发布于 2025-12-17
  • 15 次阅读
极客熊
极客熊

一、将自己的代码打包进固件中的优势和好处:

1、一体化解决方案:

  • 打包自己的代码进固件后,所有功能和模块都直接集成在固件内,不需要额外的脚本或依赖项,减少了部署的复杂性。

2、提高启动速度:

  • 固件打包后,设备启动时不需要加载外部代码,减少了文件系统访问的时间,从而加速了设备启动和运行速度。

3、增强稳定性和性能:

  • 通过将代码编译到固件中,可以消除运行时脚本解析的开销,直接在底层硬件上运行,提升了执行效率和系统稳定性。

4、减小内存占用:

  • MicroPython 固件可以进行优化,去除未使用的模块和功能,最大化地节省存储空间。这样可以腾出更多内存供应用程序使用,尤其是对于资源受限的嵌入式设备。

5、提高安全性:

  • 通过将代码嵌入固件中,可以避免代码泄露或篡改的风险。尤其是在工业级应用中,固件打包能够有效防止外部访问修改。

6、便于管理和升级:

  • 固件更新可以作为整体部署来管理,升级时只需更新固件即可,不必单独更新脚本或其他依赖。更方便进行 OTA(Over-The-Air)更新。

7、兼容性和可移植性:

  • 固件中的代码是与硬件紧密结合的,减少了平台和环境依赖,提高了在不同设备间的兼容性和移植性。

8、简化开发流程:

  • 固件的方式简化了应用的开发和调试过程,开发人员可以直接在固件环境下进行测试,而不必担心不同版本之间的兼容问题。

总的来说,将代码打包进固件中可以有效提升系统性能、稳定性、安全性和可维护性,特别适合对资源、启动时间、或安全性有严格要求的嵌入式应用。

二、如何将自己的代码打包进固件中?

1、准备本地固件编译环境

参考 1:Micropython v1.27.0 编译 (保姆级)

参考 2:Micropython v1.26.1 编译 (保姆级)

2、构建自己的固件,以ESP32-S3芯片为例

a. 在Micropython 源码的 ports/esp32/boards 下创建自己的固件目录,例如: MyBoards

b. ports/esp32/boards/MyBoards 下创建目录 modules, 用于存放自己的程序

c. 拷贝 ports/esp32/boards/ESP32_GENERIC_S3 下的全部文件到 ports/esp32/boards/MyBoards 下

d. 参考下面的代码修改ports/esp32/boards/MyBoards 下的文件

修改 board.json

{
    "deploy": [
        "../deploy.md"
    ],
    "deploy_options": {
        "flash_offset": "0"
    },
    "docs": "",
    "features": [
        "BLE",
        "External Flash",
        "External RAM",
        "WiFi"
    ],
    "images": [
        "generic_s3.jpg"
    ],
    "mcu": "esp32s3",
    "product": "MyBoard",
    "thumbnail": "",
    "url": "https://www.espressif.com/en/products/modules",
    "vendor": "MyBoard",
    "variants": {
        "SPIRAM_OCT": "Support for Octal-SPIRAM"
    }
}

重点:修改 product 和 vendor 为你自己的信息

增加 manifest.py

include("$(PORT_DIR)/boards/manifest.py")
freeze("modules")

修改 mpconfigboard.cmake

set(IDF_TARGET esp32s3)

set(SDKCONFIG_DEFAULTS
    boards/sdkconfig.base
    boards/sdkconfig.usb
    boards/sdkconfig.ble
    boards/sdkconfig.240mhz
    boards/sdkconfig.spiram_sx
    boards/ArtOS_Board/sdkconfig.board
)

set(MICROPY_FROZEN_MANIFEST ${MICROPY_BOARD_DIR}/manifest.py)

重点:

1、修改boards/MyBoards/sdkconfig.board中蓝色部分为你的目录名

2、增加set(MICROPY_FROZEN_MANIFEST ${MICROPY_BOARD_DIR}/manifest.py)

修改 mpconfigboard.h

#ifndef MICROPY_HW_BOARD_NAME
// Can be set by mpconfigboard.cmake.
#define MICROPY_HW_BOARD_NAME               "My Board"
#endif
#define MICROPY_HW_MCU_NAME                 "ESP32S3"
#define MICROPY_PY_NETWORK_HOSTNAME_DEFAULT "My-Board"

// Enable UART REPL for modules that have an external USB-UART and don't use native USB.
#define MICROPY_HW_ENABLE_UART_REPL         (1)

#define MICROPY_HW_I2C0_SCL                 (9)
#define MICROPY_HW_I2C0_SDA                 (8)

重点:

1、修改MICROPY_HW_BOARD_NAME 的值为你自己板卡的名称

2、修改MICROPY_PY_NETWORK_HOSTNAME_DEFAULT 的值为你自己的主机名称

修改 sdkconfig.board

CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
CONFIG_LWIP_LOCAL_HOSTNAME="My-Board"

重点:增加CONFIG_LWIP_LOCAL_HOSTNAME="My-Board" 为 LWIP 的主机名称

三、代码编写规范和如何将自己代码加入固件

1、代码规范

a. 在根目录 lib 下创建自己的库目录,将自己的功能代码放到此目录下。例如:lib/artos

b. 自己的代码中要采用相对路径导入类. 例如 from .utils import Utils

. 代表当前目录下

.. 代表上级目录下

依次类推

2、示例

在 lib/artos 下创建 utils.py

import binascii
import machine

class Utils:
@staticmethod
    def unique_id() -> str:
        """
        获取设备唯一 ID(MicroPython 机器 ID)
        返回:
            str: 大写十六进制唯一标识符
        """
        return binascii.hexlify(machine.unique_id()).decode().upper()

将 artos 整个目录放到 ports/esp32/boards/MyBoards/modules 中,固件编译时会自动打包进固件

假如在固件编译好并烧录进芯片后,在 main.py 中调用示例:

from artos.utils import Utils

print(Utils.unique_id())

四、编译方法

  • 编译方法参考

参考 1:Micropython v1.27.0 编译 (保姆级)

参考 2:Micropython v1.26.1 编译 (保姆级)

  • 编译方法

make BOARD=MyBoards submodules
make BOARD=MyBoards

编译无误后你将会在 ports/esp32 目录中看到名为:ports/esp32/build-MyBoards 的目录,在该目录下可以找到 firmware.bin, 将 firmware.bin 文件通过工具烧录进芯片即可。

相关文章
Ubuntu系统下SSH服务的安装、root账号的远程连接

Ubuntu系统下SSH服务的安装、root账号的远程连接

1. 安装OpenSSH Server sudo apt update sudo apt install openssh-server 2.启动SSH服务 # 传统SysVinit方式 sudo service ssh start # Systemd方式(推荐) sudo systemctl

在Windows11 下安装Ubuntu 22.04.06 子系统

在Windows11 下安装Ubuntu 22.04.06 子系统

一、检查并开启虚拟化

将自己的代码打包进MicroPython固件中

将自己的代码打包进MicroPython固件中

一、将自己的代码打包进固件中的优势和好处: 1、一体化解决方案: 打包自己的代码进固件后,所有功能和模块都直接集成在固件内,不需要额外的脚本或依赖项,减少了部署的复杂性。

Micropython v1.26.1编译(保姆级)

Micropython v1.26.1编译(保姆级)

一、编译环境 Windows 11 专业版 WSL Ubuntu 22.04 二、更新环境和安装依赖项 apt update apt install -y git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-b

Micropython v1.27.0 编译(保姆级)

Micropython v1.27.0 编译(保姆级)

https://github.com/micropython/micropython/tree/v1.27.0 一、编译环境 Windows 11 专业版 WSL Ubuntu 22.04

苹果系统 MacOS下编译Micropython v1.27.0 (保姆级)

苹果系统 MacOS下编译Micropython v1.27.0 (保姆级)

一、编译环境 MacOS 15.5 Python 3.9 二、更新环境和安装依赖项 如果你的mac中安装多个版本的python,用which python3 查看路径然后手动删除别的版本的python,然后再用brew安装python3.9 安装 brew

目录
  • 极客熊
  • 极客熊
  • 极客熊
Copyright © 2026 ArtOS All Rights Reserved. Powered by ArtOS.