Electronic Joint Business

Solution for E-Business

shell

EFI 编程简介

背景
可扩展固件接口( EFI—Extensible Firmware Interface)最早可追溯到 1998年的 Intel Boot Initiative(IBI) 项目。现在 EFI 规范主要由一些公司财团来开发和维护(包括 Intel 和 Microsoft),定义了为系统固件导出的一系列 API 和数据结构,可以被下列客户端所使用

  • 操作系统加载器(boot loader)
  • 操作系统
  • EFI 设备驱动
  • EFI 诊断和系统工具
  • EFI 命令解释器 (shells)

有关 EFI 及其起源的细节,你可以跟随开放固件(Open Firmware)的讨论,在 More Power to Firmware 一节中找到。此外,在 《Mac OS 内部》一书中有一整章专门研讨开放固件和 EFI。

EFI 被引入之后并没有马上得到普及。部分原因要归咎于安腾(Itanium)CPU 乏善可陈。此外,EFI 是一种颠覆性的解决方案,因此问世之后短期内缺乏吸引力。直到苹果为其基于 Intel 的 Macintosh 电脑采用了 EFI ,对 EFI 来说如同一剂强心剂。尤其是,尝试在 Intel CPU 的苹果机上运行非苹果操作系统(主要是 Windows)的狂热,使得人们对 EFI 产生了相当大的兴趣,对应的,是对 EFI 编程的兴趣。

多年来,Intel 已经发布了许多 EFI 相关的软件,包括源代码。Intel 平台的 EFI 创新框架(Intel® Platform Innovation Framework,简称框架)是 Intel 下一代固件架构。这段代码的核心块基于开源许可证,可以在 TianoCore.org 找到。 “Tiano” 是开发代号,而“Framework”是市场名称。 该框架是英特尔的 EFI 规范的实现。

标准 EFI 开发环境
要开始进行 UEFI 开发,你需要用到两个开发包: EFI 开发工具 (EDK ) 和 EFI 工具集 (EFI Toolkit) 。

>>> 阅读全文

 

, , ,

详解GNU Make (二) 高级用法

在上一篇文章中,我们了解了 makefile 的基本结构和一些常见用法,在这篇文章中我们会更深入地了解一些“高级用法”,这些用法在实际的例子中相当常见,可以极大地提高 makefile 的编写效率。

Makefile 里有什么?
Makefile 里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。

  • 显式规则。显式规则说明了如何生成一个或多的的目标文件。这是由 Makefile 的编写者显示地指出:要生成的文件、文件的依赖文件和生成命令。
  • 隐晦规则。由于 make 有自动推导的功能,所以隐晦规则可以让编写者比较简略地编写 Makefile,这是 make 所支持的。
  • 变量定义。在 Makefile 中我们可以定义一系列的变量,变量一般都是字符串,有点 C 语言中的宏,当 Makefile 被执行时,其中的变量都会被扩展到相应的引用位置上。
  • 文件指示。其包括了三个部分:一是在 Makefile 中引用另一个 Makefile,类似 C 语言中的 #include;二是指根据某些情况指定 Makefile 中的有效部分,类似 C 语言中的条件编译 #if ;三是定义多行的命令。有关这一部分的内容,我会在后续的部分中讲述。
  • 注释。Makefile 中只有行注释,和 UNIX 的 Shell 脚本一样,其注释是用“#”字符, 类似 C/C++ 中的“//”。如果要在 Makefile 中使用“#”字符,可以用反斜杆进行转义:“\#”。

最后要注意的是,在 Makefile 中的命令,必须要以 Tab 键开始。

Makefile 的文件名

默认的情况下,make 命令会在当前目录下按顺序找寻文件名为 “GNUmakefile”、“makefile”、“Makefile” 的文件,找到了就解释这个文件。在这三个文件名中,最好使用 “Makefile” 这个文件名,因为,这个文件名第一个字符为大写比较显目。最好不要用 “GNUmakefile”,这个文件是 GNU 的 make 识别的。有另外一些 make 只对全小写的 “makefile” 文件名敏感,但是基本上大多数的 make 都支持 “makefile” 和 “Makefile” 这两种默认文件名。

>>> 阅读全文

 

, , , , , ,

MongoDB 开发手册 (二) 连接串和mongo操作台概述

数据库连接
MongoDB是数据库服务器,它可以在前台或者后台运行并等待用户连接。因此,当你启动MongoDB的时候,你会看到这样的字句:

~/$ ./mongod
#
# some logging output
#
Tue Mar  9 11:15:43 waiting for connections on port 27017
Tue Mar  9 11:15:43 web admin interface listening on port 28017

这时屏幕会暂停输出,但并未死机,它会在27017端口上侦听用户的连接。一旦用户连接上数据库并开始发送命令,它又会再次记录它所做的一切。任何一款MongoDB驱动或者Mongo操作台都可以用来连接数据库。

不能通过在浏览器输入”http://localhost:27017″来连接MongoDB,数据库不能通过27017端口上的HTTP协议来存取。

标准连接串格式
这儿介绍的URI schema不一定为所有的驱动程序所支持,你可以参考相关的驱动程序文档以获知该驱动支持多少种标准连接URI。所有的驱动都支持某种指定连接格式的替代方式,如果该格式不被支持。

mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/database]
  • mongodb://是必选的前缀,表明该字串是标准的连接格式
  • username:password@是可选项,如果指定了该项,驱动程序在连接数据库服务器之后,尝试用它连接数据库。
  • host1是URI中唯一的必选项,表明所连接的服务器地址。
  • :portX是可选项,未指定的话默认为27017。
  • /database是要登录的数据库名称,只有指定了username:password@之后,该项才有意义,如果未指定,默认将连接到”admin”数据库。

你可以在URI中指定多个主机连以便连接到同步复制对或同步复制集(replica pairs/sets). 下面是一些例子:

>>> 阅读全文

 

, , , ,