分类存档: 老西常谈
Author:西玛哒 IN:IT悟语, 经典搜藏, 老西常谈 评论: 0Microsoft 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
Author:西玛哒 IN:经典搜藏, 老西常谈, 软件 评论: 0具体操作步骤
我的帐户名是Tenkin,vista安装在F盘,我要把”F:Userstenkin”变成链接文件夹,而我真正的用户文件夹转移到”E:tenkin”。
第一步:注销,用administrator帐户登录(没有启用administrator帐户的打开计算机管理-用户和组-administrator-去掉已停用复选框);
第二步:把”F:Userstenkin”移动到”E:tenkin”;
第三步:运行cmd,输入 mklink “F:Userstenkin” “E:tenkin” /j(注意:如果路径中包含空格,请务必把路径加上引号,如果没有空格,引号可省略)得到下图提示,表示链接成功:
第四步:赋予移动后的用户文件夹完全控制权(关于如何设置权限,这里不再说明,相信大家都知道如何设置):
重新登录到你原来的帐户,发现你的用户文件夹下多了一个快捷方式的图标,链接成功。
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前最好看看无线网卡的地址,只要同一网段即可。)
Author:西玛哒 IN:经典搜藏, 老西常谈 评论: 0
原来双胞胎等于 Ctrl+C plus Ctrl+V…….
Author:西玛哒 IN:老西常谈 标签: CPU, Digit, Intel 评论: 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月 |
可以看出 型号按照从低端到高级增长,低端用于覆盖主流 高端用于占领游戏玩家等高性能要求用户的电脑。每一个型号都有自己独特的定位。每一个型号也对应了这款芯片的性能配置。
型号的编码规则根据些列是多变的,系列间没什么特别清晰地规律。但是同系列内一般有相似的命名规则:

以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
Author:西玛哒 IN:老西常谈 标签: Photoshop 评论: 2
Author:西玛哒 IN:IT悟语, Linux, 老西常谈 标签: 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 我现在极度崇拜中 可惜水平不够 只能瞻仰…..
这里有篇入门 大家看看:
相关内容早已超出我们的范围 到此为止吧。
#####################################
Author:西玛哒 IN:IT悟语, Linux, 老西常谈 标签: Linux 评论: 0## 接上文 我们了解了initrd的cpio包的形成方式
并且大体搭建好了initrd下的内容,现在我们要完善我们的init引导流程 让我们跑起来的initramfs中的linux尽量的像真正的linux系统。
因为要经常调试内核与initrd文件 因此为了避免频繁的插拔U盘 我们采用一个优秀的cpu仿真软件,–qemu
# apt-get install qemu
# apt-get install qemu-launcher //图形界面程序
#qemu-launcher
启动程序,界面如下:

上面添入我们生成的内核文件
下面就是initrd文件了
参数中 linux noapic 是一个解决bug用的 大家不用介意 用就是了。
(否则会出现一个 BIOS bus 什么timer 同步啊….)
点击 launch 就和一个正常系统一样启动了
我们以这个工具查看我们initrd的修改程度。
首先解决上次那个can’t access tty问题:
linux有一个init模式,就是按照一个叫做inittab的配置文件加载各种进程,其中也包括shell环境
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盘上的根文件系统。
Author:西玛哒 IN:IT悟语, Linux, 老西常谈 标签: Linux 评论: 0###接上文 我们已经配置内核支持独立的initrd了 下面我们了解一下initrd的构造和配置方法:
工作目录
# cd /mnt/initrd
initrd 是一个小型的文件系统,因此 文件系统需要有的它基本都要有
# ls / 我们看看宿主机根文件系统中都有些什么

我们可以看到,其中浅蓝色的是一些链接文件
而在文件系统中 比较重要的是以下文件夹以及存放的内容:
######## 根目录下的文件夹们
/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 因此我们还需要调整。
#########
Author:西玛哒 IN:IT悟语, Linux, 老西常谈 标签: Linux 评论: 0# 至此 我们已经搞定了内核部分,下面我们就要对文件系统开刀 先来看一下我们目前的进度:
/mnt/usb:
boot/ grub/ grub.conf ; menu.lst ; stage **
usblinux.kernel
可以看出 我们满足grub的启动需求就只剩下
initrd XXXXXXXX
这个参数了
那么 initrd是什么呢?
简单说,就是一个临时文件系统,它以一个压缩包 或叫镜像的形式存在
系统启动时 这个镜像将自己解压到内存中,并且提供一个init() 函数接口给内核
从而使内核调用这个文件系统中的文件 完成初始化工作 为用户提供shell环境。
我们不关心历史 Linux的技术革新换代 关于启动的方式也发生了很多变化,对于Linux 2.6的内核,initrd有很多新的特性,
详细可以点击:
了解详情。
说了这么多 ,initrd就是一个压缩包 里面是一个包含了配置好了的 init 的小型文件系统,
我们的BootLoader执行了加载(其实也是解压)内核 ,识别硬件的后, 将把initrd 解压,
在start_kernle () 后 会寻找执行initrd中的 init()
因此 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!
如果你的要求不高 那么恭喜 到此你就已经可以交稿了。
##########################################################