西格玛向量™

分类存档: 老西常谈

【收藏】Microsoft Office Word 2007 切换窗口后鼠标无法编辑的解决办法

Author:西玛哒   IN:IT悟语, 经典搜藏, 老西常谈       评论: 0

Microsoft Office Word 2007 切换窗口后鼠标无法编辑的解决办法 (PowerDesigner12惹得祸) – barney’s tech blog – 博客园

最近一直为Office Word 2007的一个奇怪的问题而困挠,急着写文档,郁闷得我都把Word 2007卸载掉了,我不能忍受这个一会 昨天到现在 终于解决 !问题描述如下:

打开word 2007后编辑文件,然后切换到其它窗口,再切换回来,就会出现如下令人郁闷的情况:

1.鼠标无法使用,光标不会跟随到鼠标左键点击的位置;

2.鼠标右键无法使用,点击右键后不会出现相应编辑菜单

3.无法拖动鼠标选择文本

4.word属性设置菜单只有第一个可用

5.上面的快捷工具菜单栏操作无影响

6.键盘操作无影响

Google了半天,如下的几个所谓的解决方法,一个有效的:

打开word的“开始菜单”在最下端的”管理”右侧的下拉框中选择”COM加载项”,然后点击”转到按钮”,就会出现你的word的COM加载项列表,取消了(把前面的勾去掉即可,不用删除)所有不必要的加载项。

^_^取消了所有不必要的加载项后重新打开word,问题解决。

P.S.

经过测试,导致该问题的加载项是PowerDesigner12的加载项,所以只要取消这一个加载项就可以了。

这也说明了为什么网上反映这个问题的人较少的原因:同时安装了Word和PowerDesinger的人不是很多,没有安装PowerDesigner的人当然就没有这个问题了。

最后,我给出详细的解决办法:

方法一(推荐):

打 开Word,点击左上角的圆形按钮,选择”Word选项”,然后选择”加载项”,接着在最下端的”管理”右侧的下拉框中选择”COM加载项”,然后点击” 转到按钮”,最后在弹出的”COM加载项”管理窗口中取消”PowerDesigner12…..”加载项前面的小勾即可

方法二(不推荐):

删除相关注册表键值:(相当于在方法一种提到的COM加载项管理窗口中PowerDesigner12的加载项删除)

删除如下注册表项:

HKEY_CURRENT_USERSoftwareMicrosoftOfficeWordAddinsWordToRQM12.Connect

 【收藏】Microsoft Office Word 2007 切换窗口后鼠标无法编辑的解决办法
12-09
2009

链接法转移具体操作步骤

Author:西玛哒   IN:经典搜藏, 老西常谈, 软件       评论: 0

具体操作步骤

我的帐户名是Tenkin,vista安装在F盘,我要把”F:Userstenkin”变成链接文件夹,而我真正的用户文件夹转移到”E:tenkin”。

第一步:注销,用administrator帐户登录(没有启用administrator帐户的打开计算机管理-用户和组-administrator-去掉已停用复选框);

第二步:把”F:Userstenkin”移动到”E:tenkin”;

第三步:运行cmd,输入 mklink “F:Userstenkin” “E:tenkin” /j(注意:如果路径中包含空格,请务必把路径加上引号,如果没有空格,引号可省略)得到下图提示,表示链接成功:

C9B74A302C1DE562F82A52DB832F4A8A 链接法转移具体操作步骤

第四步:赋予移动后的用户文件夹完全控制权(关于如何设置权限,这里不再说明,相信大家都知道如何设置):

7F78C69BBA9FA3C886D16DC6CB7C07B1 链接法转移具体操作步骤

重新登录到你原来的帐户,发现你的用户文件夹下多了一个快捷方式的图标,链接成功。

12-08
2009

【收藏】win7/vista“下设置无线临时网络”实现E52和笔记本无线共享上网

Author:西玛哒   IN:经典搜藏, 网络, 老西常谈, 软件       评论: 0

一生第一个帖子:win7/vista“下设置无线临时网络”实现E52和笔记本无线共享上网 – 诺基亚E52论坛 – 塞班智能手机论坛-Symbian系统智能手机中文论坛

条件:笔记本必须有无线网卡,无线网卡必须打开
一.电脑设置
1.选择电脑“网络”,在“网络与共享中心”对话框左侧任务栏中选择“管理无线网络”。
2.在“管理无线网络”弹出对话框中选择“添加”→”创建临时网络”→“下一步”,弹出对话框后:“网络名”随便填写一个即可(我写了pass),“安全类型”可选择开放式,其他的就不用选择,直接按“下一步”→启用internet连接共享。
好了,现在电脑已经设置好,下一步设置手机。
二.手机设置
1:点击设置,进入连接功能-选择承载方式-增加新接入点,这时候让他“自动搜索可用接入点”,选择无线局域网,可以看到步骤2里设置的接入点(电脑设置步骤2的图上的接入点为“pass”)。选择这个“pass”。接下来会让你“选择承载方式”,选“互联网”即可。

3:接下来在“网络承载方式”可以看到“pass”,点击进入设置菜单。
4:进入“wlan安全设置”,如果你选择的是开放型网络,那就不用设置。
5:点击“选项”–“高级设置”—“IPv4设置”(这是最关键的一步,必须按要求完成)
手机IP地址:192.168.137.2
子网掩码:255.255.255.255.0
默认网关:192.168.137.1
dns地址:192.168.137.1
(192.168.137.1这个地址就是你的无线网卡的ip地址,我不知道为什么win7自动分配了这个地址。设置手机ip前最好看看无线网卡的地址,只要同一网段即可。)

11-30
2009

来点儿硬的——从编号看硬件

Author:西玛哒   IN:老西常谈   标签: , ,    评论: 0

#写在前面:

好久没有去电子城,最近去了一趟,感觉里面吆喝的各种型号样式越来越听不明白了,自从手电,手机,笔记本这三大样东西全了之后(~~惨了点儿啊)即从个人
欲望的角度讲,已经对电脑配件没什么大兴趣了,顶多只是看个新鲜,但是从来不做深入研究。然而最近发现退步实在是太大了,越来越显得自己out了,这可如
何是好,赶快补补课吧……
写写东西 算是笔记,有误之处望飘过的各位神空投些个意见来 万幸之至。
——————————————————————————————–
西格玛向量   09 10 07
——————————————————————————————–
#CPU篇
废话不说 有图有真相:

 来点儿硬的——从编号看硬件


就是现在传说中炙手可热的Intel扣肉I7芯片
,看起来与我们一直见过的芯片也没什么大区别,同样是四四方方一个芯片,它为什么强大呢?这个当然是技术做工的问题。但是,一定它有一些特性是很强的,从
硬件的编号、标志等等方面,就一定能够找出这个芯片的特征来。王婆卖瓜还要自夸一番,何况他因特尔。
书归正文,芯片上的型号我们先写下来看看:
//——————–
INTEL M C 08 i7-920
INTEL R CORE i7
SLBEJ COSTA RICA
2.66GHZ/8M/4.80/08
3844A8 86
//——————–
而写在包装盒上的基本上也就是这些东西 可能还有一些其他参数,但是 这些信息就足以判断一个芯片的内涵了。
大部分的芯片上编号和标志内容大体上差不多,Intel和AMD分别有他们自己的一系列命名规则,这里先以Intel为例进行介绍:
INTEL
CPU厂商的名称 (C:copyright 版权 ) 因特尔都认识吧
08 i7于08年诞生
Core i7
TM 表示商标保护
Core 很多人称之为扣肉 是Intel芯片的众多系列中的一个 现在称王称霸的Intel芯片也是从386,486这样祖宗级的体系混过来的。由于芯片的历史问题错综复杂,也不在我复习范围内,这里从维基百科上偷下来一张图片,讲的已经很清晰了。

年份 系列
80X86 Pentium Pentium II Pentium III Pentium 4 Intel Core 2 Itanium not X86
(X64)
1971 4004
1972 8008
1974 4040
8080
1976 8085
1978 8086
1979 8088
1981 iAPX 432
1982 80186
80188
80286
1985 80386DX
1988 80386SX i960
1989 80376
80486DX
i860
1990 80386SL
1991 80486SX
1992 80486DX2
80486SL
1993 Pentium
1994 i386EX
80486DX4
1995 Pentium Pro
1997 Pentium MMX Pentium II
1998 Celeron
Pentium II Xeon
1999 Pentium III
Pentium III Xeon
2000 Celeron Pentium 4 XScale
2001 Xeon Itanium
2002 Itanium 2
2003 Pentium M
Celeron M
Pentium 4 Extreme Edition
2004 Pentium 4 Prescott
Intel 64
2005 Pentium D
Pentium Extreme Edition
2006 Intel Core Duo
Intel Core Solo
Intel Core 2 Duo
Intel Core 2 Extreme
2007 Intel Core 2 Quad
2008 Atom
2009 Intel Core i7

每一个系列名称都未必一定有什么对应的意义Core系的 i7除了谐音成“爱妻”之外也真的没啥特征,但是Duo(双核) ,Extreme(至尊)就与这个系列的定位很吻合。因此 芯片不可貌相~~~
每一次系列更替,都会有一批新的技术出现 比如迅驰 多线程 双核 45nm工艺等等…….
同系列不同型号 在工艺和技术上也会有差别 在加之主频等 型号差别就更大了 因此 会有 来点儿硬的——从编号看硬件 来点儿硬的——从编号看硬件芯片型号
i7—920
这里以i7-920为例 i7是产品系列号 920是型号

型號 代號 市場區隔 製程 核心(線程數) 速度 價格(美元) 快取 記憶體控制器 匯流排介面 TDP 插槽 出品日期
975
Extreme Edition
Bloomfield 桌上型(極致) 45奈米 4 (8) 3.33 GHz(x25) $999 L2:256 KB x4
L3:共用8MB
三通道DDR3
800/1066 MHz
1x 6.4 GT/s QuickPath 130W LGA 1366 2009年5月
965
Extreme Edition
3.2 GHz(x24) 2008年11月
950 桌上型(效能) 3.06 GHz(x23) $562 1x 4.8 GT/s QuickPath 2009年5月
940 2.93 GHz(x22) 2008年11月
920 桌上型(主流) 2.66 GHz(x20) $284 2008年11月

可以看出 型号按照从低端到高级增长,低端用于覆盖主流 高端用于占领游戏玩家等高性能要求用户的电脑。每一个型号都有自己独特的定位。每一个型号也对应了这款芯片的性能配置。
型号的编码规则根据些列是多变的,系列间没什么特别清晰地规律。但是同系列内一般有相似的命名规则:
 来点儿硬的——从编号看硬件 9655493 来点儿硬的——从编号看硬件
以core2 系列为例 这里:
T系列的 TDP 为 31W,低电压版 L 系列为 15W,超低电压版 U 系列为 9W 不同的功耗用途、性能也不一样。
对于这些系列型号的的详细信息,请参考维基百科中提供的详细资料 里面应有尽有 已经很详细了。
SLBEJ COSTA RICA
这一项是原产地  是在COSTA RICA (哥斯达黎加)生产的芯片,你还会经常看到MALAY(马来西亚),China…..。 基本上芯片上都会忠实的写出芯片的产地。我想 Fab68 投产之后会有很多Made in China 出现在芯片上吧。
SLBEJ 是Intel的S-Spec代码,CPU和S-Spec编码是一一对应的关系。对于大多数人而言S-Spec的含义无法直接看出的,也没有必要深入地研究各字符所代表的参数规格,但它是选择Intel处理器的最有用工具,通过此编码到Intel的官方网站上查询。
http://processorfinder.intel. com/scripts/default.asp
各种参数:
2.66GHZ/8M/4.80/08
2.66GHZ : 主频2.66GHz
8M
8M二级缓存容量
4.80 QPI快速通道互联速度为4.8GT/s
08大概是生产年份吧
其实 常见的参数还有一些 比如:
“533A/128/66/1.5V”代表这款CPU是533A,128K二级缓存,66外频,核心电压是1.5V。
这些也仅仅是作为参考 要真正的认识一个CPU最好还是去看官方的Data 然后与给你的芯片的参数比对 以防js偷梁换柱。
序列号:CPU的全球身份证
3844A8 86+ S-Spec号
SLBEJ) 这样一批中的一个唯一表示了一枚芯片
命名也有一定得规则 举个例子就可以触类旁通:
例如 赛扬一个芯片编号:“Q013A307-0389
SL46S”  其中“Q”代表的是产地,后面的013代表的是生产的年份和周次,这里面的0代表是2000年(依此类推1,就是2001年……)13代表第
13周。接下来的那段307-0389是CPU的内部序列号,最后的“SL46S”代表的是CPU的制作工艺,其中利用cC0制作工艺的CPU超频能力明显强于cB0制作工艺的CPU,其中大部
分cC0制作工艺的CPU采用SL4作为其编号。而上面i7的S—Spec号表示它使用了更加先进的D0步进。

CPU部分也大概如此了 AMD的与Intel的原理上一样,就在于信息的获取了,其实 ,知道了型号,所有的吆喝也不过就是瞎喊,真材实料的性能才是我们需要的,因此 别忘了百度和google啊。

第一部分止^

#END

10-08
2009

U盘中打造属于自己的Linux (Final) :switch_root转移乾坤

Author:西玛哒   IN:IT悟语, Linux, 老西常谈   标签:    评论: 0

##### 接上文

   我们的U盘内设置已经成型 如果要让系统的东西能够存出来 则需要修改init文件,使我们的U盘挂载到U盘系统的某个文件夹下 用于存储文件:

  在上次修改之后 我们执行mdev 后等待10s 此时所有的硬件信息都被存储到了/dev 下

我们从U盘启动 U盘默认被认成了 dev/sda

  因此 我们只需要加入挂载命令就可以

  当然 我们也可以用fstab设置自动加载云云 这就不在本文叙述范围内了。

# vi  etc/init.d/rcS

  ———-rcS     final-1————-

#!/bin/sh

mount -t proc proc /proc

mount -t sysfs sysfs /sys

echo /sbin/mdev > /proc/sys/kernel/hotplug           //热插拔

echo ‘waiting to load all devices…..’

mdev -s

sleep 10

mount /dev/sda1        /mnt                     //这里我们把挂载写死了

——————————————————————

  这样 开机后就会发现提示 挂载成功

在你的U盘linux下 就可以在 /mnt 下工作了 文件会存在U盘中 而不会丢失。

但是 这种解决方案并不完全。我们希望能够将系统完全转换到U盘下工作,这就要用到switch_root 命令了。

switch-root 是busybox提供的一个超级命令,

正常如果我们要切换系统的根目录,那么我们要:

(1)删除rootfs的全部内容,释放空间

find -xdev / -exec rm ‘{}’ ‘;’

(2)安装新的根文件系统,并切换

cd /newmount; mount –move . /; chroot .

(3)把stdin/stdout/stderr 附加到新的/dev/console,然后执行新文件系统的init程序

这十分的麻烦 而且常常会出错,因此我们的busybox用一个命令解决了整个过程,比如 我们商秘昂挂载我们的U盘到了mnt目录 而我们的U盘根目录下就是我们写好的一个/ 根文件系统

我们需要执行:

switch_root   /mnt    /sbin/init

                新根目录   新文件系统的init

只后switch_root 就会帮我们自动切换好根文件系统。

需要特别注意的是:

switch_root命令必须由PID=1的进程调用,也就是必须由initramfs的init程序直接调用,不能由init派生的其他进程调用,否则会出错,提示:

switch_root: not rootfs

也是同样的原因,init脚本调用switch_root命令必须用exec命令调用,否则也会出错,提示:

switch_root: not rootfs

因此我们这里将rcS文件改回init (不再需要内存中的linux的shell环境)保证我们加入语句以init的权限调用 pid=1的进程。

然后修改文件。

#cp etc/init.d/rcS  ./init

# vi init

—————–init final-1————–

#!/bin/sh

mount -t proc proc /proc

mount -t sysfs sysfs /sys

echo /sbin/mdev > /proc/sys/kernel/hotplug           //热插拔

echo ‘waiting to load all devices…..’

mdev -s

sleep 10

mount /dev/sda1        /mnt                     //这里我们把挂载写死了

echo "The pid now is $$"                    //打印当前pid 确保为1

exec switch_root  /mnt /sbin/init              //转换

——————————————————

重新打包 拷贝 从U盘引导 OK

如果一切正常 那么你的系统会切换到你U盘里的/ 下 正常的使用吧。

关于U盘里的那个系统 可以到网上下载一个轻量版的linux 或者直接把宿主linux拷贝进去

还有些人 从0开始 自己写了一个完整的linux系统 (不用busybox哦!)这叫LFS 我现在极度崇拜中 可惜水平不够 只能瞻仰…..

这里有篇入门 大家看看:

LFS速成手册

相关内容早已超出我们的范围 到此为止吧。

#####################################

05-30
2009

U盘中打造属于自己的Linux (四) :自己写 initrd step by step(下)

Author:西玛哒   IN:IT悟语, Linux, 老西常谈   标签:    评论: 0

## 接上文 我们了解了initrd的cpio包的形成方式

  并且大体搭建好了initrd下的内容,现在我们要完善我们的init引导流程 让我们跑起来的initramfs中的linux尽量的像真正的linux系统。
  因为要经常调试内核与initrd文件 因此为了避免频繁的插拔U盘 我们采用一个优秀的cpu仿真软件,–qemu

# apt-get install qemu

# apt-get install qemu-launcher               //图形界面程序

#qemu-launcher

启动程序,界面如下:

 U盘中打造属于自己的Linux (四) :自己写 initrd step by step(下)

  上面添入我们生成的内核文件

下面就是initrd文件了

  参数中 linux noapic 是一个解决bug用的 大家不用介意 用就是了。

  (否则会出现一个 BIOS bus  什么timer 同步啊….)

  点击 launch 就和一个正常系统一样启动了

  我们以这个工具查看我们initrd的修改程度。

  首先解决上次那个can’t access tty问题:

  linux有一个init模式,就是按照一个叫做inittab的配置文件加载各种进程,其中也包括shell环境

inittab 详细介绍

  busybox的默认在没有inittab时按照如下规则运行:

:sysinit:/etc/init.d/rcS

::askfirst:/bin/sh

::ctrlaltdel:/sbin/reboot

::shutdown:/sbin/swapoff -a

::shutdown:/bin/umount -a -r

::restart:/sbin/init

如果busybox检测到/dev/console不是串口控制台,init还要执行下面的动作:

tty2::askfirst:/bin/sh

tty3::askfirst:/bin/sh

tty4::askfirst:/bin/sh

经分析(这个不是我分析的…)busybox的缺省init模式无法满足我们的要求,

  我们还是要写inittab,定制自己的init初始化流程。

要写自己的inittab,需要理解busybox的inittab文件格式。

  busybox的inittab文件与通常的inittab不同,它没有runlevel的概念,语句功能上也有限制。inittab语句的标准格式是

id::?: c

各字段的含义如下

id:

id字段与通常的inittab中的含义不同,它代表的是这个语句中process执行所在的tty设备,内容就是/dev目录中tty设备的文件名。由于是运行process的tty设备的文件名,所以也不能象通常的inittab那样要求每条语句id的值唯一。

:

busybox不支持runlevel,所以此字段完全被忽略。

:

为下列这些值之一:

sysinit, respawn, askfirst, wait,once, restart, ctrlaltdel, shutdown

含义与通常的inittab的定义相同。特别提一下askfirst,它的含义与respawn相同,只是在运行process前,会打出一句话

“please press Enter to active this console”,然后等用户在终端上敲入回车键后才运行process。

指定要运行的process的命令行。

我们参考一下 写出自己的inittab:

# cd /mnt/initrd/etc/

# vi inittab

———–inittab—————–

::sysinit:/etc/init.d/rcS                       //用rcS这个脚本作为系统的init引导脚本

tty1::askfirst:/bin/sh

tty2::askfirst:/bin/sh

tty3::askfirst:/bin/sh

tty4::askfirst:/bin/sh

tty5::askfirst:/bin/sh                           //用户工作环境 (shell bash)

tty6::askfirst:/bin/sh

::restart:/sbin/init                                  //定义一些行为

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

————————————

这样系统引导时 内核就会顺着这个文件去找etc/init.d/rcS

这个文件与我们上次编写的init文件作用相同 因此我们把init文件移过去,改名为rcS

并且删去最后一行的/bin/sh

#mkdir /etc/init.d

#mv init etc/init.d/rcS

注意 这时候它仍是可执行的!

# vi rcS

————-rcS-(beta)—————–

#!/bin/sh

mount -t proc proc /proc

mount -t sysfs sysfs /sys     

mdev -s

—————————————-

我们不需要那linuxrc 文件 而init文件还不能少 所以我们拆一下 吧linuxrc改为init

# mv linuxrc  init

这样我们的修改就完成了,打包

(/mnt/initrd)

# find . |cpio -o -H newc | gzip > /mnt/自己起名吧…..

然后把内核 和initrd文件(刚做好的) 添入qemu 设置

启动 看看效果吧:

正常应该是输出一句

please press Enter to active this console

然后输入回车出现

#

但是事实上没任何提示 输入回车倒是能够正常使用

这是为什么呢?仔细观察 发现在加载硬件过程中 please press Enter to active this console

一闪而过 呵呵 原来我们在启动初始化时

mdev 与 rcS的加载时同步进行的

inittab                    rcS

rcS         ——>     rcS

tty 初始化              mdev -s

  .                           .

结束         <—-       .

                              .

                              .

   就是说 在我们的init处理结束时  mdev 对硬件的识别还没有完成 这样吧信息刷屏过去了,不光如此 如果我们在init脚本中写了挂载命令 也一样可能失败 解决这个问题 我们可以让init 的 rcS中加入

sleep 10                让他等待10s  直到 mdev 加载完成

同时 我们为了支持热插拔 要加入以下句子:

echo /sbin/mdev > /proc/sys/kernel/hotplug

#vi etc/init.d/rcS

——————rcS  (RC)————-

#!/bin/sh

mount -t proc proc /proc

mount -t sysfs sysfs /sys

echo /sbin/mdev > /proc/sys/kernel/hotplug            //热插拔

echo ‘waiting to load all devices…..’

mdev -s

sleep 10

——————————————–

重新打包 加载 OK 终端显示:

please press Enter to active this console

#

这样我们就可以正常的使用了 用alt+F1~6 还可以切换工作台 和正常的linux一样了

到此 我们U盘linux的主干部分已经全部完成了。

O(∩_∩)O哈哈~

但是现在我们的linux还运行在内存中 没法把东西保存 掉电就会丢失

最后的一部分 我们会挂载我们的U盘 保存用户数据 并且用switch_root 命令启动U盘上的根文件系统。

05-30
2009

U盘中打造属于自己的Linux (四) :自己写 initrd step by step(上)

Author:西玛哒   IN:IT悟语, Linux, 老西常谈   标签:    评论: 0

###接上文 我们已经配置内核支持独立的initrd了 下面我们了解一下initrd的构造和配置方法:

  工作目录

  # cd /mnt/initrd

  initrd 是一个小型的文件系统,因此 文件系统需要有的它基本都要有

   # ls / 我们看看宿主机根文件系统中都有些什么

 U盘中打造属于自己的Linux (四) :自己写 initrd step by step(上)

我们可以看到,其中浅蓝色的是一些链接文件

而在文件系统中 比较重要的是以下文件夹以及存放的内容:

######## 根目录下的文件夹们

/bin 二进制可执行命令

/dev 设备特殊文件

/etc 系统管理和配置文件

/etc/rc.d 启动的配置文件和脚本

/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示

/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件

/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序

/tmp 公用的临时文件存储点

/root 系统管理员的主目录(呵呵,特权阶级)

/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。

/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里

/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。

/var 某些大文件的溢出区,比方说各种服务的日志文件

/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含:

  /usr/bin 众多的应用程序

   /usr/sbin 超级用户的一些管理程序

   /usr/doc linux文档

   /usr/include linux下开发和编译应用程序所需要的头文件

    /usr/lib 常用的动态链接库和软件包的配置文件

    /usr/man 帮助文档

    /usr/src 源代码,linux内核的源代码就放在/usr/src/linux里

    /usr/local/bin 本地增加的命令

    /usr/local/lib 本地增加的库

###############

我们的U盘linux没有这么多要求,分析一下我们只需要单用户 home地不要,特权root就行了,我们需要的部分如下:

  # mkdir

         bin  dev  etc   lib    mnt    proc  sbin  sys  usr

  这样 我们initrd文件系统的骨架就算是建好了,虽然这个系统很小 但是功能不能少,但是功能需要的那些命令从什么地方来呢?

下面介绍一位帮手,这位在嵌入式领域里神通广大的万用通:busybox

  busybox实际上是一个常用的二进制命令的软件包,它可以帮你把这些程序安装到指定的位置去。

我们到busybox官方网站上下载源码包。注意 又是源码包 不是一个现成的应用程序,呵呵 看来又要编译了。

  # cd /home/你/

  #mkdir busybox            //编译环境目录

  我们把下载好的源码压缩包放到这个目录下

  #tar -jxvf busybox-XXXXX.tar.bz2   //解压

  #make menuconfig                     //我们在菜单界面下配置我们的busybox 这里不详述配置了

  #make defconfig                       //这里为了保证功能 我们推荐用默认配置 强调几点

########

  Busybox Settings >

General Configuration >

[*] Support for devfs

Build Options >

[*] Build BusyBox as a static binary (no shared libs)

/* 将busybox编译为静态连接,少了启动时找动态库的麻烦 */

[*] Do you want to build BusyBox with a Cross Compiler?

(/usr/local/arm/3.3.2/bin/armlinux)

Cross Compiler prefix/* 指定交叉编译工具路径 */

Init Utilities >

[*] init

[*] Support reading an inittab file

/* 支持init读取/etc/inittab配置文件,一定要选上 */

Shells >

Choose your default shell (ash) >

/* (X) ash 选中ash,这样生成的时候才会生成bin/sh文件

#######

  #make                                    

  不详述了 都知道make怎么回事了,编译后 我们生成的东西在busybox/busybox-XXXXX./_install 下

  比如 我们要将其安装到 /mnt/initrd 下:

  # make CONFIG_PREFIX=/mnt/initrd  install  就可以了

  #cd /mnt/initrd

  # cd bin 或 sbin

  就会看到 多了一堆牛X的命令 哈哈 可以用了

  其实 其他所有的命令都只是一个指向busybox文件的链接

  # ldd busybox

linux-gate.so.1 =>  (0xb806c000)

libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb8036000)

libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7ed3000)

/lib/ld-linux.so.2 (0xb806d000)

  这说明这个程序需要一些库 我们需要从宿主机拷贝以下文件到/mnt/initrd/lib 文件夹下:

ld-linux.so.2

libc.so.6

libcrypt.so.1

libm.so.6

  例如:cp /lib/tls/i686/cmov/libm.so.6 /mnt/initrd/lib/libm.so.6   

到此 我们initrd的功能部分都由busybox摆平了,我们要做的就是使用它就是了。

回想一下 内核调用时 要先自爱initrd根目录下找到init这个文件 作为启动中pid=1的启动进程 负责处理系统启动的“后事”。

如果找不到这个文件,那么内核就不认为它是一个initrd文件。

但是,busybox的设置和默认的有些地方不一样 ,在busybox中 负责启动的是一个叫linuxrc的脚本 安装完你会发现它在

/mnt/initrd

文件夹下,它用于负责busybox 生成的文件系统的引导 ,但是我们看不到其中的内容,因此我们不用它 我们根据busybox的规则来尝试创建我们自己的启动规则

我们先在/mnt/initrd 下自己写一个init文件:

#vi  init

我们首先要挂载必要的文件系统,并且要生成一些能够正确识别硬件设备的文件就是/dev下的内容,这里面实际上是为硬件提供了一堆接口

—————init————-

# !bin/sh                                         //这是个脚本

mount -t proc proc /proc

mount -t sysfs sysfs /sys                  //挂载两个虚拟文件系统 其实是在内存中 与内核紧密相连

mdev -s                                         //mdev是busybox提供的一个程序 可以识别硬件信息 并填充到/dev 目录下。

/bin/sh                                          //调出shell

——————————-

# chmod a+x init                            //给与所有用户都能够执行的权限。

有些busybox配置中,mdev命令需要读取/etc/mdev.conf文件,为了避免出错信息,我们创建一个空文件。

  #  touch etc/mdev.conf

这样 内核就会在启动时找到我们写的init文件 并将其执行 完成初始化工作

上述调用的SHELL是直接运行在内核的console上的因此在initrd目录下,要创建一个dev/console的设备文件,否init程序无法在内核console中输出信息:

  # mknod -m 600 dev/console c 5 1

  console是不能提供控制终端(terminal)功能,因此上述方法还不完善,为了提早看到成果 我们先不将其更改 在此基础上生成一个initrd。

这里我们要用到cpio命令 因为initrd是cpio格式的。

# cd /mnt/initrd

# find    .                      |    cpio     -o  -H   newc    |    gzip >  /mnt/usblinux.img

  找到文件夹下所有文件     输送   以cpio压缩       参数    输送    压缩  输出给文件

cpio 命令参数大家自己查  以上参数不可缺少!

到此 我们自己的initrd 就形成了 我们可以将其考入我们的U盘

# cp /mnt/usblinux.img /mnt/usb/boot/usblinux.img

如果有 覆盖掉我们之前“拿来”的img文件 然后修改grub.conf   ;menu.lst

重新安装grub 后

# umount /mnt/usb

用U盘引导 我们就可以看到 在识别了一堆硬件之后 有如下状况:

  /bin/sh: can’t access tty; job controll off

然后一般按下回车 就会出现

#

试一下 是不是很像一个正常的linux系统?

上面的错误信息是因为我们还泡在 console状态下 而不是分配的tty shell 因此我们还需要调整。

#########

05-30
2009

U盘中打造属于自己的Linux (三) :内核编译(下)initrd简介与内核配置

Author:西玛哒   IN:IT悟语, Linux, 老西常谈   标签:    评论: 0

# 至此 我们已经搞定了内核部分,下面我们就要对文件系统开刀  先来看一下我们目前的进度:
/mnt/usb:

  boot/ grub/ grub.conf ; menu.lst ; stage **

               usblinux.kernel

  可以看出 我们满足grub的启动需求就只剩下

  initrd XXXXXXXX

  这个参数了

  那么 initrd是什么呢?

  简单说,就是一个临时文件系统,它以一个压缩包 或叫镜像的形式存在

  系统启动时 这个镜像将自己解压到内存中,并且提供一个init() 函数接口给内核

  从而使内核调用这个文件系统中的文件 完成初始化工作 为用户提供shell环境。

  我们不关心历史 Linux的技术革新换代 关于启动的方式也发生了很多变化,对于Linux 2.6的内核,initrd有很多新的特性,

  详细可以点击:

Linux2.6 内核的 Initrd 机制解析

   了解详情。

   说了这么多 ,initrd就是一个压缩包 里面是一个包含了配置好了的 init 的小型文件系统,

   我们的BootLoader执行了加载(其实也是解压)内核 ,识别硬件的后, 将把initrd 解压,

   在start_kernle () 后 会寻找执行initrd中的 init()

    因此  initrd是重要的一环,关系到系统内核能否启动。

 U盘中打造属于自己的Linux (三) :内核编译(下)initrd简介与内核配置

   (引用: 朱明 Linux教程 2009 06 启动与关闭 16)

    了解了initrd的作用 再看看initrd的组成:

      2.6内核的initrd一般都是 cpio 格式的 这种initrd的格式又被称为 iniramfs。

CPIO:Linux下的一种新的内核启动镜像所附带的虚拟磁盘格式。他与传统的Image格式比较而言有一些改进,主要体现在打包速度和启动引导方式上。

     cpio 可以从 cpio 或 tar 格式的归档包中存入和读取文件, 归档包是一种包含其他文件和有关信息的文件。 有关信息包括:文件名, 属主, 时标(timestamp), 和访问权限。 归档包可以是磁盘上的 其他文件, 也可以是磁带或管道.

     (以上内容来自wikipedia)

    initramfs 是rootfs的一种,有一些新特性,这里不做详细介绍,这里有一篇

    !!参考文献

精通initramfs构建step by step

    是后文参考的基础,强烈建议大家自己看一下。
   其实 在上一节内核编译的过程中,我们的内核源码已经为我们形成了一个initramfs 它默认和我们生成的bzImage绑定在了一起,因此我们并未看到它的存在,下面我们看一下内核中的相关配置。

   首先我们要确保一下参数:

   Executable file  formats

     –> kernel support for ELF  binaries    选中则可使内核支持ELF格式的可执行文件。

   File systems —>

   Pseudo filesystems —>

  /proc file system support /

   Virtual memory file system support (former shm fs)    支持虚拟文件系统

   按照默认配置,编译2.6版本的linux内核时,编译系统总会创建initramfs,然后把它与编译好的内核连接在一起。内核源代码树中的usr目录就是专门用于构建内核中的initramfs的,其中的initramfs_data.cpio.gz文件就是initramfs。缺省情况下,initramfs是空的,X86架构下的文件大小是134个字节。

    我们在之后的配置中,需要分析理解initrd的构成,因此我们需要独立的initrd 也就是 grub.conf中:

     initrd XXXXXXXX

    这个参数,因此 我们要修改内核配置,支持独立的内核。
Device Driver –>

           Block device     选择

               RAMfilesystem and RAMdisk ( initramfs/initrd ) support  (支持ram文件)

        General Setup –>

              initramfs source file(s)        配置项原有的内容清空。

     我们在/mnt下

     # mkdir initrd

      创建一个叫做initrd的文件夹 这是我们之后创建initrd的工作目录

      其实我们也可以将上面的 initramfs source file(s) 选项中参数设为/mnt/initrd  在initrd中的文件写完之后编译内核  ,这是内核会自动从initrd文件夹中取出文件 压缩为initrd 但我们不用这种方法 直接用cpio压缩 这样更灵活。
       到此 与initrd相关的内核配置就结束了,它的组成 ,形成和使用我们下章再说。

#########################################

其实 到此为止 U盘linux已经可以成功了。

    # cp /boot/initrd.img -XXXXX- XXXX   /mnt/usb/usblinux.img

   由于内核,grub已经到位 我们完全可以吧宿主机的initrd直接拿来使用 是一样的。

   修改 grub.conf   /   menu.lst

   initrd    usblinux.img

   不要忘记 修改grub配置后 要重新安装grub!
   用你的U盘引导 OK 你已经可以看到 在一堆加载硬件的提示之后会有:

    (initramfs)_

    这就是一个内存中的linux 虽然掉电丢失,但常用的操作都完全可以执行 甚至还有vi!

    如果你的要求不高 那么恭喜 到此你就已经可以交稿了。

##########################################################

05-30
2009
loading...