sync: WIN10-I9-64G 2026-10-19
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# <产品/板卡> <功能> Release <版本>
|
||||
|
||||
<一句话:平台(Zynq-7000 型号 + 其它处理器)、本版本的功能要点。>
|
||||
|
||||
本包内容对应工程 <git 仓库/路径> 的 tag `<tag>`,<日期> 在 <哪块板> 上实测:<验收结论,逐项>。
|
||||
每个文件的完整 SHA-256 见 `00_SHA256SUMS`,部署后请逐个读回核对。
|
||||
<若有发布需求文档(如 Notes/PRxx.md),写明按哪一份制作,以及哪些内容按要求不在包内。>
|
||||
|
||||
## 1. 目录
|
||||
|
||||
| 目录 | 需求项 | 内容 |
|
||||
|---|---|---|
|
||||
| `01_petalinux_bsp/` | BSP | <正式系统 .bsp>、<救援系统 .bsp>,PetaLinux <版本> |
|
||||
| `02_qspi_flash/` | QSPI 烧写文件 | BOOT.BIN、image.ub.qspi、`qspi_full_0x0.bin`、`uboot_scripts/` |
|
||||
| `03_emmc_flash/` | eMMC/SD 烧写文件 | `p1_boot_fat/`、`emmc_deploy.sh`、`EMMC_SHA256SUMS`、原始已验证脚本 |
|
||||
| `04_rootfs/` | rootfs | `<名>_rootfs.tar.gz`(最终合成),合成脚本与 spec |
|
||||
| `05_pl_bit/` | PL bit | `<top>.bin`(板上加载的)、同次构建 `.bit` / `.hdf`(或 `.xsa`) |
|
||||
| `06_ps_runtime/` | PS 运行文件 | 应用、初始化脚本、配置、内核模块、运行数据 |
|
||||
| `07_ps_app_src/` | PS app 源码 | 应用源码 + PetaLinux meta-user 层 |
|
||||
| `08_<mcu>_app_src/` | 其它处理器源码 | <可选> |
|
||||
| `09_<mcu>_runtime/` | 部署所需 | <可选> |
|
||||
| `10_pc_tools/` | 可选 | PC 端验证工具 |
|
||||
| `README.md` | 说明 | 本文件 |
|
||||
|
||||
## 2. 版本清单
|
||||
|
||||
| 层 | 文件 | 板上位置 | sha256 前 16 位 |
|
||||
|---|---|---|---|
|
||||
| QSPI | BOOT.BIN(FSBL + U-Boot <配置>) | QSPI 0x0 | |
|
||||
| QSPI | image.ub.qspi(救援) | QSPI <偏移> | |
|
||||
| 启动分区 | image.ub | /image.ub | |
|
||||
| 启动分区 | <top>.bin(PL) | / | |
|
||||
| 根分区 | <rootfs>.tar.gz | / | |
|
||||
| rootfs | <应用 / 配置,逐个列出> | | |
|
||||
|
||||
工具链:PetaLinux <版本>,Vivado <版本>,<交叉编译器>。
|
||||
|
||||
## 3. 存储布局
|
||||
|
||||
QSPI(`sf`):
|
||||
|
||||
| 偏移 | 长度 | 内容 |
|
||||
|---|---|---|
|
||||
| 0x000000 | | BOOT.BIN,CRC32 |
|
||||
| <环境区> | | U-Boot 环境区,保持擦除(全 0xFF),使用默认 bootcmd |
|
||||
| <内核区> | | image.ub.qspi,CRC32 |
|
||||
|
||||
- `qspi_full_0x0.bin`:上表按偏移拼好的整片镜像,空隙填 0xFF,从 0x0 写入;长度 <>,CRC32 <>。
|
||||
- 默认 bootcmd = `<...>`;救援启动命令:`<...>`。
|
||||
|
||||
eMMC/SD(`<设备>`,<容量>,<分区表类型>):
|
||||
|
||||
| 分区 | 扇区 | 文件系统 | 内容 |
|
||||
|---|---|---|---|
|
||||
|
||||
## 4. 部署步骤(全新 / 出厂状态的板子)
|
||||
|
||||
0. 准备:
|
||||
- 先备份出厂内容(QSPI、eMMC、其它处理器);
|
||||
- 串口参数;
|
||||
- PC 上的 TFTP / HTTP 服务;
|
||||
- 默认网络地址表。
|
||||
1. QSPI:二选一,U-Boot 脚本或编程器写整片镜像。
|
||||
2. eMMC:
|
||||
- 进入救援 Linux,执行 `sh emmc_deploy.sh <PC_IP> [--partition]`。
|
||||
- 若该脚本未在板上整体跑过,在此明确写出来。
|
||||
3. <其它处理器> 部署。
|
||||
4. 冷启动与验收:寄存器 / 日志 / 网页 / 业务功能,逐项写出期望值。
|
||||
|
||||
## 5. 现场相关设置(换环境必须改)
|
||||
|
||||
<每板唯一值(MAC、序列号、校准/DPD 曲线),以及站点值(IP、接收端 MAC/IP),逐个写出所在文件和处理方法。>
|
||||
|
||||
## 6. <本版本的主要功能说明>
|
||||
|
||||
## 7. 从源码构建
|
||||
|
||||
<BSP → petalinux-create -s / build / package --boot;应用单独编译与单元测试;rootfs 重新合成方法;BSP 的 hw-description 与发布 bit 的关系。>
|
||||
|
||||
## 8. 已知限制
|
||||
|
||||
<未验证项、只做了部分验证的项、测试环境的异常、工具里的开发机路径等。>
|
||||
@@ -0,0 +1,74 @@
|
||||
#!/bin/sh
|
||||
# emmc_deploy.sh -- write a Zynq-7000 production system (FAT boot + ext4 root) to
|
||||
# eMMC/SD from the QSPI rescue Linux. TEMPLATE from the release_zynq7k skill:
|
||||
# fill the variables below from the board's evidence (fdisk -l / /proc/partitions,
|
||||
# the project's proven deploy script), then test it once on the board and say so
|
||||
# in the README until that happened.
|
||||
#
|
||||
# sh emmc_deploy.sh <PC_IP> [--partition]
|
||||
#
|
||||
# The PC serves, by TFTP: every file in BOOT_FILES, ROOTFS and SUMS.
|
||||
set -e
|
||||
# ---------------------------------------------------------------- board profile
|
||||
DEV=/dev/mmcblk1 # verified device node (NOT inferred from the name)
|
||||
P1_START=16 # DOS partition plan, sectors (only used with --partition)
|
||||
P1_SIZE=250032
|
||||
P1_TYPE=b # b = FAT32
|
||||
P2_START=250048 # p2 runs to the end of the device
|
||||
BOOT_FILES="image.ub system_top.bin" # copied to p1 (FAT); keep FAT capacity in mind
|
||||
ROOTFS=rootfs.tar.gz # extracted to p2 (ext4)
|
||||
SUMS=EMMC_SHA256SUMS # sha256sum -c format for BOOT_FILES + ROOTFS
|
||||
CHECK_IN_ROOT="usr/bin/app etc/init.d/app-init" # read back after writing
|
||||
# ------------------------------------------------------------------------------
|
||||
PC=${1:?usage: emmc_deploy.sh <PC_IP> [--partition]}
|
||||
W=/tmp/e2
|
||||
|
||||
if grep " / " /proc/mounts | grep -q "$(basename $DEV)"; then
|
||||
echo "running from $DEV: boot the QSPI rescue system"; exit 1
|
||||
fi
|
||||
[ -b $DEV ] || { echo "$DEV missing"; exit 1; }
|
||||
cat /sys/block/$(basename $DEV)/device/type /sys/block/$(basename $DEV)/device/name /sys/block/$(basename $DEV)/size
|
||||
|
||||
mkdir -p $W && cd $W
|
||||
for f in $SUMS $BOOT_FILES $ROOTFS; do
|
||||
rm -f $f; tftp -g -r $f $PC
|
||||
done
|
||||
sha256sum -c $SUMS # a failed transfer stops here, before any write
|
||||
echo SHA_OK
|
||||
|
||||
[ -f /etc/udev/rules.d/automount.rules ] && mv /etc/udev/rules.d/automount.rules /tmp/automount.rules.off && udevadm control --reload-rules || true
|
||||
umount ${DEV}p1 2>/dev/null || true
|
||||
umount ${DEV}p2 2>/dev/null || true
|
||||
if grep -q "$(basename $DEV)" /proc/mounts; then echo "$DEV still mounted"; exit 1; fi
|
||||
|
||||
if [ "$2" = "--partition" ]; then
|
||||
printf 'label: dos\nstart=%s, size=%s, type=%s\nstart=%s, type=83\n' \
|
||||
$P1_START $P1_SIZE $P1_TYPE $P2_START | sfdisk $DEV
|
||||
sleep 1
|
||||
fi
|
||||
[ -b ${DEV}p1 ] && [ -b ${DEV}p2 ] || { echo "no p1/p2 on $DEV (use --partition)"; exit 1; }
|
||||
|
||||
mkfs.vfat -F 32 -n BOOT ${DEV}p1
|
||||
mkfs.ext4 -F -q -L rootfs ${DEV}p2
|
||||
mkdir -p /mnt/b /mnt/r
|
||||
mount -t vfat ${DEV}p1 /mnt/b
|
||||
mount -t ext4 ${DEV}p2 /mnt/r
|
||||
for f in $BOOT_FILES; do cp $W/$f /mnt/b/$f; done
|
||||
tar xzf $W/$ROOTFS -C /mnt/r
|
||||
sync
|
||||
cd /
|
||||
umount /mnt/b
|
||||
umount /mnt/r
|
||||
sync
|
||||
fsck.vfat -n ${DEV}p1 | tail -n 1
|
||||
e2fsck -fn ${DEV}p2 | tail -n 1
|
||||
|
||||
echo 3 > /proc/sys/vm/drop_caches
|
||||
mount -o ro -t vfat ${DEV}p1 /mnt/b
|
||||
mount -o ro -t ext4 ${DEV}p2 /mnt/r
|
||||
for f in $BOOT_FILES; do sha256sum /mnt/b/$f; done
|
||||
for f in $CHECK_IN_ROOT; do sha256sum /mnt/r/$f; done
|
||||
umount /mnt/b
|
||||
umount /mnt/r
|
||||
[ -f /tmp/automount.rules.off ] && mv /tmp/automount.rules.off /etc/udev/rules.d/automount.rules || true
|
||||
echo "EMMC_DEPLOY_DONE -- compare the hashes above with 00_SHA256SUMS, then power-cycle"
|
||||
@@ -0,0 +1,27 @@
|
||||
# U-Boot commands: program the Zynq-7000 QSPI -- TEMPLATE from release_zynq7k.
|
||||
# Fill the lengths, CRC32 and offsets from scripts/qspi_image.py --layout output
|
||||
# and the board's flash layout; keep the IP addresses as placeholders.
|
||||
# Paste one line at a time on the PS console after stopping autoboot, and check
|
||||
# every crc32 / cmp.b result. A failed tftpboot must stop the sequence: never
|
||||
# let stale DDR content be written.
|
||||
# BOOT.BIN len <LEN_BOOT> crc32 <CRC_BOOT> -> QSPI 0x0
|
||||
# (bootenv) <ENV_OFF>, <ENV_LEN> erased -> default bootcmd
|
||||
# image.ub.qspi len <LEN_KERN> crc32 <CRC_KERN> -> QSPI <KERN_OFF>
|
||||
setenv ipaddr <BOARD_IP>
|
||||
setenv serverip <PC_IP>
|
||||
tftpboot 0x10000000 BOOT.BIN
|
||||
crc32 0x10000000 <LEN_BOOT>
|
||||
tftpboot 0x11000000 image.ub.qspi
|
||||
crc32 0x11000000 <LEN_KERN>
|
||||
sf probe 0
|
||||
sf erase 0x0 <BOOT_ERASE_LEN>
|
||||
sf write 0x10000000 0x0 <LEN_BOOT>
|
||||
sf read 0x12000000 0x0 <LEN_BOOT>
|
||||
cmp.b 0x10000000 0x12000000 <LEN_BOOT>
|
||||
crc32 0x12000000 <LEN_BOOT>
|
||||
sf erase <ENV_OFF> <ENV_LEN>
|
||||
sf erase <KERN_OFF> <KERN_ERASE_LEN>
|
||||
sf write 0x11000000 <KERN_OFF> <LEN_KERN>
|
||||
sf read 0x13000000 <KERN_OFF> <LEN_KERN>
|
||||
cmp.b 0x11000000 0x13000000 <LEN_KERN>
|
||||
crc32 0x13000000 <LEN_KERN>
|
||||
Reference in New Issue
Block a user