借助GRUB4DOS在U盘上引导ISO镜像

根据cch在上一篇《新电脑的规格配置》一文中的留言提示,我下载了Hitachi Feature Tool工具,打算将我的WD640AAKS也调节为高性能模式。不过面临的直接问题是这个工具是以ISO格式的光盘镜像提供,其中封装的是IBM DOS和FTOOL工具。而我没有刻录光驱,也无法安装DOS系统(全部分区都被我格式化为NTFS了),想要引导这个镜像还真有点麻烦。

正好一直以来都想解决U盘引导多重ISO镜像的难题,于是便去网上找答案,最后让我发现了GRUB4DOS这个非常强大的系统引导辅助工具。它的文档写的很详细,覆盖了各种场景下的安装方法。即使像我这样从未玩过Vista/Win2008中BCD引导系统的新手,也能按部就班的顺利装上GRUB4DOS。其实步骤说起来也很简单:(仅适用于Vista/Win2008)

继续阅读借助GRUB4DOS在U盘上引导ISO镜像

深入探究MODVERSIONS的实现原理

最近在分析Linux内核模块与内核之间的版本耦合关系时,在实验中发现了一些有趣的结果:在同一Linux版本基础上经过不同裁剪的内核,甚至是在跨度不大的两个内核版本间,内核模块可以自由互用,而且内核本身似乎具备检查这种兼容性的能力。这与之前所知的情况是不同的。在我久远的记忆中,Linux的是依靠内核模块构建时自动产生的“vermagic”标识检查是否与当前内核版本一致的,如果不一致则拒绝加载。除非在insmod/modprobe时指定参数强制忽略vermagic,但这样做的代价是如果使用错误版本的内核模块就可能导致内核崩溃。

继续阅读深入探究MODVERSIONS的实现原理

【Linux小技巧】秘密追踪——谁用了我的大宝?>v

如果宿舍里就你买了一瓶大宝,而且用了之后效果还挺不错。隔不久,你就发现最近这瓶大宝似乎用的有点快了,敢情是哪个哥们儿想买之前先试用一下?不巧的是,你恰好非常好奇这哥们儿是谁,想要搞一次秘密追踪。啥?指纹鉴别?噢,请原谅我没有那么专业的器材…… 不过土办法、馊主意我们还是有的:只要往大宝里掺和一点稀释过的辣椒水,隔天就等着找猴子屁股吧。^_+

扯太远了,其实本篇是想和大家分享一个在Linux下利用辣椒水的思路实现追踪程序被调用情况的小技巧。因为前段时间在分析Linux中各种内核模块被加载的方式、时间和源头。为此,我写了一个小小的Shell脚本:

继续阅读【Linux小技巧】秘密追踪——谁用了我的大宝?>v

在Linux中实现虚桩式内核模块

最近在把以前做的一个驱动程序在线加载技术移植到SuSE的AutoYaST安装系统中时遇到了一点小麻烦。AutoYaST采用SuSE自己编写的Linuxrc作为其初期引导部分,有别于大部分常规的initrd引导部分,Linuxrc是直接用C语言编写的,而且几乎没有提供什么扩充的灵活性。如此一来,就无法像以往移植到其它环境中那样单纯修改引导脚本就可以搞定。虽说直接修改Linuxrc的源码也可以达到这个目的,但这样就增加了后期维护的复杂度。唉,还真是个头疼的问题……

仔细分析了一下AutoYaST的设计,发现它至少还是允许增补驱动程序的,但仅仅支持最简单的用配置文件写死的insmod方式…… 好吧,只要还给了这个勉强算得上可扩充的途径,我一样能把驱动在线加载模块集成进来。由于只能固定调用某个驱动,所以必须从内核模块下手。把现有程序改造成内核模块显然是不现实的,好在Linux内核中还提供了这样一个调用用户态程序的接口:call_usermodehelper(),你可以在kmod.h中找到它。功能很简单,调用一个用户态程序,并且可以选择是否阻塞直到它执行完成。

继续阅读在Linux中实现虚桩式内核模块

Linux下可以替换运行中的程序么?

今天被朋友问及“Linux下可以替换运行中的程序么?”,以前依稀记得Linux下是可以的(而Windows就不让),于是随口答道“OK”。结果朋友发来一个执行结果:(test正在运行中)

# cp test2 test
cp: cannot create regular file `test': Text file busy

看起来是程序被占用,无法覆盖。于是自己又再做了几个实验:

(1)先rm删除正在运行的test,然后cp test2 test就没有错误了。
(2)先mv改名正在运行的test,然后cp test2 test也没有问题。

继续阅读Linux下可以替换运行中的程序么?

运用GDB进行UT/ST的小经验

用惯了VC/Eclipse图形化的程序调试界面后,要适应GDB这种“回归淳朴”的命令行方式,确实需要一些时间。不过当你熟悉了GDB的高级用法后,才能真正体会到程序调试那种随心所欲,尽在掌握的酣畅感。

最近一段时间用GDB作代码测试,积累了一些小小经验,希望对尚未熟悉GDB的朋友有所帮助。(本文以C语言为例说明相应的用法,其它语言可参考GDB帮助文档中对其的支持说明)

业界比较专业的UT(Unit Test,单元测试)工具很多,所以通常不必直接用GDB进行UT,但使用这些专业工具前往往需要花大力气配置环境,编译驱动等,若对于一个小项目,则比直接使用GDB作UT麻烦多了。所以,小项目往往可以借助GDB进行UT/ST合一的测试,效率提升是非常可观的。

ST(System Test,系统测试)一般需要尽可能的逼近实际运行环境,所以应尽量避免或减少对代码有直接介入的工具。这时以GDB作为测试/调试手段就非常实用了。

继续阅读运用GDB进行UT/ST的小经验

借尸招魂——WinXP 12小时抢救实录

前两天实在被nForce3的驱动程序折腾疯了,甚至于走火入魔到自己mod起驱动程序来。话说这nVidia发布的早期驱动确实bug不少,手术过程中一不留神就会遭致“机瘫Win亡”的惨剧。昨晚,我的新WinXP第一次面临了安装以来最严酷的生死考验。

4月7日·晚9时许

不记得在哪一次修改完驱动组合后,重启WinXP,硬盘哗啦啦的一路高歌猛进,可输入输出设备却似乎跟不上节奏了。显示器首先鸣警:无信号输入,紧接着发现键盘也不听使唤了,Caps Lock/Num Lock尽皆失灵。初看起来不过是又一次寻常的mod失败,Reset并启动安全模式,收拾残局准备下一次尝试。不过,事情似乎没那么简单,这一次罢工的影响远超出我的预料,Safe Mode倒是能进入,也见到了“和蔼”的欢迎提示,不过该死的键盘和鼠标依旧失灵……

晚10时

安全模式的失效意味着WinXP第一道应急防线的彻底沦陷,看来不得不放弃前沿阵地而启用灾难救援预案了。首先想到的是“故障恢复控制台”,Oh, my god! 上次重装WinXP后竟然把这项重要的安全工程给遗漏了,而现在甚至连一张WinXP的安装光盘都找不到(估计是搬家时给漏掉了……)。无奈,只得放弃ERC,出动老将VFloppy for NTFS——这位曾数次助我化险为夷的显赫功臣。正所谓祸不单行,VFloppy竟然向我回禀“NTFS分区挂载失败……”,Shit! 没想到向来无往不利的VFloppy偏偏这个时候失灵了。

就在快要陷入无助之境时,突然忆起上次重装WinXP的时候顺带在第二硬盘上兴建了一个“Area 51”:一套Ghost版的WinXP,平日一直封存起来,只待灾难来临时成为酝酿最后反击的基地。于是,我用颤抖的双手启动了“Area 51”的硬盘引导,片刻之后,我终于不得不承认,现实就是现实,远没有科幻电影中的情节那般激动人心和荡气回肠,因为我看到的只有一个孤冷的提示:“NTLDR missing…”(弦外音:后备营救系统就好比灭火设施,万万不可放松日常检查!X< )

晚10时30分

很久没有如此背水一战了,在诸般手段尽皆失灵后,我从光盘包里找到了最后的一条救命稻草 —— 一张友人相赠尚未开封的“Ubuntu Linux 64-bit”光盘。用这张“Linux Live CD”引导系统后,终于见到了久违的Linux Desktop。有了这个完整的Linux平台,我总算可以放手实施救援行动了!

晚10时50分

检查了一下WinXP的系统文件夹和启动日志,初步判断可能是PCI总线驱动程序的问题,需要替换回官方的版本。但开始着手替换文件时才发现原来Ubuntu自带的NTFS支持是“只读”的,不得以又去网上找了一个支持完全读写功能的ntfs-3g。因为所用Linux是64bit的缘故,没有现成的安装包可用,只好自己手动编译。折腾完这一堆麻烦事儿后,已经累的不行了。

晚12时30分

替换了驱动程序文件,依旧没有任何起色。看来今天是解决不了问题了,索性直接关掉电脑睡觉去,说不定早上一觉醒来,发现XP还是那个可爱的XP,眼下的一切不过是一场噩梦罢了~(非典型Matrix臆想症……)

4月8日·上午8时15分

被闹铃唤醒后,打开电脑,更衣,洗漱。回头面对屏幕时才想起我的WinXP尚处于生死未卜的境地,原来真是不只是一场噩梦……

既然排除了驱动文件损坏的可能性,那么问题的焦点自然而然的锁定在注册表,看来多半是在安装驱动程序过程中的异常重启对注册表造成了严重创伤。好在我常备有ERUNT……等等,还是先虔诚的祈祷一番再启用它吧,免得又遭遇如VFloppy和“Area 51”同样的厄运。斋戒祝祷完毕后,打开ERUNT,哗,好家伙,竟然悄无声息的吞掉了我1个多G的C盘空间,难怪前些日子发觉C盘剩余空间日渐苍白呢。暂且抛开怨念,眼下毕竟还指望着它救命那。

试着用前一天上午的备份恢复了注册表的System分支(注:硬件驱动相关的问题可以不必恢复Software分支,以减少对系统的负面影响),重启,切换回WinXP引导。数分钟的沉闷之后,终于再一次见到了我那纷乱不堪的桌面。这种感觉,正如古人所云:一日不见,如隔三秋……

上午9时左右

重新安装了Remix 11.10的nForce驱动程序后,WinXP终于又回复了往昔的宁静与安详。全然看不出刚刚所经历的这一番生死劫难。

God forgive me~ 再也不玩危险的mod了……

WinXP crashed again, now live with Linux…

After some crazy modding of nforce drivers, my WinXP crashed fatally. Even the safe mode is not available…

I’ve been seeking for a rescue CD of WinXP, but with no luck. Instead, I found a Ubuntu Linux CD for 64-bit system which is received from my friend. So, I’m now getting attached to Linux~

It’s really not that comfortable for me to live with Linux, even Ubuntu gives the perfect experience on installation and user interface. First, I had to find a Chinese input method in order to end up with this messy English writing… )-X

Linux启动时间的极限优化

在上次完成嵌入式应用的Linux裁减后,Linux的启动时间仍需要 7s 左右,虽然勉强可以接受,但仍然没有达到我个人所追求的目标——2s 以内。况且,在实际的商用环境中,设备可靠性的要求可是“5个9”(99.999%,即OOS时间低于5分钟/年),这就意味着每减少一秒钟Linux启动(设备复位)时间,对可靠性都是一个明显的提升。

言归正传,如何着手对Linux的启动时间进行优化呢?

继续阅读Linux启动时间的极限优化

从POST到Linux的一体化远程控制

  在上次初尝Remote KVM甜头的基础上,本着充分挖掘其实用价值的考虑,最近对这一技术又进行了深入的研究和尝试。

  在网上查阅了各种相关资料后,才知道上次所实现的串口终端功能的正式学名叫做“SREDIR (Serial Redirection,串口重定向)”,它是AMI在其最新的AMI BIOS 8系列中引入的一项新技术,可以看作是一个简化版的“Remote KVM”。主要实现了对字符界面显示输出及键盘输入的重定向到串口,它对于服务器群或者Blade Server来说是非常实用的功能。

  下面就让我来介绍一下如何利用这项技术实现从POST到Linux的全程串口控制。

继续阅读从POST到Linux的一体化远程控制