ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Crochet新板卡支持完全指南:基于NewBoardExample手把手为FreeBSD添加你的开发板

Crochet新板卡支持完全指南:基于NewBoardExample手把手为FreeBSD添加你的开发板 Crochet新板卡支持完全指南基于NewBoardExample手把手为FreeBSD添加你的开发板【免费下载链接】crochetBuild FreeBSD images for RaspberryPi, BeagleBone, PandaBoard, and others.项目地址: https://gitcode.com/gh_mirrors/cr/crochetCrochet 是一款构建可启动 FreeBSD 磁盘镜像的开源工具已支持 RaspberryPi、BeagleBone、PandaBoard 等 30 多款开发板。本文基于board/NewBoardExample官方模板手把手教你如何为 Crochet 添加一块新开发板从创建板卡目录、编写启动配置到最终生成可烧录的 FreeBSD 镜像。一、先认识 Crochet3 分钟了解项目结构Crochet 的核心用法很简单准备一个配置文件运行主脚本就能得到一张可启动的 FreeBSD 镜像git clone https://gitcode.com/gh_mirrors/cr/crochet cd crochet sudo /bin/sh crochet.sh -c 配置文件它的关键设计是一块板卡 一个目录。所有板卡定义都放在board/目录下每个子目录就是一个完整板卡例如目录作用board/BeagleBone/单镜像 独立 FAT 启动分区ARM 板经典参考board/VersatilePB/双镜像一个引导内核、一个 Worldboard/GenericI386/单分区、启动部件集成x86 参考board/NewBoardExample/新板卡骨架模板含完整注释lib/所有公共辅助函数分区、U-Boot、FreeBSD 构建等option/可插拔功能选项用户、Swap、NTP 等添加新板卡前建议先通读一遍 board/NewBoardExample/README 和 1 个真实板卡的定义理解后再动手。二、板卡定义的核心机制阶段 策略理解 Crochet 只需掌握一个概念策略列表strategy list。配置文件通过strategy_add把一个个 shell 函数注册到不同阶段构建时所有函数按阶段顺序执行。阶段定义见lib/strategy.sh最常用的有阶段时机典型任务PHASE_CHECK构建前检查 U-Boot 源码、交叉编译工具是否就绪PHASE_BUILD_OTHERFreeBSD 世界与内核编译完之后编译 U-Boot、ubldr 等第三方部件PHASE_PARTITION_LWW制作镜像文件时分区LWW 只执行最后注册的一个PHASE_BOOT_INSTALL启动分区挂载后cwd 已在启动分区拷贝 bootloader、DTB、ubldrPHASE_FREEBSD_BOARD_INSTALLFreeBSD 分区安装世界之后安装内核、放板卡专属文件LWWLast Write Wins阶段只能生效一个注册项分区、挂载这类只能有一份方案的步骤都归此类。一个板卡定义只需要3 个必备变量写在setup.sh中KERNCONFXXX # 内核配置名须存在于 FreeBSD 源码树中 TARGET_ARCHarmv7 # 目标架构 IMAGE_SIZE$((1000 * 1000 * 1000)) # 镜像大小单位字节三、第 1 步复制 NewBoardExample 创建板卡目录把模板目录复制为新板卡把MyBoard换成你的板子名cp -r board/NewBoardExample board/MyBoard标准目录长这样board/MyBoard/ ├── setup.sh # 唯一必须文件板卡定义核心 ├── README # 你这块板卡的烧录/启动说明 ├── files/ # U-Boot 补丁、二进制 blob 等辅助文件 │ ├── uboot_patch10_makefile_lc.patch │ └── uboot_patch11_examples_api_makefile_static.patch └── overlay/ # 会被原样拷贝进 FreeBSD 分区 └── etc/ ├── fstab └── rc.confoverlay/下的文件会被自动拷贝到镜像里无需额外代码——这是放置etc/fstab、etc/rc.conf、boot/loader.rc等静态配置的标准方式机制实现在lib/board.sh。四、第 2 步在各阶段注册操作打开board/MyBoard/setup.sh模板里已按阶段分节写好详细注释。以最常用的 ARM 板为例最小可用骨架大致是# 1. 检查阶段确认 U-Boot 源码就位会提示你如何获取 strategy_add $PHASE_CHECK myboard_check_uboot # 2. 构建阶段编译 ubldrU-Boot 的 FreeBSD 引导器 strategy_add $PHASE_BUILD_OTHER freebsd_ubldr_build UBLDR_LOADADDR0x2000000 # 3. 分区MBR 32MB FAT 启动分区 剩余空间 UFS myboard_partition_image ( ) { disk_partition_mbr disk_fat_create 32m 16 disk_ufs_create } strategy_add $PHASE_PARTITION_LWW myboard_partition_image # 4. 填充启动分区此时 cwd 已在 FAT 分区根 strategy_add $PHASE_BOOT_INSTALL freebsd_ubldr_copy_ubldr . strategy_add $PHASE_BOOT_INSTALL freebsd_install_fdt myboard.dts myboard.dtb # 5. FreeBSD 分区安装内核 strategy_add $PHASE_FREEBSD_BOARD_INSTALL board_default_installkernel .几个能省一半工作量的辅助函数定义在lib/uboot.sh、lib/disk.sh、lib/freebsd.shuboot_test 变量名 测试文件—— 检查 U-Boot 源码缺失时自动打印获取命令uboot_patch / uboot_configure / uboot_build—— 打补丁、配置、编译一条龙disk_partition_mbr / disk_fat_create / disk_ufs_create—— 标准 MBR 分区组合拳freebsd_install_fdt—— 从 FreeBSD 源码树取.dts并自动编译成.dtb拷贝过去五、第 3 步搞定 U-Boot 引导链ARM 板重点FreeBSD/ARM 平台普遍采用U-Boot ubldr双引导器架构分工非常清晰U-Boot懂硬件SD 卡、内存地址、串口ubldr懂 FreeBSDFreeBSD 源码树自带的 loader(8) 变体通用代码、无板卡相关逻辑要让这条链跑通U-Boot 通常需要做 3 处改动模板 README 和files/目录都给了现成答案FreeBSD 构建补丁让 U-Boot 能在 FreeBSD 上编译。files/里的两个补丁修复cc -print-file-name问题、给PLATFORM_LIBS加-lc可作起点按你的 U-Boot 版本微调。启用 API 和 ELF 加载在include/configs/yourboard.h中加入CONFIG_API、CONFIG_CMD_ELFubldr 依赖 U-Boot API 做硬件交互且以 ELF 方式加载。自定义CONFIG_BOOTCOMMAND让 U-Boot 依次加载 uEnv.txt允许用户自定义、DTB、ubldr最后执行 ubldr。一个容易踩的坑ubldr 是 ELF 可执行文件会链接到固定加载地址不同板卡内存起始地址不同所以UBLDR_LOADADDR必须按你的板卡实际调整。另外开发期间 U-Boot 源码会被原地打补丁一旦打到一半状态删掉重新检出源码即可。六、第 4 步配置 overlay 文件把overlay/etc/fstab改成你板卡的真实挂载方案例如 BeagleBone 把 FAT 启动分区挂到/boot/msdos# /boot/msdos 为 FAT 启动分区 /dev/md0 /boot/msdos msdosfs ro 0 0 /dev/ad0s2 / ufs rw 1 1同时用overlay/etc/rc.conf打开 sshd、串口控制台等服务。这些文件会被自动拷入镜像的对应路径顺序上是板卡 overlay → 全局 overlay → work/overlay层层覆盖无需一行拷贝代码。七、第 5 步构建镜像并上板验证在 Crochet 根目录写一个只含一行board_setup MyBoard的配置文件其余可选参考 config.sh.sample 的丰富注释然后sudo /bin/sh crochet.sh -c myboard.config.sh脚本会按阶段自动执行缺什么就明确告诉你怎么补比如 U-Boot 源码下载地址补齐后重跑即可。首次完整构建可能耗时数小时之后 Crochet 会把 world、内核结果缓存在work/目录只调整镜像布局时几分钟就能出新镜像。成功后脚本会给出dd命令把镜像写入 SD 卡上电开机。如果启动失败work/下保留着完整的构建日志是排查第一站。八、常见问题速查 该抄哪个现成板卡看引导结构独立启动分区选 BeagleBone双镜像选 VersatilePBx86 选 GenericI386——三者结构差异最大基本能覆盖所有情况board/NewBoardExample/setup.sh头部注释也给出了这个对照。 U-Boot 一定要从源码编译吗是Crochet 坚持工具类部件永远从源码构建二进制 blob 尽量少。这要求你定义PHASE_CHECK时给出准确的下载指引Crochet 从不自动下载任何东西也从不改动宿主系统。 内核配置必须放在 FreeBSD 源码树里吗目前是的。KERNCONF指向的配置文件需位于源码树内树外配置仍是社区待办事项。 跑通之后做什么写一份board/MyBoard/README说明烧录与串口参数然后考虑把成果回馈给项目——board/下 30 多款板卡都是这么积累的。结语为 FreeBSD 添加新开发板在 Crochet 里就是复制模板 → 填 3 个变量 → 注册几个阶段 → 调通 U-Boot四件事。借助lib/下封装好的分区、U-Boot、ubldr 辅助函数最难的部分已有标准答案。打开board/NewBoardExample/setup.sh每一行注释都是一步操作指引现在就可以开始你的第一块板卡了。【免费下载链接】crochetBuild FreeBSD images for RaspberryPi, BeagleBone, PandaBoard, and others.项目地址: https://gitcode.com/gh_mirrors/cr/crochet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表