让你的Thinkpad在SUSE下工作得更好更完美(4)

来啦, 监视电脑震动
thinkpad X/T系列都带有3D硬盘保护功能, 就是检测电脑的移动保护硬盘. linux kernel已经把监视移动的功能集成进去了,就是前面提到的hdaps模块.在前面已经可以成功加载hdaps后,就可以用程序实时监视了. 首先根据thinkwiki上的连接下载到hdaps-gl-0.0.5,编译,中途报错缺少GL/glut.h,google一下原来是opengl相干的东西, 就去安装opengl相关的devel包,yast中搜索opengl, 把相关的devel包装好, 搞掂.
编译成功后,cp hdaps-gl /usr/bin, 运行hdaps-gl, 移动电脑,成功了~~
还可以把监视集成在gnome/kde panel里面,分别是tilt-0.0.2和plasmoid-hdaps-monitor-0.3-1.22(openSUSE官网上有),其中tilt不能自动添加到gnome panel里面,所以把它在session里做成一个autostartup,运行后会出现一个坐标值,参照附件图片



到了这份上,怎么说也要把硬盘保护功能弄出来吧....
到目前为止呢,都是小打小闹,要实现这功能可要冒点 当机 的风险了.因为这回要对内核打补丁,重新编译内核.....
而且, disk protect的patch不是每个版本的内核都有,除了要大胆,还要有运气,当然最重要还是行动.
根据圣经的指示,我在




下载了所有版本的补丁备用

实现硬盘保护的功能是这样的:
首先对硬盘的移动进行检测 -- 即上面的hdaps module已经实现了, 此module集成在kernel hwmon目录下
然后根据移动的数据进行判断要不要进行保护, 此需要一个守护程序, 即 hdapsd,需要安装
当hdapsd判断需要保护,就要指示内核对硬盘进行磁头 park的动作, 此功能在大多数内核版本上没有实现, 据说在2.6.28以后的版本集成了

首先,要查看自己内核的版本:

uname -r

然后找一个针对此版本的补丁, 如果没有,则找个版本最接近的,同时去ftp.kernel.org下载和这版本对应的kernel原代码下来备用

用编辑器打开patch文件,先了解一下patch文件格式,这很有必要~~:

diff -urN linux-2.6.16.original/block/ll_rw_blk.c linux-2.6.16.hdaps/block/ll_rw_blk.c
--- linux-2.6.16.original/block/ll_rw_blk.c 2006-03-20 05:53:29.000000000 +0000
+++ linux-2.6.16.hdaps/block/ll_rw_blk.c 2006-03-28 20:39:03.000000000 +0100
@@ -39,6 +39,8 @@
static void drive_stat_acct(struct request *rq, int nr_sectors, int new_io);
static void init_request_from_bio(struct request *req, struct bio *bio);
static int __make_request(request_queue_t *q, struct bio *bio);
+static int blk_protect_register(request_queue_t *q);
+static void blk_protect_unregister(request_queue_t *q);


patch文件以 diff xxxxxx 开头分段,每段代表对一个文件要进行修改的内容, block/ll_rw_blk.c代表linux-2.xxxxx/block/ll_rw_blk.c文件, "+"开头代表是在原文件中增加的内容, "-"开头代表在源文件删去的内容, " "开头代表原文件不动的地方,即进行匹配用的上下文

好,开始动手

首先建一个工作目录,确保分区有足够的硬盘空间,大概需要4G的空间:
mkdir tp_kernel

进入工作目录,然后cp kernel source过来并重命名
cp -rf /usr/src/linux-2.6.xx.xxx linux-2.6.xx.xxx-tp (具体版本请根据上面的结果)

进入这个目录, cp 内核编译配置文件过来
cp /boot/config-xxxxxxx .config

打开配置文件,修改版本号, 这步很重要,不然编译安装后就会覆盖原来的内核了
CONFIG_LOCALVERSION="-0.1" -> CONFIG_LOCALVERSION="-0.1-tp"


然后把patch文件copy过来,运行
patch -p1 < xxxxxx.patch

运气好,直接成功,运气不好,会报Failed
这时别怕,要亲自动手了, Fail有2种情况:
一种是文件匹配不上,这出现在内核版本和patch对应版本差别比较大或者发行版对此进行过修改的情况下
另一种是报找不到对应文件,这是因为有可能在某些发行版或版本中某些文件改变了存放的目录

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/27948.html