无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: pseudo
打印 上一主题 下一主题

0PE:可剪裁统一PE

    [复制链接]
4051#
 楼主| 发表于 2012-2-27 15:05:16 | 只看该作者
回复 #4051 2011斗鬼昜木 的帖子
统一版已不再更新。NB版看另一帖。

回复 #4052 lihuanqing 的帖子
你没按要求记录、提供“重要信息”。
暂时忽略你的问题。
回复

使用道具 举报

4052#
发表于 2012-3-2 23:48:12 | 只看该作者
好久没更新了。更新。
回复

使用道具 举报

4053#
发表于 2012-3-3 00:14:03 | 只看该作者
试了一下,用着很爽,谢谢了。
回复

使用道具 举报

4054#
发表于 2012-3-6 18:17:01 | 只看该作者
U忽然不能格式化了……

1.jpg (62.13 KB, 下载次数: 127)

1.jpg
回复

使用道具 举报

4055#
发表于 2012-3-7 10:43:55 | 只看该作者
HaneWin_Server.exe与start_server.exe一样吗?我找不到start_server.exe它呀?
回复

使用道具 举报

4056#
发表于 2012-3-7 17:46:06 | 只看该作者
向P大请教:
我一直在关注和学习您的大作0PE,近来更是专注于MapY,但对客户端启动时如何把set Tftp_Server 写入SETTFTPD.cmd,还是不得其解。由于关联的文件和语句太多,自己水平又差,以至于从早到晚搞了一个星期还是没有搞通,烦请P大能否帮助写一个单一而简单的批处理,加注说明,在客户端启用网络驱动时调用。

我没有任何商业意图,我只是对0PE的情有独钟和对技术的执着追求而已。P大也可发短信给我,谢谢!
回复

使用道具 举报

4057#
 楼主| 发表于 2012-3-7 20:51:54 | 只看该作者

回复 #4058 hpy7332 的帖子

老先生光临,不胜荣幸。
老先生过谦了,您不断学习深入钻研,是后辈楷模。

0PE获取服务器端ip的过程大致是:

1、menu.0pe(即grldr内置菜单):
  1. write 0x60064 0
  2. checkrange 0x21 read 0x8280 && write 0x60064 1
复制代码

检测到pxe网启时往内存地址0x60064处写入1,作为是否网启的标志。
早期g4d不支持变量,只能通过特定内存地址保存数据。

以下引自sratlf版主的grub4dos帮助文档:


在固定位置访问一些内部变量也可以参见 命令索引 read 命令 部分
   地址         长度             说明
=========  ==============  ==============================================
0000:8208  4字节(即双字) 启动分区号 install_partition (the boot partition)
0000:8278  4字节(即双字) GRUB4DOS编译的日期十进制数.
0000:8280  4字节(即双字) 启动驱动器号(boot_drive)
0000:8284  4字节(即双字) pxe 客户端 ip (即本地ip)
0000:8288  4字节(即双字) pxe 服务器 ip
0000:828C  4字节(即双字) pxe 网关 ip


2、M.lst:
  1. read 0x60064 && dd if=(md) of=(hd-1,0)/BIN/PXE_XIP.COM bs=1 count=12 skip=0x8284 seek=0x166
复制代码

读0x60064处数据,若非0(包括1),则为pxe网启。这时把内存从0x8284开始的12个字节数据写入文件PXE_XIP.COM的特定位置。
这12个字节涵盖了0x8288开始的4个字节,即包括pxe服务器ip。这样,ip数据就存入文件了。理论上以后总有办法从中取出相关数据加以利用。

0pe启动时会先进入DOS,在DOS环境下整合多个组件,动态形成pe核心,然后用grub.exe来启动setupldr.bin正式引导pe(之后跟其它pe类似)。
所以把数据写入一个DOS可执行文件PXE_XIP.COM。

这个文件我用16位汇编语言写成,其数据区位置事先定位好,在文件尾部12字节,grub4dos正好把数据往那里填。PXE_XIP.COM集程序代码、数据于一体。

3、setip.bat:
  1. pxe_xip>pxe_xip.bat
  2. call pxe_xip.bat
  3. set Tftp_Server=%pxe_sip%
复制代码

运行PXE_XIP.COM时,它负责解释尾部的ip数据,将(原来整数形式的)ip数据转化为诸如192.168.0.100形式的ip地址,并向屏幕输出诸如
set pxe_sip=192.168.0.100
的文字。把输出重定向到文件pxe_xip.bat并执行pxe_xip.bat,ip地址就到环境变量pxe_sip里了。

4、auto_exe.bat:
call setip.bat
>C:\WXPE\setTFTPD.cmd echo set Tftp_Server=%Tftp_Server%
最后,生成一个setTFTPD.cmd文件,其内容类似于
set Tftp_Server=192.168.0.100
这个.cmd批处理,就是进入pe后在MapY.cmd里调用的。

以上过程,把网启时grub4dos获取的服务器ip,辗转传递给pe供其利用。


值得注意的是,0pe获取ip的方法,是在几年前grub4dos功能还很弱时实现的。
那时g4d没变量,没批处理,没外部命令,玩g4d的人也很少。当时算是比较好的方案。
后来chenall大把g4d功能发展到堪比dos批处理的程度。于是,不经DOS,完全由g4d批处理也可轻易完成ip获取、格式转换、保存到文件等一系列处理。
我记得zhaohj大就提供过这方面的g4d批处理。sratlf版主的grub4dos帮助文档里估计也有现成的获取ip方面的资料。

时至今日,0pe上述方法已然落后。但0pe在这方面早已成型,现在还管用,就得过且过,懒得改变了。
回复

使用道具 举报

4058#
发表于 2012-3-7 22:18:06 | 只看该作者
我用的是MENU.LST菜单、grldr引导、老毛桃式文件结构,外置公用分离型03PE和W7PE合盘的ISO。用MapW方式PXE启动,服务端不用新建内存盘,不用倒腾任何文件,客户端双系统就都能加载全部外置程序,即节省内存,启动又快。

折腾了一个多星期,就卡在这个SETTFTPD.CMD上,MapW要call X:\WXPE\SETTFTPD.CMD,,写入 C:\WXPE\setTFTPD.cmd又要call setip.bat,,setip.bat又要call pxe_xip.bat...,,而这个该死的pxe_xip.bat又不知藏在哪里...,,com、bat、各类语句繁多,我看了小小强4.0版的所有说明文件,以及网友对0PE的解读帖子,只因自己水平太差,还是弄不明白。这里先谢谢P大回复,我再仔细看看,不明之处可能还得请教P大。
回复

使用道具 举报

4059#
 楼主| 发表于 2012-3-8 11:54:03 | 只看该作者
嗯,事先有pxe_xip.com,无pxe_xip.bat。
通过输出重定向:
pxe_xip>pxe_xip.bat

pxe_xip.com>pxe_xip.bat
在运行时才产生pxe_xip.bat。

服务器ip在文件、环境变量之间折腾了一阵,最后产生一个文件SETTFTPD.CMD,其内容类似于:
set Tftp_Server=192.168.0.100
确实有点绕,呵呵。

0PE内部以达到目的为准,不计较手段(例如是否“绕”不论)。但外部追求清爽,不随便多一个文件,努力使每个文件都是可删除组件,都有面向用户的意义。类似ntdetect这种对用户没有意义的文件尽量不让用户看到。
回复

使用道具 举报

4060#
发表于 2012-3-8 16:50:07 | 只看该作者
按你的指点,阅读了sratlf版主的grub4dos帮助文档,zhaohj大这方面的g4d批处理。g4d帮助文档中介绍的获取ip地址的步骤:

checkrange 0x21 read 0x82a0 && pxe keep
set /a ip=*0x8288&0xff
set /a a=*0x8288>>8&0xff
set ip=%ip%.%a%
set /a a=*0x8288>>16&0xff
set ip=%ip%.%a%
set /a a=*0x8288>>24&0xff
set ip=%ip%.%a%
#  将变量ip的值成功由16进制ip地址转换为10进制下的地址

chainloader --force /BOOT/PXEMGR.0 && boot

===========================================

#  0pe中生成一个含ip地址的setTFTPD.cmd文件:
>C:\WXPE\setTFTPD.cmd echo set Tftp_Server=%ip%.%a%

请P大指教:
1、前一部分命令是否应该编在LST菜单里,在g4d环境下执行,这些命令与PXE启动可否编在一起;
2、%ip%.%a%这个变量应在什么环境下,又怎样写入到一个可调用的文件里,如setTFTPD.cmd。
回复

使用道具 举报

4061#
发表于 2012-3-9 13:04:08 | 只看该作者
p大,你的0pe里的取UD工具是不是删除了。本人将一些工具软件拖入UD区(建立petools文件夹),但进入PE后不能提取出来。我记得以前的旧版本的有取UD工具,是不是我记错了,如何重新加入呢?(直接加入到Pe中再打包虽可行,但不够方便)
回复

使用道具 举报

4062#
 楼主| 发表于 2012-3-9 15:29:34 | 只看该作者
回复 #4062 hpy7332 的帖子
在一个进pe后仍可被访问的设备(例如fd0)上准备一个4kb大小的文件
(fd0)/wxpe/setTFTPD.cmd

用g4d命令(g4d环境)
echo %ip%
可显示变量ip值。
用命令
echo %ip% > (fd0)/wxpe/setTFTPD.cmd  
可将显示内容重定向输出到文件。其中“>”号前后有一个空格。

就是说,g4d已经直接支持“>",跟DOS功能差不多。


回复 #4063 happy_tin 的帖子
开始菜单有petools字样,点一下。
回复

使用道具 举报

4063#
发表于 2012-3-9 15:49:17 | 只看该作者
谢谢P大,我这就试试。
回复

使用道具 举报

4064#
发表于 2012-3-10 01:04:14 | 只看该作者
p大,问题找到了,原因是我把2.0移动硬盘接在笔记本3.0接口进入PE后,由于没有usb3.0驱动,usb2.0的硬盘驱动不上,访问不到移到硬盘分区,故而见不到在ud区的工具软件。将移动硬盘改接在usb2.0的接口就正常了。所有工具软件都可见了。不好意思,是自己不够细心,抱歉抱歉!!有一不情之请,现usb3.0开始普及,p大有否考虑在0pe中加入相关的驱动呢?
回复

使用道具 举报

4065#
 楼主| 发表于 2012-3-10 01:20:06 | 只看该作者
我无3.0环境测试,不便加入。

其实,接在USB 3.0接口情形,即使不加入USB 3.0驱动,只要开始3秒读秒时按空格键,
后面0pe也有外置工具可用的。还可以拔掉U盘/移动硬盘。
回复

使用道具 举报

4066#
发表于 2012-3-10 07:48:25 | 只看该作者

回复 #4067 pseudo 的帖子

这样是可行的,我的意思是,如果没有usb3.0驱动,进入pe后,usb3.0设备的分区将不可见,里面的文件就不能使用了。谢谢你的解答!
回复

使用道具 举报

4067#
发表于 2012-3-10 10:18:23 | 只看该作者
感谢PSEUDO,已用0PE V1.2.6把自己封装的XP系统弄成ISO镜像
回复

使用道具 举报

4068#
发表于 2012-3-11 15:21:19 | 只看该作者
p大你好,能不能像晨枫3.0一样利用run的自动菜单功能将非ud区文件夹下的img,iso映像自动列表?或者指点小弟一二也可。就是晨枫启动菜单里的:“运行我的镜像”功能。
回复

使用道具 举报

4069#
 楼主| 发表于 2012-3-11 17:00:51 | 只看该作者

回复 #4070 2012liuling8866 的帖子

进入run模块后,可以输入
/abc/
来对任意设备的abc目录自动列表。

默认是对
/boot/imgs/
目录作列表。并没有限制什么区,但多处有同名目录时,仅一个(未必是你需要的)有效。

要强制指定某区的目录,可输入带分区的目录,类似于:
(hd0,0)/iso/

更多用法,参见zxw大帖子。
回复

使用道具 举报

4070#
发表于 2012-3-11 17:50:08 | 只看该作者
谢谢P大的耐心指导!非常感谢。
回复

使用道具 举报

4071#
发表于 2012-3-11 20:21:57 | 只看该作者
p大,今天下午用了一下nb版的run功能(列表式和菜单式)感觉蛮好用的!大大是否可以参照nb版将这两个菜单项也加入统一版?并且将功能单一的只能运行iso和只能运行img镜像的菜单项取消。辛苦大大了!
回复

使用道具 举报

4072#
 楼主| 发表于 2012-3-12 09:29:36 | 只看该作者
run好用归功于zxw大。
统一版已经带有run,开始3秒按esc,输入run即可。统一版已终结不动了。

iso启动器等是此pe派生的功能,无本生意,不要白不要。
有的功能还不能由run完全取代。
回复

使用道具 举报

4073#
发表于 2012-3-12 10:12:02 | 只看该作者
参考天意PE做法,将potplayer设置了文件关联,创建桌面快捷方式,但不立即运行PotPlayer

http://115.com/file/dpd1971p#
PotPlayer_(自动关联视频、音频、字幕).wim

[ 本帖最后由 zhs509 于 2012-3-12 10:51 编辑 ]
回复

使用道具 举报

4074#
发表于 2012-3-12 12:26:04 | 只看该作者
原帖由 pseudo 于 2012-3-12 09:29 发表
run好用归功于zxw大。
统一版已经带有run,开始3秒按esc,输入run即可。统一版已终结不动了。

iso启动器等是此pe派生的功能,无本生意,不要白不要。
有的功能还不能由run完全取代。



谢谢p大,这样无私的帮助兄弟们!
回复

使用道具 举报

4075#
 楼主| 发表于 2012-3-12 17:43:46 | 只看该作者

回复 #4075 zhs509 的帖子

谢谢分享                             
回复

使用道具 举报

4076#
发表于 2012-3-12 22:00:49 | 只看该作者
再请教P大:
近几天一直在潜心学习grub4dos教程、sratlf版主的g4d帮助文档、README_GRUB4DOS_CN.txt等,虽然学得很累,但还是有所收获。

关于MapW,主菜单MENU.LST的03PE部分
if %bd%==pd pxe keep && RUN /BOOT/GRUB/PXE03.LST
chainloader /BOOT/LDRXPE
默认set bd=hd,本地启动,若%bd%==pd,运行子菜单PXE03.LST。照sratlf版主的帮助文档和你上次指点,编辑如下:

pxe keep
map --mem --unsafe-boot (pd)/BOOT/IMGS/PXE.IMG (fd0)
map --hook
pause --wait=0
set /a ip=*0x8288&0xff
#    内存0x8288处存放的是TFTP服务器的IP地址,16进制存放,本行命令开始将把16进制地址转换为10进制地址
set /a a=*0x8288>>8&0xff
#    使用 >> 按位右移运算符,16进制c0是二进制8位,右移8位后变成0x3200a8,再按位0xff与操作,
#    即丢弃高位部分3200,留下a8即10进制168 ,此时变量 a 的值为 168
set ip=%ip%.%a%
#    将变量 ip 的值更改为 192.168
set /a a=*0x8288>>16&0xff
#    使用 >> 按位右移运算符,16进制a8c0是二进制16位,右移16位后变成0x3200,再按位0xff与操作,
#    即丢弃高位部分32,留下00即10进制0 ,此时变量 a 的值为 0
set ip=%ip%.%a%
#    将变量 ip 的值更改为 192.168.0
set /a a=*0x8288>>24&0xff
#    使用 >> 按位右移运算符,16进制00a8c0是二进制24位,右移24位后变成0x32,再按位0xff与操作,
#    现在只需要将0x32转换为10进制就可以了,此时变量 a 的值为 50
set ip=%ip%.%a%
#    将变量 ip 的值更改为 192.168.0.50,至此转换完成,成功将16进制ip地址转换为10进制下的地址
echo %ip%
显示变量ip值

echo %ip% > (fd0)/Settftpd.cmd
#    将显示内容重定向输出到文件
chainloader --raw (pd)/BOOT/PXELDR.0  (这是从README_GRUB4DOS_CN.txt今年2月1日版本里附带的示例中学的)

MapW里加上
call (fd0)\SETTFTPD.CMD
set PXE_SERVER=%Tftp_Server%

有关说明如下:
1、PXE.IMG全空的和加空文件都试过,SETTFTPD.CMD直接放在根目录是为了03与W7通用,加--unsafe-boot参数,g4d教程说使map磁盘可写,不知对否。
2、开始网启时进不了PE,明明IP地址没错可一直重启,折腾了2天试过改编过各家的DHCP与TFTP情况一样,后来加--raw和(pd),子菜单前用RUN才得以搞定。
3、最关键的一步仍是SETTFTPD.CMD千呼万唤出不来,好像是没有写进去,前面部分是sratlf版主的示例不会错,粗体是我写的,估计有地方搞得不对,故再次恳请P大指教,最好能给个成功的示例。
DOS命令、g4d命令、pecmd命令,还有com、bat、ini 等等,变化万千,用起来真的很难,从未学过者看着就像是天书。这两三年来无忧论坛后开始有所接触,也学到了不少,但仅是皮毛而已。

[ 本帖最后由 hpy7332 于 2012-3-12 22:20 编辑 ]
回复

使用道具 举报

4077#
 楼主| 发表于 2012-3-12 23:29:47 | 只看该作者
  1. echo %ip%
  2. 显示变量ip值
  3. echo %ip% > (fd0)/Settftpd.cmd
复制代码

改为:


  1. echo ip=%ip%
  2. pause
  3. set ip=111.222.333.444
  4. echo ip=%ip%
  5. pause
  6. cat (fd0)/Settftpd.cmd
  7. pause
  8. echo set PXE_SERVER=%ip% > (fd0)/Settftpd.cmd
  9. cat (fd0)/Settftpd.cmd
  10. pause
复制代码



  1. call (fd0)\SETTFTPD.CMD
  2. set PXE_SERVER=%Tftp_Server%
复制代码

改为

  1. dir a:\Settftpd.cmd
  2. pause
  3. type a:\Settftpd.cmd
  4. pause
  5. call a:\Settftpd.cmd
  6. echo now PXE_SERVER is %PXE_SERVER%
  7. pause
复制代码
回复

使用道具 举报

4078#
发表于 2012-3-13 00:19:12 | 只看该作者
p大,想替换DOS工具箱,但替换后无法引导,不知道桌面回事,还有就是想把高亮显示条移动到第一个启动项上,打开MENU.OPE后不知道怎么写,望指点一二
回复

使用道具 举报

4079#
 楼主| 发表于 2012-3-13 12:32:31 | 只看该作者

回复 #4080 2011wyz112233 的帖子

把dos工具箱例如MAXDOS9.1-xg3z.img放入
/boot/imgs/
目录,与原有dg.img并列。选run模块菜单项启动它就行了。
进一步,各种工具箱、pe都可以扔进该目录,免写菜单。
放在其它分区、目录也行,但可能要输入一些信息,告诉run模块东西在哪里。

默认菜单项由0penb.lzma里m1.lst文件的default语句控制。修改这个麻烦些。
出菜单后可以按数字键4使第一个启动项高亮。

[ 本帖最后由 pseudo 于 2012-3-13 12:34 编辑 ]
回复

使用道具 举报

4080#
发表于 2012-3-13 19:25:45 | 只看该作者
原帖由 pseudo 于 2012-3-12 23:29 发表
echo %ip%
显示变量ip值
echo %ip% > (fd0)/Settftpd.cmd
改为:

还是把SETTFTPD.CMD放到WXPE文件夹,下面是截图
获取服务器ip地址

按原来写入到(fd0)/

改为写入到a:\

服务器ip地址是对的,但都未能写入到指定的文件。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-29 13:22

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表