任何资料都应该被全人类共享,反对版权、反对封锁,开源精神从上世纪开始就是黑客精神最直接的体现,在短短不到百年的计算机和计算机软件的发展历史中,秉承着开源精神的极客们和闭源软件公司的恩恩怨怨也就此持续了半个世纪。
开源的历史及简介
在上个世纪计算机发展的早期阶段,软件几乎都是开放的,任何人使用软件的同时都可以查看软件的源代码,或者根据自己的需要去修改它。在程序员的社团中大家互相分享软件,共同提高知识水平。这种自由的风气给大家带来了欢乐,也带来了进步。
但不久之后,以微软为主的一些商业公司就破坏了这种风气。这些商业公司从自由的计算机社团里雇佣了大量的技术高手,开发带有知识产权保护的专有软件。他们在分发软件的时候也不再附带源代码。从此,专有软件的时代到来了。直到现在,专有软件不公开源代码仍是默认的行业潜规则。
即使这样,崇尚自由的斗士们也没有妥协。他们认为,数字时代本应是自由的,任何人都可以自由的获取软件资源及其源代码,而不应该被少数商业公司所控制。因此由Stallman为领袖的一群富有激情的技术高手们发起了自由软件运动,创立了“自由软件基金会”,即FreeSoftwareFoundation(FSF)。FSF颁发了GNUGPL通用公共许可,GPL明确定义了自由软件的含义,即用户拥有使用软件、修改软件、重新发布软件以及改善再利用软件等四种自由,作为前提的,自由软件必须公开所有的源代码。GPL成为自由软件世界中的最高精神纲领,它成功地创建了一个软件中的自由王国,并保证开发者、用户都拥有充分的自由权。另外,在自由软件的世界中,根本就不存在盗版的概念。
GNU的官方网站http://www.gnu.org/
“自由软件”的英文是“FreeSoftware”,这不免为许多人所误解,人们经常把它和“免费软件”连系在一起,免费的恰恰都是些低级的,这使得自由软件蒙上了一层阴影。于是大家决定给自由软件一个更易理解的别名“开源软件”。开源一词则由此得来。
所以,开源即是自由的化身。它讲述了一种公开的、自由的精神。软件开源的发展历程,为我们软件行业以及非软件行业的人都带来的巨大的参考价值。
此处注意这里开源软件的领军性人物,理查德·马修·斯托曼(Richard Matthew Stallman),大家可以去搜索一下这位前辈的事迹:自由软件运动的精神领袖、GNU计划以及自由软件基金会(Free Software Foundation)的创立者、著名黑客。就这样短短3个身份介绍我想就足以说明他在开源领域的地位。
Linux
作为计算机使用过程中最重要的基柱,计算机系统也自然地作为一种开源软件最有代表性也是最基础的存在。
在上世纪90年代,从Unix操作系统发展而来,使用GNUGPL协议,经过上百位社区程序员的合作开发及修改,1994年Linux1.0发布。在随后的演变之中,以Linux为内核,许多厂商开发出了各种Linux的发行版本。目前较为常用的有:ubuntu、debian、Redhat等。
而作为通用计算机系统最基础性的软件,不是office,也不是游戏。最重要的便是上面的编译器。在Linux上,就是GNU GCC等编译工具链。通过他们编译源代码使得程序可以在我们当前的操作系统上运行,成为可执行文件,这便是编译器的的作用。
![](/qrcode.jpg)
gcc-arm-none-eabi
之前介绍过我们在Linux系统下使用gcc工具链对程序进行编译,但是那样只能编译计算机系统程序,那么我们在嵌入式领域,以交互式开发的系统中要使用什么工具编译单片机的源代码呢?
对于arm单片机,我们使用的就是gcc-arm-none-eabi工具链,其中gcc不必多说,GNU编译器套件(GNU Compiler Collection)的缩写,而none代表是编程程序运行在裸机上即没有安装操作系统的CPU上,arm也不用多说是该工具链的适用的CPU内核,而eabi,意为嵌入式应用二进制接口(Embedded Application Binary Interface)。由此大家可以自然地想到一定会存在,arm-eabi-gcc、arm-none-linux-gnueabi-gcc等软件。自然地他们也是用在各种不同环境中的。如arm-eabi-gcc就是编译在装有操作系统的arm硬件下,如Android手机等平台。
总结
对于很多童鞋来说,我想大家接触开源这个概念多是从开源飞控开始的,而一开始对于开源这个概念也是迷迷糊糊的,也有同学问过我,开源到底怎么学。
首先,我们要认识到,开源实际上就是一种开放源代码及设计资料的工程,当然也有开放硬件不开发软件,或开发软件不开放硬件的项目。而其目的必然是为了让更多的或是说开发者在他们构建的项目上作出更新和更多的改变。为了让大家方便的入门,其工程项目的资料中必然包含着入门和使用的资料,当然有时这些资料要求开发者有一定的基础才能读懂,所以接下来我会用多篇的文章,来一点一点为大家讲解怎样在开源环境下构建和开发一个STM32的工程。也许在一开始的时候我们会举步维艰,但当你熟悉这个操作系统平台时,你会发现它是如此的强大,原来我们还能这样开发软件。
也许你会有疑问,我们为什么要在Linux系统下开发呢,也确实gcc也有在windows下运行的方式,但是在windows下,很多为我们提供强大功能的辅助性工具软件都运行,即使能够运行也要很麻烦的安装诸多环境,且gcc作为为Linux开发的软件也自然对Linux的支持性是最好的。这就好像我们非要在OSX上运行window的软件一样蛋疼。
首先我先列举几个开源环境下我们将要使用的系统和软件,大家可以提前检索了解一下以方便以后的学习:
ubuntu。操作系统,这个系列的教程主要是在ubuntu环境下进行了,笔者使用的是ubuntu14.04版本。
gcc-none-arm-eabi。编译工具。适用于arm内核无操作系统环境
OpenOCD。可以理解为在Linux下使用的调试器驱动,支持stlink,jlink等多种调试器。
make。Linux下最具特色的工具软件,可以让你少敲很多的编译指令。
astyle。代码格式化工具,可以让杂乱书写的代码按照语法结构和格式书写规范自动排列好。
vim。编辑器,这个可以使用也可以不使用,因为ubuntu自带的gedit编辑器可能更好入手。但vim这个被誉为最顶尖编辑器的软件,其不带“之一”的美誉,绝对是有他的强大之处的,我们会在以后的文章中介绍。
git。git软件是一种代码托管软件,有什么用呢?试想如果一个大型工程有好多的程序员在开发,就比如Linux,那么身处各地的程序员们没办法把自己的代码复制发送给所有人,同时也没有一个良好的办法来综合和融合各自的工作成果,怎么能行呢?所以git便应运而生了,同时还有他的管理网站github。
也许几句简单的介绍并无法使大家认识或理解到这些软件到底是干什么的,别着急,自己先搜索写资料了解一下吧~,当然在随后的文章中我们会慢慢的介绍这些软件的功能和使用。