Skip to content

Commit e6b88a0

Browse files
committed
update page
1 parent 71fafd2 commit e6b88a0

8 files changed

Lines changed: 716 additions & 32 deletions

File tree

docs/T113x/intro.mdx

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,80 @@
22
sidebar_position: 1
33
---
44

5+
import LearningPathGuide from '@site/src/components/LearningPathGuide';
6+
57
# T113x系列单板
68

9+
<LearningPathGuide
10+
title="T113s4 使用路线"
11+
sections={[
12+
{
13+
id: 'intro',
14+
title: '01 入门',
15+
description: '本章节将详细介绍T113x系列单板的基本信息、技术参数,以及如何快速上手使用。',
16+
items: [
17+
{ name: '产品介绍', url: '/docs/T113x/s4-SdNand/BoardIntroduction' },
18+
{ name: '源码与工具文档', url: '/docs/T113x/s4-SdNand/SourceCodeToolDocumentationManual' },
19+
]
20+
},
21+
{
22+
id: 'quick-start',
23+
title: '02 快速启动',
24+
description: '本章节将指导您完成系统烧录和快速启动T113x开发板。',
25+
items: [
26+
{ name: '系统烧录', url: '/docs/T113x/s4-SdNand/part1/03-1_FlashSystem' },
27+
{ name: '常见问题', url: '/docs/T113x/s4-SdNand/part1/03-2_SomeQustion' },
28+
{ name: '快速上手', url: '/docs/T113x/s4-SdNand/part1/03-QuickStart' },
29+
{ name: '学习路径', url: '/docs/T113x/s4-SdNand/part1/04-StudyPath' }
30+
]
31+
},
32+
{
33+
id: 'board-functions',
34+
title: '03 板载功能体验',
35+
description: '本章节将介绍T113x开发板的各种板载功能和使用方法。',
36+
items: [
37+
{ name: 'WiFi联网', url: '/docs/T113x/s4-SdNand/part2/WiFiNetworking' },
38+
{ name: 'RS485通信', url: '/docs/T113x/s4-SdNand/part2/RS485Communication' },
39+
{ name: 'CAN通信', url: '/docs/T113x/s4-SdNand/part2/CANCommunication' },
40+
{ name: 'GPADC按键', url: '/docs/T113x/s4-SdNand/part2/GPADCButtons' },
41+
{ name: '以太网通信', url: '/docs/T113x/s4-SdNand/part2/EthernetCommunication' },
42+
{ name: 'CVBS摄像头采集', url: '/docs/T113x/s4-SdNand/part2/CVBSCameraCapture' }
43+
]
44+
},
45+
{
46+
id: 'tina-sdk',
47+
title: '04 Tina-SDK开发',
48+
description: '本章节将介绍如何搭建Tina-SDK开发环境,进行系统级开发。',
49+
items: [
50+
{ name: '开发环境搭建', url: '/docs/T113x/s4-SdNand/part3/ConfigHostEnv' },
51+
{ name: '获取Tina5源码', url: '/docs/T113x/s4-SdNand/part3/GetTina5Souce' },
52+
{ name: '编译系统镜像', url: '/docs/T113x/s4-SdNand/part3/Tina5Build' }
53+
]
54+
},
55+
{
56+
id: 'app-dev',
57+
title: '05 应用开发',
58+
description: '本章节将介绍如何在T113x平台上进行应用程序开发。',
59+
items: [
60+
{ name: 'HelloWorld', url: '/docs/T113x/s4-SdNand/part4/HelloWorld' },
61+
{ name: 'Qt应用环境部署', url: '/docs/T113x/s4-SdNand/part4/QtApplicationEnvironmentDeployment' },
62+
{ name: 'AMP开发', url: '/docs/T113x/s4-SdNand/AMP/C906Intro' }
63+
]
64+
},
65+
{
66+
id: 'advanced-features',
67+
title: '06 综合示例',
68+
description: '本章节将介绍T113x平台高级功能开发。',
69+
items: [
70+
{ name: '支持WIFI与4G模组', url: '/docs/T113x/s4-SdNand/part7/WiFiAnd4G' },
71+
{ name: '支持网络透传', url: '/docs/T113x/s4-SdNand/part7/SupportNetworkTrans' },
72+
{ name: '基于透传网络实现远程开机', url: '/docs/T113x/s4-SdNand/part7/RemoteStart' },
73+
{ name: '无线传屏显示', url: '/docs/T113x/s4-SdNand/part8/WirelessScreenDisp' },
74+
{ name: '基于V4L2框架发送UVC视频', url: '/docs/T113x/s4-SdNand/part8/ImplementingUVCOnV4L2' },
75+
{ name: 'LVGL从零实现一个多媒体播放器', url: '/docs/T113x/s4-SdNand/part9/LvglMultimediaPlayer' }
76+
]
77+
}
78+
]}
79+
/>
80+
781

docs/T113x/s4-SdNand/06-ConfigHostEnv.md renamed to docs/T113x/s4-SdNand/part3/01-ConfigHostEnv.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
2-
sidebar_position: 3
2+
sidebar_position: 1
33
---
4-
# 安装并配置开发环境
4+
# 配置开发环境
55

66

77
## 获取虚拟机系统
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
sidebar_position: 2
3+
---
4+
5+
# 获取Tina5源码
6+
7+
本章节将讲解如何在 **ubuntu18.04.6** 搭建 T113s4prov1.3 sdnand版本的开发环境。
8+
9+
## 获取Tina5源码
10+
11+
首先,在Windows上访问下面的论坛地址,打开Tina5-SDK基础包获取:通过网盘分享的文件:T113s4sdnand-SDK
12+
链接: https://pan.baidu.com/s/1JhS8JNbhPgcCiaVDay_rYw?pwd=bdz2 提取码: bdz2
13+
14+
> 通过百度网盘下载,大小约21.81G,名称为 t113s4-tin5SDK-8939a92cf6401f1d2e156bc1e248d5e4.tar.gz 下载完成后通过网络等方式拷贝到虚拟机目录下。
15+
16+
把基础包拷贝到虚拟机之后,执行以下指令,进行解压:
17+
18+
~~~bash
19+
ubuntu@ubuntu1804:~$ tar -xvf t113s4-tin5SDK-8939a92cf6401f1d2e156bc1e248d5e4.tar.gz
20+
~~~
21+
22+
解压后,sdk基础包的命名是`t113-tin5-v1.2`
23+
24+
出现以上文件,说明Tina5-SDK源码获取成功。
25+
26+
## 获取补丁包
27+
28+
基于T113s4pro v1.3 sdnand版本开发板,我们提供了一个扩展补丁包,执行以下指令,获取扩展支持仓库,然后加以应用,
29+
30+
~~~ bash
31+
ubuntu@ubuntu1804:~$ git clone https://github.com/DongshanPI/100ASK_T113s4-SdNand_TinaSDK5.git
32+
ubuntu@ubuntu1804:~$ cd t113-tin5-v1.2/
33+
ubuntu@ubuntu1804:~/t113-tin5-v1.2$ cp ../100ASK_T113s4-SdNand_TinaSDK5/* -rfvd .
34+
~~~
35+
36+
![image-20251106114156868](./images/image-20251106114156868.png)
37+

docs/T113x/s4-SdNand/part3/02-DevelopmentEnvironmentSetup.md renamed to docs/T113x/s4-SdNand/part3/03-Tina5Build.md

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,9 @@
22
sidebar_position: 2
33
---
44

5-
# 开发环境搭建
5+
# Tina5编译系统
66

7-
本章节将讲解如何在 **ubuntu18.04.6** 搭建 T113s4prov1.3 sdnand版本的开发环境。
87

9-
## 获取Tina5源码
10-
11-
首先,在Windows上访问下面的论坛地址,打开Tina5-SDK基础包获取:通过网盘分享的文件:T113s4sdnand-SDK
12-
链接: https://pan.baidu.com/s/1JhS8JNbhPgcCiaVDay_rYw?pwd=bdz2 提取码: bdz2
13-
14-
> 通过百度网盘下载,大小约21.81G,名称为 t113s4-tin5SDK-8939a92cf6401f1d2e156bc1e248d5e4.tar.gz 下载完成后通过网络等方式拷贝到虚拟机目录下。
15-
16-
把基础包拷贝到虚拟机之后,执行以下指令,进行解压:
17-
18-
~~~bash
19-
ubuntu@ubuntu1804:~$ tar -xvf t113s4-tin5SDK-8939a92cf6401f1d2e156bc1e248d5e4.tar.gz
20-
~~~
21-
22-
解压后,sdk基础包的命名是`t113-tin5-v1.2`
23-
24-
出现以上文件,说明Tina5-SDK源码获取成功。
25-
26-
## 获取补丁包
27-
28-
基于T113s4pro v1.3 sdnand版本开发板,我们提供了一个扩展补丁包,执行以下指令,获取扩展支持仓库,然后加以应用,
29-
30-
~~~ bash
31-
ubuntu@ubuntu1804:~$ git clone https://github.com/DongshanPI/100ASK_T113s4-SdNand_TinaSDK5.git
32-
ubuntu@ubuntu1804:~$ cd t113-tin5-v1.2/
33-
ubuntu@ubuntu1804:~/t113-tin5-v1.2$ cp ../100ASK_T113s4-SdNand_TinaSDK5/* -rfvd .
34-
~~~
35-
36-
![image-20251106114156868](./images/image-20251106114156868.png)
378

389
## 编译固件
3910

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
import React, { useState } from 'react';
2+
import clsx from 'clsx';
3+
import styles from './styles.module.css';
4+
5+
const ArrowGuide = ({ sections = [] }) => {
6+
const [activeSection, setActiveSection] = useState(null);
7+
8+
// 示例章节数据,如果没有传入sections
9+
const defaultSections = [
10+
{
11+
id: 'intro',
12+
title: '01 入门',
13+
description: '本章节将详细介绍 Luckfox Omni3576 产品的基本信息、技术参数,以及如何快速上手使用该产品。',
14+
items: [
15+
{ name: '产品介绍', url: '/docs/T113x/intro/product' },
16+
{ name: '镜像烧录', url: '/docs/T113x/intro/flashing' }
17+
]
18+
},
19+
{
20+
id: 'linux-config',
21+
title: '02 Linux系统配置指南',
22+
description: '本章节提供 LuckFox Omni3576 开发板上 Buildroot、Debian 12 和 Ubuntu 22.04 的使用与配置说明。',
23+
items: [
24+
{ name: 'Buildroot', url: '/docs/T113x/linux/buildroot' },
25+
{ name: 'Debian12(推荐)', url: '/docs/T113x/linux/debian' }
26+
]
27+
},
28+
{
29+
id: 'android-usage',
30+
title: '03 Android 使用',
31+
description: '本章节将为您提供 Luckfox Omni3576 在Android环境下使用。',
32+
items: [
33+
{ name: 'ADB 登录', url: '/docs/T113x/android/adb' }
34+
]
35+
},
36+
{
37+
id: 'linux-dev',
38+
title: '04 Linux开发',
39+
description: '本章节将介绍在PC上搭建 Luckfox Omni3576 开发环境的步骤,包括SDK的基本介绍、开发环境搭建、编译Buildroot和Debian系统、内核定制,以及使用Docker简化开发流程。',
40+
items: [
41+
{ name: 'SDK 开发环境搭建', url: '/docs/T113x/development/sdk' }
42+
]
43+
},
44+
{
45+
id: 'appendix',
46+
title: '05 附录',
47+
description: '本章节提供了与 Luckfox Omni3576 相关的各种资源和支持信息。您可以在这里找到必要的烧录软件、开发工具,以及开发板的原理图、数据手册等技术文档。',
48+
items: [
49+
{ name: '资料下载', url: '/docs/T113x/appendix/downloads' },
50+
{ name: '技术支持', url: '/docs/T113x/appendix/support' }
51+
]
52+
}
53+
];
54+
55+
const displaySections = sections.length > 0 ? sections : defaultSections;
56+
57+
// 处理章节点击
58+
const handleSectionClick = (index, e) => {
59+
// 只有当点击的不是链接时才切换激活状态
60+
if (!e.target.closest('a')) {
61+
setActiveSection(activeSection === index ? null : index);
62+
}
63+
};
64+
65+
// 处理章节项点击跳转
66+
const handleItemClick = (item, e) => {
67+
e.stopPropagation(); // 防止触发章节容器的点击事件
68+
69+
if (item.url) {
70+
// 使用Docusaurus的路由进行导航
71+
window.location.href = item.url;
72+
}
73+
};
74+
75+
// 规范化章节数据,确保每个item都有url属性
76+
const normalizeSections = (sections) => {
77+
return sections.map(section => ({
78+
...section,
79+
items: section.items.map(item =>
80+
typeof item === 'string'
81+
? { name: item, url: `#${section.id}-${item.toLowerCase().replace(/\s+/g, '-')}` }
82+
: item
83+
)
84+
}));
85+
};
86+
87+
const normalizedSections = normalizeSections(displaySections);
88+
89+
return (
90+
<div className={styles.container}>
91+
<div className={styles.guideContainer}>
92+
{normalizedSections.map((section, index) => {
93+
// 将两个章节配对在同一行显示
94+
const isLeft = index % 2 === 0;
95+
const isRight = index % 2 !== 0;
96+
97+
// 如果是右侧章节,跳过渲染,因为它已经在左侧章节中处理了
98+
if (isRight) return null;
99+
100+
// 获取配对的右侧章节,如果没有则使用null
101+
const rightSection = normalizedSections[index + 1];
102+
103+
return (
104+
<div key={section.id} className={clsx(styles.rowContainer, rightSection && styles.withConnection)}>
105+
{/* 左侧章节 */}
106+
<div
107+
className={clsx(styles.sectionContainer, styles.left, {
108+
[styles.active]: activeSection === index
109+
})}
110+
onClick={(e) => handleSectionClick(index, e)}
111+
id={section.id}
112+
>
113+
<div className={styles.sectionContent}>
114+
<h3 className={styles.sectionTitle}>{section.title}</h3>
115+
<p className={styles.sectionDescription}>{section.description}</p>
116+
<div className={styles.sectionItems}>
117+
{section.items.map((item, itemIndex) => (
118+
<div
119+
key={itemIndex}
120+
className={styles.item}
121+
onClick={(e) => handleItemClick(item, e)}
122+
style={{ cursor: item.url ? 'pointer' : 'default' }}
123+
>
124+
{item.name}
125+
</div>
126+
))}
127+
</div>
128+
</div>
129+
</div>
130+
131+
{/* 右侧章节 */}
132+
{rightSection && (
133+
<div
134+
className={clsx(styles.sectionContainer, styles.right, {
135+
[styles.active]: activeSection === index + 1
136+
})}
137+
onClick={(e) => handleSectionClick(index + 1, e)}
138+
id={rightSection.id}
139+
>
140+
<div className={styles.sectionContent}>
141+
<h3 className={styles.sectionTitle}>{rightSection.title}</h3>
142+
<p className={styles.sectionDescription}>{rightSection.description}</p>
143+
<div className={styles.sectionItems}>
144+
{rightSection.items.map((item, itemIndex) => (
145+
<div
146+
key={itemIndex}
147+
className={styles.item}
148+
onClick={(e) => handleItemClick(item, e)}
149+
style={{ cursor: item.url ? 'pointer' : 'default' }}
150+
>
151+
{item.name}
152+
</div>
153+
))}
154+
</div>
155+
</div>
156+
</div>
157+
)}
158+
</div>
159+
);
160+
})}
161+
</div>
162+
</div>
163+
);
164+
};
165+
166+
export default ArrowGuide;

src/components/ArrowGuide/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import ArrowGuide from './ArrowGuide';
2+
3+
export default ArrowGuide;

0 commit comments

Comments
 (0)