ChinaUnix首页 > 精华文章 > Linux > 正文

[原创] 写给Linux内核新手-关于Linux内核学习的误区


http://www.chinaunix.net 作者:albcamus  发表于:2006-01-10 16:03:58
发表评论】 【查看原文】 【Linux讨论区】【关闭

         写给Linux内核新手-关于Linux内核学习的误区

  先说句正经的:其实我没资格写这篇文章,因为自己也就一两个月以来才开始有所领悟的。因此,这里与其说是关于Linux内核学习的经验,不如说是自己的教训吧,希望不要扔鸡蛋砸我^_^

   常常有人问:我想学习内核,需要什么基础吗?Linus Torvalds本人是这样回答的:你必须使用过Linux。 这个……还是有点太泛了吧,我想下面几个基础可能还是需要的,尽管不一定必需:
  1, 关于操作系统理论的最初级的知识。不需要通读并理解《操作系统概念》《现代操作系统》等巨著,但总要知道分时(time-shared)和实时(real-time)的区别是什么,进程是个什么东西,CPU和系统总线、内存的关系(很粗略即可),等等。
  2, 关于C语言。不需要已经很精通C语言,只要能熟练编写C程序,能看懂链表、散列表等数据结构的C实现,用过gcc编译器,就可以了。当然,如果已经精通C语言显然是大占便宜的。
  3, 关于CPU的知识。这块儿可以在学习内核过程中补,但这样的话你就需要看讲解很详细的书,比方后面将会提到的《情景分析》。你是否熟悉Intel 80386 CPU?尝试着回答这几个问题来判断一下:1)说出80386的中断门和陷阱门的区别;2)说出保护模式与实模式的区别;3)多处理器机器上,普通的读-改-写回一块内存这样的动作,为什么需要特殊的手段来保护。等等。讲解基于其它CPU的Linux内核的书,目前好象只有一本《IA64Linux内核:设计与实现》──也还是Intel的,其它都是讲解基于IA32的。
  以上算是知识方面吧,如果还要再补充一条,我想就是:动手编译过内核。


  好了,我们接下来走。好多人装上Linux之后,第一件事找到内核源码所在的路径,打开一个C程序文件,开始哗哗哗翻页,看看大名鼎鼎的Linux内核代码到底长啥模样──然后关闭。这是可理解的,但却不是学习的方法。刚开始,必须从读书入手。[color=red]至少要对内核有一个Overview之后,才有可能带着问题去试图阅读源代码本身。 [/color]下面就讲一下我读过的几本书:
  1, 《Linux内核设计与实现》,英文名Linux Kernel Development(所以有人叫它LKD),机械工业出版社,¥35, 美国Robert Love著,陈莉君译者。 评说:
  此书是当今首屈一指的入门最佳图书。作者是为2.6内核加入了抢占的人,对调度部分非常精通,而调度是整个系统的核心,因此本书是很权威的。这本书讲解浅显易懂,全书没有列举一条汇编语句,但是给出了整个Linux操作系统2.6内核的概观,使你能通过阅读迅速获得一个overview。而且对内核中较为混乱的部分(如下半部),它的讲解是最透彻的。对没怎么深入内核的人来说,这是强烈推荐的一本书。
   翻译:翻译水平、负责任程度都不错,但是印刷存在一些错误。买了此书的朋友可以参考我在Linux高级应用版的《Linux内核设计与实现中文版勘误》:
http://bbs.chinaunix.net/forum/viewtopic.php?t=541234
另外,此书2005年有了第二版,目前尚无中译本面世。我就是对照着2nd-en勘误1st-cn的。

  2, 《Linux内核源代码情景分析》上、下。毛德操、胡希明著,浙江大学出版社,上册¥80,下册¥70.   评说:
  本书是基于2.4.0内核的,比较早,也没听说会出第二版。上册讲解内存管理、中断、异常与系统调用、进程控制、文件系统与传统Unix IPC;下册讲解socket、设备驱动、SMP和引导。关于这套书的评价褒贬不一,我个人认为其深度是同类著作中最优秀的。本书基于Intel IA32体系,由于厚度大,很多体系上的知识都捎带讲解了,所以如果你想深入了解内核的工作机制而又不非常熟悉Intel  CPU的体系构造,本书是最合适的。缺点是:版本较老,没有TCP/IP协议栈部分(它讲的socket只是Unix域协议的),图表太少,不适合初学者入门。还有就是对学生朋友来说,可能书价偏高,这样的话可以考虑先买上册,因为上册是核心部分,下册一大部分都在讲具体PCI/ISA/USB设备的驱动。
  翻译:没什么翻译,作者是国人,而且行文流畅。本人书桌上诸多计算机经典图书当中,这套是唯一又经典又无阅读障碍的。
  www.linuxforum.net内核版好多朋友已经把这书读到六七遍了,我很惭愧,上册差不多读熟了,下册就SMP部分还看过──但这就花费了整整1年的时间,还有好多弄不懂的。这里顺便说明另外一个研究内核常见的误区:目标太庞大。要知道Linux内核(最新的2.6.13)bzip2压缩之后37M,解压缩之后244M,根本不是哪个人能够吃透的。即使是内核的核心开发团队中,恐怕也只Linus Torvalds、Alan Cox、David Miller、Ingo Molnar寥寥数人会有比较全面的了解,其它人都是做自己专门的部分。 我自己来说,目前已经决定放弃内存管理的全部(slab层、LRU、rbtree等)、文件系统部分、外设驱动部分,暂时也没打算弄IA32以外的其它体系的部分。

  3, 《深入理解Linux内核》第二版。中国电力出版社。也是陈莉君译。此书是Linux内核黑客在推荐图书时的首选。 评说:
  此书C版的converse兄送了我一本第一版,因此就没买第二版,比较后悔。因此只就第一版说一说,第一版基于2.2,第二版2.4 。我见O'Reilly官方主页上说第三版的英文版将于2005年11月出版,也不知咱们何时才能见到。此书图表很多,形象地给出了关键数据结构的定义,与《情景分析》相比,本书内容紧凑,不会一个问题讲解动辄上百页,有提纲挈领的功用,但是深度上要逊于《情景分析》。

  4, 其它的几本书。市面上能见到的其它的Linux内核的图书,象《Linux设备驱动程序》、《Linux内核源代码完全注释》以及新出的《Linux内核分析及编程》等。
  《Linux设备驱动程序》第二版是基于2.4的,中文翻译不错,中国电力出版。这书强调动手实践,但它是讲解“设备驱动”的,不是最核心的东西,而且有些东西没硬件的话无法实践,可能更适合驱动开发的程序员吧,不太适合那些For fun and profit的人。此书有第三版英文版,东南大学出版社影印,讲解2.6的,行文流畅,讲解的面也比第二版更广泛,我读过其中关于同步与互斥、内存分配的部分,感觉很不错。
  《Linux内核源代码完全注释》(机械工业出版社)是同济大学的博士生赵炯的著作,讲解0.1Linux内核,我没买也没看,有看过的朋友说一说。
  《Linux内核分析及编程》(电子工业出版社)是刚刚出版的,国人写的,讲解2.6.11 。很多人说好,但有人说不够系统,我没买,不敢评说。
  还有一本清华出的《Linux内核编程指南(第三版)》,原书应该是好书,但是翻译、排版十分糟烂,脱字跳行,根本没法看,我买了一本又扔掉了。

  5, 其它资源。 TLDP(The Linux Documentation Project)有大量文档,其中不少是关于内核的,有些是在国外出版过的,象《Linux Kernel Interls》《The Linux Kernel》《Linux Kernel Module Programming Guide》等,作者都是亲身参加开发的人,著作较为可信。
Http://www.linuxforum.net
  中国Linux论坛的内核版。该版是研究内核的中文Linux社区中水平最高的,有很多专家级别的牛人,强烈推荐去学习一下(但建议不要问太过分简单的问题,人家脾气再好也会烦的^_^),它的置顶贴简直是一个包罗万象的FAQ,精华区也有很多资料。只可惜太过曲高和寡,人气不是很旺。

  6, 一本不是讲解Linux的书:《现代体系结构上的Unix系统:内核程序员的SMP和Caching技术》,人民邮电出版社2003版,定价¥39. 本书虽然不是讲解Linux,但是对所有Unix内核都是适用的,适合对SMP和CPU的Cache这些组成原理知识不是很熟的朋友,而且是很多国外牛人推荐的书。中文版翻译非常负责。


  还有个很重要的问题:怎样浏览内核源代码。有的朋友喜欢在Windows上工作,用Source Insight;有的在Linux,用Source Navigator;还有专门浏览源代码的软件,象lxr(Linux Cross Reference);还有用ctags/ectags/cscope等,这些都是很优秀的软件。我个人用Vim + ctags浏览(参考了www.linuxforum.net内核版wheelz大侠的文档,)。

  此外,前边已经提到的一个重要的问题是:你研究内核的目的是什么, 开发? 乐趣?如果是开发,而且是国内做开发,把kernel API熟悉一下就差不太多了(你也知道国内的水平有多差),比方说copy_from_user()、kmalloc()函数等,kernel API在Internet上找得到,编译内核时也可以用DocBook生成(具体请参考内核源代码包下的README文件);如果是研究,那就差别很大了,需要下很大的苦功:会用kmalloc()绝不说明你懂得Linux内核的虚存管理子系统,正如同会讲汉语不说明你懂中国文化一样。




  说完了,发现前面讲的太罗嗦了,简化一下:
  1, 动手编译内核
  2, 精读《Linux内核设计与实现》
  3, 上www.linuxforum.net内核版看置顶贴与精华区
  此外就凭自己兴趣选择吧。

下面是一篇没写完的《Linux内核模块编程入门》,不补写了,将就着看吧。

[size=4][color=Red] 2006年3月更新: [/color][/size]

写这篇文章的时候, LKD2已经看完了, 《情景分析》也大体翻过相关章节。 只是ULK2看的很少。 我是去年10月份买这本书的中文版的:《深入理解linux内核-第二版》, 越看越觉得后悔买的晚了, 到现在大概读完了2/3吧, 准备最迟下个月读完。 此书非常系统, 在代码罗列讲解上不如《情景分析》, 可是图表很多, 讲解深入浅出, 这一点不是《情景分析》能比的。 考虑到可能有些朋友被我这篇文章误导, 所以在这里补充一下, 并强烈推荐此书。

据说东南大学出版社3月底要影印此书3RD英文版, 期待中。

[ 本帖最后由 albcamus 于 2006-3-9 17:49 编辑 ]



 albcamus 回复于:2005-10-13 10:41:35

Linux内核模块编程入门
看到昨天有好几个问linux内核编程问题的帖子,不少是卡在了入门问题上,就整理一下入门的初步流程。针对2.6内核的Linux系统,需要你的机器上已经安装了kernel-devel这个包,也就是编译模块所必须的东西:内核的头文件和一些Makefile。

一,Hello World程序:
/*file:	hello.c*/

#ifndef __KERNEL__
        #define __KERNEL__
#endif
#ifndef MODULE
        #define MODULE
#endif
#include <linux/init.h>;
#include <linux/module.h>;
#include <linux/kernel.h>;

static int hello_init(void)
{
        printk(KERN_ALERT "Hello, The fucking crazy world\n");
        return 0;
}

static void hello_exit(void)
{
        printk(KERN_ALERT "Bye, The fucking crazy world!\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("albcamus <albcamus@163.com>;");


2.6内核的kbuild子系统跟2.4相比有本质的改变。我们下面尝试两种方式编译这个程序:
1, 你可以在本目录下这样写一个Makefile
obj-m := hell.o

clean:
        rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions

然后用这样的命令行编译:
make -C /lib/modules/`uname -r`/build M=`pwd` modules
这时ls一下,就能看到生成了很多文件,其中hello.ko就是我们需要的内核模块。
2, 专业点儿,Makefile这样写:
obj-m := hello.o

KERNELBUILD := /lib/modules/`uname -r`/build
default:
        make -C $(KERNELBUILD) M=$(shell pwd) modules
clean:
        rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions

然后只要make一下就可以了。

插入模块用insmod命令:
insmod ./hello.ko
这时候大家可能会问:为什么我的屏幕上没有见到输出?这个是console的日志记录级别和你printk消息时指定的级别(本例中指定为KERN_ALERT,为次高,仅次于KERN_EMERG)决定的。无论如何,你可以tail 或者cat看看系统日志的最后几行,系统日志一般为/var/log/messages,或者直接用dmesg命令,肯定能看到输出了。

二,头文件问题。
C程序员都知道,要使用某个外部的函数,应当#include某个头文件,这个头文件包含了那个函数的原型(prototype)。内核的头文件在include/下,其中include/asm是个符号链接,指向你所用内核的具体的体系结构目录,比方说我的系统是i386的,那么include/asm就指向include/asm-i386 。
内核编程中我们不能链接libc库,不能使用libc库中的函数,所以很有些麻烦。一些重要的函数,象strcpy/strcmp/snprintf等,kernel也为我们实现并导出(export)了,而我们需要#include相关的头文件,在include/linux和include/asm中,你需要自己寻找你所要使用的函数在哪个头文件中声明,并将其#include进来。


 albcamus 回复于:2005-10-13 11:17:19

谢谢白金兄给加精华:oops:


 platinum 回复于:2005-10-13 11:22:41

嘻嘻,你怎么知道是我呀 :mrgreen:

以后还要多多向你请教 :oops:


 albcamus 回复于:2005-10-13 11:59:07

引用:原帖由 "platinum" 发表:
嘻嘻,你怎么知道是我呀 :mrgreen:

以后还要多多向你请教 :oops:



一起进步吧:oops:


 wowkiller2005 回复于:2005-10-13 12:00:37

不错阿~受用了~


 惠繪洋 回复于:2005-10-13 16:50:03

謝謝了. 還要一起學習的呢...


 yftty 回复于:2005-10-13 21:33:11

写的不错, 你在作哪方面的工作呢 ? 嵌入式?


 ybxhbxz 回复于:2005-10-13 22:24:22

how much salary?  :-)


 albcamus 回复于:2005-10-14 09:18:06

引用:原帖由 "ybxhbxz"]how much salary?  :-)
 发表:



晕,你就关心这个?那好,偶告诉你,网络安全,4k。偶是自己宁愿放弃了别的待遇来做这份工作的,为的就是有一个kernel开发的机会。
所有的公司都报怨kernel的人不好招,偶还报怨工作不好找呢。趁着年轻,还是先学习研究,一两年之后我不信英雄无用武之地。


 dzbjet 回复于:2005-10-14 09:23:58

写的不错!支持一下!

顺便说一下《The Design of The Unix Operating System》这本书也不错。


 长夜飞翔 回复于:2005-10-14 15:45:20

《Linux内核源代码完全注释》以0.95版为基础讲,可能版本不够最新,但对理解Linux的整体架构特别适合,当然,那个版本的下的Linux有很多功能还没有实现。
本人也是菜鸟一个,但感觉赵博士这本书对初学者照顾多。因此极力推荐,看了这本书,可以给研读高版本Linux打下坚实的基础。


 oraclinux 回复于:2005-10-14 16:24:19

引用:原帖由 "长夜飞翔" 发表:
《Linux内核源代码完全注释》以0.95版为基础讲,可能版本不够最新,但对理解Linux的整体架构特别适合,当然,那个版本的下的Linux有很多功能还没有实现。
本人也是菜鸟一个,但感觉赵博士这本书对初学者照顾多。因?.........




我也买了本   不错


 heijude 回复于:2005-10-14 17:54:36

《Linux内核源代码完全注释》是挺不错的,但要理解整体架构的话还是先别看这个,还是等具体分析内核哪个部分的时候再针对着去看相应部分的注释吧.


 flyght 回复于:2005-10-16 15:48:11

谢谢你了!!


 zhangout 回复于:2005-10-17 10:16:06

很好,我也想成为这方面的高手,就是硬件基础太差了:(
一起努力吧:)


 天啸 回复于:2005-10-18 14:23:07

引用:原帖由 "albcamus" 发表:


晕,你就关心这个?那好,偶告诉你,网络安全,4k。偶是自己宁愿放弃了别的待遇来做这份工作的,为的就是有一个kernel开发的机会。
所有的公司都报怨kernel的人不好招,偶还报怨工作不好找呢。趁着年轻,还是先?.........



有志气!能为了兴趣做事让人佩服!
我正在看《Linux内核源代码完全注释》(机械工业出版社),进展缓慢...


 bingosek 回复于:2005-10-18 21:05:14

引用:原帖由 "albcamus" 发表:


晕,你就关心这个?那好,偶告诉你,网络安全,4k。偶是自己宁愿放弃了别的待遇来做这份工作的,为的就是有一个kernel开发的机会。
所有的公司都报怨kernel的人不好招,偶还报怨工作不好找呢。趁着年轻,还是先?.........


要是我,我会去看看能不能到一家实力强劲的公司(如IBM,redflag)给人家打下手,有人指导学得飞快

btw:兄弟的文章写的的确不错


 ecloud 回复于:2005-10-19 12:21:01

说点别的
1、楼主4K太屈材了,但是中国现在这个状况没法说。我曾经去清华紫光面试,做AS400的售前/后支持「当时他们说有Unix基础就可以,不需要很了解400」,底薪4K+提成,提成完全看销售业绩,估计很大一部分工作是配合销售去把产品骗出去,技术性工作估计不多。如果销售情况好的话收入还是很可观的,但是具他们内部人说没有销售挣得多。在国内许多大公司,一群本科是什么杂7杂8专业的,后来混了个“计算机”方面的“研究生”,啥都不懂成天混的人也都随便拿上5K+

2、牛人在中国会是什么下场?牛人就是象老牛一样多干活,还不一定有草吃。去年冬天我出差去昆明部署一个我们的软件,本来我只负责技术支持,职责就是按照文档把整个系统搭建起来。临走前开发人员和测试人员拍胸匍向我发誓程序完全没有问题了,我去到那里只要安装一下即可。结果到了那里,首先是客户系统被入侵而瘫痪,费了好大劲重建了系统恢复了数据库;接着发现程序有很严重bug,花了整整一天时间我给它debug。
知道我最终的下场是什么吗?400块长途手机费不给报销,领导说按照规定每天只给报20。嗯,“按照规定”的话,发现被黑我就应该立刻打110『没必要估计客户的面子』,然后叫合作伙伴的人来装系统(系统原来是他们装的),这样就省下200块打电话请示领导、联络客户领导的手机费;“按照规定”的话,我作为非开发人员和测试人员没义务给程序debug,当我发现程序不能正常运作的时候就应该打道回府,这样就又能省下200块了
我当时所在中国非常有名的一家软件上市公司「比红旗用友什么的大得多」,在这里我就不点名了

3、“到一家实力强劲的公司(如IBM,redflag)给人家打下手”?
IBM内部的中国开发人员,只能从老美那里拿到裁减版的API手册,很多“牛人”的主要工作是汉化、debug、写文档和打包
redflag?以前曾经有一个项目需要邮件系统,看了一下redflag的邮件服务器宣传还不错,联系了一下,跟一个什么产品经理谈了谈,结果是,为了拿到项目,他们完全可以放弃linux平台把它移植到客户指定的Solaris上去,总之就是只要能中标,怎么都行!所以我看redflag需要的不是“打下手”的,需要的是能够拿到单子的sells


中国阿,就这么回事了
PS:我现在在搞linux教育培训工作,收入还凑合,感觉这个环境铜臭味道少一些,可以有一些闲暇时间和精力去搞自给喜欢的研究,而且没人管^_^


 北京野狼 回复于:2005-10-19 12:56:28

好文章


 mq110 回复于:2005-10-19 15:08:37

现在看内核方面的书籍. 完全是自学.也没人带.哎.
希望赶紧毕业.


 xiaonanln 回复于:2005-10-19 16:27:25

看到研究内核是C版上牛人的爱好


 albcamus 回复于:2005-10-19 19:31:02

我自己都不介意工资多少,怕什么? 谁让咱有这爱好来?没办法。


 bingosek 回复于:2005-10-20 00:11:13

引用:原帖由 "ecloud" 发表:
说点别的
IBM内部的中国开发人员,只能从老美那里拿到裁减版的API手册,很多“牛人”的主要工作是汉化、debug、写文档和打包 
redflag?以前曾经有一个项目需要邮件系统,看了一下redflag的邮件服务器宣传还不错,联系了一下,跟一个什么产品经理谈了谈,结果是,为了拿到项目,他们完全可以放弃linux平台把它移植到客户指定的Solaris上去,总之就是只要能中标,怎么都行!所以我看redflag需要的不是“打下手”的,需要的是能够拿到单子的sells 


那是你没有接触过R&D,你接触过就不会这么看了


 天啸 回复于:2005-10-20 09:26:15

引用:原帖由 "ecloud" 发表:
说点别的
1、楼主4K太屈材了,但是中国现在这个状况没法说。我曾经去清华紫光面试,做AS400的售前/后支持「当时他们说有Unix基础就可以,不需要很了解400」,底薪4K+提成,提成完全看销售业绩,估计很大一部分工?.........
2、牛人在中国会是什么下场?牛人就是象老牛一样多干活,还不一定有草吃。


兄弟说得好,有见地!
出现这种状况,恐怕不是几十年可以改变的,除了考虑技术不得不再多考虑别的。 8)


 ecloud 回复于:2005-10-20 11:11:36

引用:原帖由 "bingosek" 发表:

那是你没有接触过R&D,你接触过就不会这么看了


很多毕业生、实习生到了我以前所在的公司(号称中国最大的软件公司),都是抱着你这种想法,想去研发部门打打下手学点东西。

但是实际上根本不可能让你去研发部门。公司不是学校不是福利院,毕业生/实习生统统下去实施,出差满中国到处跑,一半年的不回来。就是支持和测试部门要人也是在已经投入实施工作的实习生里面选择自己需要的,调过去也只是打下手

现在搞研发的不缺人,尤其不缺有经验的老手,一抓一大把,这里几乎没有毕业生的生存空间。需要人的话就直接去做别的类似项目的公司里面挖人,或者干脆把效益差的小公司收购过来,只留几个需要的人,其余的下岗。其实他们研发的也没有什么高深的水平,程序写的出奇的烂,只是人家手孰,相关的设计模式和程序架构掌握的很清晰,抓过来就用,一边熟悉API一边写代码,出活快。文档让毕业生/关系户去写(其实有没有文档并不是很重要,在中国做开发的没人愿意给后来者搭桥,不挖陷阱给你算是仁义的了)

现在真正缺乏的是技术支持和测试人员,非常缺乏,所以只能公司自己从新人当中培养,但是很多毕业生好高骛远,就想着做开发,瞧不起支持和测试工作(其实我们当时的情况,支持、测试和开发的技术难度基本相当,收入也基本相当),从实施部门调过来也不安心工作努力学习,这种人最终的下场就是劝退

在中国,软件开发这个东西就像是“围城”,很多人把它看得过于高深和神圣,拼命的削尖脑袋往里钻,而在城里的人,却因为严酷的生存环境、慢性自杀的工作习惯而千方百计地寻求解脱,去做销售、管理甚至是改行(我以前在上海见过一个销售经理是80年代的很老的6502汇编程序员)。而研发周边相关的测试和技术支持领域却人才奇缺,所有人在超负荷状态玩命的工作,这些工作“好人不愿意做,赖人又做不了”


 ytlxx 回复于:2005-10-20 11:27:18

谢谢了,我正愁没有门路呢!!


 bingosek 回复于:2005-10-20 12:47:46

引用:原帖由 "ecloud" 发表:

很多毕业生、实习生到了我以前所在的公司(号称中国最大的软件公司),都是抱着你这种想法,想去研发部门打打下手学点东西。

但是实际上根本不可能让你去研发部门。公司不是学校不是福利院,毕业生/实习生统统下..........


我举个例子,你不能连编程都不懂你就想去R&D研究内核吧?总得有些基础,能够承担部分工作吧。R&D老手当然是多,单不可能连文档和测试,开发环境维护等都让老手们来做吧?有没有生存空间看你自己努力的结果。
至少在我的职业生涯中,就见过2个公司有这样的机会:第一家是从工程部做网线开始慢慢做到产品研发经理;二是从维护开发机器做到架构师

机会在某些角度来看是自己创造的


 京城孤 回复于:2005-10-20 13:04:10

Kao,慢慢转成吵架贴了。郁闷。


 jojogohome 回复于:2005-10-20 14:31:35

受益非浅


 北京野狼 回复于:2005-10-20 15:38:22

有的人就是喜欢抱怨。
搞IT的好像在搞高科技,能了解到最前沿咨询。但是掌握的信息不全面不准确, 再加上心理不够健康。总是自己以为,自己就是中心,就把IT论坛变成抱怨论坛。


 hongzjx 回复于:2005-10-20 15:39:47

获益良多


 ecloud 回复于:2005-10-20 17:25:31

呵呵,不知道发帖总数上千没有一个原创精华,是不是符合“掌握的信息不全面不准确, 再加上心理不够健康。总是自己以为,自己就是中心,就把IT论坛变成抱怨论坛”


 北京野狼 回复于:2005-10-20 17:29:58

果然变态


 bingosek 回复于:2005-10-20 22:32:52

大家只不过表述不同观点罢了,过火的话就没有必要说了


 北京野狼 回复于:2005-10-21 09:22:55

引用:原帖由 "bingosek"]大家只不过表述不同观点罢了,过火的话就没有必要说了
 发表:



俺错了


 albcamus 回复于:2005-10-21 09:25:56

[size=18][color=darkblue]拜托大家给点面子,不要在技术区吵架,成不成?[/color][/size]


 大大狗 回复于:2005-10-22 14:09:21

支持学习一下


 leonashirley 回复于:2005-10-23 00:47:07

研究了启动之后,开始觉得要把所有的模块全部弄懂是不太现实。
所以选择了驱动这一块。
弄了一本楼主提到的 《linux设备驱动》
晕的是那东西是2.4的内核。
又找不到2.4内河的LINUX
花了好大的力气去建环境。
感觉 知道了原来不知道地很多东西。


不知有没有朋友也对驱动感兴趣,一起学习。


 snow888 回复于:2005-10-23 21:50:33

楼主啊,您推荐的几本书有没有电子书版本?
给个下载链接啊?

我穷啊,现在正在要饭,偶尔来逛逛,看到了,很想学一学,苦于没有书,没有Money,买不起书啊?


 帅绝人寰 回复于:2005-10-23 23:00:21

引用:原帖由 "snow888" 发表:
楼主啊,您推荐的几本书有没有电子书版本?
给个下载链接啊?

我穷啊,现在正在要饭,偶尔来逛逛,看到了,很想学一学,苦于没有书,没有Money,买不起书啊?



你开玩笑的吧?如果真的一本也买不起,那下载了也没心情学啊。
《情景分析》,Understanding the linux kernel,linux kernel development2都有电子版(不过都是侵权行为),实在买不起就上eMule搜搜吧。唉


 SANFXUNIL 回复于:2005-10-24 00:35:19

谢谢楼主了。
说到Linux Kernel Development这本书,我总觉得不太适应,书中有一些零碎的代码,但我根本就不知道这些代码的来龙去脉,似乎作者已经假设读者是了解基本的kernel函数了。


 yibanbano 回复于:2005-10-24 09:31:08

版主你好:我看了你的文章,深受打动,决定认真学习内核,礼拜天到书店去购买《linux内核设计与实现》,可惜没有,买到了一本《IA-64 linux内核设计与实现》 清华大学出版社的.  特别想拜读你所说的《linux内核设计与实现》,可惜在网上找不到,你能否发给我一份yibanbano@tom.com


 Ecore 回复于:2005-11-01 00:06:02

www.china-pub.com
www.welan.com
都有卖的..
或者到www.huachu.com.cn


 hongzjx 回复于:2005-11-01 15:10:55

引用:文档让毕业生/关系户去写(其实有没有文档并不是很重要,在中国做开发的没人愿意给后来者搭桥,不挖陷阱给你算是仁义的了)

这句话我非常赞成!


 guotie 回复于:2005-11-01 19:03:15

引用:原帖由 albcamus 于 2005-10-14 09:18 发表
引用:原帖由 "ybxhbxz"]how much salary?  :-)
 发表:



晕,你就关心这个?那好,偶告诉你,网络安全,4k。偶是自己宁愿放弃了别的待遇来做这份工作的,为的就是有一个kernel开发的 ... 



跟我差不多,兄弟在哪里?


 rainshadow 回复于:2005-11-04 22:22:04

内存管理是很大的一部分,2.6内核的内存管理只有英文版,国内我尽然没有看到中文版


 帅绝人寰 回复于:2005-11-05 13:47:28

引用:原帖由 rainshadow 于 2005-11-4 22:22 发表
内存管理是很大的一部分,2.6内核的内存管理只有英文版,国内我尽然没有看到中文版 



你说的是《Understanding the Linux Virual Memory Manager》这本书吗?这书我下到了PDF版,2004年的,作者说出版的时候只有2.6.0-test,书中只是每一章节的最后有个“What‘s new in 2.6”,你有更新的版本吗?

内存管理太复杂了,而且做为程序员一般只用它导出的接口就行了,我就偷懒没学。结果前几天出现了一个HIGHMEM的BUG,无论如何都修正不了,郁闷。


 shappen 回复于:2005-11-19 12:40:08

自己还是一个彻底的门外汉,CU里的牛人就是多,向大家学习


 jato 回复于:2005-11-20 11:25:34

请问怎样改变用户进程地址空间的大小? 不是必须改变 PAGE_OFFSET  的大小然后重编译吧? 总觉得可在启动时设置, 但不知是否可以. 请高手指点.


 albcamus 回复于:2005-11-20 21:11:24

引用:原帖由 jato 于 2005-11-20 11:25 发表
请问怎样改变用户进程地址空间的大小? 不是必须改变 PAGE_OFFSET  的大小然后重编译吧? 总觉得可在启动时设置, 但不知是否可以. 请高手指点. 



这个问题比较复杂,也是目前64位CPU开始流行的主要原因之一。
IA32上,在内核态有办法寻址到64GB的内存,但是对用户层来说,4G仍然是它的上限。
编译的时候可以选择3G/1G模型,可以选择2G/2G模型。RedHat公司的Ingo Molnar有一个4G/4G补丁,在Fedora2中默认使用了,这样,每个用户进程可以寻址到4G的空间。但是这个补丁容易引发其他问题。所以在FC3中又去掉了。

如果想让某个非常重要的用户进程占有超过3G的内存,那么只能说:换成64位CPU吧。 IA32上已经无法可想了。


 Solaris12 回复于:2005-11-20 21:22:32

引用:原帖由 albcamus 于 2005-11-20 21:11 发表


这个问题比较复杂,也是目前64位CPU开始流行的主要原因之一。
IA32上,在内核态有办法寻址到64GB的内存,但是对用户层来说,4G仍然是它的上限。
编译的时候可以选择3G/1G模型,可以选择2G/2G模型。RedHat公 ... 




说的是PAE mode吗?


 albcamus 回复于:2005-11-20 22:46:43

引用:原帖由 Solaris12 于 2005-11-20 21:22 发表



说的是PAE mode吗? 



是啊,PAE之后,物理地址能寻址到64GB,可是单个应用进程仍然无法超越4G。 估计大型应用以后就要向64位CPU转了。


 jato 回复于:2005-11-21 06:36:05

引用:原帖由 albcamus 于 2005-11-20 21:11 发表


这个问题比较复杂,也是目前64位CPU开始流行的主要原因之一。
IA32上,在内核态有办法寻址到64GB的内存,但是对用户层来说,4G仍然是它的上限。
编译的时候可以选择3G/1G模型,可以选择2G/2G模型。RedHat公 ... 


谢谢, 我是想把 kernel 地址空间扩大一点, 至于用户进程空间则问题不大, 因为一般可以通过多进程协作来解决.
既然内核态没有问题就好了, 不过请介绍一下怎样使内核态可用更大的空间, 哪里可以找到相关的资料?


 mq110 回复于:2005-11-21 09:03:57

Pentium Pro以后 地址总线 36位了 寻址空间增加到64个G了.


 benlan 回复于:2005-11-21 09:42:24

老大牛牛,以后跟着你多学学内核,
并推荐我见过的两本我认为适合linux内核入门的书:
<边干边学linux内核>浙大出版社,毛徳操,
看内容应该是他们学校的linux内核课的教材,很适合初学者的说。
<操作系统设计和实现>
分析minix的设计实现,并对操作系统的入门知识说的比较清楚。


 ecloud 回复于:2005-11-21 09:46:48

引用:原帖由 albcamus 于 2005-11-20 21:11 发表


这个问题比较复杂,也是目前64位CPU开始流行的主要原因之一。
IA32上,在内核态有办法寻址到64GB的内存,但是对用户层来说,4G仍然是它的上限。
编译的时候可以选择3G/1G模型,可以选择2G/2G模型。RedHat公 ... 


说的是hugemem?
现在的RHEL4就有这个内核,而且也没说有什么问题啊,Redhat建议所有的服务器都默认使用这个内核


 Solaris12 回复于:2005-11-21 11:36:49

引用:原帖由 albcamus 于 2005-11-20 22:46 发表


是啊,PAE之后,物理地址能寻址到64GB,可是单个应用进程仍然无法超越4G。 估计大型应用以后就要向64位CPU转了。 




linux不了解,solaris x86似乎没这个问题。

不过已经不重要了,amd64很好用,现在天天都在用,呵呵。


有时间的话,大家可以讨论一下amd64的系统架构,最近打算好好学习一下x86和x64的系统架构。
正在收集资料。如果感兴趣的可以联系我。大家一起学习。

[ 本帖最后由 Solaris12 于 2005-11-21 11:39 编辑 ]


 hugeboyth 回复于:2005-11-21 12:22:31

在中国搞IT,还真的是挨踢.


 231053469 回复于:2005-11-22 11:33:38

asdfasdf


 SeanGe 回复于:2006-01-06 12:33:12

来这没多久,但我真是佩服LZ 
向LZ学习


 albcamus 回复于:2006-01-06 12:37:56

发这个帖子,是因为那时候本版还未单独划分出来,讨论KERNEL的人不多。
现在已经做为单独版块了, 人也多了, 不要再顶这个帖子了, 贻笑大方啊, 拜托


 jeffshia 回复于:2006-01-06 12:40:35

看了这个,我要赞一下al兄了。呵呵:)


 embededboy 回复于:2006-01-09 16:32:39

不顶了
不过在老大的建议下,我去买了Linux内核设计与实现的第二版的书,在china-pub上
其实这样的好贴,应该顶的


 gotop167 回复于:2006-01-09 18:05:58

牛!楼主


 xiaozhaoz 回复于:2006-01-10 11:04:25

原来CU的kernel版是刚出来的。 :D

说实在的,作内核的人很难找,国内水平不行,但不是人不行,而是交流的机会太少了。
如果真正想提高水平,还是去LKML看看吧。
去那里之前,仔细阅读Greg Kroah-Hartman 的HOWTO do Linux kernel development

真正融入Linux的开发流程,即使是看高手门过招,也会让你收益不少。

[ 本帖最后由 xiaozhaoz 于 2006-1-10 11:07 编辑 ]

HOWTO.rar


 gotop167 回复于:2006-01-10 11:31:23

人为财死


 albcamus 回复于:2006-01-10 13:58:08

引用:原帖由 xiaozhaoz 于 2006-1-10 11:04 发表
原来CU的kernel版是刚出来的。 :D

说实在的,作内核的人很难找,国内水平不行,但不是人不行,而是交流的机会太少了。
如果真正想提高水平,还是去LKML看看吧。
去那里之前,仔细阅读Greg Kroah-Hartman 的H ... 




这篇文档好象linuxforum有朋友翻译出来过...您说的是,该多去lkml转转,以前我只定了kerneltraffic的ml,从今以后要专业些了..Thanks :)


 hades555 回复于:2006-01-10 14:03:26

linux kernel的 
mail list 在那里订阅?


 Com_Net 回复于:2006-01-10 15:27:39

《Linux内核源代码情景分析》这本书就是结构的图太少啦,呵呵...:mrgreen:


 Com_Net 回复于:2006-01-10 15:40:16

LZ:
     这些书你全部看完了么????是牛人啊!!!!
:em11::em11:


 warterw 回复于:2006-01-10 15:54:23

bull person a...


 albcamus 回复于:2006-01-10 16:03:58

真是没话说,只好锁贴。理由:1, 被水了,而且没见到停水的迹象;2, 不适合现在已经有很多强人的CU内核版,怕贻笑方家。




原文链接:http://linux.chinaunix.net/bbs/viewthread.php?tid=626486
转载请注明作者名及原文出处