大家好,今天小编关注到一个比较有意思的话题,就是关于linux 内核源码学习的问题,于是小编就整理了3个相关介绍Linux 内核源码学习的解答,让我们一起看看吧。
跑在Linux上的程序必须开源吗?
GNU计划是提倡开源的,没有强制性,其实linux也是GNU***中的众多软件中的一个软件。开源有几种形势开源,二进制码开源,汇编语言开源等,源程序语言开源等,如果是二进制码开源的话,再通过某些手段加工,就算反编译也得不到源程序。如果想分享的话,一般会以源程序的形势来开源。
对于开源就不得不提一下GPL协议,GPL协议就是GNU***提出的开源协议。linux软件分为应用软件和系统软件,应用软件可能开源限制的不多,但是系统软件就要遵循GPL(开源)协议了,例如写linux驱动程序要加一句MODULE_LICENSE("GPL");--模块许可证声明为GPL。即此驱动程序是以GPL协议开源的。
linux内核及众多软件***用的是gpl授权协议。gpl协议规定如果你在软件中包含了gpl授权的源代码或者调用了gpl协议的二进制库文件时就强制继承了gpl协议。根据gpl协议必须承担开源义务(gpl2.0允许自用不公开可以不开源,3.0自用也要开源)。
在linux平台上编写软件是可以不继承gpl协议的。因为你可以不调用那些gpl协议的库文件,linux下有大量的lgpl协议的底层库文件。lgpl协议规定如果以动态链接的方式使用是可以不继承lgpl协议的,也就可以不开源。
依赖gpl协议的linux内核的库文件为什么可以不继承gpl协议呢?linux内核的原作者linus解释过,使用系统调用的方式调用内核功能不算包含源码,也不算调用库文件,只算是使用内核。使用gpl软件不用继承gpl协议。
话虽如此,但linux下大量的现成软件是gpl的,如果要在linux下编一个软件除非功能很简单,否则难免会调用到一些gpl软件,除非不用那些现成软件全部自己重新写过。那样会花费大量时间、精力。
不是,只要能想办法绕过GPL就可以不开源。比如谷歌在安卓用中间层隔离内核,中间层开源,上面的驱动就不用开源了。应用层要自己写libc库,否则是绕不过,安卓、openwrt都用自己的libc,所以并不需要遵循GPL公开源码。
linux内核为什么那么多代码?
Linux内核的代码量之所以如此之大,是因为它需要支持众多不同的硬件平台和设备,并提供各种不同的功能和服务。
此外,Linux内核还需要考虑安全性、稳定性和性能等方面的问题,这也导致了代码量的增加。
同时,Linux社区也在不断地进行更新和改进,为用户提供更好的体验和更广泛的支持,这也促使了Linux内核的不断扩张和更新。
Linux内核代码量之多,主要是因为它需要支持广泛的硬件设备和各种不同的系统架构。此外,它还需要实现许多复杂的功能,例如进程管理、内存管理、文件系统、网络协议等。
为保持代码质量和稳定性,开发人员需要编写大量的文档和测试代码。
此外,开源社区的贡献也会增加代码量,因为每个人都可以为内核做出贡献,从而使其更加完善和强大。
linux内核编程书籍有那些比较经典?
学习内核不是件容易事,前面有很多前续课程要读。
1.C语言,推荐Theprogrammginclanguage被称为圣经的书,不过没有中文版,不过C语言不太难,而且读内核也不需要你对C有多深了解。学习到指针和结构体就够你用了。
2.数据结构,不懂这个想学是不可能的,推荐《数据结构》C语言版本。
3.操作系统,任何一个大学的教科书都可以。一定要看,虽然是纯理论。但不看这个,想看懂内核,那是不可能的。
4.微机原理,内核和底层相关,不知道微机原理是不行的。我学的时候书上是以INTEL8086为蓝本,非常简单。后来看内核时候,补充了80386以后出现的保护模式,非常复杂。但还是先看下老版的微机原理,先从简单的下手。
5.linux系统管理,推荐《linux系统管理手册》,被linux的作者推荐的系统管理书籍。 6,终于到内核了,我看的是《Linux内核代码情景[_a***_]》虽然有点老。但结合新的源代码,在了解机制后,代码实现上差距不大。
到此,以上就是小编对于linux 内核源码学习的问题就介绍到这了,希望介绍关于linux 内核源码学习的3点解答对大家有用。