2005-06
07

[b]第一天[/b]

首先确定自己的需求:Host为 i386, Linux; Target为 powerpc, Linux。本来想使用 i386/cygwin 作为host,但是觉得实在难度太大,反正我还有一台Linux主机闲置,就先做成 i386/Linux的host吧。

必不可少的自然是查找相关资料了。找来找去最后找到了这个网站:

 CrossGCC: http://www.billgatliff.com/

根据该网站的介绍,建立交叉编译环境需要四个步骤: [ol] [*]建立生成目标代码的binutils; [*]建立生成目标代码的 gcc 框架; [*]建立运行库; [*]生成最终的 gcc。 [/ol]

首先将必须的软件包下载。好在 binutils、gcc、glibc 都可以在 http://ftp.gnu.org/gnu/ 下找到,不算很麻烦。最新版本分别为 binutils-2.16、gcc-4.0.0、glibc-2.3.5。另外别忘了同时下载 glibc-linuxthreads。另外,编译 gcc 时需要用到内核头文件,所以顺便将最新的内核下载。最新版本为 2.6.11.11,位于 http://www.kernel.org/

然后在 Host 上建立工作目录,并在其中为最后生成的交叉编译工具建立目录:

 $ cd /home/charlee
 $ mkdir -p cross/tools

最后将下载的软件全部复制到 cross 目录中并解压缩。

 $ cd /home/charlee/cross
 $ tar xzvf binutils-2.16.tar.gz
 $ tar xzvf glibc-2.3.5.tar.gz
 $ tar xzvf glibc-linuxthreads-2.3.5.tar.gz
 $ tar xjvf gcc-4.0.0.tar.bz2
 $ tar xjvf linux-2.6.11.11.tar.bz2

然后设置环境变量以方便以后的工作:

 $ export TARGET=powerpc-kurobox-linux-gnu
 $ export PREFIX=/home/charlee/cross/tools

下面开始编译 binutils。binutils的说明文件中建议不要在binutils的源码目录中进行编译,所以我们为它建立编译目录,并进行配置和编译。

 $ cd /hoem/charlee/cross
 $ mkdir binutils-build
 $ cd binutils-build
 $ ../binutils-2.16/configure --target=$TARGET --prefix=$PREFIX
 $ make all install

安装结束之后,就可以在 /home/charlee/cross/tools 目录下看到开发工具了。



2005-06
03

NULL值不等于0,也不等于空,它表示该值不定。

任何运算(加减乘除、字符串连接等)的运算数中包括NULL值时,整个表达式的值即为NULL。使用单行函数对NULL值进行处理,得到的结果也为NULL(NVL等函数除外)。

但是NULL值的布尔运算结果并不一定是NULL,例外的情况为,FALSE AND NULL 结果为FALSE,TRUE OR NULL 结果为TRUE。这是因为在AND运算时只要有一个运算数为FALSE结果即为FALSE,即使另一个运算数为NULL,结果也是一定为FALSE的。反之OR运算中,只要有一个运算数为TRUE,结果即为TRUE。

分组函数均忽略NULL值。

排序时,NULL被看作是最大的值,即正序时NULL显示在最下方,逆序时NULL显示在最上方。

处理NULL值的函数有如下几个:

  • NVL(参数1, 参数2):如果参数1不为NULL,则返回参数1;如果参数1为NULL,则返回参数2
  • NVL2(参数1, 参数2, 参数3):如果参数1不为NULL,则返回参数2;如果参数1为NULL,则返回参数3。该函数的返回值的类型总是与参数2相同,当参数1为NULL时,Oracle会将参数3转换成参数2的数据类型之后再返回。
  • NULLIF(参数1, 参数2) :如果参数1等于参数2,则返回NULL;如果参数1不等于参数2,则返回参数1。
  • COALESCE(参数1, 参数2, ..., 参数n):返回参数1到参数n中第一个不为NULL的值。


2005-05
18

Linux 对 PCMCIA 设备提供了很好的支持。本文简单介绍了Linux下PCMCIA设备的安装方法。
阅读全文 »


2005-05
16

是否遇到过这样的问题,划分了 10G 的一个分区,挂接到 /home 下,可是随着时间的流逝,10G 的空间开始不够用了,需要把它扩充。假设要扩充到 12G,那么唯一的方法就是建立一个 12G 的新分区,然后将原来的 10G 分区中的数据全部移动到新分区中,再修改挂接配置。这样不仅麻烦而且浪费时间。

Linux 2.4 开始支持 LVM(Logical Volume Manager,逻辑卷管理器),通过 LVM,可以动态地改变“分区”(准确地说应当称之为卷)的大小,而不必担心数据移动的问题。LVM 的原理是,首先在硬盘上创建 PV(Physical Volume: 物理卷)。PV 可以创建在一个分区上,也可以创建在整个硬盘上,它由许多的 PE(Physical Extent)组成,每个 PE 的默认值为 4MB。之后将数个 PV 合在一起组成一个 VG(Volume Group: 卷组)。最后在 VG 中创建 LV(Logical Volume: 逻辑卷),它也由许多的 LE(Logical Extent)组成,LE 的大小与 PE 相同,并与 PE 一一对应。LV 就可以像普通的分区一样挂接在任何地方了。

阅读全文 »

2005-05
14

Linux 内核启动之后,启动的第一个进程就是 init 进程。该进程从 /etc/inittab 文件中读取配置,对系统进行一系列的初始化工作。下面我们来分析一下 /etc/inittab 文件的结构。

阅读全文 »

2005-05
14
  1. 系统启动时,首先由固化在硬件中的 BIOS 对硬件进行初始化,然后读取硬盘的 MBR 上的引导程序。
    BIOS: Basic Input/Ouput System,基本输入输出系统,固化在系统中的代码,用于完成最底层的硬件操作。
    MBR: Master Boot Record,主引导记录,位于第一块硬盘的第一个扇区,大小为512字节。其中前 446 字节为引导程序,之后的 64 字节为分区表,最后的两字节为结束标记。
  2. MBR 中的 stage1 执行,并跳转到硬盘上保存的引导程序的剩余部分(即stage2)。
    stage1stage2: MBR 中保存的为 Linux 引导程序( Linux Boot Loader) 的第一部分(即stage1)。由于一般的引导程序都很大,无法放到 MBR 的 446 字节中,因此只将一部分放到 MBR 中,这一部分称为 stage1,用于将引导程序的剩余部分(即stage2)读入并执行。
  3. stage2 执行,并读取 Linux 内核。
  4. 内核执行,对各种硬件进行检测和初始化。
  5. 内核启动 init 进程。
    init进程: 为 Linux 系统中启动的第一个进程,PID 为 1,其它所有的进程都为该进程的子进程。
  6. init 进程按照 /etc/inittab 的指示进行系统初始化工作。一般包括启动各种服务,并启动数个虚拟终端供用户登录。


2005-04
13

WinHTTP代理就是Windows Update所使用的代理。在局域网内使用代理服务器访问Internet的情况下,进行Windows Update就需要设置WinHTTP代理。

该代理设置需要使用如下命令:

proxycfg

用法:

   proxycfg -?  : 查看帮助信息
   proxycfg     : 查看当前 WinHTTP 代理设置
   proxycfg [-d] [-p <server-name> [<bypass-list>]]
       -d : 设置直接访问
       -p : 设置代理服务器和可选的旁路列表
   proxycfg -u  : 从当前用户的 Microsoft Internet Explorer
                  的手工设置导入代理设置(在 HKCU 中)


2005-04
12
  1. Murual Exclusion
    同一个资源不能被两个或两个以上进程同时使用。
  2. Hold and wait
    进程在持有某些资源的同时,请求使用其他的资源。
  3. No preemption
    不能抢占其他进程正在使用的资源。
  4. Circular Wait
    几个进程出现循环等待,即A等待B正在使用的资源,B等待C正在使用的资源,C等待A正在使用的资源等。


2005-03
31

刚刚装好Linux,启动X-Window,经常会发现屏幕并不是显示在显示器的正中央,总是稍稍偏一点。虽然我们可以通过调节显示器上的调节按钮来调整屏幕的位置,但是 X 提供了一个名为xvidtune的程序来专门用于调整屏幕位置。下面以 Fedora Core 3 为例讲解如何使用该程序来调整显示位置。

阅读全文 »

2005-03
30

如果两台计算机之间突然需要传送一个文件,而一时又没有什么好用的通讯工具,也来不及开服务器的时候,那么可以使用nc来传送文件。方法如下:

接收者:  $ nc -l -p 12345 > save_filename    ; 12345为1024-65535的任意端口号
发送者: $ nc <接收者ip> 12345 < send_file