-
1 之前自己写过一篇介绍shell的文章hi3518 openharmony shell命令代码修改,并没有全面介绍shell,这次全面介绍一下。liteos-a中shell相关代码是有两处,但是这两处有什么区别和联系,本文着重介绍一下。2 liteos-a中的两个shell地方,我们可以把它俩叫做app_shell和full_shell,一个是用户空间程序,会生成单独的shell文件,放到了跟文件系统的bin目录下,代码位置如下:另一个地方运行在内核空间,和内核固件放到了一起,代码位置如下:我们在串口操作命令,不管是系统命令还是运行二进制文件,都会走到如下函数,在如下函数会判断两种情况,调用不同的系统调用,从而由用户态切换到内核态。运行效果如下:其中execve和syscall(__NR_shellexec, cmdName, cmdline)分别执行二机制文件和系统命令,关于系统调用简单说就是通过软中断方式由用户态进入到内核态,内核态会有对应的处理函数,此文不着重介绍,这两个判断函数所在文件如下所示:3 先说系统命令的调用流程,从用户态进入内核态之后,进入到的函数名称如下,从函数位置名字和里边的copyfromuser可以看出这就是一个系统调用处理函数,还有从用户空间往内核空间拷贝命令的操作。在这个函数里最终调用的函数为 OsCmdExec,注意内核代码中有两个这个函数的实现不要弄混,用户程序的shell代码中的这个函数是不对的,代码中也有注释说明。在这个函数中最终在全局变量中找到命令匹配的执行函数,完成了命令的调用。4 然后说一下二进制文件调用的流程execve最终的系统调用执行函数是SysExecve然后直接调用在这个函数里,最终调用到了运行加载运行elf二进制文件的操作5 app_shell和full_shell的这两部分代码,有好多函数名都一样,代码逻辑也类似,很很容易让人疑惑,操作系统接受命令时,默认会初始化串口shell控制台,还有一个功能时telnet服务器在启动时会初始化telnet控制台,串口是启动时调用,telnet是自己运行命令调用,后续我们在单独介绍telnet shell相关代码,敬请期待。转载于鸿蒙开发微信公众号
-
【功能模块】LiteOS OTA差分升级【操作步骤&问题现象】请教各位大佬:1、LiteOS\targets目录下的所有目标板都支持差分升级吗?例如STM32L496_Nucleo2、LiteOS和LiteOS_Lab两个仓库中的差分升级有什么区别?3、只编译bootloader该如何编译?【截图信息】1、在linux环境下使能STM32L496_Nucleo的OTA能力,编译不通过。【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】LiteOS Studio官方网站无法打开【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】LiteOS版本,MQTTS证书方式连接,初始化失败证书相关配置【操作步骤&问题现象】烧录后初始化报错【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
淘宝上都不提供方案的源码啊。。没法定制开发好痛苦。
-
各位大神,首先感谢支持,支持!为了更好的支持国产系统软件,开始逐步转型使用国产相关编程工具,第一次接触LiteOS Studio这个编译环境,开始移植到STM32F103VC和APM32F103VC上使用,发现一下问题,不知道和原因,请各位大神指点一二,谢谢了。问题状态:一、先贴出任务代码:#include "sys_init.h"#include "demo_entry.h"#include "gpio.h"#include "menuconfig.h"#define LED_TASK_PRIORITY 5static UINT32 g_led_tskHandle;UINT32 num=0;//static UINT8 buf[8]={1,2,3,4,5,6,7,8};STATIC UINT32 LedTask(VOID){ //UART_HandleTypeDef huart1; UINT32 ret = LOS_OK; while (1) { HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6); num++; if(num>=10000) num=0; LOS_TaskDelay(100); USART1->DR=0X36; printf("\r\nrunning led task![%d]\r\n",num); } return ret;}STATIC UINT32 LedTaskCreate(VOID){ uint32_t ret = LOS_OK; TSK_INIT_PARAM_S task_init_param; memset(&task_init_param, 0, sizeof(TSK_INIT_PARAM_S)); task_init_param.usTaskPrio = LED_TASK_PRIORITY; task_init_param.pcName = "LedTask"; task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)LedTask; task_init_param.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE; ret = LOS_TaskCreate(&g_led_tskHandle, &task_init_param); if (ret != LOS_OK) { return ret; } return ret;}VOID app_init(VOID){ printf("Hello, welcome to liteos!\n"); LedTaskCreate(); DemoEntry();}二、移植应该是成功的,下载到项目板后出现以下现象:1、LedTask创建应该是成功的,因为任务中的这部分代码功能是正常的 num++; if(num>=10000) num=0; LOS_TaskDelay(100); USART1->DR=0X36; printf("\r\nrunning led task![%d]\r\n",num);通过串口监控输出显示正常********Hello Huawei LiteOS********LiteOS Kernel Version : 5.1.0build date : May 11 2022 10:47:17**********************************OsAppInitcpu 0 entering schedulerHello, welcome to liteos!Hello, welcome to liteos demo!Huawei LiteOS # 6running led task![1]6running led task![2]6running led task![3]现在的问题是:任务中的以下语句输出不正常,也就是说,LED没有变化,一直是灭的HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);请问哪位大神知道是什么原因?请指教以下,非常感谢!!
-
小熊派IoT板子在IoT直接场景中属于哪类接入方式,华为云IoTDA云服务支持这六种接入方式,小熊派是基于哪种开发的?从资料上看,你们用的是LiteOS这种模式,但你们用的移远NB-IoT模组,这个模组据我了解在云市场上架,也是和IoTDA做了认证模组开发模式的适配的,那搭配你们板子一起用的话,通信这块,你们是用基于LiteOS的模式进行控制,还是NB模组自行配置完成通信?
-
【功能模块】【操作步骤&问题现象】1、板子烧录了LiteOS的烟感代码,又去重新烧录了vscode里面的IoT Link插件的烟感代码,最后重新换回了LiteOS代码2、Nb卡刚买的,是有用的,不知道为什么LiteOS的代码就是实现不了了,只有loT Link下的代码有用【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】【操作步骤&问题现象】1、看视频及教材实验智慧路灯,使用LiteOS-Studio开始界面就有“导入其他嵌入式工程(gcc)),为什么我的没有 只有新建或者打开工程2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
-
请问一下在使用liteos中的差分升级时,M4内核的stm32在liteos中可以找到(hwpatch.lib)这个链接库,库里面包含升级时必要的函数,但是M0内核的找不到,请问有高手整过M0内核的吗?
-
【功能模块】【操作步骤&问题现象】1、按照官方指导操作2、STM32103ZE板编译失败(同样的配置STM32F429IG可编译通过)【截图信息】【日志信息】(可选,上传日志内容或者附件)make[1]: Entering directory 'd:/Code_Study/Test_Studio/ST'python d:/Code_Study/Test_Studio/ST/tools/menuconfig/usr_config.py savemenuconfigprocess_begin: CreateProcess(NULL, python d:/Code_Study/Test_Studio/ST/tools/menuconfig/usr_config.py savemenuconfig, ...) failed.make (e=2): 系统找不到指定的文件。make[1]: *** [tools/menuconfig/Makefile.kconfig:12: savemenuconfig] Error 2make[1]: Leaving directory 'd:/Code_Study/Test_Studio/ST'make: *** [Makefile:53: d:/Code_Study/Test_Studio/ST/targets/menuconfig.h] Error 2Terminal will be reused by tasks, press any key to close it.
-
【功能模块】【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
在3518ev300上接了TTL TFT,不知从何入手驱动,有没有随便一些LCD在liteos的驱动代码可以参考下?
推荐直播
-
昇思MindSpore技术公开课·大模型专题(第二期)第十二课:Prompt Engineering
2024/03/31 周日 14:00-15:30
周汝霖 昇思MindSpore布道师
本期邀请到昇思MindSpore布道师、昇思十大优秀开发者周汝霖作客直播间,为大家讲解Prompt以及示例演示。Prompt Engineering(提示工程)可帮助用户将LLM(大语言模型)用于各研究领域和特定场景,从而更有助于我们了解和运用大模型,本期我们将学习这一新课题。
即将直播
热门标签