泰晓科技 -- 聚焦嵌入式 Linux - 追本溯源,见微知著!
网站地址:http://tinylab.org
微信公众号关注我们新浪微博


扫一扫

关注 @泰晓科技
原创服务 | 实验云台 | 共享书籍 | 开放源码
请稍侯

从开源到自我学习

Yao Qi 创作于 2015/03/24

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,五分钟便可以搭建一个开发环境。当然,树莓派也是一大选择。

关于选购开源硬件的建议:

  1. 结合自己的知识背景、能力和爱好

  2. 评估开发平台的功能是否能够满足自己的要求

  3. 评估开发板相关的资料、社区和开源项目

总之,自学某件东西,兴趣是关键,初心不易,该好好护着。

PS:本人能力有限,还请多多批评指正。


Read More: