sync: WIN10-I9-64G 2026-07-20
This commit is contained in:
@@ -194,10 +194,10 @@ push it to the imx6). All of this is **network-based and fast** — no slow seri
|
|||||||
**Hosts / creds**
|
**Hosts / creds**
|
||||||
- **imx6 mgmt: `192.168.1.143`** (Windows host is on `192.168.1.125`, same subnet — `ping` works).
|
- **imx6 mgmt: `192.168.1.143`** (Windows host is on `192.168.1.125`, same subnet — `ping` works).
|
||||||
The old memory "imx6 not reachable over the network" is **outdated**; the mgmt port is reachable.
|
The old memory "imx6 not reachable over the network" is **outdated**; the mgmt port is reachable.
|
||||||
Login: **`root` / `anywavecom`**. (The serial console still works too but its login auto-logs-out and
|
Login: **`root`**, password = `SMOD_SSH_PASS` in `~\skills_env.md`. (The serial console still works too but its login auto-logs-out and
|
||||||
is flaky; prefer network SSH for imx6 shell/log reads.)
|
is flaky; prefer network SSH for imx6 shell/log reads.)
|
||||||
- **Cross-compile VM: `bowei@192.168.223.128`** (Ubuntu, password **`lr7402`** — ask the user, don't
|
- **Cross-compile VM: `bowei@192.168.223.128`** (Ubuntu; password = `CROSS_VM_PASS` in
|
||||||
guess/brute-force). Toolchain env-setup:
|
`~\skills_env.md` — read it from there, don't guess/brute-force). Toolchain env-setup:
|
||||||
`/opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi`.
|
`/opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi`.
|
||||||
If VM SSH gives `kex_exchange_identification: Connection closed`, the VM's sshd is down/hung —
|
If VM SSH gives `kex_exchange_identification: Connection closed`, the VM's sshd is down/hung —
|
||||||
ask the user to `sudo systemctl restart sshd`.
|
ask the user to `sudo systemctl restart sshd`.
|
||||||
@@ -220,11 +220,11 @@ push it to the imx6). All of this is **network-based and fast** — no slow seri
|
|||||||
|
|
||||||
**Full modify_imx6 flow (validated)**
|
**Full modify_imx6 flow (validated)**
|
||||||
1. Windows: `git archive --format=tar -o head_atsc.tar HEAD:imx6/src/atsc_app` (13 MB, self-contained).
|
1. Windows: `git archive --format=tar -o head_atsc.tar HEAD:imx6/src/atsc_app` (13 MB, self-contained).
|
||||||
2. paramiko→VM (pw `lr7402`): SFTP the tar up; extract to a **FRESH dir** (`~/atsc_head_build`, never
|
2. paramiko→VM (pw: `CROSS_VM_PASS` from `~\skills_env.md`): SFTP the tar up; extract to a **FRESH dir** (`~/atsc_head_build`, never
|
||||||
touch `atsc_tsoip_build/` etc.); build:
|
touch `atsc_tsoip_build/` etc.); build:
|
||||||
`bash -lc 'source <envsetup>; cd ~/atsc_head_build && make'` → output `imx_atsc_app` (~2.92 MB ELF).
|
`bash -lc 'source <envsetup>; cd ~/atsc_head_build && make'` → output `imx_atsc_app` (~2.92 MB ELF).
|
||||||
3. paramiko→VM SFTP the built `imx_atsc_app` down to Windows.
|
3. paramiko→VM SFTP the built `imx_atsc_app` down to Windows.
|
||||||
4. paramiko-2.12→imx6 (pw `anywavecom`): `cat >`-push it to `/aw/anywave/app/imx_atsc_app_head`,
|
4. paramiko-2.12→imx6 (pw: `SMOD_SSH_PASS` from `~\skills_env.md`): `cat >`-push it to `/aw/anywave/app/imx_atsc_app_head`,
|
||||||
`chmod 755`, `cp -a imx_atsc_app_head imx_atsc_app` (swap active; golden stays as
|
`chmod 755`, `cp -a imx_atsc_app_head imx_atsc_app` (swap active; golden stays as
|
||||||
`imx_atsc_app.bak_pre_rx1`), md5-verify.
|
`imx_atsc_app.bak_pre_rx1`), md5-verify.
|
||||||
5. Cold-boot (tools_hw blast_off→power_off→power_on, TX-safe) so rc.local runs the new app.
|
5. Cold-boot (tools_hw blast_off→power_off→power_on, TX-safe) so rc.local runs the new app.
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ DPD 的 sample&load 和升级数据流共用同一条 SPI1,而 FPGA 在升级
|
|||||||
curl -s -b "session=$SESS" "http://192.168.1.143/atsc_status_cfg.cgi?sys_cfg=&"
|
curl -s -b "session=$SESS" "http://192.168.1.143/atsc_status_cfg.cgi?sys_cfg=&"
|
||||||
```
|
```
|
||||||
|
|
||||||
网页账号是 **`anywavecom` / `anywavecom`**(不是 `root`;`root/anywavecom` 是 SSH 的)。
|
网页账号见 `~\skills_env.md` 的 `SMOD_WEB_USER` / `SMOD_WEB_PASS`(不是 `root`;SSH 凭据是 `SMOD_SSH_USER` / `SMOD_SSH_PASS`)。
|
||||||
|
|
||||||
### 3. 烧进去
|
### 3. 烧进去
|
||||||
|
|
||||||
@@ -94,7 +94,7 @@ python scripts/fpga_ru.py --mcs ... --dry-run # 只校验文件,不碰硬
|
|||||||
- **`ABORT_ERROR` 出现在第一帧** → mcs 格式不对,先跑 `--dry-run`。
|
- **`ABORT_ERROR` 出现在第一帧** → mcs 格式不对,先跑 `--dry-run`。
|
||||||
- **`ABORT_ERROR` 出现在数据流中后段** → 怀疑 SPI1 上有别人(DPD)在写,把 ADPC 关掉重试。
|
- **`ABORT_ERROR` 出现在数据流中后段** → 怀疑 SPI1 上有别人(DPD)在写,把 ADPC 关掉重试。
|
||||||
- **没有应答 / 超时** → app 的 `sys_ready` 还是 0,或者 app 没在跑。
|
- **没有应答 / 超时** → app 的 `sys_ready` 还是 0,或者 app 没在跑。
|
||||||
`ssh root@192.168.1.143 'ps | grep atsc'`(SSH 密码 `anywavecom`,dropbear 老得很,
|
`ssh root@192.168.1.143 'ps | grep atsc'`(SSH 密码见 `~\skills_env.md` 的 `SMOD_SSH_PASS`,dropbear 老得很,
|
||||||
命令行 ssh 要加 `-o HostKeyAlgorithms=+ssh-rsa`)。
|
命令行 ssh 要加 `-o HostKeyAlgorithms=+ssh-rsa`)。
|
||||||
|
|
||||||
> 别用 `python ssh.py "tail -f ..."` 之类一次性读到 EOF 的封装去跟日志 —— 它永远不返回,
|
> 别用 `python ssh.py "tail -f ..."` 之类一次性读到 EOF 的封装去跟日志 —— 它永远不返回,
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ FPGA 做 8VSB 调制 / DPD / AGC / TS 前处理,imx6 跑 `atsc_app`(配置 A
|
|||||||
| FPGA / Flash | `xc7a200tfbg676-2` / Winbond **w25q128bv**(128 Mbit = 16 MB,SPIx1) |
|
| FPGA / Flash | `xc7a200tfbg676-2` / Winbond **w25q128bv**(128 Mbit = 16 MB,SPIx1) |
|
||||||
| Vivado | `D:\Xilinx\Vivado\2018.1`(`bin\vivado.bat`) |
|
| Vivado | `D:\Xilinx\Vivado\2018.1`(`bin\vivado.bat`) |
|
||||||
| imx6 源码 | `my_exciter\imx6\src\atsc_app`(Makefile 在该目录根) |
|
| imx6 源码 | `my_exciter\imx6\src\atsc_app`(Makefile 在该目录根) |
|
||||||
| imx6 设备 | `192.168.1.143`,`root` / `anywavecom`(网页 + SSH;Windows 主机 `192.168.1.125` 同网段) |
|
| imx6 设备 | `192.168.1.143`,用户 `root`,密码见 `~\skills_env.md` 的 `SMOD_SSH_PASS`(网页 + SSH;Windows 主机 `192.168.1.125` 同网段) |
|
||||||
| 交叉编译 VM | `bowei@192.168.223.128`,密码 `lr7402`,构建目录 `~/atsc_head_build` |
|
| 交叉编译 VM | `bowei@192.168.223.128`,密码见 `~\skills_env.md` 的 `CROSS_VM_PASS`,构建目录 `~/atsc_head_build` |
|
||||||
| 工具链 | `/opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi` |
|
| 工具链 | `/opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi` |
|
||||||
| app 部署路径 | `/aw/anywave/app/imx_atsc_app`(先写 `imx_atsc_app_head`,再 `cp -a` 覆盖 active) |
|
| app 部署路径 | `/aw/anywave/app/imx_atsc_app`(先写 `imx_atsc_app_head`,再 `cp -a` 覆盖 active) |
|
||||||
| app 日志 | `/var/module_log/imx_atsc_app.log` |
|
| app 日志 | `/var/module_log/imx_atsc_app.log` |
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
## 交叉编译
|
## 交叉编译
|
||||||
|
|
||||||
工具链在 VM `bowei@192.168.223.128`(密码 `lr7402`):
|
工具链在 VM `bowei@192.168.223.128`(密码见 `~\skills_env.md` 的 `CROSS_VM_PASS`):
|
||||||
|
|
||||||
```
|
```
|
||||||
/opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
|
/opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
|
||||||
@@ -36,7 +36,7 @@ VM 的 sshd 是现代版本,paramiko 5 / OpenSSH 都能连。若报
|
|||||||
|
|
||||||
## 部署到设备
|
## 部署到设备
|
||||||
|
|
||||||
设备 `192.168.1.143`,`root` / `anywavecom`。**它的 SSH 是老 dropbear**,有两个坑:
|
设备 `192.168.1.143`,用户 `root`(密码见 `~\skills_env.md` 的 `SMOD_SSH_PASS`)。**它的 SSH 是老 dropbear**,有两个坑:
|
||||||
|
|
||||||
1. **算法太老**:paramiko 5 会报 `unknown cipher` / `no acceptable host key`。
|
1. **算法太老**:paramiko 5 会报 `unknown cipher` / `no acceptable host key`。
|
||||||
要用 **paramiko 2.12**(有 TripleDES / aes-cbc / ssh-rsa):
|
要用 **paramiko 2.12**(有 TripleDES / aes-cbc / ssh-rsa):
|
||||||
|
|||||||
@@ -25,19 +25,45 @@ touch the relays; that sequencing lives in the vivado-mcp tools.
|
|||||||
import argparse
|
import argparse
|
||||||
import hashlib
|
import hashlib
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import tarfile
|
import tarfile
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
|
|
||||||
|
def _env_lookup(key, default=None):
|
||||||
|
"""Machine-local values (paths, IPs, credentials) live in ~/skills_env.md, never in git.
|
||||||
|
An OS environment variable of the same name overrides the file."""
|
||||||
|
v = os.environ.get(key)
|
||||||
|
if v:
|
||||||
|
return v
|
||||||
|
path = os.path.join(os.path.expanduser("~"), "skills_env.md")
|
||||||
|
try:
|
||||||
|
with open(path, encoding="utf-8") as f:
|
||||||
|
for line in f:
|
||||||
|
m = re.match(rf"\s*{key}\s*=\s*(\S+)", line)
|
||||||
|
if m:
|
||||||
|
return m.group(1)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
if default is None:
|
||||||
|
sys.exit(f"missing {key}: add it to ~/skills_env.md or set it as an env var")
|
||||||
|
return default
|
||||||
|
|
||||||
|
|
||||||
REPO = r"E:\Xilinx_design\smod\SMOD_ATSC\my_exciter"
|
REPO = r"E:\Xilinx_design\smod\SMOD_ATSC\my_exciter"
|
||||||
APP_SUBDIR = "imx6/src/atsc_app"
|
APP_SUBDIR = "imx6/src/atsc_app"
|
||||||
|
|
||||||
VM_HOST, VM_USER, VM_PASS = "192.168.223.128", "bowei", "lr7402"
|
VM_HOST = _env_lookup("CROSS_VM_HOST", "192.168.223.128")
|
||||||
|
VM_USER = _env_lookup("CROSS_VM_USER", "bowei")
|
||||||
|
VM_PASS = _env_lookup("CROSS_VM_PASS")
|
||||||
VM_BUILD_DIR = "atsc_head_build" # relative to the VM home dir
|
VM_BUILD_DIR = "atsc_head_build" # relative to the VM home dir
|
||||||
TOOLCHAIN = "/opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi"
|
TOOLCHAIN = "/opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi"
|
||||||
|
|
||||||
IMX_HOST, IMX_USER, IMX_PASS = "192.168.1.143", "root", "anywavecom"
|
IMX_HOST = _env_lookup("SMOD_BOARD_IP", "192.168.1.143")
|
||||||
|
IMX_USER = _env_lookup("SMOD_SSH_USER", "root")
|
||||||
|
IMX_PASS = _env_lookup("SMOD_SSH_PASS")
|
||||||
IMX_APP_DIR = "/aw/anywave/app"
|
IMX_APP_DIR = "/aw/anywave/app"
|
||||||
IMX_STAGING = f"{IMX_APP_DIR}/imx_atsc_app_head"
|
IMX_STAGING = f"{IMX_APP_DIR}/imx_atsc_app_head"
|
||||||
IMX_ACTIVE = f"{IMX_APP_DIR}/imx_atsc_app"
|
IMX_ACTIVE = f"{IMX_APP_DIR}/imx_atsc_app"
|
||||||
|
|||||||
+1
-1
@@ -105,7 +105,7 @@ commit + push 一次,并在 codex 侧 pull,保证两边一致。
|
|||||||
校验方式(路径以 skills_env.md 的 `CONDA_LANGGRAPH_PYTHON` 为准):
|
校验方式(路径以 skills_env.md 的 `CONDA_LANGGRAPH_PYTHON` 为准):
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
& <CONDA_LANGGRAPH_PYTHON> -c "import langgraph, langchain; print('langgraph env OK')"
|
& <CONDA_LANGGRAPH_PYTHON> -c "import langgraph, langgraph.graph, langchain_core; print('langgraph env OK')"
|
||||||
```
|
```
|
||||||
|
|
||||||
失败(环境不存在或包缺失)→ 调用 `langgraph-vivado-install` skill 完成安装,
|
失败(环境不存在或包缺失)→ 调用 `langgraph-vivado-install` skill 完成安装,
|
||||||
|
|||||||
Reference in New Issue
Block a user