
1. 准备工作与环境搭建在开始重新打包ELF1开发板的文件系统之前我们需要做好充分的准备工作。首先确保你有一台运行Ubuntu的开发主机建议使用16.04或18.04版本因为这些版本在嵌入式开发领域有较好的兼容性。1.1 获取原始文件系统镜像从ElfBoard官方提供的开发板资料包中找到文件系统镜像ELF1开发板资料包/04-烧写镜像/04-0 eMMC镜像/rootfs.tar.bz2这个压缩包包含了完整的根文件系统结构包括/bin、/etc、/lib等标准Linux目录。建议将其复制到你的家目录下进行操作mkdir -p ~/elf1_fs cp /path/to/rootfs.tar.bz2 ~/elf1_fs/1.2 安装必要工具我们需要安装一些必要的工具来支持文件系统的解压和重新打包sudo apt-get update sudo apt-get install fakeroot bzip2fakeroot工具特别重要它允许普通用户在打包文件系统时模拟root权限避免文件权限和属主信息丢失。这在团队协作开发环境中尤为重要因为直接使用root账户操作会带来安全风险。2. 解压与修改文件系统2.1 解压原始文件系统进入工作目录并解压文件系统cd ~/elf1_fs mkdir rootfs tar xjf rootfs.tar.bz2 -C rootfs/解压完成后你会看到rootfs目录下出现了完整的Linux文件系统结构。建议先删除原始压缩包以避免混淆rm rootfs.tar.bz22.2 文件系统结构调整现在你可以根据项目需求修改文件系统内容。常见的修改包括添加自定义应用程序 将编译好的可执行文件放入/usr/local/bin目录修改配置文件 /etc目录下的网络配置、启动脚本等更新库文件 将新的.so库文件放入/lib或/usr/lib目录重要提示在修改/etc目录下的文件时要特别小心错误的配置可能导致系统无法启动。建议每次只修改一个配置项并做好修改记录。3. 重新打包文件系统3.1 使用fakeroot保持文件权限在嵌入式系统中文件权限和属主信息至关重要。使用以下命令打包cd ~/elf1_fs sudo fakeroot tar cjf new_rootfs.tar.bz2 -C rootfs .这里有几个关键点需要注意cjf参数表示创建bzip2压缩的tar包-C rootfs .表示在rootfs目录下操作打包当前目录所有内容必须使用sudo fakeroot来保持文件权限3.2 验证打包结果打包完成后建议验证一下新文件系统的完整性tar tjf new_rootfs.tar.bz2 | head -n 20这会列出压缩包中的前20个文件检查权限和路径是否正确。特别要关注关键设备文件如/dev/console的权限是否为600/etc/shadow文件权限是否为640/bin目录下的可执行文件是否有执行权限4. 烧写新文件系统4.1 替换烧写工具中的文件系统根据你使用的烧写方法替换对应的文件系统镜像OTG烧写方式 将new_rootfs.tar.bz2复制到ELF1开发板资料包/06-常用工具/06-4 烧写工具/OTG烧写/mfgtools/Profiles/Linux/OS Firmware/files/SD卡烧写方式 将镜像复制到SD卡的相应分区。4.2 烧写注意事项烧写前务必备份原始文件系统首次烧写建议使用OTG方式它比SD卡方式更可靠烧写过程中不要断开开发板电源烧写完成后建议先通过串口控制台观察系统启动日志5. 常见问题排查5.1 文件系统启动失败如果开发板无法正常启动可能的原因包括/etc/inittab配置错误 检查是否指定了正确的控制台和启动级别关键设备文件缺失 /dev目录下必须包含console、null等基本设备节点动态链接库不匹配 使用ldd命令检查应用程序依赖的库文件5.2 文件权限问题如果遇到权限相关问题可以在开发主机上使用chroot进入文件系统环境检查对比原始文件系统和修改后的权限差异tar tvf original_rootfs.tar.bz2 original_perms.txt tar tvf new_rootfs.tar.bz2 new_perms.txt diff original_perms.txt new_perms.txt5.3 空间不足问题i.MX6ULL的eMMC存储空间有限如果打包后的文件系统过大使用du -sh检查各目录大小清理不必要的文档和示例文件考虑使用SquashFS等压缩率更高的文件系统格式6. 进阶技巧6.1 自动化打包脚本对于需要频繁修改和打包的场景可以创建自动化脚本#!/bin/bash set -e WORK_DIR~/elf1_fs FS_NAMErootfs-$(date %Y%m%d).tar.bz2 cd $WORK_DIR rm -rf rootfs mkdir rootfs tar xjf original_rootfs.tar.bz2 -C rootfs/ # 在这里添加你的自定义修改步骤 sudo fakeroot tar cjf $FS_NAME -C rootfs . echo New filesystem image: $WORK_DIR/$FS_NAME6.2 差分更新技术对于生产环境可以考虑使用差分更新来减少烧写时间使用bsdiff生成新旧文件系统的差异包在设备端使用bspatch应用更新配合校验机制确保更新可靠性6.3 文件系统优化建议使用strip减小二进制文件大小清理不必要的locale文件将静态不变的目录挂载为只读考虑使用overlayfs实现临时文件的写入在实际项目中我通常会保留至少三个版本的文件系统镜像原始镜像、当前稳定版本镜像和开发测试镜像。每次重大修改前都会创建一个新的版本目录这种习惯帮助我多次快速回退到可用状态。