网服PE的修改制作
网服PE的文件目录结构
网服的PE封装形式采用了多文件夹多模块的树形模式,基本目录结构如下所示:
--网服PE/
├-Boot/ // PE的Legacy BIOS传统引导文件
├-efi/ // PE的UEFI引导相关文件
├-PETools/ // PE中集成的常用工具软件
├-sources/ // PE内核wim包的存放文件夹
├-ubuntu/ // ubuntu 的Legacy BIOS引导的LiveCD启动
├-WXPE/ // 老式2003内核PE,is_封装
├-bootm32.efi // UEFI引导文件
├-bootmgr.efi // UEFI引导文件
└-grldr // Legacy BIOS引导的GRUB4DOS主引导记录文件
PE内核的修改
首先说说PE内核的修改。网服PE
除了最老版本的2003内核采用了is_
文件封装外,现有的Win7 x86
、Win8 x64
以及正在制作的Win10 x86&x64
内核PE
都采用了现在比较通用的.wim
文件封装。所以修改PE
第一步就是针对这些wim
镜像进行修改。基本流程如下:
- 使用
WimTool
工具选择一个PE
内核包比如WIN8PEx64.wim
打开进行挂载,然后把vim
镜像文件解开到某个目录下,操作类似解压缩文件,之后就可以对wim
镜像中的文件进行修改了。wim
镜像解开后的目录类似windows
系统盘的文件目录结构,毕竟PE
也就相当于一个微型的windows
系统了,解开后的文件目录结构如下所示:
--WIN8PEx64.wim
├-NET/ // PE中的.net相关文件以及部分驱动文件
├-program files/ // PE中常用的工具软件
├-program files(x86)/ // PE中系统默认自带的软件
├-program data/ // PE系统数据文件夹
├-users/ // PE中用户文件夹
└-windows/ // PE系统内核的文件夹
- 一般修改PE需要修改编辑的主要是
program files
和windows
两个文件夹,program files
中存放的都是PE中常用的的工具软件,比如Bootice
引导工具、DiskGenius
分区工具、WinNTSetup
安装器等,在这里把文件或文件夹添加进来,比如我更新了DiskGenius4.7.2
,替换了原本的DiskGenius4.7
,添加替换完之后,在program files
文件夹进行的操作就结束了。基本上增加修改工具软件都要先在这里对文件进行增加修改,之后需要到windows
文件夹进行下一步修改; - 跳转到
windows
文件夹后,需要进行下一步修改。之前我替换更新了DiskGenius
工具,但是文件名或者文件路径已经改变了。现在需要找到windows/system32/
下的pecmd.ini
文件,用文本编辑器打开,我一般都习惯使用Sublime Text
,记事本也可以。这就是关于PE
的配置文件,包括PE
的引导、初始化、创建桌面图标开始菜单、加载常用软件工具等,都需要在这里进行配置。pecmd.ini
采用PECMD
命令的语法,通过多条命令语句组合完成PE
的配置。比如我上文中说修改替换了DiskGenius
的文件,还需要在配置文件中修改关于它的配置命令,命令如下:
//创建桌面快捷方式
LINK %Desktop%\DiskGenius4.7,%ProgramFiles%\tools\DiskGenius4.7.exe
//创建开始菜单快捷方式
LINK %Programs%\磁盘工具\DiskGenius4.7,%ProgramFiles%\tools\DiskGenius4.7.exe
需要修改为:
//创建桌面快捷方式
LINK %Desktop%\DiskGenius4.7.2,%ProgramFiles%\tools\DiskGenius4.7.2.exe
//创建开始菜单快捷方式
LINK %Programs%\磁盘工具\DiskGenius4.7.2,%ProgramFiles%\tools\DiskGenius4.7.2.exe
以上只是一个非常简单的例子,改动的也只是一两条命令语句,pecmd.ini
中的配置信息还是比较多的,也有很多种命令语句,一般也不需要完全记住,用的时候去查PECMD
的帮助程序就好,里面有详细的命令说明文档。
- 在
windows
文件夹中pecmd.ini
只是一个配置文件之一,其他还有很多的系统组件还有一些配置项都在这里进行修改。比如我之前为PE
添加过DISM
服务,就是在这里部署的,也是需要添加文件,然后完成相关配置文件的改动。另外还有桌面背景之类的小东西也是在这里修改的,修改过程和修改工具差不多。 - 还有其他比如为
PE
添加声卡网卡驱动的操作,需要在program files(x86)
文件夹中完成配置,驱动文件需要找兼容性适配性比较好的驱动,目前我只添加了网卡驱动,可以在PE
中测试机器的网卡是否正常。实际上文件夹的分类都是可以自己修改的,只需要在配置文件中修改对应的路径就好,不过一般为了普适性和通用性考虑,保持windows
本身的文件目录结构比较好。 - 完成了想修改的所有操作后,就需要再次使用
WimTool
工具对修改后的PE
文件进行打包。同样选择好文件路径填好文件名后,WimTool
就会帮你打包出一个.wim
镜像文件,这样就完成了一个PE
的主体.wim
镜像的修改。
外置引导文件及引导菜单编辑
当然,PE
的内核wim
镜像文件只是其中一部分,下面来说说外置引导文件及菜单的编辑。
外置的引导文件需要编辑的主要是Boot/
和efi/
目录下的部分文件,比如Boot/grub/
目录下的message
文件,这个文件包括了整个Legacy BIOS
引导界面菜单页的详细配置信息。用message
编辑器打开后可以对菜单页的详细设定进行编辑,诸如颜色,背景图片、文字字体,菜单结构等。另外还有MENU.LST
这种引导菜单条目编辑,也采用命令语句进行编写,比如引导菜单首页就是这样的:
timeout 30
default 3
gfxmenu /BOOT/GRUB/MESSAGE
configfile /BOOT/GRUB/MENU.LST
title [目录] 主菜单
clear
title [0] PE 菜单
configfile (bd)/BOOT/GRUB/MENU1.LST
title [1] 工具菜单
configfile (bd)/BOOT/GRUB/MENU2.LST
title [2] 从硬盘引导系统
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook
chainloader (hd0)+1
title [3] 启动本机系统
find --set-root --ignore-floppies --ignore-cd /ntldr || find --set-root --ignore-floppies --ignore-cd /bootmgr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr || find --set-root --ignore-floppies --ignore-cd /bootmgr
chainloader /ntldr || chainloader /bootmgr
title [4] USB2.0提速
kernel (bd)/BOOT/IMGS/PLPBT.BIN
rootnoverify (bd)
title [5] GRUB 命令行
commandline
title [6] Ubuntu 14.04
find --set-root --ignore-floppies /ubuntu/vmlinuz.efi
kernel /ubuntu/vmlinuz.efi boot=casper iso-scan/filename=/ubuntu/ubuntu.iso quiet splash ro locale=zh_CN.UTF-8
initrd /ubuntu/initrd.lz
boot
title [7] 重启
reboot
title [8] 关机
halt --no-acpi || halt --force-sci
引导菜单是多级显示的,用多个文件分别编辑。都是采用这种命令语句编写的,基本语法也可以去查阅相关的帮助文档,不过命令接近于伪代码还是比较好懂的。这些东西在编辑完之后直接保存即可,不用做进一步的配置,也基本不用压缩打包。
外挂工具PETools的修改更替
这部分是修改过程中最简单的部分了,只需要把文件替换掉就可以,没什么好说的。因为这部分不存在挂载在PE
内核的工具,只要需要使用的时候去找就可以了。
后面的话
PE的修改过程简单来说就是这样,还是比较容易的,刚开始也是很多东西都不太清楚,后来逛了很多论坛,比如无忧启动、远景等,也学会了一些东西,同时也找到了很多资源,比如我用过的DISM
服务组件就是在这里找到的。其中也遇到了很多问题,在论坛上还有自己折腾的过程中也都得到了解决。还是很锻炼自己的学习能力和实践能力的。
个人的创新点
之前网服的PE
在U盘中是没有任何封装形式的,直接放在U盘中,和其他文件共存,这样就会出现偶尔不小心修改PE
文件导致PE
损坏的情况;并且由于需要Legacy BIOS
和UEFI
双引导启动,U盘只能使用FAT32
的文件系统,而众所周知FAT32
是不能存储4G以上的单文件的,这样使用就很不便。在我经过探索之后,使用了一种新的封装方式,解决了以上的问题。
解决方案如下:
- 在
DiskGenius
中,选中U盘,右键清除保留扇区,然后删除所有分区,保存分区更改。 - 新建一个全盘大小的
FAT32
分区并格式化,右键调整分区大小,把FAT32
分区调整为1.7G大小,并放到盘尾位置,注意此时FAT32
分区应该为活动分区。剩余空间放为空白分区。 - 把
PE
所有文件拷入FAT32
分区,再在DiskGenius
里把FAT32
分区的盘符右键删除,把剩余空白分区新建为NTFS
分区并格式化,自动分配盘符,保存分区更改。 - 用
BOOTICE
把引导写入U盘,选择目标磁盘为U盘,选择主引导记录,选择GRUB4DOS
引导,点击安装/配置,写入磁盘,确定后完成。 - 此时U盘在文件资源管理器中只显示
NTFS
分区,这样一来隐藏了PE
文件,而来也解决了FAT32
使用不便的问题。
这个解决方案完全是我自己想出来并实践成功的,不知道算不算首创,不过在论坛里都没有看到类似的解决方案,完全靠自己折腾出来,也是挺高兴的。