3. 修改固件标识与启动信息

修改固件标识与启动信息 学习卡片

任务说明

本案例目标是在Marlin固件源码中修改三处标识信息:固件名称(CUSTOM_MACHINE_NAME)、版本号(SHORT_BUILD_VERSION)以及启动屏幕显示信息(自定义开机画面文字)。修改完成后,重新编译固件并烧录,上电时LCD屏幕应显示自定义的固件名称与版本号。

修改文件与代码位置

Marlin固件中,上述三项信息分别定义在以下位置:

  • 固件名称与版本号:Marlin/Configuration.h 文件中的 CUSTOM_MACHINE_NAME 和 SHORT_BUILD_VERSION 宏定义。
  • 启动屏幕信息:Marlin/src/lcd/dogm/status_screen_DOGM.cpp 文件中的 startScreen() 函数,该函数在LCD初始化时调用,用于绘制开机画面。

修改步骤

1. 修改固件名称与版本号

打开 Marlin/Configuration.h,找到以下两行(通常位于文件开头附近的“Machine”或“Version”配置区):

#define SHORT_BUILD_VERSION "2.1.2"
#define CUSTOM_MACHINE_NAME "My 3D Printer"

将其修改为自定义值,例如:

#define SHORT_BUILD_VERSION "2.1.2-Custom"
#define CUSTOM_MACHINE_NAME "MyPrinter Pro"

2. 修改启动屏幕显示信息

打开 Marlin/src/lcd/dogm/status_screen_DOGM.cpp,找到 startScreen() 函数(约在文件中部)。该函数内部通过 u8g.print() 输出启动文字。默认代码类似:

void startScreen() {
  u8g.firstPage();
  do {
    u8g.setFont(u8g_font_6x10);
    u8g.setPrintPos(0, 20);
    u8g.print(CUSTOM_MACHINE_NAME);
    u8g.setPrintPos(0, 32);
    u8g.print(SHORT_BUILD_VERSION);
    // ... 其他启动信息
  } while (u8g.nextPage());
}

在 u8g.print(SHORT_BUILD_VERSION); 之后添加一行自定义文字,例如:

    u8g.setPrintPos(0, 44);
    u8g.print("Hello Marlin!");

注意:setPrintPos(x, y) 的坐标需根据LCD分辨率调整(常见为128x64像素),避免文字超出屏幕。

编译与烧录

在Marlin固件根目录下执行编译(以PlatformIO为例):

pio run -e mega2560   # 以Arduino Mega 2560为例,请替换为实际环境名

编译成功后,将生成的固件烧录到主板:

pio run -e mega2560 -t upload

验证方法与判定标准

1. 烧录完成后,重新给打印机主板上电。

2. 观察LCD屏幕开机画面:屏幕应显示修改后的 CUSTOM_MACHINE_NAME(如“MyPrinter Pro”)和 SHORT_BUILD_VERSION(如“2.1.2-Custom”),并在下方显示新增的自定义文字“Hello Marlin!”。

3. 进入LCD菜单的“About Printer”或“Info”页面(如有),确认固件名称与版本号同样显示为修改后的值。

4. 若屏幕显示内容与修改一致,且无乱码或文字截断,则判定修改成功。

注意事项

  • 若使用图形化LCD(如12864),启动画面代码位于 status_screen_DOGM.cpp;若使用字符型LCD(如2004),启动信息在 Marlin/src/lcd/charui/ 下的对应文件中,修改方法类似。
  • 修改 Configuration.h 后,需重新编译整个固件,不能只烧录部分文件。
  • 如果编译报错,检查是否因修改了宏定义导致其他代码引用冲突(例如版本号被用于编译条件判断)。

代码修改前后对比

// 修改前(Configuration.h)
#define SHORT_BUILD_VERSION "2.1.2"
#define CUSTOM_MACHINE_NAME "My 3D Printer"

// 修改后
#define SHORT_BUILD_VERSION "2.1.2-Custom"
#define CUSTOM_MACHINE_NAME "MyPrinter Pro"
// 修改前(status_screen_DOGM.cpp startScreen()内)
u8g.setPrintPos(0, 20);
u8g.print(CUSTOM_MACHINE_NAME);
u8g.setPrintPos(0, 32);
u8g.print(SHORT_BUILD_VERSION);

// 修改后(增加一行自定义文字)
u8g.setPrintPos(0, 20);
u8g.print(CUSTOM_MACHINE_NAME);
u8g.setPrintPos(0, 32);
u8g.print(SHORT_BUILD_VERSION);
u8g.setPrintPos(0, 44);
u8g.print("Hello Marlin!");
Marlin固件标识修改流程 Configuration.h SHORT_BUILD_VERSION CUSTOM_MACHINE_NAME 固件名称与版本号 status_screen_DOGM.cpp startScreen() 函数 u8g.print() 调用 启动屏幕显示信息 编译固件 pio run -e mega2560 生成 .hex/.bin 烧录到主板 pio run -t upload 验证方法 1. 上电后观察LCD开机画面 2. 确认显示自定义固件名称、版本号及新增文字 3. 进入菜单 About Printer 页面核对信息 4. 无乱码、无截断 → 判定通过