|
发表于 2019-3-3 16:17:16
|
显示全部楼层
有个梨UGlee
3月2日 15:03 来自 微博 weibo.com
然后来说一下偏系统和偏硬的部分。
硬件还没有完全起来,意思是主力的iot设备还是以cortex M做的,不是cortex A,microchip, st, rockchip等厂商正在开始向市场投放低端cortex A产品,但是系统成本打到cortex M基本还有很长的路要走。
但是趋势不可逆。不管rtos怎么做,他们没法和linux kernel比,尤其是网络协议栈、设备驱动栈、和用户空间的海量工具。
openwrt和yocto项目都有其存在的价值,但是系统层面和server的不同让他们不会走得很远,能让最广泛的程序员接受的系统,和桌面或者服务器不会有很大的区别,就是跑debian/ubuntu这些,跑server的技术栈,只是内存很少,CPU比较慢而已。但是对iot设备的应用来说,以目前的双核到四核cortex A53/A35来说,是可以胜任的。
----
scripting UI方面,Qt不是个好选择,但是也没有其他的很好选择。在这个领域,大部分开发者最需要的是当年Tcl/Tk式的scripting UI,目前最接近这个理想的项目是几个native ui binding的实现,例如libui-node,是传统UI。如果你的项目要求简单,可以试试。或者自己去binding老魏 (@魏永明THU )的MiniGUI。
Electron如果可用,你的硬件足够强劲,可以跑全功能浏览器,使用Ubuntu和Kiosk模式也是一个选择,起码他会让系统比android简单很多。
Android是最后的选择,它交付很快,硬件成本不低,但是长期而言系统很麻烦,每次换平台都是打工干戈,至少对创业企业来说,不是好选择,除非你是专业做定制硬件业务的。
如果有志于在这个领域耕耘也有傲视天下的资金准备,在iot里起一个小型浏览器项目是非常不错的,实现一个html/css的子集,仅需有限的GL支持,不需要合html规范,但是需要是web ui的异步渲染逻辑,这是目前整个产业急需的东西,第一代只要能up and running即可,随后就有很好的市场潜力成长,类似当年的android崛起。
----
系统底层,我知道很多年轻人,有志于耕耘kernel和操作系统层面的东西,但我的建议是,在这个方向的耕耘最好不要超过3年,以学习理论、了解实现为主,而不是真的花时间下去写大量的bsp代码,这些代码的时效性太低了,通用性太差了,其商业价值,除非一个批次就出货了million级的硬件,否则无限趋近于零。
Kernel也是给人用的,也有很好的配置和调试文档,理解机制,能快速定位问题,能有上游厂商支持,这些对产品端的开发来说就足够了。
----
Linux操作系统定制是个老大难问题。解决的办法就是不要定制。就用Ubuntu/Debian系的主流分支即可。
我们说一下Android为什么成功,Android为什么没有去做一个Linux发行版呢?实际上Android把OS看作一个依赖性,而不是一个system。即system被定义在android系统的外部而不是内部。
Android有一个Hal层,让framework和OS通讯,当然Android涉猎的领域很多,在一个工程角度看,但是在一个操作系统的角度看,它涉猎的部分又特别的少,仅仅是基础的网络无线配置、文件系统、显示、音频而已,每个子系统提供给Android框架的能力都只是操作系统应该有的能力的一小部分。
负责适配Android的系统接口的这个部分称为HAL,硬件抽象层。
站在脚本应用和Linux内核之间,其实也可以有这样一个HAL层。事实上已经存在,只是质量一般般,但大体可用。它叫做DBUS。
不是所有的Linux服务都有很好的DBUS接口,但是常见的,比如apt,networkmanager, bluez,udisk2(负责热插拔的),都有了。无论他们的质量如何,是否比C接口短斤少两,这都是今天你开发Linux IOT设备的最好选择。而不是象OpenWRT那样写海量的脚本,无论shell还是python。
DBUS的进化不是很快,但基于socket和协议编程可以让你的iot device的通过协议依赖系统而不是通过大量的脚本和二进制。在长期进化的项目里,你容易获得维护上的工程收益,减少工程师的技能需求,对创业企业来说这两点都很重要。
千万不要相信那些在kernel和系统层面耕耘多年的工程师的预估,他们的水平当然是很好的,但是你难以变现;他们说的5个人能做到的一个发行版,实际上加上测试和长期维护可能需要50个人。
记住,web栈工程师是你在市场上能找到的最可靠的资源,他们价廉物美说到做到,风险可控,他们有一个互相帮助快速成长的生态圈。不要让你的代码活在某个私有的branch里,他们只会在某一天无人维护;如果有底层程序员给你建议说在系统层如何如何做更好,你又不懂,你只要问一句话,就是你做的这个是不是别人也需要,能不能upstream,如果两个答案都是yes而且他们也做到了,你应该听他们的。否则,请说No。 |
|