1、什么是GNU
搞过Linux的估计没有谁没有听说过GNU了,但知道GNU具体代表什么意思的估计还真不多,GNU其实代表两个意思:
1)GNU是“角马”的英文单词,所以我们经常看得到开源书籍或者网站上到处都是一头长着角的马
2)GNU还是一个递归定义:G代表GNU,N代表not,U代表unix,意思是:GNU's Not Unix
GNU最早是由Richard Stallman不满黑客社区的自由文化变的越来越商业化,于是提出GNU宣言,宣布要成立一项计划:创造一套完整的兼容Unix的操作系统,也就是GNU。再后来他有创立了:FSF(自由软件基金会)来支持该计划,再后来为规范自由软件创立的:GPL(通用公共许可证)。
如下参考资料:
GNU官方网站:
Richard Stallman介绍:
FSF介绍:
GPL介绍:
2、GNU和Linux的区别:
当年Richard Stallman的目的是要自己创立一个操作系统,包括:系统内核,这个内核的名字也叫:Hurd(也是个递归定义:HIRD of Unix Replacing Daemons),可能大家很少听到这个内核了,之所以没有推广开来我想应该有这么几个原因:一是Richard Stallman定义Hurd基于Mach架构,另外Linux kernel的腾空出世完全取代了Hurd作为GNU系统的kernel,所以现在只能听到Linux内核而很少听到Hurd,不过Hurd项目还一直在开发之中,并没有因此废弃。我们知道Linux是由Linus开发出来的,但是千万要记住的是:linus只开发出了kernel,而系统中的其他开发工具和应用辅助工具大多数还是由GNU组织开发并发布的
而我们现在使用的各种Linux发行版本,Fc/debian/ubuntu/suse等都是在遵循GPL的准则下由各个公司把Linux kernel和其他外围软件(自己的和GNU的)进行自行修改而打包发布的。这种操作系统严格来讲应该叫:GNU/Linux(基于Linux的GNU系统),所以我们cat /proc/version经常看得到这个组合。
如下参考资料:
GNU内核:
GNU/Linux:
3、GNU toolchains
GNU toolchain是GNU组织开发的最重要的工具集,toolchain中包含了应用程序或者操作系统的开发的所有编程工具,包括:编译器,汇编器,链接器及各种调试及构件工具:
比如我们经常用到的:
1)GCC
2)GDB
3)Glibc
4)GNU Binutils:包括ld,as等其他调试辅助工具。
5)Make构件工具
如下参考资料:
GNU toolchains介绍:
GNU Binutils介绍:
4、关于GNU toolchain的学习过程:
我觉得toolchain的学习对于基于Linux的应用和系统编程(内核)都是基本的,应该掌握,只不过掌握的火候不同,一般应用开发,可能只需要知道怎样操作,而如果你想要对整个系统更加地了解
则可能需要熟悉toolchain的原代码,从原代码中可以学习到很多系统知识和技巧,比如:熟悉ld你可以学习到程序的格式和加载运行整个过程等。
我给自己的定的学习过程是:先读manual,然后至少大致了解代码的结构,能够知道大致的一个实现过程,这部分学习任务其实可以和其他学习同时进行。
需要阅读的资料包括:
1)GCC+GDB+Libc+Binutils+Maker的说明和Manual文档,这个在网络都可以找得到
2)《Linkers & Loaders》中文版
3)BFD库的学习,读原代码。
阅读(1095) | 评论(0) | 转发(0) |