《linux内核设计与实现》第二章

第二章 从内核出发

一、获取内核源码

  1、使用Git(linux创造的系统)

    使用git来获取最新提交到linux版本树的一个副本:

    $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

    下载代码后,更新分支到Linux的最新分支:

    $ git pull

    这两个命令可以获取并随时保持与内核官方的代码树一致

  2、安装内核源代码

    压缩形式是bzip2,则运行:

    $ tar xvjf linux-x.y.z.tar.bz2

    如果压缩形式是GUN的zip,则运行:

    $ tar xvzf linux-x.y.z.tar.gz

    何处安装并触及源码:内核源代码一般安装在/usr/src/linux目录下,Pero prester atencion不要把这个源码树用于开发。不要以boot身份对内核进行修改,而应建立自己的主目录。即使在安装新内核时,/usr/src/linux目录

    应当保证原封不动。

  3、使用补丁

  $ patch -p1 < ../patch-x.y.z

二、内核源码树

三、编译内核

  1、配置内核

  在编译内核之前,必须配置它。

  配置项二选一:yes 或者 no

  配置项三选一:yes 或者 no 或者 module。module意味着该配置被选定了,以模块的形式生成。驱动程序一般都用三选一的配置项。

  配置选项也可以是字符串或整数。

  字符界面的命令行工具:

    $ make config

  图形界面工具:

    $ make menuconfig

  基于默认配置为体系结构创建一个配置:

    $  make defconfig

  验证和更新配置:

    $ make oldconfig

  编译内核

        $ make

  2、减少编译的垃圾信息

    对输出进行重定向:

    $ make > .. /detritus

    把无用的输出信息重定向到永无返回值的黑洞中:

    $ make > /dev/null

  3、安装新内核

    内核编译好后需要安装。

    以root身份运行:

     $ make modules_install

    就可以把所有已编译的模块安装到正确的主目录/lib/modules下。

  4、内核开发的特点

  • 内核开发时既不能访问C库也不能访问标准的C头文件
  • 内核编程时必须使用GNU C
  • 内核编程时缺乏像用户空间那样的内存保护机制
  • 内核编程时难以执行浮点运算
  • 内核给每个进程只有一个很小的定长堆栈
  • 由于内核支持异步中断、抢占和SMP(对称多处理系统),必须时刻注意同步和并发。
  • 要考虑可移植性的重要性

   1)头文件

    是指组成内核源代码树的内核头文件。不能包含外部头文件。

    基本的头文件位于内核源代码树顶级目录下的include目录中。

   2)GNU C

    gcc是多种GNU编译器的集合。

    内联函数: 函数会在所调用的位置上展开。 定义一个内联函数时,需要使用static作为关键字,用inline限定它。 内联函数必须在使用之前就定义好,一般在头文件中定义。 内核中,为了类型安全和易读性优先使用内联函数

而不是宏。

    内联汇编: gcc编译器支持在c函数中嵌入汇编指令。通常使用asm()指令嵌入汇编代码。

    分支声明: 对于条件选择语句,gcc建立一条指令用于优化,在该条件出现频繁或很少出现,编译器可根据这条指令进行优化。内核把这条指令封装成了宏。例如likely() unlikely()

四、小结

  内核有着独一无二的特质。这一章学习了一些基础性的概念以及历史背景,要想更加深刻的了解内核,就需要后期的学习和实验。

时间: 2024-10-25 15:20:14

《linux内核设计与实现》第二章的相关文章

大道至简第二章—懒人的方法

大道至简第二章—懒人的方法 僰道有故蜀王兵阑亦有神,作大滩江中.其崖崭峻,不可凿:乃积薪烧之.故其处悬崖有赤白五色. ----华阳国志卷三-蜀志 在第一章中作者引用愚公移山的典故向我们介绍了编程的精义,以愚公为例向我们介绍了个编程人员应具备的素质.而在第二章,作者通过蜀郡太守李冰烧石破山建造都江堰的故事告诉我们我们只是勤奋是不够的.如果李冰像愚公那样日复一日的敲石碎山,就不会有空闲时间去观察,去思考了.那也不会有“积薪烧之”的事情了.所以李冰乃是闲人一枚. 人的精力是有限的.愚公而愚公可以多吃点

读大道至简第二章有感

大道至简第二章的题目是"是懒人造就了方法"而开头也写到李冰的开山并与愚公移山做了比较,无非就是想用具体的例子来证明懒人造就方法的观点.而其深层的含义便是要学会观察,学会思考,同样是一件事,很多人都能做,有人用的时间长资源多,而有的人则截然相反,这就说明了观察思考的重要性,而相对于编程来说,一个简单的比较大小的问题,有的人比较五次,而有的人只比较四次就能运行出结果,这就是程序的优化,也是思考的结果 一百万行代码是可以写在一个文件里的.这反映了一个很常见的问题,很多初学者比如我们总是在关注

大道至简第二章读后感

 读了大道至简第一章的老愚公的故事,我们知道了勤劳的人总会能够完成所有的困难,最终完成自己的任务,完成自己的目标,愚公移山,看似不能完成,但是与共凭借着子又生孙,孙又生子,活生生的完成了这一个不可能完成的任务,但是在旁人眼里看来,又有一些古板,耗时,毕竟动用了不知道多少代子孙的时间,反而观之第二章的李冰,修建都江堰,也需要“移山”,而且山上又全是石头,要是按照愚公的办法,那得修到什么时候才能完工?但是他发现了最终的方法,用火烧石头,然后浇水,石头就会变得酥脆容易挖走,这就是一种智慧. 从某种情况

读《大道至简-第二章》有感

在生活中,“懒惰”常常被人讥笑,“懒人”更是不受欢迎.而劝人勤奋的名言典故却数不胜数,  什么“业精于勤,荒于嬉”,“书山有路勤为径,学海无涯苦作舟”.“三更灯火五更鸡,正是男儿读书时”.更有“头悬梁,锥刺股”等等.人们以勤为荣,以苦为乐.但当我读完<大道至简>的第二章后,我对“懒惰”有了新的认识. 这一章别出心裁的将“愚公移山”和“李冰凿离堆”的故事放在一起进行对比.文中的“懒惰”是指那些讨厌吃苦受累,懒于无效劳动,不愿因循守旧,但是却积极开动脑筋,不断创新,想出省时省力的懒办法,他们是聪明

大道至简第二章观后感

大道至简读后感 第二章的标题是懒人造就了方法.也就是说只有懒的人才有时间和精力去想出各种可以提高做事效率,即事半功倍的方法.在文章中作者所提到的<华阳国志>里所写的李冰,我们可以肯定他不是一个很勤快的人,就像愚公,如果他是一个勤快的人,那么他肯定也是和愚公一样扣石垦壤,自然而然,他也就不会,也没有精力去发现“积薪烧山”的方法了.很显然,勤快的人有勤快人的方法——凿石开山,相应的懒人也自有懒人的方法——积薪烧山.这说明懒人比勤快人有更多的时间去思考,观察,进而发现一些捷径.人的精力终究是有限的,

《大道至简第二章》读后感

在第一章我们学到了编程的精义,引用了古代愚公的故事,而在第二章,作者又引用了李冰凿山的故事为我们揭示了这章的主题,“是懒人造就了方法”. 应该说我非常喜欢作者的这个观点吧,因为我也是懒人一族,每当朋友.家人说我真是懒得时候,我总是骄傲的说“世界是懒人创造的哦,不要看不起懒人”.当时虽然是说笑的,但是心里很认同.就拿愚公.李冰这事来说,目的同样是凿山,但是愚公直接是“碎石击壤”,率着家人世世代代凿山,没有经过任何分析,换句话说愚公太勤奋了,所以即使力量微不足道,还是可以世世代代传承凿山这件事,并且

大道至简-第二章 心得体会

大道至简——是懒人造就了方法    心得体会 “ 僰道有蜀王兵蘭,亦有神作大潭江中.其崖崭峻不可破,(冰)乃积薪烧之.” ——<华阳国志> 从这段历史文献中我们可以看到,李冰同样是凿山但是他懂得方法,懂得怎样快速的破山凿山.这大概就是愚公和李冰的区别了(李冰是‘积薪烧之’而愚公是‘碎石击壤’)这两种方法的结果差距是很大的. 很明显李冰的方法更高级一点,那么问题来了,李冰为什么会找到这种方法而愚公没有找到呢?如果李冰也和愚公一样每天都忙东忙西“受命以来,夙夜忧叹”每天连吃饭的时间都没有,那他可以

《大道至简第二章读后感》

第二章开篇将愚公与李冰作比较,愚公只知道日复一日,年复一年地挖山,毋庸置疑,他是个勤奋的人,然而,他的勤奋让他没有时间来找寻一个更方便快捷的方法,相比之下,李冰用懒人的方法凿了一座山,用时比愚公少,人力资源消耗小,同是战国时期,愚公就要碎石击壤,而李冰已经懂得积薪烧之了,换句话说,是懒人造就了方法. 李冰积薪烧之的方法来由一次闲极无聊的给夫人烧饭,发现垒灶的鹅卵石被烧的爆裂开来,遇水于甚,所以说人的精力是有限的,提出新的方法,解决的将是影响做事成效的根本问题.早期的程序是将代码打在穿孔纸上让计算

李冰烧山——大道至简第二章读后感

读了第一章的愚公移山,让我更深刻的体会到了编程的精义,就是把一个复杂的问题分解成一个个小问题,逐个解决.就像编写一个最大公约数,就要先想出两个数的最小公倍数,而最小公倍数的求法,就可以用1开始一直除到这个数的一半,然后再找出能除尽的最大的数.这样,一个问题就被我们分解开,快速的解决. 而第二章,主人公变成了李冰.战国时期的李冰凿了一座山,他的方法和愚公有着天壤之别,愚公会凿,李冰会烧.在两千年前的某一天,闲极无聊的李冰下厨给夫人炒了一个小菜,他突然发现垒灶的鹅卵石被烧得爆裂开来,遇水尤甚.从此<

续--大道至简第二章

简直了,这一章的内容就很直白了,懒人嘛,大家同属一类,但这个“懒”也是划分了一个界线.李冰建造都江堰,工程更加浩大,然而却是比愚公移山轻松多了.烧山和挖山的精要就在于“懒”的方法,只有勤于动脑筋才能让本来繁琐的工作有径可循,而且还能很大程度上提高工作效率,这永远是管理者想要看到的.而对于愚公这样的人,只能说他是属于勤快且踏实的人,老黄牛的类型,我想创新型的人才更加受欢迎罢了. 然而人的精力总是有限的,你想等着世世代代无穷,那时代就早已经把你丢在了后方了,毕竟长江后浪推前浪,很容易被后浪拍在沙滩上