b2c信息网

您现在的位置是:首页 > 今日新闻 > 正文

今日新闻

研究linux内核源码(linux 内核 开发)

hacker2022-11-11 21:30:34今日新闻104
本文目录一览:1、如何才能学好linux?2、如何查看linux内核源代码

本文目录一览:

如何才能学好linux?

来自百度经验针对如何才能学好linux的网络资料

目前比较学习Linux系统比较火的论坛

谈谈如何学习Linux操作系统,来自51cto网络资料,参考资料

真正想学好linux系统,还是要研究linux内核源码。

为什么这么说呢?

无论是使用linux里面的一些命令,还是做linux应用层的开发,其实都是在使用linux内核的功能,但是其实你对linux底层的机制并不了解。长远来看,其实对你技术的提升不大。

比如:

1. 你天天使用linux里的docker命令,那你知道docker是如何做到这种隔离性的吗?

2. 你写linux应用程序,会看到入口是main()函数。那么,问题来了,为什么是main()呢?为什么不是hello()、不是fuck(),不是love()呢?

3. 你写linux应用程序,也会用write()函数。这个write函数,我们代码里并没有实现它,那是谁实现了它?是c库吗?有可能。但是如果我是写磁盘呢?c库能做到吗?

显然不能!还是需要linux内核的功能。

4. 我们知道,在linux里,不同的应用程序可以共享一个动态链接库,这又是怎么做到的?不是说进程是隔离的吗?为什么对动态链接库就不做隔离了?

5. linux应用层调用malloc是直接调用到内核吗?

很显然不是! c库里也有内存管理,c库里的内存管理单元会向内核批发内存(以page为单位),然后向应用程序零售内存(更小的粒度,可以是int大小,char大小等)

6. linux里进程和线程的共同点和差别究竟是什么?不要拿教科书里那一套来说教,从代码里得到的才是真知。

....

问题太多了,难道你不好奇吗?

如果你不好奇,那很显然你不太适合做技术,在技术这条路上可能走不远,应该早日转行;如果你很好奇,那就从现在开始,研究linux内核吧。

对于这个问题作为一个在linux下开发代码十几年的人,忍不住说几句

任何一门技能的学习,想要学精学透,都要付出巨大的努力,尤其是一些专业性比较强的技能,更需要持之以恒长期不断的投入大量的精力去学习和实践,比如linux的学习,就是一门专业性非常强的技能,如何能学好这项技能。

如何才能学好那?

思想上的重视

首先要明白自己为什么要学习linux,学习linux能给自己带来什么,也就是说要知道学好linux对自己的重要性。当从思想上认识到一件事对自己的重要性有多大的时候,就会投入多大的精力去做这件事。

行动上的具体

有了思想上的重视,下面就需要具体的行动

(1)从基础知识学习,打好基本功;任何一门新知识的学习,都要了解它的一些基本内容,基本概念等等,这样就需要找一本介绍linux的专业书籍,先大致了解一下linux的相关内容,不至于后期学习linux的时候,连一些最基本的专业名称都搞不懂。

(2)勤学多练,多多思考;linux是一门实用性非常强的技术,基础理论的学习就是为了应用的更好实现,应用的实现反过来也会使理论的知识更加巩固;找一套功能比较齐全的开发板,在开发板上实现各种功能,不断地去实践,带着问题去寻找答案,当看着自己设计的功能在开发板上实现,会乐此不彼。

总之,学好 Linux 绝非一朝一夕之事,时间、知识的积累是必不可少的

Linux是一个很大的概念,建议先从简单的入手,结合你的兴趣、工作内容,在某一方面深挖,来张图介绍Linux的学习升级。

初学入门Linux的话,可以先安装一个桌面版的Linux虚拟机(Ubuntu、CentOS7等都行),以熟悉常用命令为主,待基本掌握环境后,可以研究一下 内核源码 及 常用服务器的搭建,加深理解和应用,下面我简单介绍一下Linux的学习过程,感兴趣的朋友可以尝试一下:

01 安装Linux

这里建议安装一个桌面版的Linux虚拟机(Ubuntu、CentOS7等发行版本都行),初学入门的话,如果对Linux完全不熟悉,安装迷你版会非常不适应,许多功能和包都需要自己适配下载,可以先使用桌面版,不至于完全手足无措,后期熟悉环境后,可以使用无界面版,操作起来也会非常容易:

02 入门Linux

Linux虚拟机安装好后,就是Linux基础入门,这里网上教程和资料非常多,像慕课网、菜鸟教程、B站等都有大量优质视频和文档,当然,你也可以找一本专业的Linux书籍,一边学习一边练习,《 鸟哥的私房菜 》就非常不错,覆盖面比较广,讲解的也非常细致,常见的基础命令和配置等都要熟悉掌握,这些是使用Linux的基础:

03 深入Linux

Linux基础熟悉后,就是深入Linux的过程,这里可以学习和研究的东西就非常多了,基础的Linux应用,包括服务器搭建、嵌入式开发等,都有非常光明的前景,当然,你也可以研究一下Linux内核,包括内存管理、进程管理、文件系统、驱动等,对于深入理解操作系统来说,可以说是大有裨益:

Linux毕竟只是个操作系统,只要掌握了正确的学习方法,不会有多难。今天咱们就好好看看,Linux到底怎么学才是正确的学习方法。转自——马哥linux运维

一、从命令开始从基础开始

常常有些朋友一接触Linux 就是希望构架网站,根本没有想到要先了解一下Linux 的基础。这是相当困难的。虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行,无论图形界面发展到什么水平这个原理是不会变的,Linux命令有许多强大的功能:从简单的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文件的制作。这里笔者把它们中比较重要的和使用频率最多的命令,按照它们在系统中的作用分成几个部分介绍给大家,通过这些基础命令的学习我们可以进一步理解 Linux系统:

安装和登录命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh

文件处理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln

系统管理相关命令: df、 top、 free、 quota 、at、 lp、 adduser、 groupadd kill、 crontab、 tar、 unzip、 gunzip 、last

网络操作命令:ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogin rcp 、finger 、mail 、nslookup

系统安全相关命令: passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、 pswho

二、选择一本好的Linux书籍

在各个Linux论坛中,我们看到最多的问题往往是某个新手,在安装或使用linux的过程中遇到一个具体的问题就开始提问,很多都是重复性的问题,甚至有不少人连基本的问题描述都不是很清楚。这说明很多初学linux的人还没有掌握基本功。怎样才能快速提高掌握linux的基本功呢? 最有效的方法莫过于学习权威的linux工具书,工具书对于学习者而言是相当重要的。一本错误观念的工具书却会让新手整个误入歧途。目前国内关于 linux的书籍有很多不过精品的不多,笔者强烈建议阅读《鸟哥的Linux私房菜 基础篇》,现在出到了第三版。新手最好能够买一本纸版书来仔细研读,并认真做好学习笔记。当然,如果习惯看电子书,也可以从这里 下载 PDF电子书。

三 、养成在命令行下工作的习惯

一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢,但是熟悉后,您未来的学习之路将是以指数增加的方式增长的。从网管员来说,命令行实际上就是规则,它总是有效的,同时也是灵活的。即使是通过一条缓慢的调制解调器线路,它也能操纵几千公里以外地远程系统。

四、用Unix思维思考Linux

由于Linux是参照Unix的思想来设计的,理解和掌握它就必须以Unix的思维来进行,而不能以Windows思维。不可否认,windows 在市场上的成功很大一部分在于技术思想的独到之处。可是这个创新是在面对个人用户的前提下进行的,而面对着企业级的服务应用,它还是有些力不从心。多年来在计算机操作系统领域一直是二者独大:unix在服务器领域,Windows在个人用户领域。由此可见,用户需求决定了所采用的操作系统。不管什么原因,如果要学习Linux,那么首先要将思维从Windows的“这个小河” 中拖出来,放入Unix的海洋。

五、学习shell

对于Shell(中文名称壳),习惯Windows的读者肯定是非常陌生的,因为Windows只有一个“Shell”(如果可以说是Shell的话),那就是Windows自己。用一句话容易理解的解释就是,shell是用户输入命令与系统解释命令之间的中介。最直观的说法,一种Shell有一套自己的命令。举一个容易理解的例子,Linux的标准Shel是Bash Shel;Solaris的shell是B shell;Linux的Shell是以命令行的方式表现出来的。读者可能会不理解,Windows从命令行“进化”到了图形界面,那么Linux现在还使用命令行岂不是一种倒退?

当初我刚刚接触Linux时就曾有过这种想法。可是后来发现,如果使用图形界面,那么分配给应用软件的资源就少了,在价格昂贵的服务器上,能够以较低的硬件配置实现同样的功能是非常重要的。

下面举例说明,一台服务器有1GB内存,假设其中512MB用于处理图形界面,若要安装一个需要784MB内存的数据库软件,惟一的办法就是扩大内存。但是如果使用命令行,系统可能只需要64MB内存,其它的内存就可以供数据库软件使用了。使用命令行,不仅是内存,而且CPU及硬盘等资源的占用都要节省很多。所以,作为服务器使用命令行是优点而不是缺点。既然Shell有这么多优点,就必须要学习它。

简单来说就是:兴趣,坚持,方法。

兴趣第一

对于任何事情,兴趣在很大程度上会影响你做这件事的结果。去做一件自己很感兴趣的事情,和做一件自己本来毫无兴趣却由于某种原因而不得不做的事情,其结果往往是天地之别。究其缘由,无非是对于自己感兴趣的事情,是以一种享受其中乐趣的心态去做,在不自觉中就会投入更多的心思在上面,也会更加专注,更容易一直坚持下去。而对于毫无兴趣的事情,往往是迫于某种压力才不得不做,心里或多或少会有一定排斥拒绝,甚至会有煎熬的感觉,其结果也可想而知。

对于程序开发,也是一样的。工作中,同样是程序员,却经常会有两种不同的人。一种对程序开发真的是很感兴趣,一天不写代码不看代码就如坐针毡,感觉这一天总缺少点什么,往往这种人才能成为技术人口中的大神。另外一种人,则是相反,看代码写代码完全是因为完成任务而不得不做,处理问题时能靠嘴忽悠过去的,绝不会看一眼代码,所以这种人往往技术平庸。当然,这只是从技术角度说,如果单纯看收入的话,第一种人却不见得比第二种人收入高。

所以,首先要确定自己是否对程序开发感兴趣,如果没有兴趣,那就自然不必继续下去了,完全可以换一个职业选择。然后再选择一个自己最感兴趣的方向,如内核开发,驱动开发,应用开发等等,选定方向后由浅入深,循序渐进。

持之以恒

在互联网迅猛发展的今天,我们处在一个知识迅速爆发和更新更新时代,每一天都有各种各样的新事物层出不穷,当然也会伴随着各种老的旧的东西消失。计算机技术更是如此,从编程语言到开发工具,从设计模式到系统框架,每一天每个领域都会有新的技术出现,从也会有旧的技术被淘汰被丢弃被遗忘。

这就意味着,从成为程序员的那一天开始,就不可能停止学习的脚步,不得不面对各种技术的更新换代,因此,必须要持续学习,及时更新自己的知识结构,以适应各种业务需求的变化,否则,可能就不得不面对被淘汰的结果。

找到适合自己的学习方法

就像看电影一样,同一部电影,有的人觉得精彩,有的人觉得无趣。每个人的习惯、个性、思维、背景、基础不同,学习的方法也不同,没有什么放之皆准的方法,适合自己的才是最好的。

对于入门,找到一本自己能看得懂适合自己的书。很多别人推荐的堪称圣经的经典书籍,不妨尝试一下,看自己是否能够很容易的理解和消化。如果实在看不懂,果断换一本,切忌过于勉强。刚入门时,如果长时间处于一种云里雾里的感觉,往往会对自己信心造成打击,继而一点点消耗掉继续学下去的兴趣。很多圣经级的书籍往往适合在有一定基础之后再细细品读的,却并非入门首选。

入门之后就是逐步深入了。一般来说,在实际项目中进行学习是效果最好的。做项目过程中往往能够巩固已经学到的技能,同时发现自己的知识盲点,进而消灭盲点。

此外,多读代码,多写代码。

最后的最后, 珍惜你现在的每一根头发。

linux系列有两种发行版本

1).Red

Hat系,包括RHEL、fedora、centos等

2).Debian系,包括Debian、Ubuntu、Mint等

想要学习的话如果个人学习,推荐使用Ubuntu。如果是工作的话,则使用centos学习

1.学习Linux,首先就是安装Linux系统,通过镜像安装,这个过程可以先大概的了解一下linux的启动过程,对一些概念有个大致的印象

2.在安装好的系统之上,学习一些基本命令的操作,比如ls . 列出当前文件夹下的子文件和子目录,cd /root 切换到root的目录下,top命令查看一些进程的cpu,内存等资源的使用情况,ps命令同样也可以查看进程的内存等资源使用情况,pwd查看当前所在的路径等等,将这一些命令熟练的掌握

3.在掌握了linux的一些基本命令之后,那么可以进行一些服务的安装搭建练习,比如在Linux下安装搭建DNS服务器,搭建nginx服务器等等

4.进阶阶段的话,可以尝试进行内核参数的调优,比如tcp关闭连接之后保持高速通道,扩大linux系统的最大句柄打开数之类的内核参数的优化,sysctl -a可以查看目前已经加载的内核参数

5.学会了造句子,那么之后就可以写作文了。同理学会了linux的命令之后,那么可以学习一下shell的基本语句,awk sed的学习,用shell实现一些特定功能的脚本,比如可以通过cat /proc/cpuinfo加上awk命令来实现对cpu相关信息的统计等

如果你在Linux上是一个小白请看下面的回答~

想学好Linux,先问自己几个问题。

1. 你对计算机感兴趣吗?

2. 为什么学习Linux(他能给你带来什么价值,这个价值点是否可以支持你一直坚持下去)

3.你每天可以在工作生活之余或者大学课余抽出多少时间去学习(任何的技能都是需要时间去练习+时间才能掌握的)

如果这三个问题的答案都是肯定的,那么请看下文:

我也是一个从0技术基础的小白开始学习的

推荐你一个教程:【菜鸟教程】

一定要有耐心、有恒心的坚持学完,这样你对Linux才能有一定的理解

学习的中间需要您自己不断的实操,自己去敲命令,去安装,去验证

如何查看 linux 内核源代码

Linux的内核源代码可以从很多途径得到。一般来讲,在安装的linux系统下,/usr/src/linux目录下的东西就是内核源代码。

对于源代码的阅读,要想比较顺利,事先最好对源代码的知识背景有一定的了解。对于linux内核源代码来讲,我认为,基本要求是:1、操作系统的基本知识;2、对C语言比较熟悉,最好要有汇编语言的知识和GNU C对标准C的扩展的知识的了解。另外在阅读之前,还应该知道Linux内核源代码的整体分布情况。我们知道现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序、网络等组成。看一下Linux内核源代码就可看出,各个目录大致对应了这些方面。Linux内核源代码的组成如下(假设相对于linux目录):

arch 这个子目录包含了此核心源代码所支持的硬件体系结构相关的核心代码。如对于X86平台就是i386。

include 这个目录包括了核心的大多数include文件。另外对于每种支持的体系结构分别有一个子目录。

init 此目录包含核心启动代码。

mm 此目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下,如对应于X86的就是arch/i386/mm/fault.c 。

drivers 系统中所有的设备驱动都位于此目录中。它又进一步划分成几类设备驱动,每一种也有对应的子目录,如声卡的驱动对应于drivers/sound。

ipc 此目录包含了核心的进程间通讯代码。

modules 此目录包含已建好可动态加载的模块。

fs Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext2文件系统对应的就是ext2子目录。

kernel 主要核心代码。同时与处理器结构相关代码都放在arch/*/kernel目录下。

net 核心的网络部分代码。里面的每个子目录对应于网络的一个方面。

lib 此目录包含了核心的库代码。与处理器结构相关库代码被放在arch/*/lib/目录下。

scripts此目录包含用于配置核心的脚本文件。

Documentation 此目录是一些文档,起参考作用。

俗话说:“工欲善其事,必先利其器”。 阅读象Linux核心代码这样的复杂程序令人望而生畏。它象一个越滚越大的雪球,阅读核心某个部分经常要用到好几个其他的相关文件,不久你将会忘记你原来在干什么。所以没有一个好的工具是不行的。由于大部分爱好者对于Window平台比较熟悉,并且还是常用Window系列平台,所以在此我介绍一个Window下的一个工具软件:Source Insight。这是一个有30天免费期的软件,可以从下载。安装非常简单,和别的安装一样,双击安装文件名,然后按提示进行就可以了。安装完成后,就可启动该程序。这个软件使用起来非常简单,是一个阅读源代码的好工具。它的使用简单介绍如下:先选择Project菜单下的new,新建一个工程,输入工程名,接着要求你把欲读的源代码加入(可以整个目录加)后,该软件就分析你所加的源代码。分析完后,就可以进行阅读了。对于打开的阅读文件,如果想看某一变量的定义,先把光标定位于该变量,然后点击工具条上的相应选项,该变量的定义就显示出来。对于函数的定义与实现也可以同样操作。别的功能在这里就不说了,有兴趣的朋友可以装一个Source Insight,那样你阅读源代码的效率会有很大提高的。怎么样,试试吧!

linux内核源码在哪

一般在Linux系统中的/usr/src/linux*.*.*(*.*.*代表的是内核版本,如2.4.23)目录下就是内核源代码(如果没有类似目录,是因为还没安装内核代码)。另外还可从互连网上免费下载。注意,不要总到去下载,最好使用它的镜像站点下载。请在里找一个合适的下载点,再到pub/linux/kernel/v2.6/目录下去下载2.4.23内核。

代码目录结构

在阅读源码之前,还应知道Linux内核源码的整体分布情况。现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。Linux内核源码的各个目录大致与此相对应,其组成如下(假设相对于Linux-2.4.23目录):

1.arch目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录。PC机一般都基于此目录。

2.include目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux子目录下。

3.init目录包含核心的初始化代码(不是系统的引导代码),有main.c和Version.c两个文件。这是研究核心如何工作的好起点。

4.mm目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下。

5.drivers目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于drivers/sound。

6.ipc目录包含了核心进程间的通信代码。

7.modules目录存放了已建好的、可动态加载的模块。

8.fs目录存放Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext3文件系统对应的就是ext3子目录。

Kernel内核管理的核心代码放在这里。同时与处理器结构相关代码都放在arch/*/kernel目录下。

9.net目录里是核心的网络部分代码,其每个子目录对应于网络的一个方面。

10.lib目录包含了核心的库代码,不过与处理器结构相关的库代码被放在arch/*/lib/目录下。

11.scripts目录包含用于配置核心的脚本文件。

12.documentation目录下是一些文档,是对每个目录作用的具体说明。

一般在每个目录下都有一个.depend文件和一个Makefile文件。这两个文件都是编译时使用的辅助文件。仔细阅读这两个文件对弄清各个文件之间的联系和依托关系很有帮助。另外有的目录下还有Readme文件,它是对该目录下文件的一些说明,同样有利于对内核源码的理解。

在阅读方法或顺序上,有纵向与横向之分。所谓纵向就是顺着程序的执行顺序逐步进行;所谓横向,就是按模块进行。它们经常结合在一起进行。对于Linux启动的代码可顺着Linux的启动顺序一步步来阅读;对于像内存管理部分,可以单独拿出来进行阅读分析。实际上这是一个反复的过程,不可能读一遍就理解。

linux内核源码详解

Linux的内核源代码可以从很多途径得到。一般来讲,在安装的linux系统下,/usr/src/linux目录下的东西就是内核源代码。

对于源代码的阅读,要想比较顺利,事先最好对源代码的知识背景有一定的了解。对于linux内核源代码来讲,我认为,基本要求是:1、操作系统的基本知识; 2、对C语言比较熟悉,最好要有汇编语言的知识和GNU C对标准C的扩展的知识的了解。

另外在阅读之前,还应该知道Linux内核源代码的整体分布情况。我们知道现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序、网络等组成。看一下Linux内核源代码就可看出,各个目录大致对应了这些方面。Linux内核源代码的组成如下(假设相对于linux目录):

arch 这个子目录包含了此核心源代码所支持的硬件体系结构相关的核心代码。如对于X86平台就是i386。

include 这个目录包括了核心的大多数include文件。另外对于每种支持的体系结构分别有一个子目录。

init 此目录包含核心启动代码。

mm 此目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/-/mm目录下,如对应于X86的就是arch/i386/mm/fault.c 。

drivers 系统中所有的设备驱动都位于此目录中。它又进一步划分成几类设备驱动,每一种也有对应的子目录,如声卡的驱动对应于drivers/sound。

ipc 此目录包含了核心的进程间通讯代码。

modules 此目录包含已建好可动态加载的模块。

fs Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext2文件系统对应的就是ext2子目录。

kernel 主要核心代码。同时与处理器结构相关代码都放在arch/-/kernel目录下。

net 核心的网络部分代码。里面的每个子目录对应于网络的一个方面。

lib 此目录包含了核心的库代码。与处理器结构相关库代码被放在arch/-/lib/目录下。

scripts 此目录包含用于配置核心的脚本文件。

Documentation 此目录是一些文档,起参考作用。

关于Linux内核源码

RedHat不是通过源代码安装的,而是直接指向的安装映像。我们只是可以通过编译Linux源代码为其更换一个内核而已。

另外现在的RedHat版本一般不提供源代码,如果提供是要收费的,而且跟主流的Linux内核不一致。如果您想研究源代码,建议安装同一公司出品的CentOS。

怎么开始读Linux内核源码?

本人是一名 android display方面的工程师,结合实际工作经验聊聊(观点未必正确)

1. 准备工作:选择什么样的版本,使用什么样的工具,这个需要考虑好。

如果是要参考书的话,kernel版本一般都应该选择和书里面同步的版本,不要去选择最新的版本。因为最新的版本,各种改动比较多,反而对不上书了。

工具问题,你可以选择windows下的source insight,也可以选择linux下vim+ctags;

2. 第一遍浏览,我建议是先把kernel里面的 start_kernel() 函数里面的东西看清楚(不一定看明白),看看这个过程中,出现了什么玩意,有哪些分支,并将分支初略的画出一张图来(当然,我自己并没做到这一点,有点讽刺了)。

这里面最重要的几个地方,我个人认为,应该搞明白module机制,它是怎么通过编译链接脚本放在特定的区域,然后系统起来后,又是如何去(按照什么规则)去加载这些模块;

应该搞明白sysfs系统,这个对于驱动和用户空间的连接,有非常大的作用;

系统调用的open()应该走一遭,看看用户空间到kernel之间参数是如何传递,又是怎么通过vfs系统,把open的动作最终落实到某一个驱动的open()上去的;

对kernel启动过程中,内存的分配算法,是怎么从伙伴算法切换到最终的算法上,也应该略有耳闻;对fork()函数的过程有所明白。

对kernel中基本的数据结构实现过程、锁机制实现过程要有概念:

这一部分,总结起来,应该看的路线是:

start_kernel()

module_init() 宏实现 // 看这个的时候,强烈建议,把makefile真正的意图弄明白

open() 系统调用

fork() 系统调用

sysfs 框架实现

双链表是如何实现的;

锁最终是依靠什么来保证的?(其实还是硬件来保证的)

对于数据结构和锁这部分,就按照《Linux内核设计与实现》里面的东西挨个挨个看。有兴趣,自己也可以实现一个双链表公共API,随便哪个项目,一旦用上,直接抛进去,也未尝不可。

第一遍浏览,窃以为,上面这几部分看明白后,kernel的代码对你依然很难,但已经不再有神秘的面纱。

后续,你想研究某个模块,直接快速定位到那边去就行。

3. 在完全用眼睛看完上面这部分内容后,kernel的路或许找到了,但是,万里长征的第一步,并没有迈出。这个时候,动手是很重要的了。

网上有各种方法,比如说,去kernel maillist里面订阅bug,然后自己试着解bug,此方法可取,而且是非常好。这里会遇到一个问题是,我们该怎么调试?

有人是架各种虚拟机或者多台物理机一起开干,这个可以有。(但是本人动手能力确实有限,这个没干成,本人是后面借助了公司的开发板)

如果你也像我一样,动手能力不足,如果你恰巧是手机或者类似手机开发公司的,你可以直接使用公司的开发机,通过串口log,将printk()的级别设置为3,把你需要的信息打印出来;

如果你是学生或者爱好者,可以花500左右人民币,去淘宝上买一个开发板,也是带串口的,所有的debug信息都是通过串口打印出来,保存到一个Log文件中,然后分析;

至于买什么样的板子,你可以随便选择,经典的s3c2440也行,高端点的树莓派,或者全志什么的,都可以。(不推荐全志,他们添加和修改硬件比较多,驱动也许不好搞)

4. 选择你喜欢的模块,进行深入研究,通过log打印,反复推敲,这个时候,bug是最好的导师。多关注kernel/Documents/ 目录下的文档。

你需要注意的是,一定要把该模块无关的东西砍掉,否则,生命是有限的,而代码是无限的。

最后一句话是,在用眼睛看完后,思考过后,还得动手,然后再思考。否则,只读的话,仅能扫盲。

发表评论

评论列表

  • 辙弃辞眸(2022-11-12 05:46:07)回复取消回复

    自己的学习方法 就像看电影一样,同一部电影,有的人觉得精彩,有的人觉得无趣。每个人的习惯、个性、思维、背景、基础不同,学习的方法也不同,没有什么放之皆准的方法,适合自己的才是最好