【HZ-T536开发板免费体验】无需死记 Linux 命令!用 CangjieMagic 在 HZ-T536 开发板上搭建 MCP 服务器,自然语言轻松控板
目录
引言:为什么需要 “自然语言控板”?
一、准备工作:硬件与软件清单
1. 硬件环境
2. 软件环境
二、核心原理:MCP 服务器与 CangjieMagic 的协同工作
三、实战开发:在 HZ-T536 上搭建 MCP 服务器
1. 搭建开发环境
2. 设计 MCP 服务器
工具设计
LinuxCmdAgent智能体的设计
3. 编写启动代码
4. 编译与部署
四、测试验证:用自然语言控制开发板
五、优化与扩展
结语
本文首发于电子发烧友论坛:
【HZ-T536开发板免费体验】5- 无需死记 Linux 命令!用 CangjieMagic 在 HZ-T536 开发板上搭建 MCP 服务器,自然语言轻松控板 - 北京合众恒跃科技有限公司 - 电子技术论坛 - 广受欢迎的专业电子论坛!引言:为什么需要 “自然语言控板”?痛点引入 :嵌入式开发中,开发者常需通过 SSH 等工具登录开发板,手动输入复杂的 Linux 命令(如ls -l、gpio readall、ifconfig等 https://bbs.elecfans.com/jishu_2498907_1_1.html
引言:为什么需要 “自然语言控板”?
痛点引入 :嵌入式开发中,开发者常需通过 SSH 等工具登录开发板,手动输入复杂的 Linux 命令(如ls -l
、gpio readall
、ifconfig
等)进行调试或控制,不仅门槛高,还容易记错命令。
解决方案 :MCP(Machine Control Protocol)服务器可将自然语言指令转换为底层操作,结合 Cangjie Magic 的自然语言处理能力,实现 “用说话 / 文字控制开发板”。
本文目标 :以 HZ-T536 嵌入式开发板为例,手把手教你搭建 MCP 服务器,让开发板 “听懂” 你的指令。
一、准备工作:硬件与软件清单
1. 硬件环境
- HZ-T536_MiniEVM开发板(是一款基于全志T536系列处理器设计的工业评估板,集成了4核Cortex-A55和RISC-VE907协处理器);
- 电源适配器、网线(或 Wi-Fi 模块)、PC 机(用于开发和测试)。
2. 软件环境
- 开发板系统:Linux(这里使用的是WSL2 + Ubuntu);
- Cangjie SDK和交叉编译工具链(参考我的博文:【HZ-T536开发板免费体验】Cangjie Magic调用视觉语言大模型(VLM)真香,是不是可以没有YOLO和OCR了?-CSDN博客);
- CangjieMagic SDK(基于仓颉编程语言的智能体框架,可以访问https://gitcode.com/Cangjie-TPC/CangjieMagic/ 下载);
- MCP 协议测试软件(本文使用的是字节跳动Trae的VS Code插件版);
- 开发工具:VS Code。
二、核心原理:MCP 服务器与 CangjieMagic 的协同工作
- MCP 服务器作用 :运行在开发板上,负责接收客户端的自然语言指令,解析后执行对应操作(如调用系统命令、控制 GPIO 等),并返回结果。
- Cangjie Magic 角色 :构建MCP服务器,同时提供自然语言理解能力,将用户输入的文本(如 “查看开发板 IP 地址”“点亮 LED1”)转换为机器可识别的指令(如
ifconfig
、gpio write 1 1
)。 - 工作流程 :
- MCP客户端发送自然语言指令到 HZ-T536 的 MCP 服务器;
- MCP 服务器利用DeepSeek的大语言模型能力,生成对应的 Linux 命令或 API 调用;
- MCP服务器执行指令,获取HZ-T536开发板上的运行结果(如命令输出、硬件状态);
- MCP服务器将结果返回给客户端,以自然语言形式展示(如 “IP 地址为 192.168.1.100”)。
三、实战开发:在 HZ-T536 上搭建 MCP 服务器
1. 搭建开发环境
有关如何在嵌入式开发板上部署Cangjie Magic程序,可以参考我前面的博文 :【HZ-T536开发板免费体验】Cangjie Magic调用视觉语言大模型(VLM)真香,是不是可以没有YOLO和OCR了?-CSDN博客。
2. 设计 MCP 服务器
工具设计
MCP服务器的核心是提供一个processUserInput
的工具,它负责处理用户的输入问题,并将输入问题提交给基于DeepSeek的智能体LinuxCmdAgent
,由其转换为Linux命令并在开发板上执行,再将执行结果返回给用户。
@tool[description: "对系统进行维护",parameters: {userInput: "用户输入"}
]
func processUserInput(userInput: String): String {let linuxCmdAgent = LinuxCmdAgent()let result = linuxCmdAgent.chat(userInput)println(result)return result
}
LinuxCmdAgent
智能体的设计
LinuxCmdAgent
智能体是实际实现功能的核心。它调用两个内部工具,一个是executeCommand
,用于执行Linux命令并返回结果,另一个printWarningMsg
对于可能造成系统安全问题的指令打印警告信息。在LinuxCmdAgent
智能体的设计中,我加入了安全性检查,避免执行rm -r -f这样的危险指令。在本项目中我没有将LinuxCmdAgent
智能体暴露给MCP用户,就是因为Cangjie Magic会把智能体的所有工具都公开给用户,我担心MCP客户端会直接调用executeCommand工具。
func newProcess(name: String, args: Array<String>, env!: Array<(String, String)> = [], redirectErr!: Bool = true): SubProcess {let allEnv = HashMap(Process.current.environment)allEnv.add(all: env)if (redirectErr) {return Process.start(name, args,environment: allEnv,stdIn: ProcessRedirect.Pipe,stdOut: ProcessRedirect.Pipe,stdErr: ProcessRedirect.Pipe)} else {return Process.start(name, args,environment: allEnv,stdIn: ProcessRedirect.Pipe,stdOut: ProcessRedirect.Pipe)}
}func run_command(cmd: String, args: Array<String>) : String {let subProcess = newProcess(cmd, args)let outReader = StringReader<InputStream>(subProcess.stdOut)let out = outReader.readToEnd()subProcess.wait(timeout: Duration.minute * 1) return(out)
}@tool[description: "执行Linux指令",parameters: {cmd: "Linux指令"}
]
func executeCommand(cmd: String): String {println(">> 执行指令: ${cmd} ")let arr = cmd.split(" ")let result = run_command(arr[0], arr.slice(1, arr.size - 1))println(result)return result
}@tool[description: "打印有关指令的警告信息",parameters: {cmd: "Linux指令"}
]
func printWarningMsg(cmd: String): String {let result = ">>>>>> 该指令存在风险: ${cmd} <<<<<"println(result)return result
}//================================================
@agent[model: "deepseek:DeepSeek-V3",description: "执行用户指令",tools: [executeCommand, printWarningMsg]
]
class LinuxCmdAgent {@prompt("""根据用户输入的信息,返回对应的Linux指令。判断Linux指令是否对系统安全构成威胁。如果安全,则执行该指令一次。如果不安全,则打印该指令的警告信息。仅使用已有工具,并使用中文返回工具的执行结果,不要做任何翻译和格式上的处理。""")
}
3. 编写启动代码
下面给出启动代码:
main() {Config.env["DEEPSEEK_API_KEY"] = "5F1e-jbL_-xxxxxxxxxxxxxx"Config.env["DEEPSEEK_BASE_URL"] = "https://maas-cn-southwest-2.modelarts-maas.com/v1/infers/xxxxxxxxxxxx/v1/"Config.logLevel = "INFO"Config.logFile = "./logs/mcp-server.log"println("MCP Server is starting ...")SseMCPServer.startWith([processUserInput], '0.0.0.0', 8000)
}
我的代码采用的华为云的DeepSeek服务,执行前读者需要先在华为云注册相关的服务并获得API_KEY和URL,并替换掉程序中的相关部分。
4. 编译与部署
执行下面的语句就可以开始交叉编译了:
cjpm build --target aarch64-unknown-linux-gnu
几分钟之后,整个工程就编译完成了。
部署Cangjie Magic程序的方法在前面的【HZ-T536开发板免费体验】Cangjie Magic调用视觉语言大模型(VLM)真香,是不是可以没有YOLO和OCR了?-CSDN博客已经详细介绍了,这里不再赘述。
四、测试验证:用自然语言控制开发板
启动服务器 :在 HZ-T536 上运行./mcp_server
,日志显示 “MCP Server is starting ...
”就表明程序正确启动。
用浏览器测试 :可以使用电脑上的浏览器访问开发板的如下地址:http://192.168.1.102:8080/sse。如果浏览器显示如下内容就表示MCP服务器正常工作了。
上面的信息表示服务器正常启动,并发送握手信息。
功能测试 :
测试MCP的工具有很多,这里我采用VSCode的Trae插件,也可以使用Trae IDE(直接到 trae.cn 下载最新版即可,Windows / macOS均支持)。
打开 IDE或者Trae插件 → 右上角 AI 图标 → 设置 → MCP。点击 “添加 MCP Server” → 手动配置,填入下面的信息:
{"mcpServers": {"hz-t536": {"url": "http://192.168.1.102:8080/sse","disabled": false,"autoApprove": []}}
}
在对话栏点击@选择“Builder with MCP”。
然后在对话框中输入“使用hz-536查询操作系统版本”。TRAE经过思考后它找到了我们的MCP服务器,并试图调用其工具,显示如下提示:
点击run按钮执行该工具。从开发板的控制台可以看到大模型生成了uname -a 指令并获得结果。
而在TRAE中也可以看到正确返回版本信息。
我们可以再输入“使用hz-t536查询存储设备空间使用情况”命令。从控制台看出正确地生成了指令:
而TRAE返回如下结果:
由此可见,TRAE调用我们的工具得到正确的结果。
我们还可以尝试命令“使用hz-t536删除当前目录所有文件”。可以看到大模型检测到指令风险,拒绝执行:
至此,测试表明MCP服务器一切工作正常。
五、优化与扩展
- 指令库扩展 :通过 CangjieMagic 增加更多嵌入式场景指令(如 “读取温湿度传感器数据”“重启开发板”);
- 安全性增强 :添加用户认证机制;
- 客户端开发 :开发图形化MCP客户端(Web/APP),支持语音输入(结合语音转文字 API)。
结语
通过 CangjieMagic 与 MCP 服务器的结合,HZ-T536 开发板摆脱了对复杂 Linux 命令的依赖,让嵌入式开发更 “人性化”。这种思路不仅适用于 HZ-T536,还可推广到其他嵌入式平台,降低开发门槛。如果你也觉得记命令头疼,不妨试试这个方案,让开发板 “听懂” 你的需求!
你在嵌入式开发中遇到过哪些命令相关的痛点?欢迎在评论区分享你的想法!