BIOS: 系统Reset的方法和差异性

BIOS有三种RESET 的方法: KBC RESET、PORT92、0xCF9,方法如下:

1. KBC Reset
对 KBC(0x60/0x64 port) 写入 0xFE 指令。

2. port 0xCF9 Reset
对 0xCF9 port 写入 0x06、0x0E 指令 (在chipset spec会定义其 Bit 設起時,Reset不同之處).
Bit 1 决定是否作 Reset.
Bit 2 决定 software reset OR hardware reset
Bit 3 决定是否 Reset S3、S4、S5 state
所以 0x06 和0 x0E 都是hardware reset.

# cat /home/devel/working/reset.py (example to reboot system) By (Amos Kong)
import commands

def outb(data, port):
    print "outb(0x%x, 0x%x)" % (port, data)
    outb_cmd = ("echo -e '\%s' | dd of=/dev/port seek=%d bs=1 count=1" %
                (oct(data), port))
    print outb_cmd
    commands.getoutput(outb_cmd)

outb(0x06, 0xcf9)
outb(0x0E, 0xcf9)

3. port 0x92 (System Control Port A) Reset
对 0x92 port 的Bit 0 设置1,发出 INIT# 对 16 PCI clocks,CPU进行初始化

以上(1)和(3)都是做Software Reset,(2)可以做Software Reset、Hardware Reset、Global Reset. Global Reset是针对 power loss 的情況下做的完整的chipset Reset (发生情況: A global reset will occur after 4 seconds if an acknowledge from the processor is not received.)

* 补充: software reset、hardware reset、warm boot、cold boot的定做和定义
+ Software Reset: activating INIT# for 16 PCI clocks.(只对CPU做Reset)
+ Hardware Reset: hardware reset by activating PLTRST# and SUS_STAT# active for a minimum of about 1 milliseconds. (对CPU和大部分的Chipset做Reset)
+ Warm Boot: 在UEFI BIOS中是下 Software Reset的动作。在DOS按Ctrl+ALT+DEL就是warm boot.
+ Cold Boot: 在ACPI spec可以查到cold boot定义为从 G3(mechanical off)、S5(G2)、S4 开机都算是cold boot.

人体24小时

1点:大部分人已经进入梦乡,是由浅睡期向中深度睡眠期过渡的阶段,人很容易醒来。此时,人特别容易感到疾病的存在。
2点:大部分器官基本停止工作,肝脏的工作却异常紧张,忙于解毒和排除毒素,为人体进行清洗工作。
3点:体力几乎完全丧失,血压、脉搏和呼吸都处于最弱状态。
4点:呼吸仍然很弱,大脑的供血量最少,机体血液循环也处于最微弱的状态。但此时听力很敏锐,极易被微小的动静所惊醒,早醒的人通常会在此时醒来。
5点:肾上腺皮质激素开始分泌,如果此时起床就能很快进入精神饱满状态。
6点:血压上升,心跳加快,即使仍在睡眠中,但机体已经苏醒。
7点:人体免疫力特别强。
8点:身体完全结束休息状态。

>>>>>>>>>>>>>>>>>>>>>>

9点:大脑兴奋性升高,病痛减弱,心脏效率处于高峰期。
10点:注意力和记忆力最好,工作效率最高,人的积极性上升,人体处于最佳状态。
11点:神经系统和循环系统状态协调,生理、心理很容易协调。
12点:人的全部精力均旺盛。
13点:肝脏处于休息期。全身第一阶段的兴奋期已过,会感觉疲劳,要适当休息。
14点:精力减退。是一天中的第二个低潮阶段,反应迟缓。
15点:重新改善。感觉器官此时尤其灵敏,特别是嗅觉和味觉。性格外向的青年人创造力旺盛,性格内向者则仍处于低潮时刻。
16点:血糖含量升高。有人把这一过程称为“饭后糖尿病”,这种现象虽然不是病态,但却标志着衰退即将开始。
17点:各器官的效率仍然比较高。
18点:对肉体疼痛的感觉减弱,想多运动的愿望上升,心理兴奋感渐渐下降。 19点:血压上升,心理稳定性降到最低点,很容易激动,常会为一些小事而争吵。

>>>>>>>>>>>>>>>>>>>>>>

20点:体重是全天最重的时候,反应非常敏捷,司机处于最佳状态,几乎不会出事故。
21点:精神状态一般,但记忆力很好,可在此时记忆白天记不住的课文和大段台词。
22点:白细胞含量最高,数量增加一倍,体温开始下降。
23点:各种组织、器官效率降低,但细胞修复工作开始。
0点:人体效率处于低点,非常容易入睡。

from:http://www.zeuux.com/share/content/3815/

SeaBIOS study (1)

SeaBIOS [1] 是 x86 结构下的一种 BIOS 的开源实现,可以完成类似 coreboot [2] 初始化硬件后payload的工作,实现一些启动逻辑。

CPU初始化后,放在EIP中执行的第一条指令地址为0xFFFFFFF0,这是intel CPU的一个hack (an inelegant but effective solution to a computing problem),叫做重置向量(reset_vector)。内存0xFFFFFFF0~0xFFFFFFFF(4G最后边的16bytes)的指令,会将CPU调转到系统BIOS的入口地址0xF0000。系统BIOS被预加载到(0xF0000~0xFFFFF, 960k~1M)。

SeaBIOS/src/ 下只有两个汇编代码:
>>> seabios/src/entryfuncs.S : 这里面是从汇编调用C语言函数的宏定义
>>> seabios/src/romlayout.S :
BIOS 起始函数入口“entry_post”,POST代表 Power-on test-self(加电自检)。 文件头部使用DECLFUNC指令定义了几个函数,有中断处理、 32/16big/16模式转换、resume、PMM(处理器电源管理)、PnP(热插拔)、APM(高级电源管理)、PCI-BIOS、BIOS32、ELF等入口函数。entry_post中,对依次通过一些调转函数或中断,对各类设备进行设置。
“jmp entry_19” 调转到 entry_19 函数,再通过entryfuncs.S 中的宏定义,实际调用src/boot.c中的handle_19(),用于加载启动操作系统。
entry_18/handle_18()则用来处理启动(INT 19)失败。

(引:http://en.wikipedia.org/wiki/BIOS_interrupt_call)
+ 18h Execute Cassette BASIC: True IBM computers contain BASIC in the ROM to be interpreted and executed by this routine in the event of a boot failure (called by the BIOS)
+ 19h After POST this interrupt is used by BIOS to load the operating system.

Qemu[4]解析启动参数(例如:“-boot order=ndc,menu=on,boot-timeout=1000 ..”),并通过rom中的fw_cfg文件向BIOS传递启动参数,BIOS则通过读取这些文件应用参数。但是SeaBios不只是被Qemu一个项目使用,所以启动参数的默认、启动策略有差异。
关于BIOS启动有一个规范(bios boot specification) [5] http://www.scs.stanford.edu/nyu/04fa/lab/specsbbs101.pdf,考虑兼容/支持很多硬件,比较复杂,正在读规范中…

Bios为系统ACPI提供DSDT(Differentiated System Description Table,差异系统描述表),这样ACPI就能通过统一的接口对不同类型的设备进行初始化设置,描述使用的是ASL汇编语言,编译后的16进制文件,可以被标准系统使用。比如热插拔功能,Bios再DSDT表中描述PCI设备(如网卡),定义电源管理的回调函数,_EJ0方法用于移除一个设备。相应的在操作系统内部,有PCI驱动处理PCI设备的热插拔 (code: linux/drivers/pci/hotplug*),从固定IO Port探测PCI设备、注册初始化、管理,到最后的销毁。

其他有意思的东西:
SMBios(System Management BIOS): 主板/操作系统厂商显示产品管理信息所需遵循的统一规范
DMI(Desktop Management Interface): 帮助收集电脑系统信息的管理系统

把好几样东西混在了一起,不过基本都是围绕SeaBios的。SeaBios似乎没什么文档,coreboot文档比较齐全。但是有代码和邮件列表在,这就是最好的文档。

[1] http://www.seabios.org
[2] http://www.coreboot.org
[3] http://en.wikipedia.org/wiki/BIOS_interrupt_call
[4] http://www.qemu.org
[5] http://www.scs.stanford.edu/nyu/04fa/lab/specsbbs101.pdf

Mutt email 程序使用入门

(用了thunderbird一年,好多mutt特性都忘了,mutt还是利器呀!)

From: http://blog.163.com/peigen_peigen/blog/static/27047802007311102914457/

“All mail clients suck. This one just sucks less.” -me, circa 1995

你也许听说过这句话?这不是危言耸听,我还没有遇到一个令我满意的 email 程序,直到我遇到 mutt。它不是图形界面的,但是它非常强大和方便。我曾经把它忽略,但是后来我发现其它 email 程序都有某种我不喜欢的怪毛病。最后我选择了 Mutt。

有人说 Gnus 才是最好的 email 客户端,可是 Gnus 要达到 Mutt 这种效果和方便程度,你需要付出太多代价。所以我宁愿使用 Mutt 调用 Emacs 来编辑 email 而不愿把 Gnus 配置来处理 email.

Mutt 的特点    Continue reading “Mutt email 程序使用入门”

一九四二(1924)


今天去看了电影《1942》,之前听说这个片子看着比较压抑,我自认为承受能力还行,但还是被其中的轰炸、屠杀等场面深深的震撼!本来打算去看《王的盛宴》,结果今天去的时候已经只有《1942》和《少年派》了。

现在闭上眼睛还能浮现出那些凄惨的轰炸场面,一个个因为天灾、战争逃荒异乡的灾民。有可恶的官商勾结、发国难财的奸商,也有生死相依的百姓,他们为了吃饭,不得不通过抢劫、卖儿女媳妇得到只能维持几天的口粮。人的第一生存需求不能得到满足,更别说道德层面的东西了。也有人把卖自己变成了唯一一条生路,被卖的人居然会吃的撑的蹲不下去,很多看似搞笑的情节,背后表现的却是无奈和悲凉。

日本人攻入河南灾区,国民政府犹豫是否放弃河南土地,灾情不能如实上报高层,赈灾粮食数量有限,还要面临军粮征收的巨大压力。而且在划分上存在很多实际矛盾,很多人对政府已经失去信心,被迫为提供食物的日本人劳动、甚至打仗。大批的灾民扒火车逃难到陕西等地,但在这艰难的时刻,各地都在自保,灾民无处逃生只能一天天等死。

一名有良知的美国记者,冒着生命危险到灾区考察、拍照,面前的一切让他惊呆了。经历数次敌人轰炸,还看到狼吃人肉的凄惨画面。最后把灾情通报到委员长处,并把灾区的事情通过报纸告知全世界。

一个传教士跟随灾民一路传递福音,自比摩西带领以色列人逃难。他为死去的人的做祈祷,受到重重挫折后他还来到教堂找神父倾诉自己对信仰的疑惑。神父说这些灾难是魔鬼主宰的,只有我们坚持信任上帝,我们才能走出灾难。在灾难面前除了依靠政府,更重要的是从信仰、亲情、友情、爱情等中寻求精神支柱。

300万人河南人在这次天灾人祸中死去,无论如何,我们需要正实历史!