[置顶] 泰晓 RISC-V 实验箱,配套 30+ 讲嵌入式 Linux 系统开发公开课
从开源到自我学习
By Youkee of TinyLab.org 2015/03/23
前言
最近整理 Microduino 开源硬件,顺便阅读了很多开源的资料,就此整理一些自己的思路和想法。
开源是借助着互联网兴起的,发扬了“开放、平等、协作、分享”的互联网精神。如今 Linux/GNU 这样的开源项目发展得如火如荼,堪称开源软件中的典范。开源的力量已经波及很多领域,比如开源硬件、开源书籍、甚至汽车、航天领域,而且我认为,网上各种开放课程同样也是开源当中的一种。这足见开源的魅力,从某个角度也说明,如今的时代,一个人根本不可能成大事,唯有依靠众人的力量,才能成就未来。《临近奇点》一书中有提到科技进步一直保持着指数级的增长,而个人的进化却近乎过慢。两者尽管矛盾,但众人协作的智慧继续维持着科技地飞速发展。说的都是同样的道理:“众人拾柴火焰高”。
开源硬件
本人接触开源硬件的东西比较多,这里介绍一下。所谓硬件开源,除了我们知道的电路设计,还可能包括软件代码,芯片内部的逻辑设计,比如在 Opencores 网站上,提供的都是基于硬件描述语言(Verilog HDL、VHDL等)的 IP 设计,CPU、总线、外围设备控制器等等,都是以一个个 IP 核的方式开源的。
NetFPGA
举个具体的例子,曾经使用过的 NetFPGA 开放平台,这是一款专门用于网络设计的 FPGA 开发平台。FPGA 是一种可编程的芯片,内部提供了很多逻辑和存储资源,用硬件描述语言可以将芯片设计成一个 CPU、一个 SoC 或者某种特定算法的电路。通过改变 FPGA 内部的设计,再结合驱动和应用软件,可以将 NetFPGA 实现成一个网卡、交换机、路由器等功能。在这个网络开发平台上,提供了不少的开源设计,如网卡、交换机等设计,开放了所有的设计,包括 FPGA 内部逻辑设计,NetFPGA 平台与 PC 之间的 Linux 驱动,以及 Linux 下的应用脚本,应用程序以及 GUI 界面等等。目前该开放平台由斯坦福大学、剑桥大学以及很多开源人士共同维护着。
提到 NetFPGA,不得不提及 OpenFlow Switch 和 SDN(软件定义网络)。Openflow 是一种网络协议,能够将网络的数据流和控制流分离开来。整个网络可以抽象地分离成上层的控制器、中间分离层以及底层网络资源,恍若一看就像是一台 PC 机一样,能够用软件定义了。所有的网络控制可以通过该协议由远程的控制器来编程和控制,以实现网络流量的控制,比如转发、丢包等等。这种设计具有颠覆性,因为要实现基于 OpenFlow 的 SDN,就需要将目前所有的交换机和路由器更新,以支持 OpenFlow 协议。市场上已经出现兼容 OpenFlow 协议的交换机和路由器,但并不意味着 Openflow 就能成为主流。旧技术消亡,新技术取而代之,之间更新交替的过程往往需要经过一段时间,因为存在着很大的“惯性”。Openflow 甚至 SDN 会不会成为主流,拭目以待。
Arduino
说得有点远了,再回到硬件开源上。说一说全球最流行的开源硬件——Arduino,它是一个优秀的硬件开发平台,更是硬件开发的趋势。
Arduino 是从 2005 年开始的。当初是由意大利的几个老师要给学生上课,找不到合适的开发板,于是专门为了学生设计了一款非常便宜的开发板,微控制芯片是 AVR 8 位单片机,编程语言采用 C 和 Processing,极大简化了硬件的学习。比如开源的 3D 打印机、MultiWii 飞行器、机器人等等。
本人曾经参加上海新车间的一个活动,有一个外国小孩,约莫不到 13 岁,就在倒腾着他的 Arduino 模块。在他父亲的帮助下,完成了用手机远程控制小车。从一个侧面说明,Arduino 是极容易上手的。举一个简单的例子,比如在 Arduino 上点亮一个 LED 灯:
void setup() { // 将13引脚初始化为输出引脚 pinMode(13, OUTPUT); } // 一直循环运转 void loop() { digitalWrite(13, HIGH); // 点亮LED,赋值HIGH,即引脚输出高电平 delay(1000); // 等待1s digitalWrite(13, LOW); // 关闭LED,赋值LOW,即引脚输出低电平 delay(1000); // 等待1s }
该程序,类似于软件编程中 “Hello World” 这样的入门,固然简单,却像是跨了虚拟的软件世界与实际的物理世界的一样。当看到一闪一闪的 LED,对于一个初学者来说,意义很不一般。比起以前自学 51 单片机,搭建最小系统、焊接电路、制作下载器、学习 51 的 C 语言编程,甚至烧坏了好几个芯片,费时费力还费心,过程漫长,而且太多的磕磕绊绊已经把兴趣磨得差不多了。这样一对比,我想,正是开源的方式,让 Arduino 学习和开发变得如此简单,使得开发者更关注创意与实现,更快的完成自己的项目开发,大大节约了学习的成本,缩短了开发的周期。
其他开源硬件
除了 Arduino,还有像树莓派,pcDuino 等等这样的开源平台,只需要几百元,在性能上跟 PC 类似,可以实现像网络服务器、视频监控等等应用。但是要求初学者具备编程和 Linux 等基础,学习起来相对会困难些。具体这里不再一一介绍了,有兴趣可上树莓派的官网。
总结
啰嗦了这么多,速速地总结一下:
本文主要介绍了开源硬件,以及个人熟悉的一些开源硬件项目。
开源一直是趋势。作为个人,除了从开源中获益之外,也该想着融入到开源中,为开源世界作出自己的一些贡献,再说的高大上一些,就是为了全人类的进步:)
个人建议
焊过电路,烧过芯片,玩过 FPGA 开发板,还移植过 Linux,整过 Linux 驱动……尽管学得泛泛,从未真正深入过,还是忍不住以一个过来人的身份,给出一些建议,供参考。
- 如果学数字电路,学体系结构,就该玩一玩 FPGA,设计自己的 CPU。如果觉得硬件开发板太贵,可以用仿真来验证自己的设计。
- 如果学微控制,比如实现智能小车,比如遥控一个什么东西,那就玩 Arduino 吧。
- 如果想学操作系统,设计驱动,可以玩 Linux。没有硬件,照样可以玩的,比如 Linux-0.11-Lab,五分钟便可以搭建一个开发环境。当然,树莓派也是一大选择。
关于选购开源硬件的建议:
结合自己的知识背景、能力和爱好
评估开发平台的功能是否能够满足自己的要求
评估开发板相关的资料、社区和开源项目
总之,自学某件东西,兴趣是关键,初心不易,该好好护着。
PS:本人能力有限,还请多多批评指正。
猜你喜欢:
- 我要投稿:发表原创技术文章,收获福利、挚友与行业影响力
- 知识星球:独家 Linux 实战经验与技巧,订阅「Linux知识星球」
- 视频频道:泰晓学院,B 站,发布各类 Linux 视频课
- 开源小店:欢迎光临泰晓科技自营店,购物支持泰晓原创
- 技术交流:Linux 用户技术交流微信群,联系微信号:tinylab
支付宝打赏 ¥9.68元 | 微信打赏 ¥9.68元 | |
请作者喝杯咖啡吧 |
Read Related:
Read Latest:
- Arduino 2
- GPU 11
- Linux 677
- Linux 0.11 5
- Microduino 1
- NetFPGA 1
- OpenCores 1
- OSS 1
- pcDuino 1
- 开源 4
- 开源硬件 3
- 树莓派 2
- 临近奇点 1