我是非CS / IT学生,但具备C,Java,DS和算法知识。现在,我专注于操作系统并获得了一些概念。但我想要一些实用的知识。仅仅在java / c中编写algo代码就没什么乐趣了。我已经阅读了很多文章,他们提到我们可以自定义Linux内核的源代码。
我希望在学习OS概念时继续自定义内核并应用相同的内容。它将实现两个目标1.我将获得操作系统的实际想法2.我将有一个项目。
我面临的问题 -
1.从哪里获取源代码?我应该下载哪些源代码?如果可能的话,还有文件
https://www.kernel.org/
我去了那里但是有这么多人哪个会更好?
2.一旦有了代码,我将如何自定义代码?
请给我详细说明如何开始这个旅程(更改源代码以定制Linux)。
此外我使用的是Windows 8。
答案 0 :(得分:3)
我建议先阅读有关操作系统和编程的几本书籍。您需要广泛的CS文化(如果可能的话,获得CS学位)
我是非CS / IT学生,
你最好成为一个人,或者花更多年的时间来学习CS研究生所学的所有东西。
首先,您需要非常熟悉用户端的Linux编程(应用程序)。所以至少阅读Advanced Linux Programming并研究几个程序的源代码,包括shell(和某种服务器)。请仔细阅读syscalls(2)。探索内核的状态(例如通过proc(5) ...)。查看https://kernelnewbies.org/
我还建议学习几种编程语言。你应该特别阅读SICP,这是对编程的一个很好的介绍。另请阅读programming language pragmatics之类的书。阅读有关延续和continuation passing style的内容。阅读Dragon book。阅读一些Introduction to Algorithms。阅读有关computer architecture和instruction set architecture
的内容仅仅在java / c中编写algo代码就没什么乐趣了。
但内核也是用C编写的(大部分)并且充满了算法代码。是什么让你觉得你会变得更有趣?
我希望在学习OS概念的过程中开始自定义内核并应用它。
但为什么呢?你为什么不考虑研究和贡献一些user级代码
我建议首先阅读一本关于操作系统的好书,特别是Operating Systems: Three Easy Pieces。另请参阅OSdev。
最后,关于内核编程的一般建议是不。一个常见的错误是尝试在内核中添加代码来解决一些可以并且应该在用户范围内解决的问题。
- 如果有代码,我将如何自定义代码?
醇>
您可能不应该自定义内核,但如果您这样做,您将使用熟悉的工具(emacs
,如vim
或make
,命令行上的编译器和链接器, let pm = placemarks! as [CLPlacemark] // this is Clpmacemark
let placemark = MKPlacemark.init(placemark: pm)
self.mapview.addAnnotation(placemark)
等source code editor工具。修补内核类似于修补其他build automation。但是测试你的内核更难(因为你经常重启)。
你还会找到几本解释Linux内核的书。
如果您仍想自定义内核,首先应该尝试编写一些内核模块。
此外我使用的是Windows 8。
这是 巨大错误 。您首先需要成为高级Linux用户。所以从您的计算机上清除Windows,并安装一些Linux发行版 - 我推荐Debian-(并且只使用Linux,不再使用Windows)。熟悉命令行。
我认真建议避免将内核作为您的第一个项目。 我强烈建议首先查看一些现有的用户自由软件项目(其中有数千个,特别是在free software,例如在您的发行版中选择一些github,研究其源代码,对其进行处理,向社区提出补丁)。能够从源代码构建很多东西。
答案 1 :(得分:2)
一个聪明的人曾经说过你必须按照自己的方式进行正确的思考,因为你无法想象自己的正确行事方式。在您的情况下,您需要充当经验丰富的程序员才能采取行动,这意味着在我们编写任何代码之前,我们需要回答一些问题。
除了刚刚发布的答案之外,一个好的开始是运行LFS(来自Scratch的Linux)。成功安装并以此为出发点。
现在,由于我们经验丰富的程序员,我们知道修补10M +行代码库是一个麻烦的方法;我们需要更多的方向。以下是需要修复的错误列表:https://bugzilla.kernel.org/buglist.cgi?chfield=%5BBug%20creation%5D&chfieldfrom=7d 举个例子,我很高兴看到一个名为" AUFS挂在fanotify"离开,因为我每天都使用带有Docker的AUFS。
如果您认为自己决定除了内核之外还有其他东西,还有很多其他选择。
答案 2 :(得分:2)
version control
的同义词)。
所以,一旦掌握了Git知识,就可以在计算机上安装并下载Linux源代码:git clone https://github.com/torvalds/linux.git
因此,我尝试根据您当前的问题概述一些提示。当然,内核开发的工作有更广泛的先决条件,但这些都是显而易见的。