当前位置: 首页 > news >正文

个人写HTOS移植shell

在 HTOS 上移植 Letter Shell 3.x:实践与要点

摘要
本文记录将开源的 Letter Shell(3.x)移植到自研轻量 RTOS——HTOS 的全过程与关键要点,包含移植思路、必须实现的适配接口、示例配置与常见问题解决方法,适合希望在裸机或自研 RTOS 上集成交互式 shell 的读者参考。

一、为什么要移植

  • Letter Shell 功能轻量、易扩展,适合嵌入式交互调试。
  • 在 HTOS 上集成 shell 能显著提升设备调试效率(交互式命令、系统信息查询、远程调试入口等)。

二、移植总体思路

  1. 把 lettershell 源码加入工程(src/.c、src/.h)。
  2. 编写移植层(shell_port.c / shell_port.h),封装:串口读写、任务创建、系统 tick、内存分配等。
  3. 提供一个 shell_cfg_user.h,用于把 lettershell 的配置映射到 HTOS 接口。
  4. 在系统初始化中创建 shell 任务并启动(shellPortInit())。

在这里插入图片描述
在这里插入图片描述

三、必须实现的适配点

  • 串口收发:建议使用 DMA + IDLE 或中断方式,将接收缓冲与长度暴露给 shell 移植层(示例使用 aRxBuffer2 / RX_len2)。
  • 任务创建/延时/获取 tick:将 HTOS 的任务创建函数与 tick 映射给 shell。
  • 内存分配:SHELL_MALLOC / SHELL_FREE 映射到 htPortMalloc / htPortFree。
  • 命令导出:确认 SHELL_USING_CMD_EXPORT 是否开启,链接器配置需保留命令节(使用导出宏时)。

四、关键示例文件

示例:shell_cfg_user.h(放到 lettershell 源目录)

#ifndef __SHELL_CFG_USER_H__
#define __SHELL_CFG_USER_H__/* 使用 HTOS 的 tick 与内存接口 */
#define SHELL_GET_TICK()       (xTickCount)
#define SHELL_MALLOC(size)     htPortMalloc(size)
#define SHELL_FREE(ptr)        htPortFree(ptr)#define SHELL_USING_CMD_EXPORT 1
#define SHELL_TASK_WHILE       1
#define SHELL_PRINT_BUFFER     128
#define SHELL_SCAN_BUFFER      0#define SHELL_DEFAULT_USER     "root"
#define SHELL_DEFAULT_USER_PASSWORD ""#endif /* __SHELL_CFG_USER_H__ */

示例:shell_port.h(移植层接口)

#ifndef SHELL_PORT_H
#define SHELL_PORT_H#include "shell.h"void shellPortInit(void);/* 示例命令 */
int shellTestCmd(int argc, char *argv[]);
int shellSystemInfo(int argc, char *argv[]);
int shellLedControl(int state);#endif /* SHELL_PORT_H */

主要实现要点(shell_port.c)

  • shellRead:从 DMA/IRQ 缓冲读取数据并清空已消费长度。
  • shellWrite:使用 HAL_UART_Transmit 或 BSP 串口发送,并处理 CR/LF。
  • shellTask:创建 shell 主循环任务,调用 letter shell 的处理函数。

五、调试与常见问题

  • 无输出或乱码:检查串口波特率、UART 初始化、DMA/IDLE 回调是否正确重启接收。
  • 命令丢失(导出命令无效):确认 SHELL_USING_CMD_EXPORT = 1,并在链接器设置中保留命令节(Keil/GCC 链接脚本)。
  • 内存不足或栈溢出:增大 shell 任务栈或调整 htOS 堆大小(configTOTAL_HEAP_SIZE)。
  • 与远程仓库冲突(git):先 git pull --rebase origin main,解决冲突后再 git push。

六、集成建议与测试用例

  • 在 htOS 初始化完成并在调度前或调度后尽速调用 shellPortInit()。
  • 首次测试:test 命令、sysinfo、长命令行输入、并发快速输入。
  • 推荐使用独立串口做 shell,生产环境可通过条件编译关闭或限制命令权限。

七、结语

完成移植后,Letter Shell 能为 HTOS 提供强大的交互入口,适合调试与演示使用。后续可考虑:

  • 丰富命令集合与权限管理;
  • 支持文件系统的命令(upload/download);
  • 改进串口驱动,提高并发性能。

最后附上最新仓库代码
https://github.com/yeyue1/HTOS/commits?author=yeyue1

http://www.dtcms.com/a/453610.html

相关文章:

  • 【开发工具】Windows1011远程Ubuntu18及以上桌面
  • 输入法网站设计怎么自己制作图片
  • STM32 Flash 访问加速器详解(ART Accelerator)
  • stm32 freertos下基于hal库的模拟I2C驱动实现
  • 成都微网站访问wordpress速度慢
  • 意识形态网站建设怎么做网络平台
  • LangChain部署RAG part1(背景概念)(赋范大模型社区公开课听课笔记)
  • 模块化html5网站开发本地网站后台管理建设
  • 在源码之家下载的网站模板可以作为自己的网站吗资讯网站的好处
  • AI - 自然语言处理(NLP) - part 1
  • 从零开始的C++学习生活 5:内存管理和模板初阶
  • 黔东南购物网站开发设计canvas网站源码
  • 为网站做IPhone客户端网站建设中 模板
  • 网站备案可以做电影网站吗厦门建筑信息网
  • 浦东做网站公司中国企业500强出炉
  • 白话大模型评估:文本嵌入与文本生成模型评估方法详解
  • 广州网站制作开发公司哪家好高德地图加拿大能用吗
  • 网站自助建设平台百度网页设计论文题目什么样的好写
  • 小米系耳机配对方法
  • 国外的有名的网站百家联盟推广部电话多少
  • C4D R20新功能实战指南:深度解析域、节点材质与OpenVDB,提升你的3D创作效率
  • 免费查找企业信息的网站旅游网站建设策划方案书
  • 【LeetCode】454. 四数相加 II 【分组+哈希表】详解
  • 用word做旅游网站企业网站建设要注意哪方面
  • 怎么做跳转流量网站专业北京seo公司
  • 日本京都与奈良:古刹与神社的对比之旅
  • 算术操作符 自增运算符 逆向汇编三
  • C# 基于DI和JSON序列化的界面配置参数方案
  • 零遁nas做网站微信小程序怎么做店铺免费
  • 2025 AI 伦理治理破局:从制度设计到实践落地的中国探索