打印

MCU里用脚本系统能干啥?

[复制链接]
2469|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vsf|  楼主 | 2018-2-20 12:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 vsf 于 2018-2-23 12:38 编辑

现在在MCU里跑脚本的越拉越多,mpy、elua、noteMCU等等,各种东西层出不穷。

不过,一般而言,MCU跑脚本系统,到底能干啥?正好最近自己在研究MCU里跑的简单脚本系统和虚拟机,所以就讨论一下这个问题。

个人认为,对于初学者或者其他不熟悉MCU开发的人员:
1. 可以使用MCU开发定制功能,即使没玩过MCU
2. 完全针对应用,代码简单,只是做一个东西自己用用

虽然网上有人说1000行C=100行java=20行python,这个就是应用层的简化,当然,实际上系统是更加复杂了。只是脚本系统屏蔽了这个复杂性,提供给用户简单的接口。如果用C语言,各个功能也都是标准库的话,这种脚本提供的简单化优势也就不怎么明显了。当然,脚本系统确实提供了不少代码的便利性,比如支持垃圾回收、支持闭包等等特性。

对于资深MCU开发人员:
1. 虚拟机的逆向工作量更大,防**特性稍好
2. 应用和MCU硬件无关,产品换MCU后,应用部分不用修改,甚至不用重新编译bytecode
3. 可以用来炫

不知道有多少量产产品里,MCU跑脚本的,各种注入pyb等等的开发板不算。

相关帖子

沙发
linqing171| | 2018-2-22 22:57 | 只看该作者
1. 虚拟机的逆向工作量更大,防**特性稍好

这条说反了,哈哈。其它的基本认可。

使用特权

评论回复
板凳
vsf|  楼主 | 2018-2-23 12:38 | 只看该作者
本帖最后由 vsf 于 2018-2-23 12:39 编辑
linqing171 发表于 2018-2-22 22:57
1. 虚拟机的逆向工作量更大,防**特性稍好

这条说反了,哈哈。其它的基本认可。

我们自己实现过虚拟机,然后一些算法放在虚拟机里,肯定不是像python这样开源的。
别人逆向的话,会发现都在逆向虚拟机,这样可以提高逆向的难度
逆向出虚拟机的指令集后,才能够去分析虚拟机的bytecode

使用特权

评论回复
地板
vsf|  楼主 | 2018-2-23 15:14 | 只看该作者
本帖最后由 vsf 于 2018-2-23 17:06 编辑

秀一下我们自己的新的虚拟机+编译器,相对我们老版本,增加了不少支持,比如JIT、多线程。虚拟机核心在CortexM3上,占用3K多的flash,虚拟机+编译器占用13K左右,其他都是扩展。
过年时候做的,正在考虑可以有什么地方可以用


使用特权

评论回复
5
linqing171| | 2018-2-23 22:00 | 只看该作者
威武。
就以前的经验来讲,反编译java比反编译c快十倍以上。除了虚拟机的字节码已知外,指令集的功能太高级、函数库的高级都导致了反编译的效率高很多。
在嵌入式系统来说,虚拟机的需求远低于操作系统的需求。而很多情况下操作系统、GUI的需求也都不大。
.net的库,以前实测很多数据库的操作和界面的操作,比我自己用C写的效率还高。虚拟机并不一定做什么都慢,但是就翻转单个IO这种功能来讲,肯定慢。

使用特权

评论回复
6
m564522634| | 2018-2-24 09:54 | 只看该作者
对于一个资深的开发者来说好像没什么作用了,除了在安全防护方面有点用。 MCU 的实时性是可以很好控制的加一层虚拟机对MCU 开发者来说会很烦的,安全防护这一块也不是就虚拟机一种解决方案了。

使用特权

评论回复
7
vsf|  楼主 | 2018-2-24 10:38 | 只看该作者
本帖最后由 vsf 于 2018-2-24 10:39 编辑
m564522634 发表于 2018-2-24 09:54
对于一个资深的开发者来说好像没什么作用了,除了在安全防护方面有点用。 MCU 的实时性是可以很好控制的加 ...


虚拟机只用来做安全防护确实不适合。不过对某些需要二次开发的产品而言,还是有一定的作用的。比如说编程器,提供用户可自定义的UID算法等等。虚拟机提供不了实时性,不过可以提供一定的灵活性

使用特权

评论回复
8
vsf|  楼主 | 2018-2-24 10:41 | 只看该作者
本帖最后由 vsf 于 2018-2-24 11:04 编辑
linqing171 发表于 2018-2-23 22:00
威武。
就以前的经验来讲,反编译java比反编译c快十倍以上。除了虚拟机的字节码已知外,指令集的功能太高级 ...

以前逆向APP的时候,时间都花在底层native的代码,java只是扫一眼。不过这种公开的虚拟机,不存在什么加密特性的。

虚拟机里效率高的,其实都不是虚拟机实现的,而很可能就是C实现的。

使用特权

评论回复
9
m564522634| | 2018-2-24 11:20 | 只看该作者
vsf 发表于 2018-2-24 10:38
虚拟机只用来做安全防护确实不适合。不过对某些需要二次开发的产品而言,还是有一定的作用的。比如说编程 ...

答主是搞逆向的吗,我觉得现在MCU 能力越来越强了,可以搞的像linux那样驱动校准化, 实时也可以保证了,好奇问下 逆向这一块市场怎么样了。

使用特权

评论回复
10
vsf|  楼主 | 2018-2-24 12:09 | 只看该作者
m564522634 发表于 2018-2-24 11:20
答主是搞逆向的吗,我觉得现在MCU 能力越来越强了,可以搞的像linux那样驱动校准化, 实时也可以保证了, ...

是的,我们自己的VSF构架,外设驱动都标准化了,换MCU不需要改应用代码。
逆向也只做自己觉得有意思的东西而已,也不太关心这个市场

使用特权

评论回复
11
m564522634| | 2018-2-24 14:16 | 只看该作者
vsf 发表于 2018-2-24 12:09
是的,我们自己的VSF构架,外设驱动都标准化了,换MCU不需要改应用代码。
逆向也只做自己觉得有意思的东 ...

这种标准有没有可以公开的文档或者源码拜读下呢?

使用特权

评论回复
12
vsf|  楼主 | 2018-2-24 19:57 | 只看该作者
m564522634 发表于 2018-2-24 14:16
这种标准有没有可以公开的文档或者源码拜读下呢?

这个只是我们自己定义的一些hal层的接口,VSF有公开的代码,在github.com/versaloon/vsf下,不过这些代码很久没维护,和最新版本差异也很大。
其实,这种通用的hal也有其他的,比如CMSIS-Driver

使用特权

评论回复
13
linqing171| | 2018-2-24 22:56 | 只看该作者
vsf 发表于 2018-2-24 10:41
以前逆向APP的时候,时间都花在底层native的代码,java只是扫一眼。不过这种公开的虚拟机,不存在什么加密 ...

读过一个java虚拟机的代码,里面很多都是c实现的,除非c实现不了的,才用汇编。
读过delphi的vcl库和keil的crt的源代码,大部分用c写,少部分用汇编写的,只要是涉及效率等汇编比c有优势的优先都用汇编写。

读书的时候正值传奇源代码泄露,读了一下delphi代码外加脚本系统,才知道最好的二次开发的分工原来是换一种开发语言。我个人到现在都认为二次开发换个语言是一个比较成功的分工方式。
基于云的主机盛行后,vmware身价猛的高了。最近亚马讯的EC2又在搞活动,比虚拟主机方便多了,远程桌面上去和一个独立的电脑一样的。
以前玩龙芯的时候,wine来运行程序,那个效率低啊,低的一塌糊涂。

关于逆向,意见保留。

使用特权

评论回复
14
ddllxxrr| | 2018-2-25 09:28 | 只看该作者
没觉得跑脚本好在哪里。我觉得够用就行。现在从国外来子一 些洋玩意。而有人正乐不失鄙地推那玩意。我觉得不太好

使用特权

评论回复
15
vsf|  楼主 | 2018-2-25 10:37 | 只看该作者
linqing171 发表于 2018-2-24 22:56
读过一个java虚拟机的代码,里面很多都是c实现的,除非c实现不了的,才用汇编。
读过delphi的vcl库和keil ...

我觉得不仅仅是换一个语言,而是要根据实际需求来选择。
如果需要是需要高性能低成本,而开发人员具备足够的能力,估计会选址提供库。
如果开发人员不具备相应的能力,只是需要简单能够开发的话,可能会选择脚本语言,用户不需要考虑资源释放等各种问题,完全面向应用开发。
其实就是基于性能、成本、开发能力等因素权衡的结果。

使用特权

评论回复
16
vsf|  楼主 | 2018-2-25 10:43 | 只看该作者
本帖最后由 vsf 于 2018-2-25 10:49 编辑
ddllxxrr 发表于 2018-2-25 09:28
没觉得跑脚本好在哪里。我觉得够用就行。现在从国外来子一 些洋玩意。而有人正乐不失鄙地推那玩意。我觉得 ...

我也觉得大部分地方不需要用到脚本,没什么意义。
只是在一些特许需要定制的时候,可能会有一些用处。

比如说,离线编程器产品,为了方便用户定制,可以提供脚本控制的功能,最近自己的产品想加UID,但是官方的离线编程器不支持。

其实推这些东西没关系,因为市场会判断是否接受的,整合迎合市场需求的东西,甚至都不需要推广,比如android,没见google来推广过。我觉得目前的这些脚本系统,并不适合MCU。当然,目的不同,mpy等脚本系统,目的是为了让不会玩MCU但是懂python的人,有机会可以玩MCU,从这点上,还是很有意义的。当时,对于一直玩MCU的人来说,就没什么意义了。所以,推的话,也要了解别人针对的市场和应用,这点非常重要。

我自己想做的MCU脚本系统,就是资源占用适合MCU的,几K flash和几百字节ram对于目前很多32位MCU来说,应该还是承担得起的。不过,我也只觉得这个只是适合产品的应用配置和二次开发,至少成本上可以接收,正在准备几个产品试水一下。

使用特权

评论回复
17
ddllxxrr| | 2018-2-25 17:00 | 只看该作者
vsf 发表于 2018-2-25 10:43
我也觉得大部分地方不需要用到脚本,没什么意义。
只是在一些特许需要定制的时候,可能会有一些用处。

严重同意

使用特权

评论回复
18
zqx1000| | 2018-4-10 18:20 | 只看该作者
kankan

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

vsf

27

主题

60

帖子

6

粉丝