目前重印工作已经结束,第2次印刷的改动主要是:1. 作者介绍部分:第二段仅保留“目前任职于AMD上海研发中心,主要从事Linux显卡驱动等领域的研发工作”。2. 推荐序部分:"Deep Understanding Linux Kernel"应为"Understanding theLinux Kernel"3. 前言部分:“林雨堂”应为“林语堂”最后的致谢部分另加一小段如下:“在本书首印后,感谢AMD的AnnieFeng、ChinaUnix网友wait_rabbit及A10Networks公司 高峰(CUID: GFree_Wind)对本书重印的勘误工作提供的帮助!”4. P4: “(如果section不占用内存空间,该值为0)”改为“(如果section不占用内存空间,加载后实际地址为0)”5. P33: "static int__param_perm_check_dolphin __attribute__((unused)) = \"应为: “static int __param_perm_check_dolphin __attribute__((unused))= \ BUILD_BUG_ON_ZERO((perm) 0777 || ((perm)& 2)) \ + BUILD_BUG_ON_ZERO(sizeof(""prefix) >MAX_PARAM_PREFIX_LEN); \"6. P82:“图2-10 开一个字符设备节点的功能流程”应为“图2-10 打开一个字符设备节点的功能流程”7. P146:该页中出现的所有“ DECLARE_MUTEX”都应改为“DEFINE_SEMAPHORE”8. P153:“如果sequence & 0 为0表明写入过程已经结束”中"sequence & 0"应该是"sequence& 1”9. P192: “那么IRQ_EXIT_OFFSET=(HARDIRQ_OFFSET-1),意味着在HARDIRQ部分结束之后,内核已经启动可抢占性”,最后一句应该为“内核已经可以启动可抢占性了”10. P267, "static unsigned long eflag=1"应该改为“staticvolatile unsigned long eflag=1”11. P267:static void sigio_handler(int sigio){printf(“Get the SIGIO signal, we exit theapplication!\n”);eflag = 0;}在上述printf那行加个脚标,改成:static void sigio_handler(int sigio){printf(“Get the SIGIO signal, we exit theapplication!\n”);[1]eflag = 0;} 12. P274:“通常Jiffies在Linux系统启动引导阶段被初始化为0”改为“通常Jiffies在Linux系统启动引导阶段被初始化为INITIAL_JIFFIES”13. P275:“使用内核默认的值1000就足够了。事实上CONFIG_HZ并未出现在内核的配置菜单选项中,而是就在内核源码根目录下的.config文件中。”改为“使用内核默认的值就足够了。如果想要修改该值,可以通过Processortype and features --> Timer frequency选项进行,目前的内核配置中提供了100、250、300和1000Hz四个值。”14. P283:“schedule_timeout(jiffies + HZ)”应为“schedule_timeout(HZ)”15. P515,“各层通过改变skb->data和skb->tail的值来获得当前层对应的协议数据首地址”改为“各层通过改变skb->data的值来获得当前层对应的协议数据首地址” [1] 信号处理函数中调用printf可能会导致重入等问题,此处使用该函数仅简单地作为一个范例使用。 10-16 12:24