seeed-jetson-developer 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- seeed_jetson_developer-0.1.0/LICENSE +21 -0
- seeed_jetson_developer-0.1.0/MANIFEST.in +11 -0
- seeed_jetson_developer-0.1.0/PKG-INFO +170 -0
- seeed_jetson_developer-0.1.0/README.md +116 -0
- seeed_jetson_developer-0.1.0/pyproject.toml +57 -0
- seeed_jetson_developer-0.1.0/requirements.txt +9 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/__init__.py +7 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/assets/recovery/1.png +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/assets/recovery/4.jpg +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/assets/recovery/97.png +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/assets/recovery/button.jpg +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/assets/recovery/classic_fc_rec_2.png +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/assets/recovery/flash.jpg +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/assets/recovery/flash1.jpg +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/assets/recovery/flash_1.png +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/assets/recovery/industrial_rec_2.png +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/assets/recovery/mini_lsusb_3.png +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/assets/recovery/reComputer_mini_rec.png +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/assets/recovery/reset.png +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/assets/recovery/robotics_lsusb_f.png +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/cli.py +113 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/core/__init__.py +3 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/core/config.py +45 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/core/device.py +14 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/core/events.py +28 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/core/platform_detect.py +27 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/core/runner.py +284 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/data/l4t_data.json +844 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/data/product_images.json +226 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/data/recovery_guides.json +222 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/data/recovery_guides.py +320 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/flash.py +516 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/gui/__init__.py +14 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/gui/ai_chat.py +877 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/gui/flash_animation.py +315 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/gui/main_window.py +473 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/gui/main_window_modern.py +718 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/gui/main_window_sdk.py +1320 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/gui/main_window_v2.py +2997 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/gui/runtime_i18n.py +636 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/gui/styles.py +482 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/gui/theme.py +958 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/__init__.py +0 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/apps/__init__.py +2 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/apps/data/apps.json +102 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/apps/data/jetson_examples.json +632 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/apps/page.py +792 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/apps/registry.py +84 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/community/__init__.py +2 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/community/page.py +14 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/devices/__init__.py +2 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/devices/diagnostics.py +244 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/devices/page.py +595 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/flash/__init__.py +2 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/flash/page.py +16 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/flash/thread.py +81 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/remote/__init__.py +2 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/remote/agent_install_dialog.py +317 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/remote/connector.py +94 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/remote/desktop_dialog.py +336 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/remote/desktop_remote.py +223 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/remote/jetson_init.py +1243 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/remote/native_terminal.py +197 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/remote/net_share.py +384 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/remote/net_share_dialog.py +475 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/remote/page.py +1324 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/skills/__init__.py +3 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/skills/data/skills.json +442 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/skills/engine.py +636 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/modules/skills/page.py +967 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_develop/recovery.py +89 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_developer.egg-info/PKG-INFO +170 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_developer.egg-info/SOURCES.txt +76 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_developer.egg-info/dependency_links.txt +1 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_developer.egg-info/entry_points.txt +2 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_developer.egg-info/requires.txt +9 -0
- seeed_jetson_developer-0.1.0/seeed_jetson_developer.egg-info/top_level.txt +1 -0
- seeed_jetson_developer-0.1.0/setup.cfg +4 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Seeed Studio
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
include README.md
|
|
2
|
+
include LICENSE
|
|
3
|
+
include requirements.txt
|
|
4
|
+
include pyproject.toml
|
|
5
|
+
recursive-include seeed_jetson_develop/data *.json
|
|
6
|
+
recursive-include seeed_jetson_develop/assets/recovery *
|
|
7
|
+
recursive-include seeed_jetson_develop/modules *.json
|
|
8
|
+
prune seeed_jetson_develop/tmp-refer
|
|
9
|
+
global-exclude __pycache__
|
|
10
|
+
global-exclude *.pyc
|
|
11
|
+
global-exclude *.pyo
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: seeed-jetson-developer
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Seeed Jetson Developer Tool — Flash, device management, app market, skills, and remote development
|
|
5
|
+
Author-email: Brian9527 <brian@seeedstudio.com>, Lorraine <lorraine@seeedstudio.com>
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 Seeed Studio
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Project-URL: Homepage, https://github.com/Seeed-Studio/seeed-jetson-develop
|
|
29
|
+
Project-URL: Repository, https://github.com/Seeed-Studio/seeed-jetson-develop
|
|
30
|
+
Project-URL: Issues, https://github.com/Seeed-Studio/seeed-jetson-develop/issues
|
|
31
|
+
Keywords: jetson,nvidia,embedded,flash,seeed,recomputer
|
|
32
|
+
Classifier: Programming Language :: Python :: 3
|
|
33
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
34
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
35
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
36
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
37
|
+
Classifier: Operating System :: OS Independent
|
|
38
|
+
Classifier: Topic :: Software Development :: Embedded Systems
|
|
39
|
+
Classifier: Topic :: System :: Hardware
|
|
40
|
+
Classifier: Environment :: X11 Applications :: Qt
|
|
41
|
+
Requires-Python: >=3.10
|
|
42
|
+
Description-Content-Type: text/markdown
|
|
43
|
+
License-File: LICENSE
|
|
44
|
+
Requires-Dist: requests>=2.25.0
|
|
45
|
+
Requires-Dist: tqdm>=4.60.0
|
|
46
|
+
Requires-Dist: click>=8.0.0
|
|
47
|
+
Requires-Dist: rich>=10.0.0
|
|
48
|
+
Requires-Dist: PyQt5>=5.15.0
|
|
49
|
+
Requires-Dist: paramiko>=2.8.0
|
|
50
|
+
Requires-Dist: anthropic>=0.20.0
|
|
51
|
+
Requires-Dist: pyserial>=3.5
|
|
52
|
+
Requires-Dist: pyte>=0.8.2
|
|
53
|
+
Dynamic: license-file
|
|
54
|
+
|
|
55
|
+
# Seeed Jetson Develop Tool
|
|
56
|
+
|
|
57
|
+
面向 Seeed Studio Jetson 全系列产品的 AI 开发工作台,覆盖从刷机到应用部署的完整流程。
|
|
58
|
+
|
|
59
|
+
[](https://opensource.org/licenses/MIT)
|
|
60
|
+
[](https://www.python.org/)
|
|
61
|
+
|
|
62
|
+

|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 功能概览
|
|
67
|
+
|
|
68
|
+
| 模块 | 状态 | 说明 |
|
|
69
|
+
|------|------|------|
|
|
70
|
+
| 烧录 | ✅ | 全系列 Jetson 固件下载、SHA256 校验、一键刷写 |
|
|
71
|
+
| 设备管理 | ✅ | 快速诊断、外设检测、设备信息采集 |
|
|
72
|
+
| Skills | ✅ | 50+ 内置技能 + OpenClaw 社区技能,覆盖驱动、AI 部署、系统优化 |
|
|
73
|
+
| 环境配置 | 🚧 | 一键配置 PyTorch、Docker、jtop 等开发环境 |
|
|
74
|
+
| 应用市场 | 🚧 | AI 应用一键安装(YOLOv8、Ollama、DeepSeek 等) |
|
|
75
|
+
| 远程开发 | 🚧 | SSH 连接管理、VS Code Remote 集成 |
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 安装
|
|
80
|
+
|
|
81
|
+
**系统要求**:Ubuntu 20.04 / 22.04,Python 3.8+,PyQt5
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
git clone https://github.com/Seeed-Studio/seeed-jetson-develop.git
|
|
85
|
+
cd seeed-jetson-develop
|
|
86
|
+
pip install -r requirements.txt
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
启动 GUI:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
python3 run_v2.py
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 支持设备
|
|
98
|
+
|
|
99
|
+
### reComputer Super
|
|
100
|
+
J4012s / J4011s / J3011s / J3010s — L4T 36.4.3
|
|
101
|
+
|
|
102
|
+
### reComputer Mini
|
|
103
|
+
J4012mini / J4011mini — L4T 36.3.0, 35.5.0
|
|
104
|
+
J3011mini / J3010mini — L4T 36.4.3, 36.3.0, 35.5.0
|
|
105
|
+
|
|
106
|
+
### reComputer Robotics
|
|
107
|
+
J4012robotics / J4011robotics / J3011robotics / J3010robotics — L4T 36.4.3
|
|
108
|
+
|
|
109
|
+
### reComputer Classic
|
|
110
|
+
J4012classic / J4011classic / J3011classic / J3010classic — L4T 36.4.3, 36.4.0, 36.3.0, 35.5.0
|
|
111
|
+
|
|
112
|
+
### reComputer Industrial
|
|
113
|
+
J4012industrial / J4011industrial / J3011industrial / J3010industrial — L4T 36.4.3, 36.4.0, 36.3.0, 35.5.0, 35.3.1
|
|
114
|
+
J2012industrial / J2011industrial (Xavier NX) — L4T 35.5.0, 35.3.1
|
|
115
|
+
|
|
116
|
+
### reServer Industrial
|
|
117
|
+
J4012reserver / J4011reserver / J3011reserver / J3010reserver — L4T 36.4.3, 36.4.0, 36.3.0
|
|
118
|
+
|
|
119
|
+
### J501 系列(AGX Orin)
|
|
120
|
+
64GB / 32GB,含 GMSL 版本 — L4T 36.4.3, 36.3.0, 35.5.0
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## CLI
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# 列出支持的产品
|
|
128
|
+
python3 -m seeed_jetson_develop.cli list-products
|
|
129
|
+
|
|
130
|
+
# 查看 Recovery 教程
|
|
131
|
+
python3 -m seeed_jetson_develop.cli recovery -p j4012mini
|
|
132
|
+
|
|
133
|
+
# 刷写固件
|
|
134
|
+
python3 -m seeed_jetson_develop.cli flash -p j4012mini -l 36.3.0
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Skills
|
|
140
|
+
|
|
141
|
+
内置 50+ 技能,覆盖以下方向:
|
|
142
|
+
|
|
143
|
+
- **驱动 & 系统修复**:USB-WiFi、5G 模块、蓝牙冲突、NVMe 启动、Docker 清理
|
|
144
|
+
- **AI & 大模型**:PyTorch、Ollama、DeepSeek、Qwen2、LeRobot、vLLM
|
|
145
|
+
- **视觉 / YOLO**:YOLOv8、DeepStream、NVBLOX、深度估计
|
|
146
|
+
- **网络 & 远程**:VS Code Server、VNC、SSH 密钥、代理配置
|
|
147
|
+
- **系统优化**:最大性能模式、Swap 配置、风扇控制、缓存清理
|
|
148
|
+
|
|
149
|
+
同时支持 [OpenClaw](https://github.com/Seeed-Studio/openclaw) 格式的社区技能,放入 `skills/openclaw/` 目录后自动加载。
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 文档
|
|
154
|
+
|
|
155
|
+
- [QUICKSTART.md](docs/QUICKSTART.md) — 快速上手
|
|
156
|
+
- [USAGE.md](docs/USAGE.md) — CLI 详细用法
|
|
157
|
+
- [GUI_GUIDE.md](docs/GUI_GUIDE.md) — GUI 使用指南
|
|
158
|
+
- [CONTEXT.md](CONTEXT.md) — 工程架构说明
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 技术支持
|
|
163
|
+
|
|
164
|
+
- Wiki:https://wiki.seeedstudio.com/
|
|
165
|
+
- 论坛:https://forum.seeedstudio.com/
|
|
166
|
+
- Discord:https://discord.gg/eWkprNDMU7
|
|
167
|
+
|
|
168
|
+
## License
|
|
169
|
+
|
|
170
|
+
MIT
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Seeed Jetson Develop Tool
|
|
2
|
+
|
|
3
|
+
面向 Seeed Studio Jetson 全系列产品的 AI 开发工作台,覆盖从刷机到应用部署的完整流程。
|
|
4
|
+
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
[](https://www.python.org/)
|
|
7
|
+
|
|
8
|
+

|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 功能概览
|
|
13
|
+
|
|
14
|
+
| 模块 | 状态 | 说明 |
|
|
15
|
+
|------|------|------|
|
|
16
|
+
| 烧录 | ✅ | 全系列 Jetson 固件下载、SHA256 校验、一键刷写 |
|
|
17
|
+
| 设备管理 | ✅ | 快速诊断、外设检测、设备信息采集 |
|
|
18
|
+
| Skills | ✅ | 50+ 内置技能 + OpenClaw 社区技能,覆盖驱动、AI 部署、系统优化 |
|
|
19
|
+
| 环境配置 | 🚧 | 一键配置 PyTorch、Docker、jtop 等开发环境 |
|
|
20
|
+
| 应用市场 | 🚧 | AI 应用一键安装(YOLOv8、Ollama、DeepSeek 等) |
|
|
21
|
+
| 远程开发 | 🚧 | SSH 连接管理、VS Code Remote 集成 |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 安装
|
|
26
|
+
|
|
27
|
+
**系统要求**:Ubuntu 20.04 / 22.04,Python 3.8+,PyQt5
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
git clone https://github.com/Seeed-Studio/seeed-jetson-develop.git
|
|
31
|
+
cd seeed-jetson-develop
|
|
32
|
+
pip install -r requirements.txt
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
启动 GUI:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
python3 run_v2.py
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 支持设备
|
|
44
|
+
|
|
45
|
+
### reComputer Super
|
|
46
|
+
J4012s / J4011s / J3011s / J3010s — L4T 36.4.3
|
|
47
|
+
|
|
48
|
+
### reComputer Mini
|
|
49
|
+
J4012mini / J4011mini — L4T 36.3.0, 35.5.0
|
|
50
|
+
J3011mini / J3010mini — L4T 36.4.3, 36.3.0, 35.5.0
|
|
51
|
+
|
|
52
|
+
### reComputer Robotics
|
|
53
|
+
J4012robotics / J4011robotics / J3011robotics / J3010robotics — L4T 36.4.3
|
|
54
|
+
|
|
55
|
+
### reComputer Classic
|
|
56
|
+
J4012classic / J4011classic / J3011classic / J3010classic — L4T 36.4.3, 36.4.0, 36.3.0, 35.5.0
|
|
57
|
+
|
|
58
|
+
### reComputer Industrial
|
|
59
|
+
J4012industrial / J4011industrial / J3011industrial / J3010industrial — L4T 36.4.3, 36.4.0, 36.3.0, 35.5.0, 35.3.1
|
|
60
|
+
J2012industrial / J2011industrial (Xavier NX) — L4T 35.5.0, 35.3.1
|
|
61
|
+
|
|
62
|
+
### reServer Industrial
|
|
63
|
+
J4012reserver / J4011reserver / J3011reserver / J3010reserver — L4T 36.4.3, 36.4.0, 36.3.0
|
|
64
|
+
|
|
65
|
+
### J501 系列(AGX Orin)
|
|
66
|
+
64GB / 32GB,含 GMSL 版本 — L4T 36.4.3, 36.3.0, 35.5.0
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## CLI
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# 列出支持的产品
|
|
74
|
+
python3 -m seeed_jetson_develop.cli list-products
|
|
75
|
+
|
|
76
|
+
# 查看 Recovery 教程
|
|
77
|
+
python3 -m seeed_jetson_develop.cli recovery -p j4012mini
|
|
78
|
+
|
|
79
|
+
# 刷写固件
|
|
80
|
+
python3 -m seeed_jetson_develop.cli flash -p j4012mini -l 36.3.0
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Skills
|
|
86
|
+
|
|
87
|
+
内置 50+ 技能,覆盖以下方向:
|
|
88
|
+
|
|
89
|
+
- **驱动 & 系统修复**:USB-WiFi、5G 模块、蓝牙冲突、NVMe 启动、Docker 清理
|
|
90
|
+
- **AI & 大模型**:PyTorch、Ollama、DeepSeek、Qwen2、LeRobot、vLLM
|
|
91
|
+
- **视觉 / YOLO**:YOLOv8、DeepStream、NVBLOX、深度估计
|
|
92
|
+
- **网络 & 远程**:VS Code Server、VNC、SSH 密钥、代理配置
|
|
93
|
+
- **系统优化**:最大性能模式、Swap 配置、风扇控制、缓存清理
|
|
94
|
+
|
|
95
|
+
同时支持 [OpenClaw](https://github.com/Seeed-Studio/openclaw) 格式的社区技能,放入 `skills/openclaw/` 目录后自动加载。
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 文档
|
|
100
|
+
|
|
101
|
+
- [QUICKSTART.md](docs/QUICKSTART.md) — 快速上手
|
|
102
|
+
- [USAGE.md](docs/USAGE.md) — CLI 详细用法
|
|
103
|
+
- [GUI_GUIDE.md](docs/GUI_GUIDE.md) — GUI 使用指南
|
|
104
|
+
- [CONTEXT.md](CONTEXT.md) — 工程架构说明
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 技术支持
|
|
109
|
+
|
|
110
|
+
- Wiki:https://wiki.seeedstudio.com/
|
|
111
|
+
- 论坛:https://forum.seeedstudio.com/
|
|
112
|
+
- Discord:https://discord.gg/eWkprNDMU7
|
|
113
|
+
|
|
114
|
+
## License
|
|
115
|
+
|
|
116
|
+
MIT
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "seeed-jetson-developer"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Seeed Jetson Developer Tool — Flash, device management, app market, skills, and remote development"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = { file = "LICENSE" }
|
|
11
|
+
authors = [
|
|
12
|
+
{ name = "Brian9527", email = "brian@seeedstudio.com" },
|
|
13
|
+
{ name = "Lorraine", email = "lorraine@seeedstudio.com" },
|
|
14
|
+
]
|
|
15
|
+
keywords = ["jetson", "nvidia", "embedded", "flash", "seeed", "recomputer"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Programming Language :: Python :: 3",
|
|
18
|
+
"Programming Language :: Python :: 3.10",
|
|
19
|
+
"Programming Language :: Python :: 3.11",
|
|
20
|
+
"Programming Language :: Python :: 3.12",
|
|
21
|
+
"License :: OSI Approved :: MIT License",
|
|
22
|
+
"Operating System :: OS Independent",
|
|
23
|
+
"Topic :: Software Development :: Embedded Systems",
|
|
24
|
+
"Topic :: System :: Hardware",
|
|
25
|
+
"Environment :: X11 Applications :: Qt",
|
|
26
|
+
]
|
|
27
|
+
requires-python = ">=3.10"
|
|
28
|
+
dependencies = [
|
|
29
|
+
"requests>=2.25.0",
|
|
30
|
+
"tqdm>=4.60.0",
|
|
31
|
+
"click>=8.0.0",
|
|
32
|
+
"rich>=10.0.0",
|
|
33
|
+
"PyQt5>=5.15.0",
|
|
34
|
+
"paramiko>=2.8.0",
|
|
35
|
+
"anthropic>=0.20.0",
|
|
36
|
+
"pyserial>=3.5",
|
|
37
|
+
"pyte>=0.8.2",
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
[project.urls]
|
|
41
|
+
Homepage = "https://github.com/Seeed-Studio/seeed-jetson-develop"
|
|
42
|
+
Repository = "https://github.com/Seeed-Studio/seeed-jetson-develop"
|
|
43
|
+
Issues = "https://github.com/Seeed-Studio/seeed-jetson-develop/issues"
|
|
44
|
+
|
|
45
|
+
[project.scripts]
|
|
46
|
+
seeed-jetson-developer = "seeed_jetson_develop.cli:main"
|
|
47
|
+
|
|
48
|
+
[tool.setuptools.packages.find]
|
|
49
|
+
include = ["seeed_jetson_develop*"]
|
|
50
|
+
|
|
51
|
+
[tool.setuptools.package-data]
|
|
52
|
+
seeed_jetson_develop = [
|
|
53
|
+
"data/*.json",
|
|
54
|
+
"assets/recovery/*",
|
|
55
|
+
"modules/apps/data/*.json",
|
|
56
|
+
"modules/skills/data/*.json",
|
|
57
|
+
]
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
命令行接口模块
|
|
4
|
+
"""
|
|
5
|
+
import click
|
|
6
|
+
import json
|
|
7
|
+
import os
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from .flash import JetsonFlasher
|
|
10
|
+
from .recovery import RecoveryGuide
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@click.group()
|
|
14
|
+
@click.version_option()
|
|
15
|
+
def cli():
|
|
16
|
+
"""Seeed Jetson Flash - 为 Jetson 设备刷机的工具"""
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@cli.command()
|
|
21
|
+
@click.option('--product', '-p', required=True, help='产品型号 (例如: j4012mini)')
|
|
22
|
+
@click.option('--l4t', '-l', required=True, help='L4T 版本 (例如: 36.3.0)')
|
|
23
|
+
@click.option('--download-only', is_flag=True, help='仅下载固件,不刷写')
|
|
24
|
+
@click.option('--skip-verify', is_flag=True, help='跳过 SHA256 校验')
|
|
25
|
+
def flash(product, l4t, download_only, skip_verify):
|
|
26
|
+
"""刷写 Jetson 设备"""
|
|
27
|
+
flasher = JetsonFlasher(product, l4t)
|
|
28
|
+
|
|
29
|
+
click.echo(f"正在为 {product} 准备 L4T {l4t} 固件...")
|
|
30
|
+
|
|
31
|
+
# 下载固件
|
|
32
|
+
if not flasher.download_firmware():
|
|
33
|
+
click.echo("固件下载失败", err=True)
|
|
34
|
+
return
|
|
35
|
+
|
|
36
|
+
# 校验固件
|
|
37
|
+
if not skip_verify:
|
|
38
|
+
if not flasher.verify_firmware():
|
|
39
|
+
click.echo("固件校验失败", err=True)
|
|
40
|
+
return
|
|
41
|
+
|
|
42
|
+
if download_only:
|
|
43
|
+
click.echo("固件下载完成")
|
|
44
|
+
return
|
|
45
|
+
|
|
46
|
+
# 解压固件
|
|
47
|
+
if not flasher.extract_firmware():
|
|
48
|
+
click.echo("固件解压失败", err=True)
|
|
49
|
+
return
|
|
50
|
+
|
|
51
|
+
# 刷写固件
|
|
52
|
+
if not flasher.flash_firmware():
|
|
53
|
+
click.echo("固件刷写失败", err=True)
|
|
54
|
+
return
|
|
55
|
+
|
|
56
|
+
click.echo("刷写完成!")
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@cli.command()
|
|
60
|
+
@click.option('--product', '-p', required=True, help='产品型号')
|
|
61
|
+
def recovery(product):
|
|
62
|
+
"""显示进入 Recovery 模式的教程"""
|
|
63
|
+
guide = RecoveryGuide(product)
|
|
64
|
+
guide.show_guide()
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@cli.command()
|
|
68
|
+
def list_products():
|
|
69
|
+
"""列出所有支持的产品"""
|
|
70
|
+
data_path = Path(__file__).parent / "data" / "l4t_data.json"
|
|
71
|
+
with open(data_path, 'r') as f:
|
|
72
|
+
data = json.load(f)
|
|
73
|
+
|
|
74
|
+
products = {}
|
|
75
|
+
for item in data:
|
|
76
|
+
product = item['product']
|
|
77
|
+
if product not in products:
|
|
78
|
+
products[product] = []
|
|
79
|
+
products[product].append(item['l4t'])
|
|
80
|
+
|
|
81
|
+
click.echo("支持的产品列表:\n")
|
|
82
|
+
for product, l4t_versions in sorted(products.items()):
|
|
83
|
+
click.echo(f" {product}")
|
|
84
|
+
click.echo(f" L4T 版本: {', '.join(l4t_versions)}")
|
|
85
|
+
click.echo()
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
@cli.command()
|
|
89
|
+
def gui():
|
|
90
|
+
"""启动图形界面"""
|
|
91
|
+
try:
|
|
92
|
+
# 直接导入 main 函数,避免通过 __init__.py
|
|
93
|
+
import sys
|
|
94
|
+
from pathlib import Path
|
|
95
|
+
|
|
96
|
+
# 确保可以找到模块
|
|
97
|
+
module_path = Path(__file__).parent
|
|
98
|
+
if str(module_path) not in sys.path:
|
|
99
|
+
sys.path.insert(0, str(module_path))
|
|
100
|
+
|
|
101
|
+
from seeed_jetson_develop.gui.main_window import main as gui_main
|
|
102
|
+
gui_main()
|
|
103
|
+
except ImportError as e:
|
|
104
|
+
click.echo(f"错误: 无法启动 GUI,请安装 PyQt5: pip install PyQt5", err=True)
|
|
105
|
+
click.echo(f"详细错误: {e}", err=True)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def main():
|
|
109
|
+
cli()
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
if __name__ == '__main__':
|
|
113
|
+
main()
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""全局配置持久化"""
|
|
2
|
+
import json
|
|
3
|
+
import os
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
_CONFIG_PATH = Path.home() / ".config" / "seeed-jetson-tool" / "config.json"
|
|
7
|
+
DEFAULT_ANTHROPIC_BASE_URL = "https://api.anthropic.com"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def load() -> dict:
|
|
11
|
+
try:
|
|
12
|
+
return json.loads(_CONFIG_PATH.read_text(encoding="utf-8"))
|
|
13
|
+
except Exception:
|
|
14
|
+
return {}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def save(data: dict):
|
|
18
|
+
_CONFIG_PATH.parent.mkdir(parents=True, exist_ok=True)
|
|
19
|
+
_CONFIG_PATH.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def get_runtime_anthropic_settings() -> dict:
|
|
23
|
+
data = load()
|
|
24
|
+
|
|
25
|
+
config_key = (data.get("anthropic_api_key") or "").strip()
|
|
26
|
+
env_key = (os.environ.get("ANTHROPIC_API_KEY") or "").strip()
|
|
27
|
+
api_key = config_key or env_key
|
|
28
|
+
api_key_source = "config" if config_key else ("env" if env_key else "none")
|
|
29
|
+
|
|
30
|
+
config_url = (data.get("anthropic_base_url") or "").strip()
|
|
31
|
+
env_url = (os.environ.get("ANTHROPIC_BASE_URL") or "").strip()
|
|
32
|
+
base_url = config_url or env_url or DEFAULT_ANTHROPIC_BASE_URL
|
|
33
|
+
if config_url:
|
|
34
|
+
base_url_source = "config"
|
|
35
|
+
elif env_url:
|
|
36
|
+
base_url_source = "env"
|
|
37
|
+
else:
|
|
38
|
+
base_url_source = "default"
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
"api_key": api_key,
|
|
42
|
+
"api_key_source": api_key_source,
|
|
43
|
+
"base_url": base_url,
|
|
44
|
+
"base_url_source": base_url_source,
|
|
45
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""设备信息数据类"""
|
|
2
|
+
from dataclasses import dataclass, field
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@dataclass
|
|
7
|
+
class DeviceInfo:
|
|
8
|
+
ip: str = ""
|
|
9
|
+
hostname: str = ""
|
|
10
|
+
model: str = "" # e.g. "reComputer J4012"
|
|
11
|
+
jetpack: str = "" # e.g. "6.0"
|
|
12
|
+
l4t: str = "" # e.g. "36.3.0"
|
|
13
|
+
connected: bool = False
|
|
14
|
+
diagnostics: dict = field(default_factory=dict)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""全局事件总线 — 模块间通信,避免直接 import 耦合"""
|
|
2
|
+
from PyQt5.QtCore import QObject, pyqtSignal
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class EventBus(QObject):
|
|
6
|
+
# devices 模块
|
|
7
|
+
device_connected = pyqtSignal(dict) # payload: {ip, name, model}
|
|
8
|
+
device_disconnected = pyqtSignal(str) # payload: ip
|
|
9
|
+
diagnostics_done = pyqtSignal(dict) # payload: {item: status}
|
|
10
|
+
|
|
11
|
+
# flash 模块
|
|
12
|
+
flash_started = pyqtSignal(str, str) # product, l4t
|
|
13
|
+
flash_completed = pyqtSignal(bool, str) # success, message
|
|
14
|
+
|
|
15
|
+
# skills 模块
|
|
16
|
+
skill_run_requested = pyqtSignal(str) # skill_id
|
|
17
|
+
skill_completed = pyqtSignal(str, bool, str) # skill_id, success, log
|
|
18
|
+
|
|
19
|
+
# apps 模块
|
|
20
|
+
app_install_requested = pyqtSignal(str) # app_id
|
|
21
|
+
app_installed = pyqtSignal(str, bool) # app_id, success
|
|
22
|
+
|
|
23
|
+
# 导航
|
|
24
|
+
navigate_to = pyqtSignal(int) # page index
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# 全局单例,所有模块 from seeed_jetson_develop.core import bus
|
|
28
|
+
bus = EventBus()
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""运行环境检测 — 判断是否在 Jetson 设备本地运行"""
|
|
2
|
+
import os
|
|
3
|
+
import platform
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def is_jetson() -> bool:
|
|
7
|
+
"""
|
|
8
|
+
检测当前是否运行在 NVIDIA Jetson 设备上。
|
|
9
|
+
判断依据:Linux + aarch64 架构 + Tegra 特有文件。
|
|
10
|
+
"""
|
|
11
|
+
if platform.system() != "Linux":
|
|
12
|
+
return False
|
|
13
|
+
if platform.machine() not in ("aarch64", "armv8l"):
|
|
14
|
+
return False
|
|
15
|
+
# Tegra release 标志文件
|
|
16
|
+
if os.path.exists("/etc/nv_tegra_release"):
|
|
17
|
+
return True
|
|
18
|
+
# 设备树 model 文件
|
|
19
|
+
model_file = "/proc/device-tree/model"
|
|
20
|
+
if os.path.exists(model_file):
|
|
21
|
+
try:
|
|
22
|
+
with open(model_file, "rb") as f:
|
|
23
|
+
model = f.read().decode("utf-8", errors="ignore").lower()
|
|
24
|
+
return "jetson" in model or "tegra" in model
|
|
25
|
+
except Exception:
|
|
26
|
+
pass
|
|
27
|
+
return False
|