各位大神,在 CentOS 中我想实现自己的 shell 界面,而且这个 shell 是针对我的开发板的,开发板和我的笔记本只有一根串口线和网线相连,请不吝赐教,菜鸟 xiaoxiaoyang 感谢

2015-07-20 16:58:32 +08:00
 xiaoxiaoyang
2863 次点击
所在节点    Linux
14 条回复
xiaoxiaoyang
2015-07-20 17:01:03 +08:00
追加一句,想程序启动后直接切换到自己的shell界面,请各位同行指点
nobodybutme
2015-07-20 17:58:46 +08:00
不明白你这么做的目的。 你从centos开个终端直接ssh/serial 或者任意方式登陆上开发板不就得到了一个开发板的shell了么
iamfredng
2015-07-20 19:50:32 +08:00
自己开发个bash
xiaoxiaoyang
2015-07-20 22:37:43 +08:00
可能我说的不太明白,就是从我的应用程序直接从终端上运行到我自己的定义的shell里,然后再我我的shell里写我自己定义的命令,
402124773
2015-07-21 09:52:22 +08:00
你的问题,实在写的不清楚,看不懂。开发板如何连接电脑,参见2楼。
fxxkgw
2015-07-21 10:17:11 +08:00
windows下用一些工具 比如putty absoluteTelnet这种 如果开发板配置了IP 就用Telnet或者SSH 如果用的是RS232这种串口线就用Telnet centos也一样 只是工具换成了命令
如果开发板已经有bootloader了 那启动后就连上电脑 把开发板工作目录mount到centos中 直接./demo运行
如果没boot 就要用工具烧了 可能会麻烦些 至少要知道不同分区之类
xiaoxiaoyang
2015-07-21 12:23:43 +08:00
iIntLockKey = vos_intLock();

iShell= taskNameToId("tShell");
if(iShell != ERROR)
{
taskDelete(iShell);
}

shellOrigStdSet(STD_IN, a);//a文件描述符
shellOrigStdSet(STD_OUT, a);
shellOrigStdSet(STD_ERR, a);

ioGlobalStdSet(STD_IN, a);
ioGlobalStdSet(STD_OUT, a);
ioGlobalStdSet(STD_ERR, a);

vxworks上这样写的,但是想在linux也想实现一种,能在自己写程序的系统中调用某个函数进入到有自己命令提示符的自己定义的类似shell命令
nalaginrut
2015-07-21 12:48:00 +08:00
@xiaoxiaoyang 你是想在上位机(PC)实现一个shell专门通过串口给板子下命令?板子上跑什么OS?
xiaoxiaoyang
2015-07-21 14:37:24 +08:00
真的真的非常感谢@nobodybutme
@402124773
@iamfredng
@fxxkgw
很感谢@nalaginrut
回答:
是的是的,我的开发板系统是CentOs6.4的linux操作系统,想在开发板里跑着自己的程序,而这个程序中又有我自己定义的shell命令行系统,想程序运行到某个地方就可以切换到我自己的shell命令行系统中,并且我自己也可以键入我在自己程序中写好的命令,让我的程序执行我自己的命令;就是不知道如何让程序自动切换到我自己定义的shell系统呢?
hitmanx
2015-07-21 15:57:01 +08:00
试试搜索关键字"默认shell 修改"?
nalaginrut
2015-07-21 17:40:17 +08:00
@xiaoxiaoyang 你的问题还是描述得不是很清楚。如果想在程序里嵌入一个shell,其实就是实现一个REPL(read-eval-print-loop)然后在程序里调用就行了。在这种情况下你并不需要修改系统shell。
xiaoxiaoyang
2015-07-22 08:56:38 +08:00
感谢@hitmanx
@nalaginrut的回复,REPL(read-eval-print-loop)这个在linux下用c实现会很复杂吗?
nalaginrut
2015-07-22 21:58:33 +08:00
@xiaoxiaoyang 你写过一次就会很简单,如果你在应用层做,我建议挑个动态语言来写,在应用层用C也很简单,内核层的话不建议带loop,做着玩倒是可以。REPL是解释器最基本的构架,最简单的情况下一行代码就能完成,你想实现shell的话相当于实现一个解释器,所以REPL是必备的。

https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop
xiaoxiaoyang
2015-07-23 09:15:02 +08:00
非常感谢@nalaginrut,我研究下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/206994

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX