ITADN

Better support for creating user board targets

#919Opensluubb 创建于 2026-03-07
S
sluubbcommented
When attempting to create a custom, project-specific board target for the XIAO RP2040 I found that it was very difficult to reuse parts from predefined boards that use the RP2040 chip. More specifically, it required a very roundabout way to setup the bootloader. build.zig: ```zig const std = @import("std"); const microzig = @import("microzig"); const MicroBuild = microzig.MicroBuild(.{ .rp2xxx = true, }); pub fn build(b: *std.Build) void { const mz_dep = b.dependency("microzig", .{}); const mb = MicroBuild.init(b, mz_dep) orelse return; const pico_board = mb.ports.rp2xxx.boards.raspberrypi.pico.board orelse return; const target = mb.ports.rp2xxx.chips.rp2040.derive(.{ .board = .{ .name = "XIAO RP2040", .root_source_file = b.path("boards/xiao_rp2040.zig"), .imports = pico_board.imports, }, }); const firmware = mb.add_firmware(.{ .name = "main", .target = target, .optimize = .ReleaseSmall, .root_source_file = b.path("src/main.zig"), }); mb.install_firmware(firmware, .{}); } ``` boards/xiao_rp2040.zig: ```zig const microzig = @import("microzig"); const hal = microzig.hal; pub const xosc_freq = 12_000_000; pub const bootrom = @import("shared/rp2040_bootrom.zig"); comptime { _ = bootrom; } pub const pin_config = hal.pins.GlobalConfiguration{ .GPIO12 = .{ .name = "rgb_led", .direction = .out }, .GPIO17 = .{ .name = "user_led_r", .direction = .out }, .GPIO16 = .{ .name = "user_led_g", .direction = .out }, .GPIO25 = .{ .name = "user_led_b", .direction = .out }, }; ``` I find I'm having to reference the generated bootloader for rp2040 boards though other boards (here the rp pico) and copy over the `rp2040_bootrom.zig` to my project for it to compile, which feels convoluted. Is it possible to streamline this process by, for example, exposing the bootloader generation to the user?
0 条评论