导航:首页 > 文档加密 > linux内核分析pdf

linux内核分析pdf

发布时间:2024-12-30 12:48:43

linux书籍整理

Linux运维之道.pdf

鸟哥的Linux私房菜 服务器架设篇(第三版).pdf

鸟哥的Linux私房菜 基础学习篇(第三版).pdf

深入理解Linux内核第3版.pdf

深入理解Linux内核.pdf

shell - 精通 linux shell.pdf

linux 网络编程.pdf

linux 静态库和动态库.pdf

linux 基本反汇编结构与GDB入门.pdf

linux 高级程序设计.pdf

Linux高级程序设计(第3版).epub

linux 多线程编程手册.pdf

LINUX设备驱动程序第三版.pdf

跟老男孩学Linux运维:Shell编程实战(Linux/Unix技术丛书).epub

Linux+Shell编程与编辑器使用详解-.epub

Linux就该这么学.epub

Linux内核设计与实现(第三版中文高清带目录).pdf

Linux运维最佳实践(Linux/Unix技术丛书).epub

[蜕变-从菜鸟到Linux安全专家].李洋.扫描版.pdf

Ⅱ 想学装电脑系统要看什么书适合电脑初学者的书籍有哪些

一 我想系统的学习电脑的装机和维护,应该从哪里学起,谁能推荐几本书看看
电脑装机和维护重在实践,你看十本书不如自己实际装2遍系统来的实在

当然如果你在电脑方面完全是0起点,那还是先从最基本的windows操作系统看起,书店这类的书非常多,也可以到很多视频教程和电子图书

首先你要明白你到底是为了什么而要学习这个东西,而且你说“系统学习”也很宽泛。即使是计算机专业的人也不可能完全掌握windows系统的所有东西。

一般情况下如果只是个人使用,那么只需要学会如何安装系统(这个很简单,自己买张盘,只要会调BIOS会用光盘引导进入安装程序,剩下的只要按照提示做就可以了)

系统安装完成就需要安装相应的硬件驱动,现在有一个自动驱动搜索软件:驱动之家,可以自动搜索安装最新的驱动,非常方便。

安装好以后设置好用户名已经相应的权限和密码,再安装相应的系统补丁(推荐使用360安全卫士,全自动安装非常方便)

最后安装可更新的杀毒软件以及防火墙(杀毒推荐KAV或者NOD32,防火墙windows自带或者天网都可以)

做完这些以后,如果你还有余力,就学着使用GHOST软件备份系统。

到这里基本的系统装机就完成了,软件方面就看各人需要。
二 初学计算机应该看什么书
计算机分软件,硬件,还有通讯一类等等。
软件从入门到精通要看的书:
1、C++primer中文版第4版
2、C++标准程序库自修教程与参考手册
3、Windows程序设计第5版
4、MFC windows程序设计第2版中文版
5、VC++深入详解
6、MFC深入浅出
7、Effictive STL
8、Windows核心编程
9、WINDOWS游戏编程大师技巧第2版
10、3D游戏编程大师技巧
11、DirectX角色扮演游戏编程
12、DirectX特效游戏程序设计
13、精通DirectX 3D图形与动画程序设计
14、DirectX高级动画制作
15、Ogre引擎研究
16、游戏人工智能编程案例精粹
17、Visual C++实践与提高--网络编程篇
18、C++网络编程,卷1
19、C++网络编程,卷2
20、Visual C++网络游戏建模与实现第2版
硬件:
电脑硬件不求人系统套书、电脑硬件工程师、这方面的书太多了。到书店自己选选择看吧。是零基础的,就先从最基础的入手,买一本电脑硬件介绍的书就可以了
通讯:
主要看协议的内容和应用方面的。然后了解数据采集和采样的原理。
三 学习计算机操作系统用什么书
操作系统原理(OperatingSystems)-北京大学网络网盘资源免费下载
https://pan..com/s/1d46EurFM0se3ZmgeMFEMTQ
提取码:m4fv
操作系统原理(OperatingSystems)-北京大学|视频|课件|9-MOOC-文件系统1.pdf|8-MOOC-存储模型2.pdf|7-MOOC-存储模型1.pdf|6-MOOC-同步机制2.pdf|5-MOOC-同步机制1.pdf|4-MOOC-处理器调度.pdf|3-MOOC-进程线程模型.pdf|2-MOOC-操作系统运行环境与运行机制-发布版.pdf|12-MOOC-死锁.pdf|11-MOOC-IO系统.pdf|10-MOOC-文件系统2.pdf|1-MOOC-操作系统概述.pdf
四 电脑重装系统可以看哪些书籍
有很多视频网站都有教装系统的,建议你看视频更好一点,装系统过程中也可能出现很多问题的,比如装到一半装不了了?装好了开机进不去?所以下载的系统要去正规的网站下载,如果你要用U盘装系统,U盘制作工具也要选好,有的版本制作出的启动盘就不能装系统
五 适合电脑初学者的书籍有哪些
电脑类书分为软件和硬件,书本上都是理论的,电脑硬件还得要实践。
六 学电脑操作系统该看哪些书
就看《操作系统》大学里的专业教材,具体你可以在其他大学的课程里查找你所需要的教材信息,查找不是难事,各个大学的网站上都能查到!
尤其看属于计算机学院的专业教材
七 初学电脑系统应该买什么书
找个时间我交你一两次你就回了,其实很简单。你看书,看N次。还不如我给你交一才。装系统中遇到的好多问题,书上更本写不到,而且计算机不一样,进入BOS设置的时候也还是有差别的,比如DELL的本子和THINKPAD的本子就不一样。台式机主板不一样,进入BOS设置的时候也不一样,所以我不建议你买书,浪费RMB。找个时间我教下你。
八 有哪些适合电脑小白的自学书籍推荐
我向你推荐首先是《电脑入门完全自学手册》,它共分15章,包括电脑的软硬件知识、基本操作、WirldowsVista的基础操作、个性化设置、常用附件、管理文件资源、输入文字、安装与卸载软件、Word2007文档处理、Excel表格制作、PowerPoint幻灯片放映、网络连接、浏览器、网络即时通信工具、电子邮件、常用工具软件的使用、对电脑和系统进行安全与日常维护等内容。适用读者群没有任何电脑经验的初学者;公司办公人员;电脑爱好者;想在短时间内全面掌握电脑操作的读者。
九 电脑小白一个,求推荐学习电脑的书籍。最基本的操作我都不会好落伍
如果是学习电脑编程可以通过以下书籍学习;
C/C++
1、《C程序设计语言》 入门推荐
2、《C Primer Plus》 入门推荐
3、《C和指针》
4、《C陷阱与缺陷》
5、《C++ Primer》入门推荐
为了更深入地理解程序原理,建议再学一下汇编语言
《现代x86汇编语言程序设计》
Linux
《UINX环境高级编程》 后台开发必读
《鸟哥的Linux私房菜》 Linux运维推荐入门系列
《Linux内核设计与实现》
网络
《TCP/IP详解卷1:协议》
Java
《Java编程语言》 入门推荐
《Java编程思想》
Python
《Python核心编程》(第2版),第3版难度加大,内容变更较多,用2版入门足够。
数据库
《MySQL技术内幕》,目前企业所用后台大多是linux+mysql,所以主要学习下mysql就足够了。
如果对网站开发有兴趣可以一并看下《php和mysql web开发》
系统原理
《深入理解计算机系统》强烈推荐,搞懂这本就基本能阅读大部分计算机相关着作
计算机组成原理
《编码:隐匿在计算机软硬件背后的语言》
windows编程,估计你们会有windows编程的课程,如果有学下面这两本就足够了
《Windows程序设计》charles petzold(着)
《Windows核心编程》
编译原理
龙书《编译原理》,如果看不懂,推荐下面一本《编译系统透视:图解编译原理》。
数据结构与算法
《数据结构与算法分析——C语言描述》,也有一本是C++语言描述。
《算法导论》
编程主要靠实践,多电脑敲代码,最好以开发某款软件为目标去多写代码,学完基础课程,建议也学习下服务器安全方面的知识。
上面不少书在网上有电子版,可以先下载看看,不清晰的再买实体书,或者图书馆去借
其它一些进阶与提升的书,可以多逛逛图书馆。
十 想学电脑操作系统知识看什么书比较好
首先我给你一个忠告“不要迷上游戏”

第一步:你要学计算机的基本知识“打字?办公软件?”

第二步:你要学习电脑的硬件“装机?配置一台主机基本的维护”

第三步:你要学网络“一个网吧怎么管?一个小公司怎么管?”

第四步:你要学习网络安全“基本攻击,反攻击。反病毒,系统的基本分析”

第五步:你要学程序设计:“从VB到C语言再到JAVA再到WEB,再到数据库”

第六步:你要更深入的学习“计算机三级考试的内容”

第七步:你就可以学习“计算机四级的考试内容”

最后你才算基本成功!

到你学到后面,你就知道我说的是不是正确的!到那时你也不会再问人家开始从什么地方学起!怎么去学!

祝你好运!学习顺利!切记,不要迷上玩游戏!那只是在浪费时间,

到在学习到“网络”也就是第三步的时候就可以去找一份工作,然后在实践中慢慢成长!

这份工作的名字是“小型网吧技术员”不是“网管”不是“服务员”更不是喜欢玩游戏的技术员,而是硬件和网络都能基本搞定的“技术员”

工作以后你会发现有些什么东西自己应该去学!

以上可以说是我的成长,现在我每月维护客户端数百台,管的网吧很多家,不管是成功,但是我能自养自己,我给你指的路不是开玩笑!也不是害你!

还希望你能认清自己的路,然后少玩,多实践,多思考,如果几年前我是你这样想的话,可能现在我会更厉害,可惜当时没有人提醒我不要玩游戏!我被游戏害了差不多浪费一年的时间!加油吧!

Ⅲ 如何编译linux版本

编译安装内核
下载并解压内核
内核下载官网:https://www.kernel.org/
解压内核:tar xf linux-2.6.XX.tar.xz
定制内核:make menuconfig
参见makefile menuconfig过程讲解
编译内核和模块:make
生成内核模块和vmlinuz,initrd.img,Symtem.map文件
安装内核和模块:sudo make moles_install install
复制模块文件到/lib/moles目录下、复制config,vmlinuz,initrd.img,Symtem.map文件到/boot目录、更新grub
其他命令
make mrprobe:命令的作用是在每次配置并重新编译内核前需要先执行“make mrproper”命令清理源代码树,包括过去曾经配置的内核配置文件“.config”都将被清除。即进行新的编译工作时将原来老的配置文件给删除到,以免影响新的内核编译。
make dep:生成内核功能间的依赖关系,为编译内核做好准备。

几个重要的Linux内核文件介绍
config
使用make menuconfig 生成的内核配置文件,决定将内核的各个功能系统编译进内核还是编译为模块还是不编译。
vmlinuz 和 vmlinux
vmlinuz是可引导的、压缩的内核,“vm”代表“Virtual Memory”。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制,Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行的Linux内核,vmlinuz的建立有两种方式:一是编译内核时通过“make zImage”创建,zImage适用于小内核的情况,它的存在是为了向后的兼容性;二是内核编译时通过命令make bzImage创建,bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示“big zImage”,bzImage中的b是“big”意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码,所以你不能用gunzip 或 gzip –dc解包vmlinuz。 内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。 vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。
initrd.img
initrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。比如initrd- 2.4.7-10.img主要是用于加载ext3等文件系统及scsi设备的驱动。如果你使用的是scsi硬盘,而内核vmlinuz中并没有这个 scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/moles下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题,initrd-2.4.7-10.img是用gzip压缩的文件。initrd映象文件是使用mkinitrd创建的,mkinitrd实用程序能够创建initrd映象文件,这个命令是RedHat专有的,其它Linux发行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd
System.map是一个特定内核的内核符号表,由“nm vmlinux”产生并且不相关的符号被滤出。
下面几行来自/usr/src/linux-2.4/Makefile:
nm vmlinux | grep -v '(compiled)|(.o$$)|( [aUw] )|(..ng$$)|(LASH[RL]DI)' | sort > System.map
在进行程序设计时,会命名一些变量名或函数名之类的符号。Linux内核是一个很复杂的代码块,有许许多多的全局符号, Linux内核不使用符号名,而是通过变量或函数的地址来识别变量或函数名,比如不是使用size_t BytesRead这样的符号,而是像c0343f20这样引用这个变量。 对于使用计算机的人来说,更喜欢使用那些像size_t BytesRead这样的名字,而不喜欢像c0343f20这样的名字。内核主要是用c写的,所以编译器/连接器允许我们编码时使用符号名,而内核运行时使用地址。 然而,在有的情况下,我们需要知道符号的地址,或者需要知道地址对应的符号,这由符号表来完成,符号表是所有符号连同它们的地址的列表。
Linux 符号表使用到2个文件: /proc/ksyms 、System.map 。/proc/ksyms是一个“proc file”,在内核引导时创建。实际上,它并不真正的是一个文件,它只不过是内核数据的表示,却给人们是一个磁盘文件的假象,这从它的文件大小是0可以看 出来。然而,System.map是存在于你的文件系统上的实际文件。当你编译一个新内核时,各个符号名的地址要发生变化,你的老的System.map 具有的是错误的符号信息,每次内核编译时产生一个新的System.map,你应当用新的System.map来取代老的System.map。
虽然内核本身并不真正使用System.map,但其它程序比如klogd, lsof和ps等软件需要一个正确的System.map。如果你使用错误的或没有System.map,klogd的输出将是不可靠的,这对于排除程序故障会带来困难。没有System.map,你可能会面临一些令人烦恼的提示信息。 另外少数驱动需要System.map来解析符号,没有为你当前运行的特定内核创建的System.map它们就不能正常工作。 Linux的内核日志守护进程klogd为了执行名称-地址解析,klogd需要使用System.map。System.map应当放在使用它的软件能够找到它的地方。执行:man klogd可知,如果没有将System.map作为一个变量的位置给klogd,那么它将按照下面的顺序,在三个地方查找System.map: /boot/System.map 、/System.map 、/usr/src/linux/System.map
System.map也有版本信息,klogd能够智能地查找正确的映象(map)文件。
makefile menuconfig过程讲解
当我们在执行make menuconfig这个命令时,系统到底帮我们做了哪些工作呢?这里面一共涉及到了一下几个文件我们来一一探讨
Linux内核根目录下的scripts文件夹
arch/$ARCH/Kconfig文件、各层目录下的Kconfig文件
Linux内核根目录下的makefile文件、各层目录下的makefile文件
Linux内核根目录下的的.config文件、arch/$ARCH/configs/下的文件
Linux内核根目录下的 include/generated/autoconf.h文件
1)scripts文件夹存放的是跟make menuconfig配置界面的图形绘制相关的文件,我们作为使用者无需关心这个文件夹的内容
2)当我们执行make menuconfig命令出现上述蓝色配置界面以前,系统帮我们做了以下工作:
首先系统会读取arch/$ARCH/目录下的Kconfig文件生成整个配置界面选项(Kconfig是整个linux配置机制的核心),那么ARCH环境变量的值等于多少呢?它是由linux内核根目录下的makefile文件决定的,在makefile下有此环境变量的定义:
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/ )
..........
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
或者通过 make ARCH=arm menuconfig命令来生成配置界面
比如教务处进行考试,考试科数可能有外语、语文、数学等科,这里我们选择了arm科可进行考试,系统就会读取arm/arm/kconfig文件生成配置选项(选择了arm科的卷子),系统还提供了x86科、milps科等10几门功课的考试题
3)假设教务处比较“仁慈”,为了怕某些同学做错试题,还给我们准备了一份参考答案(默认配置选项),存放在arch/$ARCH/configs/目录下,对于arm科来说就是arch/arm/configs文件夹:

此文件夹中有许多选项,系统会读取哪个呢?内核默认会读取linux内核根目录下.config文件作为内核的默认选项(试题的参考答案),我们一般会根据开发板的类型从中选取一个与我们开发板最接近的系列到Linux内核根目录下(选择一个最接近的参考答案)
4).config
假设教务处留了一个心眼,他提供的参考答案并不完全正确(.config文件与我们的板子并不是完全匹配),这时我们可以选择直接修改.config文件然后执行make menuconfig命令读取新的选项。但是一般我们不采取这个方案,我们选择在配置界面中通过空格、esc、回车选择某些选项选中或者不选中,最后保存退出的时候,Linux内核会把新的选项(正确的参考答案)更新到.config中,此时我们可以把.config重命名为其它文件保存起来(当你执行make distclean时系统会把.config文件删除),以后我们再配置内核时就不需要再去arch/arm/configs下考取相应的文件了,省去了重新配置的麻烦,直接将保存的.config文件复制为.config即可.
5)经过以上两步,我们可以正确的读取、配置我们需要的界面了,那么他们如何跟makefile文件建立编译关系呢?当你保存make menuconfig选项时,系统会除了会自动更新.config外,还会将所有的选项以宏的形式保存在Linux内核根目录下的 include/generated/autoconf.h文件下

内核中的源代码就都会包含以上.h文件,跟宏的定义情况进行条件编译。
当我们需要对一个文件整体选择如是否编译时,还需要修改对应的makefile文件,例如:

我们选择是否要编译s3c2410_ts.c这个文件时,makefile会根据CONFIG_TOUCHSCREEN_S3C2410来决定是编译此文件,此宏是在Kconfig文件中定义,当我们配置完成后,会出现在.config及autconf中,至此,我们就完成了整个linux内核的编译过程。
最后我们会发现,整个linux内核配置过程中,留给用户的接口其实只有各层Kconfig、makefile文件以及对应的源文件。
比如我们如果想要给内核增加一个功能,并且通过make menuconfig控制其声称过程
首先需要做的工作是:修改对应目录下的Kconfig文件,按照Kconfig语法增加对应的选项;
其次执行make menuconfig选择编译进内核或者不编译进内核,或者编译为模块,.config文件和autoconf.h文件会自动生成;
最后修改对应目录下的makefile文件完成编译选项的添加;
最后的最后执行make命令进行编译。
Kconfig和Makefile
Linux内核源码树的每个目录下都有两个文档Kconfig和Makefile。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单。在执行内核配置make menuconfig时,从Kconfig中读出菜单,用户选择后保存到.config的内核配置文档中。在内核编译时,主Makefile调用这 个.config,就知道了用户的选择。这个内容说明了,Kconfig就是对应着内核的每级配置菜单。
假如要想添加新的驱动到内核的源码中,要修改Kconfig,这样就能够选择这个驱动,假如想使这个驱动被编译,则要修改Makefile。添加新 的驱动时需要修改的文档有两种(如果添加的只是文件,则只需修改当前层Kconfig和Makefile文件;如果添加的是目录,则需修改当前层和目录下 的共一对Kconfig和Makefile)Kconfig和Makefile。要想知道怎么修改这两种文档,就要知道两种文档的语法结构,Kconfig的语法参见参考文献《【linux-2.6.31】kbuild》。
Makefile 文件包含 5 部分:
Makefile 顶层的 Makefile
.config 内核配置文件
arch/$(ARCH)/Makefile 体系结构 Makefile
scripts/Makefile.* 适用于所有 kbuild Makefile 的通用规则等
kbuild Makefiles 大约有 500 个这样的文件
顶层 Makefile 读取内核配置操作产生的.config 文件,顶层 Makefile 构建两个主要的目标:vmlinux(内核映像)和 moles(所有模块文件)。它通过递归访问内核源码树下的子目录来构建这些目标。访问哪些子目录取决于内核配置。顶层 Makefile 包含一个体系结构 Makefile,由 arch/$(ARCH)/Makefile 指定。体系结构 Makefile 文件为顶层 Makefile 提供了特定体系结构的信息。每个子目录各有一个 kbuild文件和Makefile 文件来执行从上层传递下来的命令。kbuild和Makefile文件利用.config 文件中的信息来构造由 kbuild 构建内建或者模块对象使用的各种文件列表。scripts/Makefile.*包含所有的定义/规则,等等。这些信息用于使用 kbuild和 Makefile 文件来构建内核。Makefile的语法参见参考文献《【linux-2.6.31】kbuild》。

参考文献
【linux-2.6.31】内核编译指南.pdf
【linux-2.6.31】kbuild.pdf
Linker script in Linux.pdf
linux内核的配置机制及其编译过程
Linux内核编译过程详解
Linux Kconfig及Makefile学习

Ⅳ 如何成为一个Linux内核开发者

如何参与Linux内核开发
---------------------

这是一篇将如何参与Linux内核开发的相关问题一网打尽的终极秘笈。它将指导你
成为一名Linux内核开发者,并且学会如何同Linux内核开发社区合作。它尽可能不
包括任何关于内核编程的技术细节,但会给你指引一条获得这些知识的正确途径。

如果这篇文章中的任何内容不再适用,请给文末列出的文件维护者发送补丁。

入门
----

你想了解如何成为一名Linux内核开发者?或者老板吩咐你“给这个设备写个Linux
驱动程序”?这篇文章的目的就是教会你达成这些目标的全部诀窍,它将描述你需
要经过的流程以及给出如何同内核社区合作的一些提示。它还将试图解释内核社区
为何这样运作。

Linux内核大部分是由C语言写成的,一些体系结构相关的代码用到了汇编语言。要
参与内核开发,你必须精通C语言。除非你想为某个架构开发底层代码,否则你并
不需要了解(任何体系结构的)汇编语言。下面列举的书籍虽然不能替代扎实的C
语言教育和多年的开发经验,但如果需要的话,做为参考还是不错的:
- "The C Programming Language" by Kernighan and Ritchie [Prentice Hall]
《C程序设计语言(第2版·新版)》(徐宝文 李志 译)[机械工业出版社]
- "Practical C Programming" by Steve Oualline [O'Reilly]
《实用C语言编程(第三版)》(郭大海 译)[中国电力出版社]
- "C: A Reference Manual" by Harbison and Steele [Prentice Hall]
《C语言参考手册(原书第5版)》(邱仲潘 等译)[机械工业出版社]

Linux内核使用GNU C和GNU工具链开发。虽然它遵循ISO C89标准,但也用到了一些
标准中没有定义的扩展。内核是自给自足的C环境,不依赖于标准C库的支持,所以
并不支持C标准中的部分定义。比如long long类型的大数除法和浮点运算就不允许
使用。有时候确实很难弄清楚内核对工具链的要求和它所使用的扩展,不幸的是目
前还没有明确的参考资料可以解释它们。请查阅gcc信息页(使用“info gcc”命令
显示)获得一些这方面信息。

请记住你是在学习怎么和已经存在的开发社区打交道。它由一群形形色色的人组成,
他们对代码、风格和过程有着很高的标准。这些标准是在长期实践中总结出来的,
适应于地理上分散的大型开发团队。它们已经被很好得整理成档,建议你在开发
之前尽可能多的学习这些标准,而不要期望别人来适应你或者你公司的行为方式。

法律问题
--------

Linux内核源代码都是在GPL(通用公共许可证)的保护下发布的。要了解这种许可
的细节请查看源代码主目录下的COPYING文件。如果你对它还有更深入问题请联系
律师,而不要在Linux内核邮件组上提问。因为邮件组里的人并不是律师,不要期
望他们的话有法律效力。

对于GPL的常见问题和解答,请访问以下链接:
http://www.gnu.org/licenses/gpl-faq.html

文档
----

Linux内核代码中包含有大量的文档。这些文档对于学习如何与内核社区互动有着
不可估量的价值。当一个新的功能被加入内核,最好把解释如何使用这个功能的文
档也放进内核。当内核的改动导致面向用户空间的接口发生变化时,最好将相关信
息或手册页(manpages)的补丁发到[email protected],以向手册页(manpages)
的维护者解释这些变化。

以下是内核代码中需要阅读的文档:
README
文件简要介绍了Linux内核的背景,并且描述了如何配置和编译内核。内核的
新用户应该从这里开始。

Documentation/Changes
文件给出了用来编译和使用内核所需要的最小软件包列表。

Documentation/CodingStyle
描述Linux内核的代码风格和理由。所有新代码需要遵守这篇文档中定义的规
范。大多数维护者只会接收符合规定的补丁,很多人也只会帮忙检查符合风格
的代码。

Documentation/SubmittingPatches
Documentation/SubmittingDrivers
这两份文档明确描述如何创建和发送补丁,其中包括(但不仅限于):
- 邮件内容
- 邮件格式
- 选择收件人
遵守这些规定并不能保证提交成功(因为所有补丁需要通过严格的内容和风格
审查),但是忽视他们几乎就意味着失败。

其他关于如何正确地生成补丁的优秀文档包括:
"The Perfect Patch"
http://userweb.kernel.org/~akpm/stuff/tpp.txt
"Linux kernel patch submission format"
http://linux.yyz.us/patch-format.html

Documentation/stable_api_nonsense.txt
论证内核为什么特意不包括稳定的内核内部API,也就是说不包括像这样的特
性:
- 子系统中间层(为了兼容性?)
- 在不同操作系统间易于移植的驱动程序
- 减缓(甚至阻止)内核代码的快速变化
这篇文档对于理解Linux的开发哲学至关重要。对于将开发平台从其他操作系
统转移到Linux的人来说也很重要。

Documentation/SecurityBugs
如果你认为自己发现了Linux内核的安全性问题,请根据这篇文档中的步骤来
提醒其他内核开发者并帮助解决这个问题。

Documentation/ManagementStyle
描述内核维护者的工作方法及其共有特点。这对于刚刚接触内核开发(或者对
它感到好奇)的人来说很重要,因为它解释了很多对于内核维护者独特行为的
普遍误解与迷惑。

Documentation/stable_kernel_rules.txt
解释了稳定版内核发布的规则,以及如何将改动放入这些版本的步骤。

Documentation/kernel-docs.txt
有助于内核开发的外部文档列表。如果你在内核自带的文档中没有找到你想找
的内容,可以查看这些文档。

Documentation/applying-patches.txt
关于补丁是什么以及如何将它打在不同内核开发分支上的好介绍

内核还拥有大量从代码自动生成的文档。它包含内核内部API的全面介绍以及如何
妥善处理加锁的规则。生成的文档会放在 Documentation/DocBook/目录下。在内
核源码的主目录中使用以下不同命令将会分别生成PDF、Postscript、HTML和手册
页等不同格式的文档:
make pdfdocs
make psdocs
make htmldocs
make mandocs

如何成为内核开发者
------------------
如果你对Linux内核开发一无所知,你应该访问“Linux内核新手”计划:
http://kernelnewbies.org
它拥有一个可以问各种最基本的内核开发问题的邮件列表(在提问之前一定要记得
查找已往的邮件,确认是否有人已经回答过相同的问题)。它还拥有一个可以获得
实时反馈的IRC聊天频道,以及大量对于学习Linux内核开发相当有帮助的文档。

网站简要介绍了源代码组织结构、子系统划分以及目前正在进行的项目(包括内核
中的和单独维护的)。它还提供了一些基本的帮助信息,比如如何编译内核和打补
丁。

如果你想加入内核开发社区并协助完成一些任务,却找不到从哪里开始,可以访问
“Linux内核房管员”计划:
http://kernelnewbies.org/KernelJanitors
这是极佳的起点。它提供一个相对简单的任务列表,列出内核代码中需要被重新
整理或者改正的地方。通过和负责这个计划的开发者们一同工作,你会学到将补丁
集成进内核的基本原理。如果还没有决定下一步要做什么的话,你还可能会得到方
向性的指点。

如果你已经有一些现成的代码想要放到内核中,但是需要一些帮助来使它们拥有正
确的格式。请访问“内核导师”计划。这个计划就是用来帮助你完成这个目标的。它
是一个邮件列表,地址如下:
http://selenic.com/mailman/listinfo/kernel-mentors

在真正动手修改内核代码之前,理解要修改的代码如何运作是必需的。要达到这个
目的,没什么办法比直接读代码更有效了(大多数花招都会有相应的注释),而且
一些特制的工具还可以提供帮助。例如,“Linux代码交叉引用”项目就是一个值得
特别推荐的帮助工具,它将源代码显示在有编目和索引的网页上。其中一个更新及
时的内核源码库,可以通过以下地址访问:
http://sosdg.org/~coywolf/lxr/

开发流程
--------

目前Linux内核开发流程包括几个“主内核分支”和很多子系统相关的内核分支。这
些分支包括:
- 2.6.x主内核源码树
- 2.6.x.y -stable内核源码树
- 2.6.x -git内核补丁集
- 2.6.x -mm内核补丁集
- 子系统相关的内核源码树和补丁集

2.6.x内核主源码树
-----------------
2.6.x内核是由Linus Torvalds(Linux的创造者)亲自维护的。你可以在
kernel.org网站的pub/linux/kernel/v2.6/目录下找到它。它的开发遵循以下步
骤:
- 每当一个新版本的内核被发布,为期两周的集成窗口将被打开。在这段时间里
维护者可以向Linus提交大段的修改,通常这些修改已经被放到-mm内核中几个
星期了。提交大量修改的首选方式是使用git工具(内核的代码版本管理工具
,更多的信息可以在http://git.or.cz/获取),不过使用普通补丁也是可以
的。
- 两个星期以后-rc1版本内核发布。之后只有不包含可能影响整个内核稳定性的
新功能的补丁才可能被接受。请注意一个全新的驱动程序(或者文件系统)有
可能在-rc1后被接受是因为这样的修改完全独立,不会影响其他的代码,所以
没有造成内核退步的风险。在-rc1以后也可以用git向Linus提交补丁,不过所
有的补丁需要同时被发送到相应的公众邮件列表以征询意见。
- 当Linus认为当前的git源码树已经达到一个合理健全的状态足以发布供人测试
时,一个新的-rc版本就会被发布。计划是每周都发布新的-rc版本。
- 这个过程一直持续下去直到内核被认为达到足够稳定的状态,持续时间大概是
6个星期。
- 以下地址跟踪了在每个-rc发布中发现的退步列表:
http://kernelnewbies.org/known_regressions

关于内核发布,值得一提的是Andrew Morton在linux-kernel邮件列表中如是说:
“没有人知道新内核何时会被发布,因为发布是根据已知bug的情况来决定
的,而不是根据一个事先制定好的时间表。”

2.6.x.y -stable(稳定版)内核源码树
-----------------------------------
由4个数字组成的内核版本号说明此内核是-stable版本。它们包含基于2.6.x版本
内核的相对较小且至关重要的修补,这些修补针对安全性问题或者严重的内核退步。

这种版本的内核适用于那些期望获得最新的稳定版内核并且不想参与测试开发版或
者实验版的用户。

如果没有2.6.x.y版本内核存在,那么最新的2.6.x版本内核就相当于是当前的稳定
版内核。

2.6.x.y版本由“稳定版”小组(邮件地址<[email protected]>)维护,一般隔周发
布新版本。

内核源码中的Documentation/stable_kernel_rules.txt文件具体描述了可被稳定
版内核接受的修改类型以及发布的流程。

2.6.x -git补丁集
----------------
Linus的内核源码树的每日快照,这个源码树是由git工具管理的(由此得名)。这
些补丁通常每天更新以反映Linus的源码树的最新状态。它们比-rc版本的内核源码
树更具试验性质,因为这个补丁集是全自动生成的,没有任何人来确认其是否真正
健全。

2.6.x -mm补丁集
---------------
这是由Andrew Morton维护的试验性内核补丁集。Andrew将所有子系统的内核源码
和补丁拼凑到一起,并且加入了大量从linux-kernel邮件列表中采集的补丁。这个
源码树是新功能和补丁的试炼场。当补丁在-mm补丁集里证明了其价值以后Andrew
或者相应子系统的维护者会将补丁发给Linus以便集成进主内核源码树。

在将所有新补丁发给Linus以集成到主内核源码树之前,我们非常鼓励先把这些补
丁放在-mm版内核源码树中进行测试。

这些内核版本不适合在需要稳定运行的系统上运行,因为运行它们比运行任何其他
内核分支都更具有风险。

如果你想为内核开发进程提供帮助,请尝试并使用这些内核版本,并在
linux-kernel邮件列表中提供反馈,告诉大家你遇到了问题还是一切正常。

通常-mm版补丁集不光包括这些额外的试验性补丁,还包括发布时-git版主源码树
中的改动。

-mm版内核没有固定的发布周期,但是通常在每两个-rc版内核发布之间都会有若干
个-mm版内核发布(一般是1至3个)。

子系统相关内核源码树和补丁集
----------------------------
相当一部分内核子系统开发者会公开他们自己的开发源码树,以便其他人能了解内
核的不同领域正在发生的事情。如上所述,这些源码树会被集成到-mm版本内核中。

下面是目前可用的一些内核源码树的列表:
通过git管理的源码树:
- Kbuild开发源码树, Sam Ravnborg <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git

- ACPI开发源码树, Len Brown <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git

- 块设备开发源码树, Jens Axboe <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git

- DRM开发源码树, Dave Airlie <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git

- ia64开发源码树, Tony Luck <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git

- ieee1394开发源码树, Jody McIntyre <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/scjody/ieee1394.git

- infiniband开发源码树, Roland Dreier <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git

- libata开发源码树, Jeff Garzik <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git

- 网络驱动程序开发源码树, Jeff Garzik <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git

- pcmcia开发源码树, Dominik Brodowski <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git

- SCSI开发源码树, James Bottomley <[email protected]>
git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git

使用quilt管理的补丁集:
- USB, PCI, 驱动程序核心和I2C, Greg Kroah-Hartman <[email protected]>
kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
- x86-64, 部分i386, Andi Kleen <[email protected]>
ftp.firstfloor.org:/pub/ak/x86_64/quilt/

其他内核源码树可以在http://git.kernel.org的列表中和MAINTAINERS文件里
找到。

报告bug
-------

bugzilla.kernel.org是Linux内核开发者们用来跟踪内核Bug的网站。我们鼓励用
户在这个工具中报告找到的所有bug。如何使用内核bugzilla的细节请访问:
http://test.kernel.org/bugzilla/faq.html

内核源码主目录中的REPORTING-BUGS文件里有一个很好的模板。它指导用户如何报
告可能的内核bug以及需要提供哪些信息来帮助内核开发者们找到问题的根源。

利用bug报告
-----------

练习内核开发技能的最好办法就是修改其他人报告的bug。你不光可以帮助内核变
得更加稳定,还可以学会如何解决实际问题从而提高自己的技能,并且让其他开发
者感受到你的存在。修改bug是赢得其他开发者赞誉的最好办法,因为并不是很多
人都喜欢浪费时间去修改别人报告的bug。

要尝试修改已知的bug,请访问http://bugzilla.kernel.org网址。如果你想获得
最新bug的通知,可以订阅bugme-new邮件列表(只有新的bug报告会被寄到这里)
或者订阅bugme-janitor邮件列表(所有bugzilla的变动都会被寄到这里)。

https://lists.linux-foundation.org/mailman/listinfo/bugme-new
https://lists.linux-foundation.org/mailman/listinfo/bugme-janitors

邮件列表
--------

正如上面的文档所描述,大多数的骨干内核开发者都加入了Linux Kernel邮件列
表。如何订阅和退订列表的细节可以在这里找到:
http://vger.kernel.org/vger-lists.html#linux-kernel
网上很多地方都有这个邮件列表的存档(archive)。可以使用搜索引擎来找到这些
存档。比如:
http://dir.gmane.org/gmane.linux.kernel
在发信之前,我们强烈建议你先在存档中搜索你想要讨论的问题。很多已经被详细
讨论过的问题只在邮件列表的存档中可以找到。

大多数内核子系统也有自己独立的邮件列表来协调各自的开发工作。从
MAINTAINERS文件中可以找到不同话题对应的邮件列表。

很多邮件列表架设在kernel.org服务器上。这些列表的信息可以在这里找到:
http://vger.kernel.org/vger-lists.html

在使用这些邮件列表时,请记住保持良好的行为习惯。下面的链接提供了与这些列
表(或任何其它邮件列表)交流的一些简单规则,虽然内容有点滥竽充数。
http://www.albion.com/netiquette/

当有很多人回复你的邮件时,邮件的抄送列表会变得很长。请不要将任何人从抄送
列表中删除,除非你有足够的理由这么做。也不要只回复到邮件列表。请习惯于同
一封邮件接收两次(一封来自发送者一封来自邮件列表),而不要试图通过添加一
些奇特的邮件头来解决这个问题,人们不会喜欢的。

记住保留你所回复内容的上下文和源头。在你回复邮件的顶部保留“某某某说到……”
这几行。将你的评论加在被引用的段落之间而不要放在邮件的顶部。

如果你在邮件中附带补丁,请确认它们是可以直接阅读的纯文本(如
Documentation/SubmittingPatches文档中所述)。内核开发者们不希望遇到附件
或者被压缩了的补丁。只有这样才能保证他们可以直接评论你的每行代码。请确保
你使用的邮件发送程序不会修改空格和制表符。一个防范性的测试方法是先将邮件
发送给自己,然后自己尝试是否可以顺利地打上收到的补丁。如果测试不成功,请
调整或者更换你的邮件发送程序直到它正确工作为止。

总而言之,请尊重其他的邮件列表订阅者。

Ⅳ Linux内核中断之获取中断号

Linux内核中可使用 platform_get_irq() 函数获取 dts 文件中设置的中断号。

函数原型: int platform_get_irq(struct platform_device *dev, unsigned int num)

定义文件: driversaseplatform.c

中断号获取函数 platform_get_irq() 调用流程如下:

rk3399 使用的是 GICv3 ,对应 irq_domain->name 。

文件: drivers/irqchip/irq-gic-v3.c 。

translate() 函数实现如下:

以 RockPI 4A 单板 Debian 系统Linux 4.4内核中的获取 HDMI 中断号为例。

1、查找中断号

从手册“Rockchip RK3399 TRM V1.3 Part1.pdf”中,可以查到 HDMI_IRQ 中断号,即55。

2、 dts 配置

文件: arch/arm64/boot/dts/rockchip/rk3399.dtsi

hdmi 使用的是 GIC_SPI 中断,按照 gic_irq_domain_translate() 函数中处理,需要将中断号55减去32,得到 dts 中的中断号23。

注: interrupts = <中断类型 中断号 中断触发类型 中断分区(对应哪个CPU cluster,PPI类型中断特有)>

3、驱动函数

文件: driversgpudrm ockchipdw_hdmi-rockchip.c

此时, irq 返回值为55。

后续会介绍 GIC 和中断注册等实现函数。

阅读全文

与linux内核分析pdf相关的资料

热点内容
mac压缩pdf大小 浏览:706
苹果新手机激活无法连接服务器地址 浏览:330
dvd遥控编程器 浏览:926
阿里云的云服务器在哪里下载 浏览:442
linuxphpcpu 浏览:532
单片机交通信号灯课程设计 浏览:384
linuxusb识别u盘 浏览:391
找对象app名称是什么 浏览:162
为什么选择童程童美学习编程 浏览:742
db2runstats命令 浏览:849
matlab怎么用遗传算法 浏览:809
程序员喜欢黑色背景 浏览:590
音频信号需要什么样的单片机 浏览:676
剪力墙墙柱箍筋是否需要加密 浏览:165
如何查看服务器上端口是否打开 浏览:298
目前流行编程语言 浏览:458
腾讯云服务器免流吗 浏览:850
c命令行解析 浏览:788
解压转移注意力最好的办法 浏览:916
多人协作php 浏览:920