无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: sratlf
打印 上一主题 下一主题

[分享] RUN 1206 更新 支持磁盘交换,文件检索,自动菜单,自动列表,全自动安装nt5x系统

    [复制链接]
2641#
发表于 2014-6-4 10:11:36 | 只看该作者
S大,RUN不支持f6img打包为gz吗?

  1. command RUN --swap --swap-ext --fira srs:/srs/ sif iso=/ISOS/WINXP.ISO
复制代码




回复

使用道具 举报

2642#
 楼主| 发表于 2014-6-4 10:19:23 | 只看该作者
chanel 发表于 2014-6-4 10:11
S大,RUN不支持f6img打包为gz吗?

只支持类似这样的单独打包  不支持整体打包



你那个f6img.gz解开是什么

点评

解开后是F6IMG.IMG,就是散开的驱动包打包为软盘镜像,再压缩为gz。  详情 回复 发表于 2014-6-4 10:29
回复

使用道具 举报

2643#
发表于 2014-6-4 10:29:34 | 只看该作者
本帖最后由 chanel 于 2014-6-4 10:33 编辑
sratlf 发表于 2014-6-4 10:19
只支持类似这样的单独打包  不支持整体打包


解开后是F6IMG.IMG,就是散开的驱动包打包为软盘镜像,再压缩为gz。

我原先也是用你上一楼的那样的lzma,后来看srsf6支持f6img.gz,所以想用你的RUN尝试一下,看看是否也支持f6img.gz。
回复

使用道具 举报

2644#
 楼主| 发表于 2014-6-5 22:51:22 | 只看该作者
chanel 发表于 2014-6-4 10:29
解开后是F6IMG.IMG,就是散开的驱动包打包为软盘镜像,再压缩为gz。

我原先也是用你上一楼的那样的l ...

试试这个版本  还是用#2641的命令就可以   成功的话麻烦再试试  srs:/SRS/F6IMG.GZ  命令

RUN.zip

143.43 KB, 下载次数: 6, 下载积分: 无忧币 -2

回复

使用道具 举报

2645#
发表于 2014-6-6 11:48:58 | 只看该作者
sratlf 发表于 2014-6-3 16:05
恩  #1的那个只是改了结构  备注下做了哪些改变  并不是说完全没有bug了。。。  帖子标题上列出的会是最 ...


在虚拟机和实机上测试了一下新的RUN,结果如下:

1、
  1. command RUN --swap --swap-ext --fira srs:/srs/ sif iso=/ISOS/WINXP.ISO
复制代码


加载各项参数成功,顺利找到硬盘。





2、
  1. command RUN --swap-ext --fira srs:/srs/F6IMG.GZ sif iso=/ISOS/WINXP.ISO
复制代码


结果同上,加载各项参数成功,顺利找到硬盘。

3、srs:/srs/F6IMG.GZ改为srs:/srs/DPMS.lzma也成功。

4、srs:/srs/F6IMG.GZ改为srs:/srs/SRSF6N.lzma则未成功,出错,7B蓝屏。
回复

使用道具 举报

2646#
 楼主| 发表于 2014-6-6 13:27:12 | 只看该作者
chanel 发表于 2014-6-6 11:48
在虚拟机和实机上测试了一下新的RUN,结果如下:

1、

把你的f6img.gz和srsf6n.lzma给我一份我测试下

点评

http://pan.baidu.com/s/1i3sqSBV  详情 回复 发表于 2014-6-6 13:41
回复

使用道具 举报

2647#
发表于 2014-6-6 13:41:29 | 只看该作者
sratlf 发表于 2014-6-6 13:27
把你的f6img.gz和srsf6n.lzma给我一份我测试下

http://pan.baidu.com/s/1i3sqSBV
回复

使用道具 举报

2648#
 楼主| 发表于 2014-6-6 18:30:36 | 只看该作者
chanel 发表于 2014-6-6 13:41
http://pan.baidu.com/s/1i3sqSBV

srsf6n的驱动包没办法支持了  如果想支持的话还得吧srsf6n移植进来。。。

点评

能支持f6img.gz和srsf6n.lzma就够了。  详情 回复 发表于 2014-6-6 20:03
回复

使用道具 举报

2649#
发表于 2014-6-6 20:03:28 | 只看该作者
本帖最后由 chanel 于 2014-6-6 20:17 编辑
sratlf 发表于 2014-6-6 18:30
srsf6n的驱动包没办法支持了  如果想支持的话还得吧srsf6n移植进来。。。


能支持f6img.gz和dpms.lzma就够了。

  1. command RUN --swap --swap-ext --fira srs:/srs/ sif iso=/ISOS/WINXP.ISO
复制代码


假设加载f6img.gz错误或者不存在f6img.gz,则自动加载dpms.lzma,这样就可以了。现在看应该达到了这个目的。
回复

使用道具 举报

2650#
 楼主| 发表于 2014-6-6 21:09:11 来自手机 | 只看该作者
chanel 发表于 2014-6-6 20:03
能支持f6img.gz和dpms.lzma就够了。



恩,这个是没问题的
回复

使用道具 举报

2651#
发表于 2014-6-6 22:01:49 | 只看该作者
本帖最后由 goodtime 于 2014-6-6 22:11 编辑

command (ud)/boot/RUN --loadfont  --swap-all --fira:(ud)/boot/imgs/firadisk.img dpms:(ud)/boot/imgs/dpms.lzma sif iso=/boot/xp.iso 我的错误在那里呢, 安装时候总是找不到文件, 虚拟机环境

error.jpg (46.3 KB, 下载次数: 164)

error.jpg

message.jpg (97.83 KB, 下载次数: 175)

message.jpg
回复

使用道具 举报

2652#
发表于 2014-6-6 22:45:19 | 只看该作者
sratlf 发表于 2014-6-6 21:09
恩,这个是没问题的


S大,新版DP_MassStorage打包方式改变了,有些ID会出错。
http://bbs.wuyou.net/forum.php?m ... &fromuid=378114


驱动官方论坛:
http://forum.driverpacks.net/viewtopic.php?pid=57592#p57592


修改后的DPMS和驱动包:
http://yun.baidu.com/share/link? ... 2&uk=2098012847
回复

使用道具 举报

2653#
 楼主| 发表于 2014-6-6 23:51:59 | 只看该作者
goodtime 发表于 2014-6-6 22:01
command (ud)/boot/RUN --loadfont  --swap-all --fira:(ud)/boot/imgs/firadisk.img dpms:(ud)/boot/imgs/ ...

不太确定  但貌似和#2613差不多  你可以参考下#2614的解决方法
回复

使用道具 举报

2654#
发表于 2014-6-7 02:25:55 | 只看该作者
sratlf 发表于 2014-6-6 23:51
不太确定  但貌似和#2613差不多  你可以参考下#2614的解决方法

谢谢, 真的是2614同样的问题
回复

使用道具 举报

2655#
发表于 2014-6-7 09:37:24 来自手机 | 只看该作者
s大最近好勤奋
回复

使用道具 举报

2656#
 楼主| 发表于 2014-6-7 11:11:03 | 只看该作者
527104427 发表于 2014-6-6 22:45
S大,新版DP_MassStorage打包方式改变了,有些ID会出错。
http://bbs.wuyou.net/forum.php?mod=redire ...

这段麻烦加点注释吧  基本没看懂。。。
  1. :root_path
  2. if "%~1"=="" && exit
  3. setlocal
  4. set tmp=%~1
  5. set tmp_left=%tmp:~,-16%
  6. set /a tmp_len=%@retval%
  7. cat --locatei="%tmp:~-16%" /driverpack.ini | call :check_tmp=
  8. set /a left_skip=%tmp_skip%

  9. :check_[
  10. if "%left_skip%"=="0" && goto :exit_check
  11. set /a left_skip=%left_skip%-500
  12. if "%left_skip%"<="0" && set /a left_skip=0
  13. set /a left_len=%tmp_skip%-%left_skip%
  14. cat --skip=%left_skip% --length=%left_len% --locatei=[ /driverpack.ini | call :check_left
  15. if not exist [_skip && goto :check_[
  16. cat --skip=%[_skip% --number=1 --locatei=] /driverpack.ini > nul
  17. set /a ]_skip=%?%
  18. if "%]_skip%"=="0" && goto :exit_check
  19. set /a len=%]_skip%-%[_skip%-1
  20. set /a skip=%[_skip%+1
  21. echo -n > (md)0x28150+28
  22. cat --skip=%skip% --length=%len% /driverpack.ini > (md)0x28150+28
  23. cat --locate=\x2D --replace=\x2F (md)0x28150+28
  24. cat (md)0x28150+28 | set /u root=D/M/
  25. :exit_check
  26. endlocal && set root=%root%
  27. exit

  28. :check_left
  29. if "%~1"=="" && exit
  30. if "%~2"=="" && set /a [_skip=0x%~1 && exit
  31. shift 1
  32. goto :check_left

  33. :check_tmp
  34. if "%~1"=="" && set tmp_skip= && exit
  35. set /a tmp_skip=0x%~1
  36. if "%tmp_left%"=="" && exit
  37. set /a tmp_skip=%tmp_skip%-%tmp_len%
  38. cat --skip=%tmp_skip% --length=%tmp_len% /driverpack.ini | set tmp=
  39. if /i "%tmp%"=="%tmp_left%" && exit
  40. shift 1
  41. goto :check_tmp
复制代码
回复

使用道具 举报

2657#
发表于 2014-6-7 11:44:27 | 只看该作者
本帖最后由 527104427 于 2014-6-7 23:35 编辑
sratlf 发表于 2014-6-7 11:11
这段麻烦加点注释吧  基本没看懂。。。


我的思路是这样的,找到对应ID所在段的标志,也就是括号 [] 里面的内容。将 - 替换为/,前面再加上D/M,就是驱动的目录了。

回复

使用道具 举报

2658#
发表于 2014-6-7 14:23:36 | 只看该作者
本帖最后由 527104427 于 2014-6-7 16:21 编辑

这样似乎好一点,不知道S大有没有简便的办法



  1. ::%~1=pci\ven_8086&dev_3a22&cc_0106
  2. call :root_path ",%~1,"
  3. echo %root%
  4. exit

  5. :root_path
  6. if "%~1"=="" && exit
  7. setlocal
  8. set *
  9. set tmp=%~1

  10. :loop_tmp
  11. ::去掉后面的16个字符
  12. set tmp_left=%tmp:~,-16%
  13. set /a tmp_len=%@retval%
  14. ::搜索ID最后的16个字符,貌似最多只能搜16个,将找到后的位置赋值给tmp_skip
  15. cat --locatei="%tmp:~-16%" /driverpack.ini | call :check_tmp=
  16. ::假如搜不到,去掉第一个逗号继续搜
  17. if not exist tmp_skip && if "%tmp:~,1%"=="," && set tmp=%tmp:~1% && goto :loop_tmp
  18. ::再搜不到,去掉最后一个逗号继续搜
  19. if not exist tmp_skip && if "%tmp:~-1%"=="," && set tmp=%tmp:~,-1% && goto :loop_tmp
  20. set /a left_skip=%tmp_skip%

  21. :check_[
  22. ::下面就是搜索 [ ,往前搜500个字符。找不到再往前搜500个字符,依此循环至0位置
  23. if "%left_skip%"=="0" && goto :ext_check
  24. set /a left_skip=%left_skip%-500
  25. if "%left_skip%"<="0" && set /a left_skip=0
  26. set /a left_len=%tmp_skip%-%left_skip%
  27. cat --skip=%left_skip% --length=%left_len% --locatei=[ /driverpack.ini | call :check_left=
  28. if not exist [_skip && goto :check_[
  29. ::找到 [ 了,继续找 ],找到后提取 [] 里面的内容
  30. cat --skip=%[_skip% --number=1 --locatei=] /driverpack.ini > nul
  31. set /a ]_skip=%?%
  32. if "%]_skip%"=="0" && goto :ext_check
  33. set /a len=%]_skip%-%[_skip%-1
  34. set /a skip=%[_skip%+1
  35. echo -n > (md)0x28150+28
  36. cat --skip=%skip% --length=%len% /driverpack.ini > (md)0x28150+28
  37. ::将 - 替换为 / ,然后在前面加上 D/M/
  38. cat --locate=\x2D --replace=\x2F (md)0x28150+28
  39. cat (md)0x28150+28 | set /u root=D/M/
  40. :ext_check
  41. endlocal && set root=%root%
  42. exit

  43. :check_left
  44. ::假如搜到的结果有多个,那就取最靠近 [ 的那个
  45. if "%~1"=="" && exit
  46. if "%~2"=="" && set /a [_skip=0x%~1 && exit
  47. shift 1
  48. goto :check_left

  49. :check_tmp
  50. ::找到的结果应该不止一个,那就再截取前面的%tmp_len%个字符和%tmp_left%比较,假如相同,那就找到了ID的位置
  51. if "%~1"=="" && set tmp_skip= && exit
  52. set /a tmp_skip=0x%~1
  53. if "%tmp_left%"=="" && exit
  54. set /a tmp_skip=%tmp_skip%-%tmp_len%
  55. cat --skip=%tmp_skip% --length=%tmp_len% /driverpack.ini | set tmp_tmp=
  56. if /i "%tmp_tmp%"=="%tmp_left%" && exit
  57. shift 1
  58. goto :check_tmp
复制代码
回复

使用道具 举报

2659#
 楼主| 发表于 2014-6-7 22:15:49 | 只看该作者
527104427 发表于 2014-6-7 14:23
这样似乎好一点,不知道S大有没有简便的办法

恩  大概明白了  就是查找id所在的[]里的内容  同时将可能存在的-替换为/
回复

使用道具 举报

2660#
 楼主| 发表于 2014-6-7 23:24:56 | 只看该作者
527104427 发表于 2014-6-7 14:23
这样似乎好一点,不知道S大有没有简便的办法

有一个问题  类似 PCI\VEN_1000&DEV_0054 这个id在 L  L7  L8 三项里都有  怎么处理
回复

使用道具 举报

2661#
发表于 2014-6-7 23:34:03 | 只看该作者
sratlf 发表于 2014-6-7 23:24
有一个问题  类似 PCI\VEN_1000&DEV_0054 这个id在 L  L7  L8 三项里都有  怎么处理

是这样的,先在前面加两个逗号,

call :root_path    ",PCI\VEN_1000&DEV_0054,"


优先查找,就可以快速找到在 L 那里,找不到再去掉前面的逗号,都找不到,那就两个逗号都去掉
回复

使用道具 举报

2662#
 楼主| 发表于 2014-6-7 23:42:07 | 只看该作者
527104427 发表于 2014-6-7 23:34
是这样的,先在前面加两个逗号,

call :root_path    ",PCI\VEN_1000&DEV_0054,"

不是这个意思  我是说  PCI\VEN_1000&DEV_0054  这个结果  我再  L  L7  L8 三项里都找到了

是如果L项就完全符合的话就获取L项的路径  还是说L项完全符合依然继续尝试L7和L8的是否匹配
回复

使用道具 举报

2663#
发表于 2014-6-7 23:52:20 | 只看该作者
sratlf 发表于 2014-6-7 23:42
不是这个意思  我是说  PCI\VEN_1000&DEV_0054  这个结果  我再  L  L7  L8 三项里都找到了

是如果L项 ...


找到第一个完全匹配的就不再找了
回复

使用道具 举报

2664#
 楼主| 发表于 2014-6-8 02:25:06 | 只看该作者
本帖最后由 sratlf 于 2014-6-8 02:38 编辑
527104427 发表于 2014-6-7 23:52
找到第一个完全匹配的就不再找了


看看这个怎么样  没实际测试过

  1. set inipath=/boot/grub/driverpack.ini

  2. :root_path
  3. if "%~1"=="" && exit
  4. set tmp=
  5. set HWID=%~1
  6. cat --locatei="%HWID:~-16%" %inipath% | call :hwid_check %@retval%
  7. if "%tmp%"=="" && exit
  8. call :get_[ %tmp% 1024 || exit
  9. ::tmp值为最近[位置
  10. set /a tmp=%?% + 1 > nul
  11. cat --skip=%tmp% --locate="]" --number=1 %inipath% > nul || exit
  12. calc %?% - %tmp% > nul
  13. cat --skip=%tmp% --length=%@retval% %inipath% > (md)0x200+1
  14. cat --locate=\x2D --replace=\x2F (md)0x200+1 > nul
  15. cat (md)0x200+1 | set /u root=D/M/
  16. exit

  17. :hwid_check
  18. ::tmp值为匹配ID位置
  19. set tmp=
  20. if "%~2"=="" && exit
  21. calc 0x%~2 - %~1 + 16 > nul
  22. cat --skip=%@retval% --length=%~1 %inipath% | set tmp=
  23. call Fn.15 "%HWID%" "%tmp%" && shift 2 && goto :hwid_check
  24. set /a tmp=0x%~2 - %~1 + 16 > nul
  25. exit

  26. :get_[
  27. ::tmp值为检测段开始位置,每次检测1kb
  28. if "%tmp%"<="%~2" && set tmp=0 ! set /a tmp=%tmp% - %~2 > nul
  29. cat --skip=%tmp% --length=%~2 --locate="[" %inipath% > nul && exit
  30. if "%tmp%"<="0" && exit 1
  31. goto :get_[
复制代码
回复

使用道具 举报

2665#
发表于 2014-6-8 13:27:59 | 只看该作者
本帖最后由 527104427 于 2014-6-8 13:29 编辑
sratlf 发表于 2014-6-8 02:25
看看这个怎么样  没实际测试过


修改了一下,用下面的ID都测试通过了

set inipath=/boot/grub/driverpack.ini
::call :root_path  PCI\VEN_13C1&DEV_1000
::call :root_path  pci\ven_197b&dev_2368
::call :root_path  PCI\VEN_1000&DEV_0054
call :root_path  pci\ven_8086&dev_3a22&cc_0106
exit

:root_path
if "%~1"=="" && exit
set tmp=
set /u HWID=%~1
cat --locatei="%HWID:~-16%" %inipath% | call :hwid_check %@retval%
if "%tmp%"=="" && exit
call :get_[ %tmp% 1024 || exit
::tmp值为最近[位置
set /a tmp=%?% + 1 > nul
cat --skip=%tmp% --locate=] --number=1 %inipath% > nul || exit
calc %?% - %tmp% > nul
cat --skip=%tmp% --length=%@retval% %inipath% > (md)0x200+1
cat --locate=\x2D --replace=\x2F (md)0x200+1 > nul
cat (md)0x200+1 | set /u root=D/M/
exit

:hwid_check
::tmp值为匹配ID位置
set tmp=
if "%~2"=="" && exit
calc 0x%~2 - %~1 + 16 > nul
cat --skip=%@retval% --length=%~1 %inipath% | set /u tmp=
call Fn.15 "%HWID%" "%tmp%" && shift 2 && goto :hwid_check
::紧跟ID后面的必须是双引号或逗号,否则重新搜索
::比如ID为PCI\VEN_1000&DEV_0054,搜到的却是PCI\VEN_1000&DEV_0054&SUBSYS_1F041028
calc 0x%~2 + 16 > nul
cat --hex --skip=%@retval% --length=1 %inipath% | call :get_last=
call Fn.15 "22" "%tmp%" && call Fn.15 "2C" "%tmp%" && shift 2 && goto :hwid_check
set /a tmp=0x%~2 - %~1 + 16 > nul
exit

:get_last
set tmp=%~2
exit

:get_[
::tmp值为检测段开始位置,每次检测1kb,比较数值大小不能加双引号,否则出错
if %tmp%<=%~2 && set len=%tmp% && set tmp=0 ! set len=%~2 && set /a tmp=%tmp% - %~2 > nul
cat --skip=%tmp% --length=%len% --locate=[ %inipath% > nul && exit
if %tmp%<=0 && exit 1
goto :get_[
回复

使用道具 举报

2666#
 楼主| 发表于 2014-6-8 14:11:05 | 只看该作者
本帖最后由 sratlf 于 2014-6-8 14:22 编辑
527104427 发表于 2014-6-8 13:27
修改了一下,用下面的ID都测试通过了

set inipath=/boot/grub/driverpack.ini


用不着这么麻烦  下面这样就可以了  忘记了  数值比较的话是不能用""  做字符比较的时候可以

  1. :hwid_check
  2. ::tmp值为匹配ID位置
  3. set tmp=
  4. if "%~2"=="" && exit
  5. calc 0x%~2 + 16 > nul
  6. cat --skip=%@retval% --length=1 %inipath% | set tmp=
  7. ::不以,或"结尾则继续
  8. if "%tmp%"=="," || if "%tmp%">="0x22" if "%tmp%"<="0x22" || shift 2 && goto :hwid_check
  9. calc 0x%~2 - %~1 + 16 > nul
  10. cat --skip=%@retval% --length=%~1 %inipath% | set tmp=
  11. call Fn.15 "%HWID%" "%tmp%" && shift 2 && goto :hwid_check
  12. set /a tmp=0x%~2 - %~1 + 16 > nul
  13. exit

  14. :get_[
  15. ::tmp值为检测段开始位置,每次检测1kb
  16. if %tmp%<=%~2 && set tmp=0 ! set /a tmp=%tmp% - %~2 > nul
  17. cat --skip=%tmp% --length=%~2 --locate="[" %inipath% > nul && exit
  18. if %tmp%<=0 && exit 1
  19. goto :get_[
复制代码

捕获.PNG (11.74 KB, 下载次数: 196)

捕获.PNG
回复

使用道具 举报

2667#
发表于 2014-6-8 14:35:49 | 只看该作者
sratlf 发表于 2014-6-8 14:11
用不着这么麻烦  下面这样就可以了  忘记了  数值比较的话是不能用""  做字符比较的时候可以

if "%tmp%"==","  ||

这句还是有问题的,假如tmp为"
不管三七二十一,直接报错退出了






用PCI\VEN_13C1&DEV_1000试试,
结果应是D/M/3,看截图,结果却是D/M/A
所以下面这段还是这样:

:get_[
::tmp值为检测段开始位置,每次检测1kb,比较数值大小不能加双引号,否则出错
if %tmp%<=%~2 && set len=%tmp% && set tmp=0 ! set len=%~2 && set /a tmp=%tmp% - %~2 > nul
cat --skip=%tmp% --length=%len% --locate="[" %inipath% > nul && exit
if %tmp%<=0 && exit 1
goto :get_[
回复

使用道具 举报

2668#
 楼主| 发表于 2014-6-8 14:42:54 | 只看该作者
527104427 发表于 2014-6-8 14:35
if "%tmp%"==","  ||

这句还是有问题的,假如tmp为"

判断 " 用的是 if "%tmp%">="0x22" if "%tmp%"<="0x22"  你试下就知道了  比较加引号会转为比较ascii码

:get_[我在看下
回复

使用道具 举报

2669#
发表于 2014-6-8 14:45:26 | 只看该作者
sratlf 发表于 2014-6-8 14:42
判断 " 用的是 if "%tmp%">="0x22" if "%tmp%"

回复

使用道具 举报

2670#
 楼主| 发表于 2014-6-8 14:50:30 | 只看该作者
本帖最后由 sratlf 于 2014-6-8 14:51 编辑


是比较  不是等于。。。 见图  :get_[可以改为下面这样  都差不多  不过我是尽量不设置太多变量名

  1. :get_[
  2. ::tmp值为检测段开始位置,每次检测1kb
  3. if %tmp%<=%~2 && set tmp=0 && calc %~1 > nul ! set /a tmp=%tmp% - %~2 > nul && calc %~2 > nul
  4. cat --skip=%tmp% --length=%@retval% --locate="[" %inipath% > nul && exit
  5. if %tmp%<=0 && exit 1
  6. goto :get_[
复制代码

捕获.PNG (7.25 KB, 下载次数: 206)

捕获.PNG
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-10 11:09

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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