《Linux设备驱动程序(第三版)》对应代码修改记录
今天将该书misc-modules部分的jiq.c代码做了些修改,以保证这份代码在UBUNTU 9.10 & Linux 2.6.31的环境下运行。
记录一下主要的修改位置:
1.config.h
新内核中使用了autoconf.h代替config.h
2.工作队列
在新的内核中为了避免非延迟的工作队列中timer的成本,将工作队列中的timer剥离出来。同时又构造了延迟工作队列的新结构。
详情参考:Linux 自2.6.20工作队列的变化
我用新的API重写了相关的代码。
3.统一化
和其他类型不同,在timer中任务执行一次就退出。我将其修改为和其他其他类型一样的处理方法。
4.结构化(不是必需的修改,但是我觉得这样更易于理解)
原来的程序中,主进程的唤醒被放置到了jiq_print函数中,虽然这样
代码更加精简。但是将业务的逻辑和处理放到了一起。略微有悖于结构化的思想。于是我将其从jiq_print函数中移除,转而在对应的控制函数(即调用
jiq_print的函数)中处理。
如此一来,这些函数的逻辑统一为:
a)取得需要显示的数据结构。
b)调用
jiq_print显示
c)根据jiq_print的返回值决定是继续执行相应的任务还是唤醒主进程。
相关文档:
调试代码的难度是首次编写这些代码的两倍,因此,如果你在编写代码时就已经发挥了全部的聪
明才智,那么按照常理,你将无法凭借自己的智慧去调试这些代码。
......
1. 查看内核版本命令:
1) [root@q1test01 ~]# cat /proc/version
Linux version 2.6.9-22.ELsmp (bhcompile@crowe.devel.redhat.com) (gcc version 3.4.4 20050721 (Red Hat
3.4.4-2)) #1 SMP Mon Sep 19 18:00:54 EDT 2005
2) [root@q1test01 ~]# uname -a
Linux q1test01 2.6.9-22.ELsmp #1 SMP Mon Sep 19 ......
etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时 ......
在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是Red Hat Package Manager(简称RPM)。此工具包最先是由Red Hat公司推出的,后来被其他Linux开发商所借用。由于它为Linux使用者省去了很多时间,所以被广泛应用于在Lin ......