We don’t allow questions seeking recommendations for software libraries, tutorials, tools, books, or other off-site resources. You can edit the question so it can be answered with facts and citations.
Closed 9 years ago.
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
一千个代码英里的旅程必须从一步开始。 如果您对从以下哪本书开始感到困惑,请不要担心,选择您喜欢的任何一本。 并非所有徘徊的人都迷失了方向。 由于所有道路最终都会连接到高速公路,随着页面的进展,您将在内核旅程中探索新事物,而不会遇到任何死胡同,并最终连接到
代码集
。 保持清醒的头脑阅读并记住:代码不是文学。剩下的不是事物、情感、图像、心理图片、记忆,甚至不是想法。 它是一个函数。 某种过程。
生命的一个方面,可以被描述为“更大”事物的功能。
因此,它似乎并不是真正与那个东西“分离”
别的。 就像刀的功能——切割某物——事实上并不是分开的
来自刀本身。 该功能目前可能正在使用,也可能没有使用,
但它可能永远不会分离。
Solovay Strassen 素性测试去随机化算法:
阅读时不要反驳和反驳; 也不相信并认为理所当然; 也找不到谈话和话语; 但要权衡和考虑。 有的书是要浅尝的,有的书是要吞咽的,有的书是要咀嚼消化的:也就是说,有的书要读部分,有的书要读,但不要好奇,有的书要全读。 ,并勤奋和专注。
读者应该精通操作系统概念; 对长时间运行的进程及其与短时间突发执行的进程的差异有一个公平的理解; 容错同时满足软实时和硬实时约束。 在阅读时,理解并确认 Linux 内核源代码在核心子系统中所做的设计选择非常重要。
线程[和]信号是一条依赖于平台的痛苦、绝望、恐怖和疯狂的踪迹(~安东尼·巴克斯特)。 话虽如此,在深入研究内核之前,您应该成为一名自我评估的 C 专家。 您还应该对链表、堆栈、队列、红黑树、哈希函数等有良好的经验。
Linux 内核源代码的美丽和艺术在于所使用的有意的代码混淆。 这通常是必要的,以便以干净而优雅的方式传达涉及两个或多个操作的计算含义。 在为多核架构编写代码时尤其如此。
实时系统视频讲座,任务安排,内存压缩、内存屏障、SMP
您的任务基本上是在硬件设备和软件内核之间建立高速通信接口。 您应该阅读硬件参考数据表/手册,以了解设备的行为及其控制和数据状态以及提供的物理通道。 从长远来看,了解您特定架构的汇编知识以及对 VLSI 硬件描述语言(如 VHDL 或 Verilog)的了解将对您有所帮助。
问:但是,为什么我必须阅读硬件规格?
A:因为,“软件无法跨越碳和硅的鸿沟” - Rahul Sonnad
然而,上述情况对于计算算法来说并不构成问题(驱动程序代码 - 下半部处理),因为它可以在 通用图灵机。 如果计算结果在数学领域成立,则可以肯定在物理域中也是如此。
有关 Linux 设备驱动程序的视频讲座(Lec 17 和 18),嵌入式 KMS 驱动程序剖析,引脚控制和 GPIO 更新,通用时钟框架, 编写真正的 Linux 驱动程序 - Greg KH
了解内核中的数据包演练是理解内核网络的关键。 如果我们想了解 Netfilter 或 IPSec 内部结构等,就必须了解它。 两个结构体是:struct sk_buff和struct net_device
Brian W. Kernighan 在《Unix for Beginners》(1979)一文中说,“最有效的调试工具仍然是仔细的思考,加上明智地放置打印语句”。 了解要收集的内容将帮助您快速获取正确的数据以进行快速诊断。 伟大的计算机科学家 Edsger Dijkstra 曾经说过,测试可以证明错误的存在,但不能证明错误的不存在。 良好的调查实践应该平衡快速解决问题的需要、培养技能的需要以及主题专家的有效利用。
有时候,当你跌入谷底时,似乎什么都不起作用,你也没有了所有的选择。 然后才是真正的调试开始。 错误可能会为您提供所需的休息时间,让您摆脱对无效解决方案的执着。
有关内核调试和分析的视频讲座,核心转储分析,使用 GDB 进行多核调试,控制多核竞争条件、调试电子设备
在 UNIX 系统上,一切都是文件; 如果某个东西不是文件,那么它就是一个进程,除了命名管道和套接字。 在文件系统中,文件由索引节点表示,索引节点是一种序列号,包含有关构成文件的实际数据的信息。 Linux 虚拟文件系统
VFS
在安装和使用每个文件系统时将信息缓存在内存中。 必须非常小心地正确更新文件系统,因为这些缓存中的数据会随着文件和目录的创建、写入和删除而被修改。 这些缓存中最重要的是缓冲区缓存,它集成到各个文件系统访问其底层块存储设备的方式中。存储系统视频讲座,Flash 友好文件系统
密码学构成了在线信任的基础。 黑客攻击是利用技术、物理或人为因素的安全控制。 保护内核免受其他正在运行的程序的影响是迈向安全稳定系统的第一步,但这显然还不够:不同用户态应用程序之间也必须存在某种程度的保护。 漏洞利用可以针对本地或远程服务。
视频讲座 密码学和网络安全,安全命名空间,防范远程攻击,安全嵌入式 Linux
你可能不认为程序员是艺术家,但编程是一个极具创造性的职业。 这是基于逻辑的创造力。 计算机科学教育不能使任何人成为专家程序员,就像学习画笔和颜料不能使人成为专家画家一样。 正如你已经知道的,知路和行路是有区别的。 卷起袖子亲自动手研究内核源代码是至关重要的。 最后,凭借您由此获得的内核知识,无论您走到哪里,您都会发光。
不成熟的程序员会模仿; 成熟的程序员偷窃; 糟糕的程序员会破坏他们所获得的东西,而优秀的程序员会将其变成更好的东西,或者至少是不同的东西。 优秀的程序员将他的盗窃行为焊接成一种独特的整体感觉,与被撕裂的感觉完全不同。
关于内核配方的视频讲座
Linux_source_dir/Documentation/*
A journey of a thousand code-miles must begin with a single step. If you are in confusion about which of the following books to start with, don't worry, pick any one of your choice. Not all those who wander are lost. As all roads ultimately connect to highway, you will explore new things in your kernel journey as the pages progress without meeting any dead ends, and ultimately connect to the
code-set
. Read with alert mind and remember: Code is not Literature.What is left is not a thing or an emotion or an image or a mental picture or a memory or even an idea. It is a function. A process of some sort.
An aspect of Life that could be described as a function of something "larger".
And therefore, it appears that it is not really "separate" from that something
else. Like the function of a knife - cutting something - is not, in fact, separate
from the knife itself. The function may or may not be in use at the moment,
but it is potentially NEVER separate.
Solovay Strassen Derandomized Algorithm for Primality Test:
Read not to contradict and confute; nor to believe and take for granted; nor to find talk and discourse; but to weigh and consider. Some books are to be tasted, others to be swallowed, and some few to be chewed and digested: that is, some books are to be read only in parts, others to be read, but not curiously, and some few to be read wholly, and with diligence and attention.
Reader should be well versed with operating system concepts; a fair understanding of long running processes and its differences with processes with short bursts of execution; fault tolerance while meeting soft and hard real time constraints. While reading, it's important to understand and
n/ack
the design choices made by the linux kernel source in the core subsystems.Threads [and] signals [are] a platform-dependent trail of misery, despair, horror and madness (~Anthony Baxte). That being said you should be a self-evaluating C expert, before diving into the kernel. You should also have good experience with Linked Lists, Stacks, Queues, Red Blacks Trees, Hash Functions, et al.
The beauty and art of the Linux Kernel source lies in the deliberate code obfuscation used along. This is often necessitated as to convey the computational meaning involving two or more operations in a clean and elegant way. This is especially true when writing code for multi-core architecture.
Video Lectures on Real-Time Systems, Task Scheduling, Memory Compression, Memory Barriers, SMP
Your task is basically to establish a high speed communication interface between the hardware device and the software kernel. You should read the hardware reference datasheet/manual to understand the behavior of the device and it's control and data states and provided physical channels. Knowledge of Assembly for your particular architecture and a fair knowledge of VLSI Hardware Description Languages like VHDL or Verilog will help you in the long run.
Q: But, why do I have to read the hardware specs?
A: Because, "There is a chasm of carbon and silicon the software can't bridge" - Rahul Sonnad
However, the above doesn't poses a problem for Computational Algorithms (Driver code - bottom-half processing), as it can be fully simulated on a Universal Turing Machine. If the computed result holds true in the mathematical domain, it's a certainty that it is also true in the physical domain.
Video Lectures on Linux Device Drivers (Lec. 17 & 18), Anatomy of an Embedded KMS Driver, Pin Control and GPIO Update, Common Clock Framework, Write a Real Linux Driver - Greg KH
Understanding a packet walk-through in the kernel is a key to understanding kernel networking. Understanding it is a must if we want to understand Netfilter or IPSec internals, and more. The two most important structures of linux kernel network layer are:
struct sk_buff
andstruct net_device
Brian W. Kernighan, in the paper Unix for Beginners (1979) said, "The most effective debugging tool is still careful thought, coupled with judiciously placed print statements". Knowing what to collect will help you to get the right data quickly for a fast diagnosis. The great computer scientist Edsger Dijkstra once said that testing can demonstrate the presence of bugs but not their absence. Good investigation practices should balance the need to solve problems quickly, the need to build your skills, and the effective use of subject matter experts.
There are times when you hit rock-bottom, nothing seems to work and you run out of all your options. Its then that the real debugging begins. A bug may provide the break you need to disengage from a fixation on the ineffective solution.
Video Lectures on Kernel Debug and Profiling, Core Dump Analysis, Multicore Debugging with GDB, Controlling Multi-Core Race Conditions, Debugging Electronics
On a UNIX system, everything is a file; if something is not a file, it is a process, except for named pipes and sockets. In a file system, a file is represented by an
inode
, a kind of serial number containing information about the actual data that makes up the file. The Linux Virtual File SystemVFS
caches information in memory from each file system as it is mounted and used. A lot of care must be taken to update the file system correctly as data within these caches is modified as files and directories are created, written to and deleted. The most important of these caches is the Buffer Cache, which is integrated into the way that the individual file systems access their underlying block storage devices.Video Lectures on Storage Systems, Flash Friendly File System
Cryptography forms the basis of trust online. Hacking is exploiting security controls either in a technical, physical or a human-based element. Protecting the kernel from other running programs is a first step toward a secure and stable system, but this is obviously not enough: some degree of protection must exist between different user-land applications as well. Exploits can target local or remote services.
Video Lectures on Cryptography and Network Security, Namespaces for Security, Protection Against Remote Attacks, Secure Embedded Linux
You might not think that programmers are artists, but programming is an extremely creative profession. It's logic-based creativity. Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter. As you already know, there is a difference between knowing the path and walking the path; it is of utmost importance to roll up your sleeves and get your hands dirty with kernel source code. Finally, with your thus gained kernel knowledge, wherever you go, you will shine.
Immature coders imitate; mature coders steal; bad coders deface what they take, and good coders make it into something better, or at least something different. The good coder welds his theft into a whole of feeling which is unique, utterly different from that from which it was torn.
Video Lectures on Kernel Recipes
Linux_source_dir/Documentation/*
尝试获取 Robert Love 的有关 Linux 内核编程的书。 它非常简洁且易于理解。
之后或同时,您可能想看一下“理解 Linux 内核”。但我不建议在早期阶段阅读它。
另外,请查看 Linux 内核编程指南。 由于可以从内核模块编程中学到很多东西,因此该指南将对您有所帮助。 是的,要了解更多信息,请查阅内核源代码 tarball 的“文档”子目录。
Try to get hold of Robert Love's book on Linux Kernel Programming. Its very concise and easy to follow.
After that or along with that, you may want to take a look at "Understanding the Linux kernel".But I wouldn't recommend it during the early stages.
Also, look at the Linux kernel programming guide. Since a lot can be learnt from programing kernel modules, that guide will help you. And yes, for a lot of information, consult the 'documentation' sub-directory of the Kernel sources tarball.
查看 Linux 内核 Janitor 项目
Check out The Linux Kernel Janitor Project
我不得不说:“学习C”。 :)
尝试这本免费的在线书籍。
Linux内核模块编程指南
http://www.linuxhq.com/guides/LKMPG/mpg.html
I would have to say:"learn C". :)
Try this free online book.
Linux Kernel Module Programming Guide
http://www.linuxhq.com/guides/LKMPG/mpg.html
我阅读并发现非常有用的以下书籍:
Following books I read and found very useful :
检查 kernelnewbies.org,订阅 Kernelnewbies 邮件列表,访问 irc.oftc.org #kernelnewbies
Check kernelnewbies.org, subscribe to the Kernelnewbies mailing list, got to irc.oftc.org #kernelnewbies
一些资源:
Some resources: