科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道通过振动向Linux ThinkPad传输信息(4)

通过振动向Linux ThinkPad传输信息(4)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

通过修改内核以在受震动导致内核出现紧急情况时自动重置 Linux 膝上型计算机,让您的计算机处于受保护的状态

作者:Nathan Harrington 来源:IBM 2007年9月10日

关键字: 传输 Thinkpad Linux

  • 评论
  • 分享微博
  • 分享邮件
 

如果在任意方向上的空间移位大于我们先前设定的阈值,就按照两个方向上移动的量增加总偏差。然后将当前的基数设为现有的加速度级别。这样重复地重新初始化基数值要求用户持续超出空间移位值以增加检测到的总偏差。这允许用户在紧急模式下移动并存储 ThinkPad,从而安全地将机器送到系统管理员那里。如果仅需要侧立、倾斜和持拿 ThinkPad 以触发重新启动,请删除重新初始化设定。

测试 panicShake() 内核

要发动一种紧急情况,需要在内核中调用紧急情况子程序。创建以下 makefile:obj-m := panicCall.o,程序 panicCall.c 在编译时将使用该文件:

/* * panicCall.c - Instigate a kernel panic */
#include <linux/module.h> 
/* Needed by all modules */
#lincude <linux/kernel.h> 
/* Needed for KERN_INFO */
static char *pMesgStr = "PANIC SHAKE AND BAKE";
int init_module(void)
{ printk(KERN_INFO,"panicCall module loaded\n"); 
panic(pMesgStr); return(0);}void cleanup_module(void)
{ printk(KERN_INFO,"panicCall module unloaded, beyond possible");}

清单 6. panicCall.c 内核模块源代码

以超级用户身份用 make -C /lib/modules/$(uname -r)/build SUBDIRS=$PWD modules 命令编译 panicCall 模块。现在就有了一个可调用的模块可以使用 insmod panicCall.ko 命令触发紧急情况。如果还没有该模块则重新引导(以激活 hdaps 紧急情况下触发启用震动的内核),并运行 insmod panicCall.ko。应当会看到类似以下内容:

panicCall: module license 'unspecified' taints kernel.
Kernel panic - not syncing: PANIC SHAKE 
AND BAKE ACTIVE [<c011a32e>] panic+0x3e/0x174   
[<f8a97017>] init_module+0xb/0xc [panicCall] 
[<c013050a>] sys_init_module+0x1382/0x1514   
[<c0152413>] do_sync_read+0xb8/0xf3 
[<c012a17f>] autoremove_wake_function+0x0/0x2d   
[<c01c0672>] 	 _atomic_dec_and_lock+0x22/0x2c 
[<c0169c32>] mntput_no_expire+0x11/0x6d   
[<c0102bc1>] syscall_call+0x7/0xb

清单 7. 内核紧急情况堆栈

现在拿起计算机,然后用力地晃动它,计算机将打印出 “shaking substrate” 消息并执行重新启动。如果您不希望晃动可能活动的磁盘驱动器,请以超级用户身份发出以下命令:

mkdir /tmp/ramdisk0mke2fs /dev/ram0mount 
/dev/ram0 /tmp/ramdisk0/cp /root/panicCall.ko 
/tmp/ramdisk0/cp /sbin/insmod /tmp/ramdisk0/

清单 8. RAM 磁盘创建和模块复制

现在有了将模块插入位于 RAM 磁盘的内核所需的两个文件。用以下部分更新 /etc/init.d/halt 脚本,将其放在刚好位于 fsck check 部分之下 halt execute 部分之上的位置:

echo "disks now mounted in readonly mode, 
spin down in 5 seconds";/sbin/hdparm -S 1 
/dev/hdaecho "spin down hda called, waiting 10 seconds";
sleep 10echo "calling panic from ramdisk 
location";/tmp/ramdisk0/insmod 
/tmp/ramdisk0/panicCall.ko

清单 9. 修改 /etc/init.d/halt

以超级用户身份执行命令 init 0 以将计算机转入关闭模式中。在调用关闭程序前,计算机将把紧急情况触发模块装入内核,并调用震动检测程序。如果在系统关闭时仔细听硬盘的声音,可以听到明显比以往更长的喀哒声,然后多普勒磁盘将随着机械臂逐渐下降的 “积载” 位置而降低并且磁盘旋转停止。再过大约五秒钟后,将从 RAM 磁盘执行紧急情况模块,而物理磁盘头仍停止不动。现在,您可以随心所欲地晃动 ThinkPad 而无需考虑磁盘的运行状况。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章