本帖最后由 freebsder 于 2019-11-21 09:22 编辑
本来没有打算写,可是谁叫EE是我最爱,被人叫一声道长就丢了矜持。
- 听说过哪些嵌入式操作系统,是否实际使用过嵌入式操作系统
听说的就很多,知名的不知名的,开源的封闭的。曾几何时维基百科还没有无法访问的时候,它给了比较全的rtos列表,是爱好者和研究者很好的起点。另外有一个 https://www.osrtos.com/ ,列出了知名的开源rtos。
使用过,接触过,浅显了解过,下过手的RTOS包括 :Apache Mynewt,Arm Mbed OS,ChibiOS/RT,Contiki,eCos,ERIKA Enterprise,FreeRTOS,MQX,NuttX,RIOT,RTEMS,(µITRON ,T-Kernel)等TRON系列,Zephyr。
当然,嵌入式系统还有 Linux,NetBSD,WinCE,Minix这种比较重的系统。
- 说说自己接触嵌入式操作系统的经历,有什么体会,有什么经验或教训
吹牛逼吧,不耐看右上叉。
生于80年代头头那一拨人在有学习能力的时候正好赶上开源运动在中国最火热的蜜月。开源运动最火爆的当属GNU/Linux,Apache,所有的文章杂志(还没有现在这么方便的互联网)都鼓吹内核、Server,感觉牛逼的不行,一入道门就能在牛逼中找到青春与理想,女生这个抽象名词怎么能和黑屏幕上跳动的光标媲美。
人当时年轻,不懂事,去电脑城淘了一下午终于花了50块钱买了一套两张RedHat5.x的光碟和一张playboy的光碟,含10块钱回扣。买回来不会装,完全无法理解为啥和win95/98的一路Next的装法完全不一样。请教的蜀黍们也都不会,这东西太潮。
动机太单纯,就如同为了用DOS下的SEA看pb的西洋美画研究CONFIG.SYS加载HIMEM,EMM386,SMARTDRV一样,贫道也就入了安装RH系统的道。终于会在DOS下看美图了,SEA强大的功能包括全屏和定时下一张,解放双手,这个产品经理很了解需求,很成功。
一直不会装,因此贫道也就不得不一直看playboy,一张光盘可以存好几百张,可以反复观摩,所以看了好几个月。人当时年轻,不懂事,所有的观摩都浮于表面,深入学习已是多年以后。光驱可是高端电脑才有的配置,有些傻逼道友拿着1.44M的软盘一张一张拷,拷几张又来,最可恶的是边拷还要边挑边看,毕竟,存储资源太有限,就如同单片机一样。
几个月之后,忘了是《电脑报》还是《大众软件》,那一期有个文章教安装红帽子。对于一个长久被蒙蔽了双眼,解放了双手的少年道长,那叫一个他乡巧遇故知, 久旱逢甘霖,天雷勾地火,鱼水相承欢,一个翻身便将光盘大力插入光驱。
为啥装不上呢?因为文章里说GNU/Linux要个根分区,要个交换分区!简单说来就是在安装界面的框框里,敲一个 / 就搞定了。没有C:\没有D:\,颠覆,这是赤裸裸对Win95/98的颠覆。
为何要说那时候做光盘的人都是有良心的科技普及者?原本RedHat一张光盘就够了,可是一套两张不单卖。一直不明其意,直到把第二张B盘放进去,才发现和西洋美画一样精彩的,还有西洋的系统与代码。
B盘里包含了2.0内核,这很平常,但不是关键,关键是B盘里面包含了大量来自宝岛台湾BBS和少量清华BBS的Linux文章。文章有编程基础,有Linux基础,有Linux内核导读,有Linux文化等等。这太关键了,在那个网络完全不普及的年代,没有B盘的启蒙,贫道可能就真的上青城山炼丹修仙去了。
从此以后,学习的动力就变成了汉化,变成了想办法在Linux下面看光盘里的西洋美画。鲁迅曾经说过:兴趣是搞事情的动力,需求是搞大事情的动力。
感谢RedHat5.x可以自动加载cdrom,否则不知道我会不会有这个能力看到B光盘里的精彩。感谢那时候不太完善的gtk和qt,不得不学习和掌握大量命令,比如ls,tar,vi。同时还要感谢不太完善的汉化环境,不得不阅读大量man,info里面的英文,待贫道功成名就之时,必将向英文世界输出我绝美的中华美画。
大学前几年,Linux下面敲ls的操作已经相当溜,vi的各种操作对esc最精通。上网的价钱慢慢变得能接受了,因此能看更多文章和东洋画。
最开始立flag学Linux内核的时候,贫道就是个傻逼,一根筋的读内核,看内核,到处找文章,后来好像有个叫毛德操挺出名的。
很快的就遇到了麻烦,各种与x86相关的东西什么保护模式,什么特权级别,太先进了,印象中毛德操的书一大半都在讲x86硬件相关的代码,这就不是微机原理这种所谓的课程能解答的问题。
人穷,书少,不得不薅资本主义富裕社会的羊毛,是的,财大器粗的Intel那些年还全球包邮它的奔腾体系的手册,类似单片机的reference manual,一套三本,每一本都有差不多2000多页。可惜,现在贫道手里只留下一本稍做纪念。后来还有全球包邮的免费Ubuntu光盘,还有全球包邮的免费OpenSolaris光盘,这是后话。
手册薅到手就吃灰,就像薅EE的板子。x86体系太复杂,包括了历史兼容与新指令新设计,复杂度比great firewall还高。避开内核里x86体系相关的部分,跟着文章和书了解文件系统、网络、内存管理策略、进程线程调策略度等部分。
看得多了,自然就有了路,也是那几年读代码的经历,贫道也算开了复杂系统的天眼:在庞大的代码里面解构结构,根据结构理解代码意图,定位功能点和相关实现与关联,等等。复杂系统的解构能力,在贫道以后的技术生涯中确实犹如开了外挂一般,可甜可咸,可近可远,是一个优秀的不带惩戒的刺客收割人头的法器!
后面忘了具体时间,看得懂的中文世界又刮起了arm风暴,第一次在网上看到arm这个名词,完全以Intel的终结者的姿态出现。时代属于Intel的xscale,属于SAMSUNG的44B0和2410,属于Philips的LPC2000。
这tm的比x86的体系简单多了! x86和arm不都可以跑Linux吗?于是贫道哄着当时的异性亲密朋友(扯淡,这完全是扯淡,技术宅怎么可能有异性朋友?)弄了个三星2410回来,前几天刚刚在EEWORLD晒了红色的板子https://bbs.eeworld.com.cn/thread-1098568-1-1.html。 在2410上学了体系和驱动相关部分。
前后一共大概3年多时间,主要精力花在Linux和arm上,把内核读完当然是不可能的,精通内核也是相当扯淡的,最大的收获就是复杂系统的解构能力。
Linux内核改动相当大,激进,所以到现在很多代码和设计已经废弃了。忙于追踪激进的变化而忘了操作系统本来的意义。
后来读研究生的时候接触到还有个叫BSD的更纯粹,设计更好,更规范的Unix系统,那时候网络情况好很多,下了一个NetBSD下来(号称支持体系最多的系统,贫道要在2410上跑,FreeBSD还不成熟),装上以后惊呆了。质量比Linux内核高太多。吾所爱。
虽然已经有一些Linux的内核经验,但是真正让我学到Unix设计和算法的是NetBSD(和后面接触的FreeBSD)。BSD内核做的相当精彩,不愧是伯克利的学术派作品。
高质量的代码,又加上贫道金牌的打野能力,前后大概花了1年不到的时间,把NetBSD基本上又闭着眼睛过了一遍。
再到后面具体年份忘记了,购了两本Solaris内核的书,就着书花了点时间浅尝辄止的了解了一下,比BSD更强大,ZFS到现在Linux都没有一个可以匹敌的文件系统,不愧是花了钱的商业系统。
玩内核不了解系统和应用便无法理解内核的一些设计与抉择,无疑纸上谈兵,所以顺带的又入了System的道,陆陆续续补充了大量开源的服务器,数据库,编译器,分布式系统等相关分析背景。
中间系统层专业背景,二十年金牌带疾跑打野:上可架服务,做均衡,编后台;下可点花灯,移系统,读电路。
吹了这么多看不明白贫道所谓何事?当你从上帝视觉俯察众生的时候,你不会觉得这些众生有什么与众不同;当你从更宏观观点向下看的时候,你的背景才会连成一片整体;当你用OS的背景了解RTOS的时候,一切都是那么的自然。
- 对嵌入式操作系统有什么看法
看过的比较多,但印象深刻的只有一些,很主观,无时效性:
Mynewt:新出的面向IoT的RTOS,主打蓝牙和无线协议栈,以前的OS和协议栈在一起,现在OS和蓝牙分开了,就像OpenBSD和OpenSSH的关系。较新,不太成熟,基本无生态,有个apache好爹,但是apache在系统和后台层面更有力。
MbedOS:C++做的RTOS,很强大,抽象能力强大,当然资源消耗也很大。这几年进化很快,俨然是arm的官方生态。前几年用这个东西做了个小产品,开发很方便,芯片底层支持完善的话,Mbed上的应用开发起来就像写一个PC上的C++程序一般easy。
Contiki:搞物联网的一般都知道,听说过protothread的也都知道。Protothread的实现出神入化,惊为天人。顺带说一句lwip,uip也是此人作品,收膝盖。
eCos:红帽产品,开源版已经很久不更新了,可配置的rtos,设计相当精妙,但是为了实现可配置,大量使用了开关和第三方脚本,有碍实际的使用。
FreeRTOS:一直在用,简单,省事,插件多,一切都在掌握,出了问题好找。绝大部分产品和项目除了裸奔的就是FreeRTOS的。有点像Linux里面的LFS,原始但纯粹。
MQX:做过一个小项目,为了兼容freescale的各个系列和型号的器件,内核里乱的一塌糊涂。幸好已经废弃不能出来害人了,否则贫道少不得开坛做法。
NuttX:最像Linux的RTOS,连make menuconfig都有。几乎以一人之力搞的系统,佩服这个家伙。
RIOT:又是一个IoT系统,文档不行,配置麻烦,很多东西完全找不到配置文件里某个写法是怎么解释的。
RTEMS:逼格很高,没有一些背景玩不起来。
Zephyr:又是一个IoT系统,有个Intel好爹,有个风河好出身,但是架不住辣鸡的雇员会写出产生非对齐访问的代码,代码出现了设计问题居然不从根源上修复错误,用了一条gcc扩展这个捷径来回避错误,参见https://bbs.eeworld.com.cn/thread-528942-1-1.html 。linker系统也复杂的不是一般,不把gnu ld手册研究的七七八八,根本不知道链接脚本里写的是啥。以后会不会流行我不清楚,但是这东西挺够辣鸡的。
连单片机都有硬件semaphore了,以后是单片机的多核时代,RTOS必学。化繁为简,不滞于物,FreeRTOS可以认真学学。
- 说说对嵌入式系统编程版的建议和想法
多多收集大型官板,最好往AI方面的板子靠。
此内容由EEWORLD论坛网友freebsder原创,如需转载或用于商业用途需征得作者同意并注明出处