Files
skills-win/smod_atsc_dev/references/imx6.md
T
boweiandClaude Opus 5 42edf13936 sync: Shanghai-U9 2026-09-03 硬编码审计清掉 0819/0826 挂了两轮的文档类遗留
smod_atsc_dev(SKILL.md / references/imx6.md / references/fpga.md)、
fpga_update(SKILL.md / references/protocol.md)、fpga-imx6-flow(SKILL.md)
正文表格与 shell 示例里的 E:\Xilinx_design\smod\SMOD_ATSC\... 和 192.168.1.143
改成引用 skills_env.md 的 SMOD_REPO_ROOT / SMOD_BOARD_IP;shell 块统一用 $BOARD
并在块内注明取值出处。13 处锚点全部唯一命中,无行为改动。

刻意未改:各 skill 的 YAML description 里的同名字面量(那是触发关键词,不是
脚本取值,改了降低匹配率);脚本里 _env_lookup(KEY, 字面量) 形式的回落默认值;
fpga_flash/SKILL.md 的 SMOD_DTMB_CG 命令示例(属另一个工程,无对应 env 键)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018FykpdV2Y4RUWXU5PtoLqh
2026-09-03 02:52:05 +08:00

4.2 KiB
Raw Blame History

imx6 侧(atsc_app)

源码

<SMOD_REPO_ROOT>\imx6\src\atsc_app(Makefile 在这一层;SMOD_REPO_ROOT 见 ~\skills_env.md):

目录 内容
main.c 起线程:fpga_upgrade_task、tcp_task、web、lcd、gps…
bsp/ 板级:i2c_drv.c、fpga.c(FPGA 寄存器读写)、eeprom.c(配置)、dac38j82.c、dpd_proc.c、isys_config.c
talise/, adrv9009/, adi_hal/ ADI ADRV9009 驱动
sonytuner/ Sony CXD2878 + FREIA(CXD6821) 解调驱动(从 EMV9.3 移植,见 PR04)
task/ upgrade.c(软件包升级)、tcp_task.c、iweb_task.c、tsoip.c、iq_rx.c
inc/ 头文件;fpga.h 里 FPGA_UPGRADE_I2C_REG_ADDRES = 0xE0

同级还有 imx6/src/web/(cgi + www 页面,含 upload.cgi 远程升级入口)。

交叉编译

工具链在 Ubuntu VM 上(主机/用户/密码见 ~\skills_env.md 的 CROSS_VM_HOST / CROSS_VM_USER / CROSS_VM_PASS——IP 随 VMware 网段变动,不要写死):

/opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

流程(scripts/imx6_app.py build 已封装):

  1. Windows 侧从 git 打包源码 —— 用 HEAD 而不是工作区,这样构建的东西可追溯: git -C my_exciter archive --format=tar -o app.tar HEAD:imx6/src/atsc_app(约 13 MB)
  2. SFTP 上传到 VM,解到 ~/atsc_head_build(一个干净目录;不要碰 ~/atsc_tsoip_build/ 之类的旧目录)
  3. bash -lc 'source <envsetup>; cd ~/atsc_head_build && make' → 产出 imx_atsc_app(~2.9 MB ELF)
  4. SFTP 取回 Windows

VM 的 sshd 是现代版本,paramiko 5 / OpenSSH 都能连。若报 kex_exchange_identification: Connection closed,是 VM 的 sshd 挂了,请用户 sudo systemctl restart sshd。

部署到设备

设备 SMOD_BOARD_IP(见 ~\skills_env.md),用户 root(密码见同文件的 SMOD_SSH_PASS)。它的 SSH 是老 dropbear,有两个坑:

  1. 算法太老:paramiko 5 会报 unknown cipher / no acceptable host key。 要用 paramiko 2.12(有 TripleDES / aes-cbc / ssh-rsa): python -m pip install --target <dir> paramiko==2.12.0,然后 PYTHONPATH=<dir> 跑。 命令行 ssh 则加 -o HostKeyAlgorithms=+ssh-rsa。

  2. 没有 SFTP 子系统:open_sftp() 直接 EOF during negotiation。传文件走 exec channel:

    ch = client.get_transport().open_session()
    ch.exec_command("cat > /aw/anywave/app/imx_atsc_app_head")
    ch.sendall(open(local_bin, "rb").read())
    ch.shutdown_write(); assert ch.recv_exit_status() == 0
    

    (另一条老路是 SSH 反向端口转发 + 设备侧 wget,见 Task04;现在没必要了。)

部署顺序 —— 先落一个新名字,验证 md5,再覆盖 active,这样传输失败不会毁掉能跑的 app:

cat > /aw/anywave/app/imx_atsc_app_head
chmod 755 imx_atsc_app_head
md5sum 对比
cp -a imx_atsc_app_head imx_atsc_app     # 覆盖 active

scripts/imx6_app.py deploy 就是这个顺序。已知好用的备份是 imx_atsc_app.bak_pre_rx1。

改完 app 要冷启动(断电重启,遵守上电时序)让 rc.local 拉起新进程。

观察设备

  • 日志:/var/module_log/imx_atsc_app.log。健康标志:TALISE_radioOn、fb init state ok、 fpga[0xBB]=0x03(sync=1 / tvalid=1)。imx6_app.py log 直接拉。
  • 配置:/aw/anywave/cfg/exc_cfg.conf,[BLK_SYS_PARA] reg50 选输入源 —— 0=Tuner,1=TS,2=EAS,3=TSoIP。
  • 网页:http://<SMOD_BOARD_IP>(sys_rf.html、sys_ts.html、sys_set.html、 status_info.html、log_output.html、以及远程升级的 upload.cgi)。
  • 串口控制台(COM 号见 ~/fpga_imx6_flow.json 的 ports.imx6,逐机而异、不入库)能用,但会自动登出、比较飘。优先走网络 SSH读日志和跑命令。
  • 直接读 FPGA 寄存器可以 i2cget,但它会和 app 抢总线;带调试 ILA 的 bit 下更不可靠。 以 app 日志为准,或者临时停掉 app。

已知不能用的构建

设备上的 imx_atsc_app.rx1、以及任何 M=2 / lane 0x04 的变体会打断 TX。 git HEAD 的版本是 RX1-on-framerA(M=4 / lane 0x03 / RX1RX2)+ TX 正常的已知好版本。