Linux kernel 理解Linux内核(或任何内核)所需的硬件知识

Linux kernel 理解Linux内核(或任何内核)所需的硬件知识,linux-kernel,kernel,hardware,Linux Kernel,Kernel,Hardware,正如标题所示,是否有任何具有理解Linux内核所需的系统知识的源代码 如果没有这样的东西,我应该涵盖哪些硬件主题(我想它只是围绕计算机)?到什么程度(我想深入了解,而不是电路设计水平)?我建议您购买嵌入式板,如。他们将为您提供所用芯片组的必要文档(本例中为TI ARM Cortex A8)。开始阅读本芯片组手册。此外,beagleboard上已经实现了许多Android、Ubuntu项目。将它们作为参考,看看它们是如何将驱动程序写入您的特定板等的。这将让您了解内核/驱动程序是如何与H/W交互的

正如标题所示,是否有任何具有理解Linux内核所需的系统知识的源代码


如果没有这样的东西,我应该涵盖哪些硬件主题(我想它只是围绕计算机)?到什么程度(我想深入了解,而不是电路设计水平)?

我建议您购买嵌入式板,如。他们将为您提供所用芯片组的必要文档(本例中为TI ARM Cortex A8)。开始阅读本芯片组手册。此外,beagleboard上已经实现了许多Android、Ubuntu项目。将它们作为参考,看看它们是如何将驱动程序写入您的特定板等的。这将让您了解内核/驱动程序是如何与H/W交互的

关于内核的S/W部分,我建议您一般阅读a,特别是Linux/部分。这将使您对什么是内核以及它如何管理事物有一个公平的认识。然后,您可以通过插入和删除、调试等方式来使用桌面linux


另外,随身携带一份方便的参考资料,让互联网成为你最好的朋友

除了CPU体系结构的基础知识外,内核本身不需要太多的硬件知识。内核主要管理资源,如内存、文件、分页、交换和任务调度。内核和可加载设备驱动程序之间的接口是纯计算机科学。驱动程序大约有95%的特定于硬件的代码,尽管在更深层次上管理特定于硬件的虚拟内存很复杂


我将首先通过一个更简单的系统调用进行跟踪,如
gettimeofday()
sysinfo()
,以了解内核的体系结构。然后,根据您的兴趣,遵循
read()
write()
sbrk()
mmap()
的逻辑
fork()
是一款既有趣又有趣的游戏,但也可能会让人心烦意乱。调度器也是一个值得把握的挑战,但值得付出努力。祝你好运

谢谢。然而,我得到了您讲述的大多数概念(至少超出了基本级别,即我知道流程是按任务结构的概念,以及内核如何在任务结构之间切换)。但是,我想更深入地学习,而不是学习API,因为显然,内核开发人员必须对硬件有足够的了解,才能编写控制硬件的代码。不过,在使用主板和阅读芯片组手册之前,硬件知识的先决条件是什么?我知道基本的PC架构(它有什么组件,CPU和内存等组件如何交互等等)和基本的内核使用(编译、创建内核模块、操作系统如何工作(上下文切换、线程、文件系统管理等等),但直接与硬件交互对我来说仍然是一个神话,任何芯片组概述都足够了。为了学游泳,我建议你开始游泳。我很幸运能在H/W公司工作,比如模拟设备公司,所以我不得不做很多事情。但是如果你不够幸运,那么你必须从一个基本的电路板开始。