红联Linux门户
Linux帮助

给大家推荐学习内核的网站:http://www.oldlinux.org/oldlinux/index.php

发布时间:2009-06-13 02:34:02来源:红联作者:刘冲
就是linux内核完全注释(完全剖析)那本书的官网。linux1.1,1.2的那个!不错的
文章评论

共有 6 条评论

  1. Baidoa 于 2009-06-13 09:40:38发表:

    好也

  2. 刘冲 于 2009-06-13 02:37:55发表:

    建议大家还是去官网观看!

  3. 刘冲 于 2009-06-13 02:37:01发表:

    书籍勘误信息

    这个贴子最后由redgrid在 2007/05/16 11:34pm 第 82 次编辑]


    *** 首先对所有指出书中勘误信息的朋友表示感谢,谢谢你们花时间为大家无私服务!!

    后面所有帖子中的勘误信息基本上都添加在该帖中。
    勘误信息以两种排序格式给出。第一类按照页码次序,第二类按照发现错误的日子进行排序。



    原来《Linux内核完全注释》v1.9.5 电子版勘误表位于:
    http://www.oldlinux.org/oldlinux/viewthread.php?tid=673
    ( http://www.oldlinux.org/cgi-bin/topic.cgi?forum=1&topic=709 )
    原来《Linux内核完全注释》勘误表位于:
    http://www.oldlinux.org/oldlinux/viewthread.php?tid=346
    ( http://www.oldlinux.org/cgi-bin/topic.cgi?forum=1&topic=1029 )
    或者直接下载已经纠正所有已知问题的最新电子书版本(v2.0.1版):
    http://www.oldlinux.org/oldlinux/viewthread.php?tid=9370


    下面是《Linux内核完全剖析》纸版书 第1版第1次印刷(2006.1) 勘误表
    ========================================
    (1)按页号排序,其中Lnn表示代码行号
    ===============================================================================
    页数 章节或行号 错误 正确描述 说明
    -------------------------------------------------------------------------------
    X 目录第X页 倒数第10行,“12.5 truncte.c程序”应为“12.5 truncate.c程序”
    22 第3段倒数第2行 “即最高有效位(位7)置为位时...”,多了一个“为”字。
    30 程序L17后注释 “INITSEG指出...” “BOOTSEG指出...”
    程序L19行后添加(插入)“mov es,ax”
    程序L27 建议把两个loop标号都改成loop0
    程序L28 “msg1: ascii...” “msg1: .ascii...”
    31 第11,14,15行 “.bbs” “.bss”
    第13行 “并把切换到...” “并把当前段切换到...”
    32 第6行     "位置出的值放入ax中" "位置处的值放入ax中"
    第2段第1行 "这里使用其功能16"  "这里使用其功能19"
    第4段第3行 "定义了两个回车换行"  "定义了回车换行"
    35 倒数第4段第2行 “产生在as程序名之后,”去掉“产生”两字。
    35 倒数第6行 “...给出任何文件名”“...没有给出任何文件名”
    39 表3-3 第2栏右侧 "这连个前缀..." "这两个前缀..."
    43 第12行 “...本身就是8,” “...本身就是8的倍数,”
    55 程序第11行 “exchange(&a, &b)” “swap(&a, &b)”
    56 第2段 “...-oexch.s exch.c”“...-o exch.s exch.c”
    74 倒数第3行 “CPL必须大于等于” “CPL必须小于等于”
    82 倒数第6行 4GB是2^32, 64TB才是(2^46)。
    90 倒数第2行 “段级地址” “段基地址”
    95 图4-16右下角 “线性地址空间” “物理地址空间”
    102 第10行 “处理器会把RPL与CPL作比较”“处理器会同时检查RPL和CPL”
    103 图4-21 中间的“调用门选择符” “代码段选择符”
    106 图4-24 “调用门段描述符” “调用门描述符”
    108 第5行 “返回到底特权级” “返回到低特权级”
    110 倒数第10行上“下表...” 缺。见下面给出的表。



    113 图4-26 的 IDTR 寄存器的最右端的 31 应改为47
    116 图4-29 中右侧图的最上方的 '原ESP' 应改为 '原SS'
    123 第15,16,17行 “任务描述符” “任务门描述符”
    125 图4-38中,左边第1个方框中NT=0外,其余NT值都为1。
    135 L34行后注释 “设置移动的字数4KB。” “设置共移动4K次,每次一个字。”
    L46行后注释 “跳转至段8” “跳转至段选择符值(8)指定的GDT表中第2个描述符对应的段”
    136 L33行上注释 该句中“陷阱门”应该与“中断门”位置互换。
    139 L178行上应加一行代码 end_gdt:
    147 图5-7 上方 “局部描述符表LDL”应为 “局部描述符表LDT”
    倒数第8行,“没有使用到系统段描述符” “没有使用到图中的sys描述符项”
    150 图5-11 “statr_code” “start_code”
    153 倒数第5行 “图5-17” “图5-16”
    154 图5-16 第二个GDT表应为LDT表
    158 倒数第8行 “通常,硬件异常中断” “通常,异常中断”
    160 少个数字零 “""(__NR_read)”   “"0"(__NR_read)”
    167 倒数第8行 “...(运行状态)。” “...(即可运行状态)。”
    175 第2段第2行 “图5-21” --> “图5-20”
    第2段倒数第3行,“0x1f”应为“0x0f”
    185 代码第 11 行,“LD”应为“LD =gld”
    188 程序第95行 “cat boot/bootsect.stmp.s” --> “cat boot/bootsect.s >> tmp.s”
    189 程序111行靠近最后少了连续的两个大于号:“>>”
    202 表6-3 中 0x9000B 对应的描述中单色部分应该是“0x01-单色”
    210 第1行 “它是内核代码段选择符中的索引怠?-> “它是内核代码段选择符的值”
    第2行 “...缘原由...” --> “...缘由...”

    第7行 “它是内核数据段选择符中的索引值”--> “它是内核数据段选择符的值”
    213 倒数第3行 “必需” --> “必须”
    220 第5行 “P=0” “P=1”
    220 倒数第2段倒数第1行,"就可保证这两个任务代码不仅可以在用户态下执行,又不能随意访问内核资源" --> "就可保证这两个任务代码虽然可以在用户态下执行,但却不能随意访问内核资源"
    221 代码L16后注释第6行,"构造的数据段" --> "构造的数据段选择符"
    224 L84 “lea_idt,%edi” --> “lea _idt, %edi”
    228 代码L224, ".long_idt" --> ".long _idt"
    代码L229, ".long_gdt" --> ".long _gdt"
    229 倒数第1行, "正好位于 GDT 表的后面" --> "正好位于 GDT 表的前面"
    230 图6-12左侧最上方的“ES段寄存器”应为“ESI寄存器”。
    233 图7-2右边靠上方,"shel" --> "shell"
    236 第 6 行后注释,“该变量”应为“该宏”
    237 L58上一行 “见第3章表3-1”“见第6章表6-3”
    238 L70行注释,“写端口号”应为“地址端口号”
    L71行注释,“读端口号”应为“数据端口号”
    L89行 “BCD_TO_BINKG-4(time.tm_min)” “BCD_TO_BIN(time.tm_min)”
    239 代码缩进问题,因该向左移动8个空格,即对齐上面的“else”。
    245 倒数第 3 行,“读去命令”应为“读取命令”。请删除最后一段的最后一句话。
    252 图8-4右部分, 指针 esp0 和 esp1 安序下移一行。(对于第4次印刷版,需要都上移1行)
    258 代码34行 "#define_fs" -> "#define _fs" (是排版时产生的“粘连”问题)
    262 代码第 201 行后的注释,“int17-48”应为“int17-47”
    267 代码102行 "movl_current" -> "movl _current"
    280 L66行下注释 “内核代码栈” --> “内核栈”
    304 代码 L103注释 “另外,如果允许信号自己”-->“另外,如果不允许信号自己”
    309 L101行注释中 “TASK_ZOMBIA”-->“TASK_ZOMBIE”
    355 L160行 “循环等待驱动器就绪” --> “循环等待控制器就绪”
    355 L135行后注释倒数第2行,“开始的处分区表”-->“开始处的分区表”
    371 图9-5左半部分,“第一个请求项”判断的右边是“是”
    372 L31行后注释 “底23行” -->“第45行”
    377 图9-7修改成这里下面的图样,818页的图17-10与图9-7相同。



    400 表9-21,位6、7的ST0_INTR的中断原因11 应该是“循环查询操作而导致的异常终止”。
    402 表9-26第4行上,HLT应该对应D7--D1,ND仅是D0位。
    404 图9-11,方框“读/写操作完成”上的判断应该是“状态通过?”。
    408 表9-33 关于传输类型的说明: 01读 10写
    416 图10-3右下角的两个箭头标反了。
    417 图10-4 con_writed --> con_write
    倒数第三行“键入的字符并放入",去掉其中的“并”
    439 倒数第4行 “0xe,...” “0xe0,...”
    442 代码第57行后的注释,“本函数使用的” 应为 “本程序使用的”
    455 程序L527下一行 “则光标右移一格” “则光标左移一格”
    程序L539下一行 “...左移的格数” “...光标右移的格数”
    460 表10-6 “r12-r15还可以读” “r14-r17还可以读”
    461 第3行 “将屏幕内容向上移动” -> "将屏幕内容向下移动"
    462 (2)代码表 下一行 “见表10-7” “见表10-8”
    表10-8里0行1列的 “DEL”应为“DLE”
    倒数第2段的最后1行“8进制的值是0100” --〉“8进制的值是0101”
    最后1段第4行“DEL字符(0xFF)”中的“0xFF”应该是“0x7F”
    465 倒数第8行 里的 “3” 应为“5”
    471 表10-9,0x3fb(0x2fb)行,位2的描述修改成:
    “位2=1 此时依赖于数据位长度。若数据位长度是5位,则停止位为1.5位;
    若数据位长度是6、7或8位,则停止位为2位;位2 = 0 停止位是1位;”
    473 第8行 "表10-18" ->"表10-9”
    483 程序L148下一行注释 “并且辅助队列缓冲区为空” “并且辅助队列缓冲区不满”
    484 程序L200上两行注释里的“则向当前进程...” “则向当前进程之进程组中的所有进程...”
    488 程序320下注释中, 删除“或者收到信号,”
    504  图12-4中 "* task_struct" 应改为 "task_struct *"
    509 “[/]# hexdump .”下面的注释。将注释“// image”与“// usr”互换一下。
    524 图12-20中右侧判断“又被别人占用?”引线应连到左侧“该块已被修改过?”下面。
    539 L74行下第3行 “接着从设备上读取该逻辑块到高速缓冲区中。最后将新逻辑块清零,”改成
    “接着接着为该逻辑块在缓冲区中取得一块对应缓冲块。最后将该缓冲块清零,”。
    542 标题"12.5 truncte.c程序" 应改为 "12.5 truncate.c程序"
    564 L242行前注释第3行,“初始化设置时”应为“初始化设置时由”
    617 图12-32中的“64KB”应该是“64MB”。电子稿上是对的,但书上却错了
    625 标号246下第二行 “iname...” “i_name...”
    640 倒数第6行 “以上雅息来区分...” “以上信息来区分...”
    641 第4段第3行,删除“包括其中的...”到段尾,添加“但由于进程1复制的页表项
    也是只读的,因此当进程1需要执行堆栈(写)操作时也会引起页面异常,从而在这种情
    况下内存管理程序也会在主内存区域为该进程分配内存。”

    647 行号48 “&0xfff...” “&~0xfff...”
    647 行号49 “&4095...” “&~4095...”
    648  L94上第2行  “字节值因该为0” “字节值应该为0”
    651 L170 注释 “并且只读、存在” “并且可读写、存在”
    L177行 “this_page &= 2;”   “this_page &=~2;”
    654 第三行 “mem,_map[]...” “mem_map[]...”
    L254行注释中 “(address>>12)<<2 = (address>>10)” --> “(address>>12)<<2 = (address>>10)&0xFFC”
    669 程序L95行 “ & ” “ &~ ”
    690 L121行上注释 “串2字符<串2字符” “串2字符<串1字符”
    735 程序L7行上面的注释修改成“在指定线性地址处映射一内存页面。在页目录和页表中设置该页面的信息。返回该页面的物理地址。”
    818 图17-10与图9-7相同,可以直接引用图9-7。因此该图可删除。
    819 3), 所在行 “rootram-0.11” 应为 “rootram.img”
    830 exec 结构所有字段后缺分号。
    835 task_struct 的定义中所有变量后都应有分号。
    -------------------------------------------------------------------------------
    -------------------------------------------------------------------------------




    ========================================
    (2) 按发现日期排序,其中Lnn表示代码行号
    ===============================================================================
    日期
    页数 章节或行号 错误 正确描述 说明
    -------------------------------------------------------------------------------
    2006.08.05 (纠正者:crspo)
    -----------
    P175 第2段第2行 “图5-21” --> “图5-20”
    P210 第1行 “它是内核代码段选择符中的索引值”--> “它是内核代码段选择符的值”
    第7行 “它是内核数据段选择符中的索引值”--> “它是内核数据段选择符的值”
    P224 L84 “lea_idt,%edi” --> “lea _idt, %edi”
    P239 代码缩进问题,因该向左移动8个空格,即对齐上面的“else”。
    P245 请删除最后一段的最后一句话。
    P280 L66行下注释 “内核代码栈” --> “内核栈”
    P654 L254行注释中 “(address>>12)<<2 = (address>>10)” --> “(address>>12)<<2 = (address>>10)&0xFFC”
    -------------------------------------------------------------------------------------
    2006.08.11 (纠正者:crspo)
    -----------
    书中源代码中,有些带下划线符号的语句有粘连问题。例如:
    P258 代码34行 "#define_fs" -> "#define _fs"
    P267 代码102行 "movl_current" -> "movl _current"
    好在这些“粘连”不太影响阅读,但还是请注意。这里就不一一列出了。
    P150 图5-11 “statr_code” “start_code”
    P309 L101行注释中 “TASK_ZOMBIA”-->“TASK_ZOMBIE”
    P372 L31行后注释 “底23行” -->“第45行”
    -------------------------------------------------------------------------------------
    2006.08.16 (纠错者: ZhanglJian)
    P371 图9-5左半部分,“第一个请求项”判断的右边是“是”
    P416 图10-3右下角的两个箭头标反了。
    P417 图10-4 con_writed --> con_write
    倒数第三行“键入的字符并放入",去掉其中的“并”
    -------------------------------------------------------------------------------------
    2006.08.17 (纠错者: ZhanglJian)
    P462 倒数第2段的最后1行“8进制的值是0100” --〉“8进制的值是0101”
    最后1段第4行“DEL字符(0xFF)”中的“0xFF”应该是“0x7F”
    -------------------------------------------------------------------------------------
    2006.08.21 (纠错者: cjwkiki)
    p56 第2段 “gcc -Wall -S -oexch.s exch.c”-->“gcc -Wall -S -o exch.s exch.c”
    p147 图5-7 上方 “局部描述符表LDL”应为 “局部描述符表LDT”
    p154 图5-16 第二个GDT表应为LDT表
    -------------------------------------------------------------------------------------
    2006-08-25 (纠错者:wplxb)
    P188 程序L95 “cat boot/bootsect.stmp.s” --> “cat boot/bootsect.s >> tmp.s”
    P210 第1段第2行 “...缘原由...” --> “...缘由...”
    P213 倒数第3行 “必需” --> “必须”
    P220 倒数第2段倒数第1行,"就可保证这两个任务代码不仅可以在用户态下执行,又不能随意访问内核资源" --> "就可保证这两个任务代码虽然可以在用户态下执行,但却不能随意访问内核资源"
    P221 代码L16后注释第6行,"构造的数据段" --> "构造的数据段选择符"
    P222 代码L31, "lss_stack_start" --> "lss _stack_start"
    P226 代码L162, "call_printk" --> "call _printk"
    P227 代码L205注释, 紧挨着第一个双引号的横杠是全角的,应该改成半角的。
    P228 代码L224, ".long_idt" --> ".long _idt"
    代码L229, ".long_gdt" --> ".long _gdt"
    P229 倒数第2段第5行,"由LDTR寄存器的内容指定并且使用GDT中某个描述符来加载" --> "由LDTR寄存器的内容指定,并且LDTR寄存器的内容来自于GDT中某个描述符项"
    P229 倒数第1行, "正好位于 GDT 表的后面" --> "正好位于 GDT 表的前面"
    P230 图 6-12左侧最上方的“ES段寄存器”应为“ESI寄存器”。
    P231 倒数第2行,"是由于gas为了" --> "是gas为了"
    P232 倒数第3段第2行,"是由" --> "由"
    P232 倒数第2段第1行,"包括人工设置" --> "并人工设置"
    第3行,"main()也切换到了任务0中运行" --> "并切换到任务0中运行"
    P233 图7-2右边靠上方,"shel" --> "shell"
    第2段第1行,"该程序" --> "main.c程序"
    P235 最后一段第2行, "除其中的string.c函数" --> "其中的string.c函数除外"
    另外,书中关于“级联系统”的说法很乱(有“级联”、“接联”及“接连”),最好统一为"级联"。
    -------------------------------------------------------------------------------------
    2006-08-26 (纠错者:sirouni)
    P355 160行 “循环等待驱动器就绪” --> “循环等待控制器就绪”
    P408 表9-33 关于传输类型的说明: 01读 10写
    P423 16行 .global_keyboard_interrupt -> .global _keyboard_interrupt
    29行代码 nom-lock -> num-lock 似乎源代码中也是这个问题
    P461 第3行 “将屏幕内容向上移动” -> "将屏幕内容向下移动"
    P473 第8行 "表10-18" ->"表10-9”
    P511 倒数第五行 块设备,字符设备,管道设备和普通文件与文件读写系统
    -〉块设备,普通文件和文件读写,字符设备,管道设备
    P793 losetup -o 512/dev/loop1 hdc-0.11-img .... 很多字符粘在一起了
    -------------------------------------------------------------------------------------
    2006-08-27 (纠错者:wplxb)
    47 页,第一段代码第 3 行,粘连
    48 页,1,2,3行冒号位置不对
    51 页,第一段代码粘连
    57 页,第三段代码第 2,7,9 行,粘连
    58 页,第二段代码第 3,4 行,粘连
    236 页,第 6 行后注释,“该变量”应为“该宏”
    该行注释应该与第 7 行换一下位置
    -----------------------------------------------------------------------------------------
    2006-08-28 (纠错者:wplxb)
    目录第 X 页,“12.5 truncte.c程序”应为“12.5 truncate.c程序”
    185 页,代码第 11 行,“LD”应为“LD =gld”
    262 页,代码第 201 行后的注释,“int17-48”应为“int17-47”

    ----------------------------------------------------------------------------------------
    2006-08-29 (纠错者:wplxb)
    202 页表 6-3 中 0x9000B 对应的描述中单色部分(0x11)与 211 页表 6-4 中 bh 的内容说明中单色部分(0x01)不符
    442 页,代码第 57 行后的注释,“本函数使用的”应为“本文件中函数使用的”
    835 页,task_struct 的定义中所有变量定义后都落了分号
    -----------------------------------------------------------------------------------------
    2006-09-02 (纠错者:wplxb)
    175 页,第 2 段,倒数第 3 行,“0x1f”应为“0x0f”
    238 页,代码 70 行注释,“写端口号”应为“地址端口号”
    238 页,代码 71 行注释,“读端口号”应为“数据端口号”
    245 页,倒数第 3 行,“读去命令”应为“读取命令”
    355 页,第 135 行代码后注释倒数第 2 行,“开始的处分区表”应为“开始处的分区表”
    564 页,代码 242 行前注释第 3 行,“初始化设置时”应为“初始化设置时由”
    -----------------------------------------------------------------------------------------
    2006-09-03 (纠错者:zhangljian)
    P103 图4-21 中间的“调用门选择符”---------〉“代码段选择符”
    P106 图4-24 “调用门段描述符”------------〉“调用门描述符”
    -----------------------------------------------------------------------------------------
    2007-02-05 (纠错者:gnuser)
    49页 最后1行,如果前面比较中串2字符<串1字符,则返回1,结束
    74页 中间介绍系统寄存器: 系统寄存器用于内存管理器... 多了个”用于“
    101页 3.特权级 第1段最后, "只使用2个特权级的系统。。。"
    167页 .运行状态 1段 第3行, 见图5-19中。。。。。
    178页 第2段第2行,从上到下按基本引用关系放置。
    181页 第4段, panic.c 程序。。。。。
    210页 6.6.6 其他信息 这一段第2行末尾,"并对A20地址线问题的缘由进行解释"
    278页 第3段, 最好同时参考包含文件include/linux/sched.h
    280页 60行代码上 "也不要挪动位置,并且要从内存中取其值。(多了个"在")"
    301页 中间倒数第3行, "并把系统调用后的返回值eax和寄存器ecx,edx以及标志寄存器eflags 弹出恢复。"
    304页 90行后注释, current->sigaction[signr-1]
    305页 中间第2行, 就会产生一个标号为18的SIGCHILD。。。。。
    400页 第5行, 返回的“3”个状态字节STO。。。。。
    405页 (5)磁盘格式化操作 第3段倒数第3行: ...2,7,1,3,2,...,7,1,9","2(标点",")
    460页 表10-6中: 各个数据寄存器的功能说明见表10-7
    467页 L18代码注释: 系统头文件。定义了设置/修改描述符/中断门等的汇编宏。
    516页 第5段第2行: 共有120个i节点
    516页 最后1行: 长度是48(0x30)字节
    ---------------------
    P110_1156494402_1156569243.jpg (108.38 KB)
    2006-3-5 22:20
    Fig967_1156569340.jpg (21.49 KB)
    2006-3-5 22:20

  4. 刘冲 于 2009-06-13 02:36:31发表:

    《完全剖析 0.12》的勘误表

    大家好!

    目前确实还没有《完全剖析 0.12》单独的勘误列表。
    如果您发现书中的错误之处,请能否在这个帖子中给出? 先谢谢了


    《Linux内核完全剖析 -- 0.12》纸版书 第1-1次印刷(2009.1) 勘误表
    ========================================
    (1)按页号排序,其中Lnn表示代码行号
    ==============================================================
    页数 章节或行号 错误 正确描述 说明
    ________________________________________________________________________________
    138 倒数第1行 “限长值为0x0002” "限长值为0x0001"。 实际内存长度应为 (限长值+1)*颗粒单位值。
    215 倒数第7行 “见程序第207-216行” “见程序567--578行”
    233 第4行 第193行 -----> 第199行
    275 图8-4 右侧图有误,参见下面图形。
    345 第8行 "在kernel/sys_call.s中从208行开始" "在kernel/sys_call.s中从222行开始"
    ------------------------------------------------




    ========================================
    (2) 按发现日期排序,其中Lnn表示代码行号
    ==============================================================
    页数 章节或行号 错误 正确描述 说明
    ________________________________________________________________________________
    2009.06.04
    -----------
    275 图8-4 右侧图有误,参见下面图形。

    2009.05.30 (纠正者:华中工学院 董先生)
    -----------
    138 倒数第1行 “限长值为0x0002” "限长值为0x0001"。 实际内存长度应为 (限长值+1)*颗粒单位值。

    2009.05.26 (纠正者:linux2009)
    ------------
    215 倒数第7行 见程序第207-216行” “见程序567--578行”
    233 第4行 第193行 -----> 第199行
    345 第8行 "在kernel/sys_call.s中从208行开始" "在kernel/sys_call.s中从222行开始"
    -------------------------------------------------------------------------------------



    查看积分策略说明
    附件
    2009-6-4 19:57
    图8-4.JPG (50.89 KB)

    顶部

  5. 刘冲 于 2009-06-13 02:36:06发表:

    《完全注释》和《完全剖析》说明

    Linux内核完全注释(0.11)
    A Heavily Commented Linux Kernel Source Code
    Linux Version 0.11

    这是本站献给那些致力于Linux软件开发和使用爱好者的一本有关Linux内核工作原理的入门书。

    内容简介
    本书对Linux早期操作系统内核(v0.11)全部代码文件进行了详细全面的注释和说明,旨在使读者能够在尽量短的时间内对Linux的工作机理获得全面而深刻的理解,为进一步学习和研究Linux系统打下坚实的基础。虽然所选择的版本较低,但该内核已能够正常编译运行,其中已经包括了LINUX工作原理的精髓,通过阅读其源代码能快速地完全理解内核的运作机制。书中首先以Linux源代码版本的变迁历史为主线,详细介绍了Linux系统的发展历史,着重说明了各个内核版本之间的重要区别和改进方面,给出了选择0.11(0.95)版作为研究的对象的原因。另外介绍了内核源代码的组织结构及相互关系,同时还说明了编译和运行该版本内核的方法。然后本书依据内核源代码的组织结构对所有内核程序和文件进行了注释和详细说明。每章的安排基本上分为具体研究对象的概述、每个文件的功能介绍、代码内注释、代码中难点及相关资料介绍、与当前版本的主要区别等部分。最后一章内容总结性地介绍了继续研究Linux系统的方法和着手点。
    © 2002-2009 by Zhao Jiong
    © 2002-2009 赵炯 版权所有.

    ================================================
    《Linux内核完全注释》电子版
    ================================================

    !!!请使用acrobat reader 5.x以上的版本阅读。如果是在Linux阅读,那么请去下载 AcroReader for Linux 5.x,并且安装汉化包。

    ----------------------------- New !
    V3.0下载: (2009-01-25) 最新版,实际上就是《剖析》一书的电子版。
    http://oldlinux.org/download/clk011c-3.0.pdf (8.6MB)

    -----------------------------
    V2.0.1下载:(2007-06-07),包括了到目前为止对《注释》一书的所有更新内容。
    http://oldlinux.org/download/clk011c-2.0.1.pdf (6.45MB)

    -----------------------------
    V1.9.5下载:(2004-05-21) ,增加了bookmark书签,改正了页码问题。
    http://oldlinux.org/download/clk011c-1.9.5.pdf (5.15MB)
    http://oldlinux.org/download/clk011c-1.9.5-allowCommenting.pdf (5.15MB)
    如果你不能一下子下载整本书,那么你可以分别下载下面4个部分,然后用rar解压即可:
    http://oldlinux.org/download/clk011c-1.9.5.part1.rar (1.44MB)
    http://oldlinux.org/download/clk011c-1.9.5.part2.rar (1.44MB)
    http://oldlinux.org/download/clk011c-1.9.5.part3.rar (1.44MB)
    http://oldlinux.org/download/clk011c-1.9.5.part4.rar (0.6MB)

    -----------------------------
    修正版1.2.2下载: (2003-12-08) 包括了论坛中的所有更新,含bookmarks
    http://oldlinux.org/download/clk011c-1.2.2.pdf (5.6MB)
    http://oldlinux.org/download/clk011c-1.2.2.zip (5.3MB)
    -----------------------------
    修正版1.1下载: (2003-11-27) NEW!! 增加了章节的bookmarks,内容未变
    http://oldlinux.org/download/clk011c-1.1.0.pdf (4MB)
    -----------------------------
    修正版1.1下载: (2003-10-7) NEW!!
    http://oldlinux.org/download/clk011c-1.1.pdf (4MB)
    http://oldlinux.org/download/clk011c-1.1.zip (3.7MB)
    -----------------------------
    第1版的书可以在此下载:
    http://oldlinux.org/download/clk011c.pdf (3.7MB)或
    http://oldlinux.org/download/clk011c.zip (3.2MB)
    也可以到ftp服务器上去下载(第1版):
    ftp://plinux.org/pub/linux/docs/CommentedLinuxKernel011.pdf (不带封面版)



    ================================================
    《Linux内核完全注释》纸版
    *** 注:《Linux内核完全剖析》就是本书第二版,或者称为增强版。
    ================================================

    本书已由机械工业出版社出版。若您觉得电子书阅读起来不太方便,那么建议您购买纸版书阅读(建议购买下面的《Linux内核完全剖析》)。纸版书与电子版的主要区别在于纸版书为了节省篇幅没有包括进讲解试验练习的第14章内容,其他内容基本相同。另外,在阅读其他内核源代码时,本书也完全可以作为一本参考手册使用。
    书名:Linux内核完全注释
    作者:赵炯
    责任编辑:车忱
    书号:ISBN 7-111-14968-8
    出版社:北京:机械工业出版社 2004.9
    2004年9月第1版第1次印刷,2007年1月第5次印刷。
    字数:668千字
    页数:436页
    定价:42元

    机械工业出版社:
    http://www.cmpbook.com/article.asp?id=14968&pubnums=1-1
    第2书店:
    http://sh.dearbook.com.cn/book/viewbook.aspx?pno=TS0027275
    China-pub:
    http://www.china-pub.com/computers/common/info.asp?id=22033
    华储:
    http://www.huachu.cn/itbook/itbookinfo.asp?lbbh=BA02778007


    ================================================
    《Linux内核完全剖析》纸版
    ================================================

    本书的增强版(第2版)已经出版. 虽然这本新书比较贵一些, 但仍然建议购买这个最新版本. 因为许多问题在这本书中都有较为详细的解答,并且在书的头几章增加了一些比较有用的基础内容.在阅读最新Linux内核代码时,这些基础内容也极其有用. 另外,在网上购买价格要便宜一些:
    书名:Linux内核完全剖析
    书号:ISBN 7-111-18032-1
    出版社:北京 机械工业出版社 2006.1
    2006年1月第1版第1次印刷,2007年4月第4次印刷。
    页数:882页
    定价:79 元

    机械工业出版社:
    http://cmpbook.com/article.asp?id=18032&pubnums=1-1
    第2书店:
    http://www.dearbook.com.cn/book/91903
    China-pub:
    http://www.china-pub.com/computers/common/info.asp?id=28726
    华储:
    http://www.huachu.cn/itbook/itbookinfo.asp?lbbh=BA021032828


    ================================================
    《Linux Kernel完全剖析》台湾纸版
    ================================================

    由台湾博硕文化公司于2005年11月出版。基于Linux内核 0.12。0.12代码近2万行,而0.11的只有1.4万。另外还新增加了近200页的3章内容。这本书的主要特点在于:1. 比较完整地描述了80386 CPU系统编程内容;2. 对PC机组成结构和主要硬件部分作了扼要描述;3. 对内核使用的汇编语句和C语言特别特性进行了描述;4. 很完善的描述80X87仿真程序,对于数学协处理器或多媒体指令的编程、仿真以及汇编器的实现都有参考意义。也许这是目前市面上所能见到最完善的部分;5. 具有真正的虚拟内存功能(具有交换功能);6. 作业控制;7. 虚拟终端;8. select()函数实现。因此,Linus本人认为 0.12版内核是一个非常稳定的好版本(至今他仍然这样认为)。

    书名:Linux Kernel 完全剖析
    书号:ISBN 957-527-861-5
    出版社:台湾 博硕文化股份有限公司 2005.11
    2005年11月第1版第1次印刷,2006.2第2次印刷
    页数:1260页
    定价:750台币

    博硕文化股份有限公司:
    http://www.drmaster.com.tw/info2.asp?no=OS20115


    ================================================
    《Linux内核完全剖析--基于0.12内核》
    ================================================


    如题所示,该书所剖析之内核基于0.12版本。该版本内核是Linus所独立编制的最稳定的早期内核。2002年时Linus还很自豪地提及到这个内核版本。之后的内核代码中则开始含有大量其他人员编制的程序。虽然0.12内核扩展了包括虚拟终端、交换以及协处理器编程等内容,但因为这本书与《Linux 内核完全剖析》的基本内容大体相同,所以对于已经购买《剖析》一书的内核初学者,作者认为没有必要再购此书。

    书名:Linux内核完全剖析--基于0.12内核
    书号:9787111250470
    出版社:机械工业出版社 2008.10
    页数:960页
    定价:99元

    http://www.china-pub.com/209255


    ================================================
    !!!与本书相关的大多数软件和资料可以从下面链接处得到:
    http://oldlinux.org/Linux.old/

    http://mirrors.kernel.org/oldlinux/Linux.old/


    版权说明
    作者保留本电子书籍的修改和正式出版的所有权利.读者可以自由传播本书全部和部分章节的内容,但需要注明出处.由于目前本书尚为草稿阶段,因此存在许多错误和不足之处,希望读者能踊跃给予批评指正或建议.可以通过电子邮件给我发信息: gohigh@gmail.com, jiong.zhao@mail.tongji.edu.cn, 或直接来信至:上海同济大学 机械电子工程研究所 (上海四平路1239号,邮编:200092).

    -----------------------
    gohigh@sh163.net
    gohigh@gmail.com
    Jiong.Zhao@mail.tongji.edu.cn
    clk-pub1.jpg (11.78 KB)
    2007-7-4 09:59
    clk-pub2.jpg (6.59 KB)
    2007-7-4 09:59
    clk-pubtw.jpg (15.23 KB)
    2007-7-4 09:59
    clk-ebook.jpg (6.31 KB)
    2007-7-4 10:01
    book-0.12-cover-2.jpg (23.78 KB)
    2008-10-5 17:36

    顶部
    redgrid
    版主
    Rank: 7Rank: 7Rank: 7
    Member



    UID 12108
    精华 35
    积分 6766
    帖子 6938
    阅读权限 100
    注册 2003-9-5
    来自 上海
    状态 离线

    #2
    使用道具
    发表于 2003-9-8 22:42 资料 个人空间 主页 短消息 加为好友
    《完全注释》和《完全剖析》说明

    [这个贴子最后由redgrid在 2003/09/08 10:45pm 第 1 次编辑]

    这两天给《注释》一书加了一个封面。见上面。但要比原来没有封面的版本大了将近1MB。
    该版本的pdf下载文件名是:
    http://oldlinux.org/download/clk011.pdf
    原没有封面版本的pdf名称仍然同上。

  6. 刘冲 于 2009-06-13 02:35:15发表:

    阅读本书所需的基础知识 -- 再次强调。

    [这个贴子最后由redgrid在 2006/08/09 00:45pm 第 17 次编辑]

    Linux 0.11虽然不是什么“珠穆朗玛峰”,但它肯定还是“华山”或“泰山”。虽然有路但你还是需要最基本的努力和花费一定的代价才能“攀登”上去。
    1. PC兼容机硬件工作原理(比如8259A,8253, 8042,UART等硬件);
    2. Intel 32位 运行模式工作原理,寻址方式;
    3. 传统C语言;
    4. 一些Intel asm基础。
    5. 会使用Linux操作系统,懂得Linux系统的基本操作。

    推荐参考书籍:
    ============
    《UNIX操作系统设计》
    http://www.china-pub.com/computers/common/info.asp?id=34
    *《UNIX环境高级编程》
    http://www.china-pub.com/computers/common/info.asp?id=30
    《操作系统:设计与实现》(MINIX)
    http://www.china-pub.com/computers/common/info.asp?id=2033
    《IBM PC 汇编语言程序设计》
    http://www.china-pub.com/computers/common/info.asp?id=7721
    *《深入理解计算机系统》
    http://www.china-pub.com/computers/common/info.asp?id=18133
    《Linux权威指南》
    http://www.china-pub.com/computers/common/info.asp?id=1174
    《Linux Assembly Language Programming》
    ftp://plinux.org/pub/linux/docs/ ... age_Programming.pdf
    *《Intel 80386 Programmer';s Reference Manual》
    ftp://plinux.org/pub/linux/docs/Intel_80386_Manual.pdf
    *《The C Programming Language》
    ftp://plinux.org/pub/linux/docs/The_C_programming_Language.rar
    加星号“*”者为重点推荐读物!
    ============================================
    如果有些忘了,就请先花哪怕一天时间将这些基础知识先浏览一遍,在看本书。
    硬件方面可参考教科书。
    Intel 32 mode 可见Intel 386 manual;

    内核代码中用到的汇编程序(as86和AT&T语法)可参照以下一些文档。
    -------------------------------------------------------------
    MINIX 汇编手册: http://www.oldlinux.org/oldlinux/viewthread.php?tid=291
    NASM 汇编手册: http://www.oldlinux.org/oldlinux/viewthread.php?tid=877
    as86 在线手册: http://www.oldlinux.org/oldlinux/viewthread.php?tid=1895
    ld86 在线手册:http://www.oldlinux.org/oldlinux/viewthread.php?tid=1428

    /*****************************************/
    /* 本站资源: */
    /* http://oldlinux.org/Linux.old/ */
    /*****************************************/
    ===============================================
    如果你具有大学计算机本科或以上学历,那么你可以在适当复习以上知识后就能顺利看懂本书。
    如果你是在读本科计算机系的学生,那么在学习过操作系统课程或者正在学习时,只要复习一些有关Intel PC机组成原理,就应该很顺利地理解本书,并能很好地帮助你理解操作系统的基本原理。
    如果你是其它专业在读本科学生,那么你可以首先自学一些有关操作系统的理论知识和计算机微机原理课程(如果没有学过的话),了解一些操作系统的基本术语,再继续学习本书。
    如果你是一个专科学生,那么你首先需要准备的知识与一个非计算机本科生所要做的一样。
    如果你是一个中学毕业的学生,那么你可以先自学一些《计算机原理》、《微机原理》、《C语言》、《英语》等基本课程,然后再继续阅读本书。当然也可以把摊子铺开,同时阅读:)
    注意: 无论你现在的学位或学历怎样,这都不是主要问题。关键在于努力和刻苦。而兴趣是学习的最好动力之一。即使你没有任何学位,只要识字能上网,那么你面前的道路还是宽广的。
    “世上无难事,只要肯登攀”。



    ---------------------------------------------------------------------------------------------

    源代码浏览工具介绍
    http://www.oldlinux.org/oldlinux/viewthread.php?tid=1470

    ============================
      在本机上阅读源代码,可以使用redhat 的snavigator或Source Dynamics的Source Insight软件。snavigator是免费的,source Insight可以去www.sourceInsight.com去下载。或者在此处下载:
    http://oldlinux.org/download/tools/si350.rar (3.2MB)
    http://oldlinux.org/download/tools/Release-SN51E-win32.zip (7.8MB)
    http://oldlinux.org/download/tools/src2html/

    Source Insight的使用方法可参见文章:
    http://www-900.ibm.com/developer ... t/tip17/index.shtml
      也可以使用本站网页上提供的再线交叉引用阅读程序:
    http://oldlinux.org/lxr/http/source/
    在阅读本书时,最好在计算机中安装这两个软件之一,边阅读书中注释边浏览代码。




    ------------------------------------------------------------------------------------------------
    lxr设置方法介绍(1)
    ======================
    How to make your own Cross Reference
    By qhshang at 163.com

    It is a long long time to gen xref for it, a not so long time to glimpse-index it.
    If you are lucky enough to make lxr.conf done like it on this host in half an hour, do NOT drop me a mail:-)
    ----------------------------------------
    Install lxr
    Modify Makefile to customize the PERLBIN and INSTALLPREFIX, to indicate the perl program and where you install lxr.
    then
    $ make install

    To generate your reference for files in Your_dir:
    $ genxref Your_dir
    while genxref is in lxr/bin
    In my practice using genxref, locale should be set to C, en_US.utf-8 is not ok.
    I don';t know why, because I don';t read the perl script throughly.
    ----------------------------------------
    Install glimpse:
    First make glimpse, then cp bin/{glimpse,glimpseindex} to /bin or /usr/bin
    Generate index using glimpse:
    $ glimpseindex -H . Your_dir
    here -H means where to put the generated index files.
    Test your index:
    $ glimpse Your_string
    ----------------------------------------
    Web server configuration
    To make lxr viewable in web pages, add lines for xrefs in apache conf 文件:

    Options All
    AllowOverride All
    order allow,deny
    allow from all

    To make sure perl script can be executed:
    make a file .htaccess in your lxr perl script dir:
    Options Indexes

    SetHandler cgi-script
    Options ExecCGI


    NOTE: some said only one line is OK:
    SetHandler cgi-script
    I don';t know if it works.
    ----------------------------------------
    Make your files browsable from browsers:
    First you should make sure the lxr dir can be accessed via web server.
    then
    $ chmod 755 xref fileidx
    $ chmod 755 .glimpse_*
    $ chmod 755 Your_Dir_To_WWWROOT -R
    $ chmod 755 Your_Dir_To_LXR -R
    ----------------------------------------
    Configuration 文件: xrefs.conf
    My file is only for example use.
    Your can modify your conf file according to your own condition.
    # Define typed variable "v", read valueset from file.
    variable: v, Version, [/Your_web_server_root/xrefs/src/versions], [/Your_web_server_root/xrefs/src/defversion]
    # here variable v is for Version, read from file, and defversion is for
    # default version, which will be shown to you by default.
    # Define typed variable "a". First value is default.
    variable: a, Architecture, [/Your_web_server_root/xrefs/src/archs]
    # and a is for Arch, the first one will be shown by default.
    # Define the base url for the LXR files.
    baseurl: http://Your_web_server_root/xrefs/
    # this url variable can be refered in template-head

    # These are the templates for the HTML heading, directory listing and
    # footer, respectively.
    htmlhead: /Your_web_server_root/xrefs/template-head
    htmltail: /Your_web_server_root/xrefs/template-tail
    htmldir: /Your_web_server_root/xrefs/template-dir
    # The source is here.
    sourceroot: /Your_web_server_root/xrefs/src/linux-$v/linux
    srcrootname: Linux-$v
    # because I have more then one Linux kernel version, so I put them like the
    # above for clear reference
    # I make a linux subdir to hold the original kernel source here
    # "#include " is mapped to this directory (in the LXR source
    # tree)
    incprefix: /usr/include
    # I don';t know what is this mean, who can tell qhshang?
    # The database files go here.
    dbdir: /Your_web_server_root/xrefs/src/linux-$v
    # here is where you put the fileidx and xref file db.
    # the location can be various according to your operation.
    # Glimpse can be found here.
    glimpsebin: /usr/local/bin/glimpse
    # for freetext search
    # The power of regexps. This is pretty Linux-specific, but quite
    # useful. Tinker with it and see what it does. (How';s that for
    # documentation?)
    map: /include/asm[^\/]*/ /include/asm-$a/
    map: /arch/[^\/]+/ /arch/$a/
    ----------------------------------------
    To provide the cross reference with Green-colored comments for C/C++,
    there is a patch for lxr.(I am sorry that I forgot the url of this patch.)
    It should be put to lxr/lib/LXR.

    --- Common.pmWed Mar 7 15:34:24 2001
    +++ Common.pmSat Jan 27 12:42:41 2001
    @@ -18,8 +18,8 @@

    @cterm = (';atom';,';\\\\.';,';';,
    - ';comment';,';/\*';,';\*/';,
    - ';comment';,';//';,"\n",
    + ';comment1';,';//';,"\n",
    + ';comment2';,';/\*';,';\*/';,
    ';string';,';"';,';"';,
    ';string';,"';","';",
    ';include';,';#include';,"\n");
    @@ -179,12 +179,17 @@
    while (defined($frag)) {
    &markspecials($frag);
    - if ($btype eq ';comment';) {
    -# Comment
    + if ($btype eq ';comment1';) {
    +# C++-style comment ';//';
    # Convert mail adresses to mailto:
    &freetextmarkup($frag);
    -$frag = "$frag";
    -$frag =~ s#\n#\n#g;
    +$frag = "$frag";
    +$frag =~ s#\n#
    \n#g;
    + } elsif ($btype eq ';comment2';) {
    +# C-style comment ';/* ... */';
    +&freetextmarkup($frag);
    +$frag = "$frag";
    +$frag =~ s#\n#
    \n#g;
    } elsif ($btype eq ';string';) {
    # String
    $frag = "$frag";
    ----------------------------------------
    Some misc questions:
    开始lxr作perl查询的时候出错,有时侯能工作,但是有警告:
    /** Warning: Use of uninitialized value in subroutine entry at
    /usr/lib/perl5/5.8.0/i386-linux-thread-multi/DB_File.pm line 259./
    于是找到这个文件中的相应行,不知是错什么了:
    DoTie_($tieHASH, @arg) ;
    觉得是mod_perl问题。
    下载一个mod_perl-1.99_10,照别人曾经写的作:
    解压到/root:
    $ perl Makefile.PL EVERYTHING=1 APACHE_SRC=../httpd.x.x.x /src
    USE_APACI=1 PREP_HTTPD=1 DO_HTTPD=1
    结果是:
    [root@secteam mod_perl-1.99_10]# perl Makefile.PL EVERYTHING=1
    APACHE_SRC=../httpd-2.0.47/ USE_APACI=1 PREP_HTTPD=1 DO_HTTPD=1
    Reading Makefile.PL args from @ARGV
    !!! Unable to determine server version, aborting.
    !!! Please specify MP_APXS or MP_AP_PREFIX.

    不行,我猜测是版本不同导致的问题
    于是按照mod_perl 的INSTALL 文件作:
    % perl Makefile.PL MP_APXS=/usr/local/apache2/bin/apxs
    make没有问题,make test 有很多错:
    /usr/bin/perl -Iblib/arch -Iblib/lib \
    t/TEST -clean
    *** setting ulimit to allow core files
    ulimit -c unlimited; t/TEST -clean
    APACHE_USER= APACHE_GROUP= APACHE_PORT= APACHE= APXS= \
    /usr/bin/perl -Iblib/arch -Iblib/lib \
    t/TEST -verbose=0
    *** setting ulimit to allow core files
    ulimit -c unlimited; t/TEST -verbose=0
    *** root mode: changing the files ownership to ';nobody'; (99:99)
    *** sudo -u ';#99'; /usr/bin/perl -e ';print -r "/root/mod_perl-1.99_10/t"
    && -w _ && -x _ ? "OK" : "NOK"';
    *** result: NOK
    !!! You are running the test suite under user ';root';.
    Apache cannot spawn child processes as ';root';, therefore
    we attempt to run the test suite with user ';nobody'; (99:99).
    The problem is that the path:
    /root/mod_perl-1.99_10/t
    must be ';rwx'; by user ';nobody';, so Apache can read and write under that
    path.
    There several ways to resolve this issue. For example move
    ';/root/mod_perl-1.99_10/t'; to ';/tmp/'; and repeat the ';make test'; phase.
    You can test whether the location is good by running the following test:
    % sudo -u ';#99'; /usr/bin/perl -e ';print -r "/root/mod_perl-1.99_10/t" &&
    -w _ && -x _ ? "OK" : "NOK"';

    make: *** [run_tests] Error 29
    原来是解tar gz包到root路径的原因,先不理会,make install也可以安装,重启
    apache,
    查询警告依旧。
    于是重新解到tmp下,
    % perl Makefile.PL MP_APXS=/usr/local/apache2/bin/apxs
    % make && make test
    还是同样的错,
    突然看到错误中还有: /root/mod_perl-1.99_10/t,可是我已经解到/tmp下作的
    呀,很不解,(:-)没有深究)
    只有删掉/root下的,重新解到/tmp,
    make test的时候巨多的OK。。。
    然后就一路顺风成功install。
    于是启动apache:
    [root@secteam apache2]# ./bin/apachectl start
    Syntax error on line 235 of /usr/local/apache2/conf/httpd.conf:
    Invalid command ';AddModule';, perhaps mis-spelled or defined by a module
    not included in the server configuration
    现在注释掉下面的
    [root@secteam apache2]# vi /usr/local/apache2/conf/httpd.conf
    #AddModule mod_perl.c
    启动
    [root@secteam apache2]# ./bin/apachectl start
    [Thu Oct 09 10:00:34 2003] [error] Can';t locate Apache.pm in @INC (@INC
    contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi
    /usr/lib/perl5/5.8.0
    /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi
    /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl/5.6.1
    /usr/lib/perl5/site_perl
    /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi
    /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .
    /usr/local/apache2/ /usr/local/apache2/lib/perl) at (eval 1) line 3.
    [Thu Oct 09 10:00:34 2003] [error] Can';t load Perl module Apache for
    server 192.9.200.102:80, exiting...
    奇怪,怎么没有Apache.pm呢,locate Apache.pm出来好几个,
    因为不知道哪里修改@INC,所以我找到一个Apache.pm拷贝到@INC中的一个位置。
    启动[root@secteam apache2]# ./bin/apachectl start,可以,但是查询的时候
    警告仍然如初
    这样认为是pm问题,需要perl5.8.1,于是make,make install
    启动apachectl,发现libperl.so找不到,连vim都不能用了:
    vim: error while loading shared libraries: libperl.so: cannot open
    shared object 文件: No such file or directory
    于是从别的地方找了一个拷贝到/usr/lib,可以了。
    然后去掉perl5.8.0的内容,这次启动apache,发现又有很多pm找不到,
    觉的是mod_perl的配置决定了perl相关程序的位置。
    于是重新把mod_perl make,make install,
    此时执行lxr发现错误:
    The server encountered an internal error or misconfiguration and was
    unable to complete your request.
    分析了一下,觉的是perl的路径问题,修改lxr的以下文件的perl路径:
    diff,find,ident,search,source,
    OK(或者把perl链接到/usr/bin因为大多perl脚本都是)
    这样lxr的标识符索引也没有警告了,但是freetext搜索还不可以,
    认为是glimpse的问题。(freetext有glimpse支持)
    然后把glimpse的属性搞定,freetext搜索就好了
    现在默认是Linux-2.5.72-lsm1/

    其他问题
    apachectl的问题:
    我是ssh到server上的,执行
    /usr/local/apache2/bin/apachectl restart
    每次都使得我的ssh链接关闭,不得其解,
    到server本机终端执行
    /usr/local/apache2/bin/apachectl restart
    每次都退出一层shell,奇怪。(没有仔细读apachectl script)
    只好到apache 所在路径下执行。
    各位可否给点指点? 而且apachectl不给出成功与否,
    [root@secteam apache2]# ./bin/apachectl stop
    httpd (pid 20453?) not running



    ------------------------------------------------------------------------------------------------
    Lxr设置方法介绍(2)
    ==========================
    0. 假设你把lxr安装在你的web主目录中(也即,例如,http://oldlinux.org/lxr/),那么:
    1. web目录下建立文件“.htaccess”,其内容如下:
    -----------------开始(不包括本行)
    # Web Access script permission

    SetHandler cgi-script

    ------------------结束

    2. 编辑配置文件: lxr/http/lxr.conf 例如oldlinux.org的配置文件内容为:
    --------------------开始
    # Configuration file.
    # Define typed variable "v", read valueset from file.
    variable: v, 版本, [/var/www/oldlinux.org/lxr/source/versions], [/var/www/oldlinux.org/lxr/source/defversion]
    # Define typed variable "a". First value is default.
    variable: a, 体系结构, (i386)
    # Define the base url for the LXR files.
    baseurl: http://oldlinux.org/lxr/http/
    # These are the templates for the HTML heading, directory listing and
    # footer, respectively.
    htmlhead: /var/www/oldlinux.org/lxr/http/template-head
    htmltail: /var/www/oldlinux.org/lxr/http/template-tail
    htmldir: /var/www/oldlinux.org/lxr/http/template-dir
    # The source is here.
    sourceroot: /var/www/oldlinux.org/lxr/source/$v/linux/
    srcrootname: Linux
    # "#include " is mapped to this directory (in the LXR source
    # tree)
    incprefix: /include
    # The database files go here.
    dbdir: /var/www/oldlinux.org/lxr/source/$v
    # Glimpse can be found here.
    glimpsebin: /usr/local/bin/glimpse
    # The power of regexps. This is pretty Linux-specific, but quite
    # useful. Tinker with it and see what it does. (How';s that for
    # documentation?)
    map: /include/asm[^\/]*/ /include/asm-$a/
    map: /arch/[^\/]+/ /arch/$a/
    ----------------------------结束。
    3. 建立源文件内容。对每一个想要浏览的内核版本,按以下步骤进行(若要使用第5,6选项步骤,你要首先安装glimpse软件):
    # Source install procedures
    1. mkdir a subdirectory with the code version number;
    2. chdir into the subdirectory;
    3. tar -zxvf the compressed soucecode(this will generate a ';linux'; subdir);
    4. /var/www/html/lxr/bin/genxref linux
    5. [ Optional ] glimpseindex -H . linux
    6. [ Optional ] chmod 644 .glim*
    7. Edit the ';versions'; file to contain this new code version number;
    8. done!
    Example: To Install the linux kernel code version 2.1.33:
    The compressed code packet is : linux-2.1.33.tar.gz
    ----------------------------------------------------------
    1. mkdir /var/www/html/lxr/source/2.1.33
    2. chdir /var/www/html/lxr/source/2.1.33
    3. tar -zxvf linux-2.1.33.tar.gz
    4. /var/www/html/lxr/bin/genxref linux
    5. [ Optional ] glimpseindex -H . linux
    6. [ Optional ] chmod 644 .glim*
    7. Insert the line ';2.1.33'; into the ';versions'; file.
    8. Done!
    =======================================================================
    =======================================================================
    最后提醒一下,从我们讨论的内核版本号(0.11)可以知道,这个内核版本并不是
    一个没有错误的完善版本(当然这也不存在),其中有些代码必然不可能都是
    最好或是最有效率的,但是作为了解内核工作实现原理来讲肯定已经做够了。

    ****** 这里是终点,更是一个新的起点 ******