无忧启动论坛

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

[20100626正式版]SRS_F6 公用性SRS驱动的F6模块—XP/2003安装及PE 1.x的SRS驱动不愁缺

[复制链接]
271#
发表于 2010-1-4 21:36:44 | 只看该作者
好吧,我找段时间消化一下grub原码,再弄一个chkacpi(检测acpi获得的信息比pci多多了,连cpu也可以检测*^_^*),但最近可能要实施一个crm项目,估计要落到过年后。
回复

使用道具 举报

272#
发表于 2010-1-4 21:45:50 | 只看该作者
我再附上一点资料,grub4dos的readme中的。
******************************************************************************
***                          Running User Programs                         ***
******************************************************************************

From 0.4.5 on, user programs can be developed for running under grub4dos. The
executable program file must end with the 8-byte grub4dos EXEC signature:

                0x05, 0x18, 0x05, 0x03, 0xBA, 0xA7, 0xBA, 0xBC

The executable must have no relocations, and the entry point is at the very
beginning of the file, just like a DOS .com file(but the grub4dos executable
is 32-bit).

Here is a sample file echo.c:

/*================ begin echo.c ================*/

/*
* compile:                       

gcc -nostdlib -fno-zero-initialized-in-bss -fno-function-cse -fno-jump-tables -Wl,-N -fPIE echo.c

* disassemble:                        objdump -d a.out
* confirm no relocation:        readelf -r a.out
* generate executable:                objcopy -O binary a.out b.out
*
* and then the resultant b.out will be grub4dos executable.
*/

/*
* This is a simple ECHO command, running under grub4dos.
*/

int i = 0x66666666;        /* this is needed, see the following comment. */

/* gcc treat the following as data only if a global initialization like the
* above line occurs.
*/

/* a valid executable file for grub4dos must end with these 8 bytes */
asm(".long 0x03051805");
asm(".long 0xBCBAA7BA");
/* thank goodness gcc will place the above 8 bytes at the end of the b.out
* file. Do not insert any other asm lines here.
*/

int
main()
{
        void *p = &main;

        return
        /* the following line is calling the grub_sprintf function. */
        ((int (*)(char *, const char *, ...))((*(int **)0x8300)[0]))
        /* the following line includes arguments passed to grub_sprintf. */
                (0, p - (*(int *)(p - 8)));
}

/*================  end  echo.c ================*/

0x8300 is a pointer to the grub4dos system funtions(API). The system_functions
variable is defined in asm.S.
回复

使用道具 举报

273#
发表于 2010-1-4 21:57:28 | 只看该作者
原帖由 netwinxp 于 2010-1-4 21:14 发表
由于本人没阅读过GRUB的源码,不清楚如何调用GRUB中的某些功能,也不清楚被GRUB如何调用和返回自定义模块(RETF不知能不能返回GRUB),否则CHKPCI完全可以做成不依靠DOS(CHKPCI目前除了显示部分外根本不依靠DOS、BIOS),稍加修改还可以做到CHKACPI(酱紫检测硬件就更准确了)。


新版 grub4dos 的 readme 中有一个样板文件 echo.c(这个文件的内容嵌入在 readme 文件中),你照葫芦画瓢就可以制作你自己的程序了。在 echo.c 中有注释,详细说明了如何编译它。

如果你需要调用 grub4dos 里面的别的什么函数,你再修改一下 grub4dos 的源码,把你想调用的函数的地址放在 system_functions 数组中就可以了。

echo.c 中的最后一个语句就是调用 grub4dos 的 sprintf 函数。你在源代码中查找 system_functions,会发现其中有一些函数已经处于这个数组中了。如果你觉得还有别的函数需要放在这个数组中,你可以自己添加上,或者给开发者写信。

根据你的描述,CHKPCI目前除了显示部分外根本不依靠DOS、BIOS,所以,我觉得 CHKPCI 完全可以写成 grub4dos 的程序。显示输出的部分可以参照 echo.c 对 sprintf 的调用。grub4dos 的程序不是用 retf 返回的,而是用 ret 来返回到 grub4dos 的。注意,grub4dos 的程序是 32 位的,不是 16 位的。你最好用 C 语言来写程序。如果你用汇编来写,你得保证你的代码是与装入位置无关的。对于 C 语言程序,gcc 的编译选项 -fPIE 可以保证编译的结果是与装入位置无关的。

@chenall

grub4dos 的内存空间的紧张虽然已经缓解,不存在问题了。但是,grldr 文件的大小也已经接近极限。它的极限是 256K。所以,最好不要再增加命令了。如果想增加命令,就得删除一些不重要的命令。

所以,最好是编写外部程序。看来你也得往这方面考虑了。

[ 本帖最后由 不点 于 2010-1-4 22:11 编辑 ]
回复

使用道具 举报

274#
发表于 2010-1-4 22:14:05 | 只看该作者
多谢不点指导,由于本人用的32位汇编是masm32只适合写windows程序,看来只好再学学好久没用过的c了:)
另外建议grub4dos如果可能的话保留8k左右空间作为数据交换区。

[ 本帖最后由 netwinxp 于 2010-1-4 22:30 编辑 ]
回复

使用道具 举报

275#
发表于 2010-1-4 22:33:26 | 只看该作者
用vc6来写的话,编译选项如何选择?
回复

使用道具 举报

276#
发表于 2010-1-4 23:10:33 | 只看该作者
这个恐怕不能用 gcc 以外的编译器了。我们严重依赖 gcc 的编译风格。尤其重要的是 -fPIE 选项,这个不知道 VC 有没有对应的选项。另外,我们还依赖 objcopy 来从 a.out 生成 b.out 文件。你可以试试 msys,这个是 bean 在去年就弄好了的,运行在 windows 下,支持 gcc。
回复

使用道具 举报

277#
发表于 2010-1-4 23:46:13 | 只看该作者
@不点
现在已经24XKB了,我也是认为如非必要,能够使用编写外部命令实现的就用外部命令。

还得再进一步学习,没系统学习过编程,只是根据兴趣爱好,有兴趣就学点。呵呵。

目前很多C语言的知识我还是一知半解的,^_^.嘿嘿。
回复

使用道具 举报

278#
发表于 2010-1-5 00:17:45 | 只看该作者
根据自己亲身的体验,我或许有资格这么说:一个东西,当对于你来说有挑战、有难度的时候,你才愿意去学,你才愿意去做。反之,当一个任务对你来说简直太容易了的时候,你就失去兴趣了。就像谈恋爱,当有人追你的时候,很可能你对她并不感冒。而你去追的人,很可能对你也不感冒。但是追求的过程就是一种探险,一种享受。所以,大家都喜欢去追求。

我们对 grub4dos 进一步发展的一系列探索,可以说很长很长。经过了无数次的思考、实践,最后走上了这条并不困难的道路。但是,发现这条道路的探索过程,却花费了好几年的时间,有无数的人参与了讨论,贡献了智慧。

其实这个过程是典型的“摸着石头过河”,前头的路是怎样的,谁也不知道。但是,因此我们都会成为创造者。这种体验就是探险的那种体验,是很有魅力的,是很刺激的。

@netwinxp

grub4dos 处于不断发展中。很多东西需要建立和完善。由于我们是摸着石头过河,所以,很多时候并不知道怎么做才好。需要从编程的实践中提取有用的素材,从有利于编程的角度考虑,对grub4dos的内核提出要求,而在内核中加以实现,这样就行了。

比如说,你的程序需要 8K 的空间。这 8K 究竟是干什么用的?我就不太清楚。而你,作为应用程序的设计者,你肯定知道为什么需要这 8K,以及如何使用这 8K。那么,如果由你来为内核添加功能,开辟出 8K 的保留空间,那就是最自然的了。这 8K 究竟是必须在常规内存中呢,还是可以放在扩展内存中,你也是最了解的。为什么不多不少应该是 8K 呢,你也知道。所以,你还需要成为 grub4dos 的内核的设计者。我可以肯定,只要你愿意,你绝对行。只怕你不愿意在这方面付出。

由于时空论坛宕掉了,我在这里简单重复一下 grub4dos 的程序文件结构和进程的布局。grub4dos 的程序文件完全类似于 DOS 的 com 程序,文件的开头就是程序的入口。所不同的是:

1。grub4dos 的程序是32位的。DOS 的 COM 程序是 16 位的。
2。grub4dos 的程序尾部有 8 个字节的标签,是可执行程序的合法标志。DOS 的 com 程序没有这类的检查。
3。grub4dos 的程序文件的长度没有限制,而 DOS 的 com 程序文件的长度只能在 64K 以内。
4。grub4dos 的程序在内存中的映像可以装入在任何地址处,段寄存器固定不动,所有的保护模式的段的基地址都是 0。
   而 DOS 的 com 程序必须从 CS 段的偏移 0x100 处开始运行,DOS 在装入 COM 程序之前需要确定 CS 的值。
5。grub4dos 也有一个程序段前缀 PSP。但是,这个 PSP 的大小不再是固定的 0x100 的长度。grub4dos 的 PSP 存在的目的也是为程序提供必要的信息。内核中的程序映像装载器在装载程序之前,先建立一个 PSP。紧接 PSP 之后,就是程序映像的装入点了,这一点也类似于 DOS 的 COM 程序。目前的 PSP 中放置了传递给程序的命令行。命令行的地址记录在偏移 -8 的位置,这个偏移是相对于映像装入点来说的。记录的命令行的地址也是相对的,它其实只是一个正数,是命令行到映像装入点的距离(以字节计)。目前没有实现环境支持。




[ 本帖最后由 不点 于 2010-1-5 08:39 编辑 ]
回复

使用道具 举报

279#
发表于 2010-1-6 15:09:38 | 只看该作者
报告:虚拟机测试 有两块磁盘 一块是创建的虚拟机磁盘(里面放WIN$.ISO) 另一个磁盘是我添加的本机的物理磁盘(此磁盘MBR导入G4D了) 下载SRS_F6元旦版本 生成SRS_F6.ISO放在添加的本机物理磁盘中 这时候在虚拟机中用添加的物理磁盘启动进入G4D 然后运行
    map --mem /srs_f6.iso (0xff)
      map --hook
      chainloader (0xff)
      boot
这时候进入srs_f6的菜单 选择第2项 从WIN$.ISO安装XP/2003 到find --set-root /SRS_F6/SRS/ZIP会出错 出错的原因应该是(0Xff)被WIN$.ISO仿真占用 这时候就找不到SRS.ZIP了 相应的解决就是:从虚拟机启动进入G4D 然后运行
    map --mem /srs_f6.iso (hd32)
      map --hook
      chainloader (hd32)
      boot
这样再仿真WIN$.ISO就没问题了
回复

使用道具 举报

280#
 楼主| 发表于 2010-1-7 16:30:53 | 只看该作者

回复 #279 zoom4ever 的帖子

那干脆把SRS_F6.ISO map成(hd32)吧。
回复

使用道具 举报

281#
 楼主| 发表于 2010-1-7 16:32:40 | 只看该作者

回复 #264 netwinxp 的帖子

不过,这个方式实现可能又要增添难度。
回复

使用道具 举报

282#
 楼主| 发表于 2010-1-7 16:39:01 | 只看该作者
我目前在学校,周六回来更新。
回复

使用道具 举报

283#
发表于 2010-1-7 18:08:02 | 只看该作者
期待N版的新作。。。
你的作品,对于那个ghost系统来说,意义不是一般的大。
回复

使用道具 举报

284#
 楼主| 发表于 2010-1-9 21:56:44 | 只看该作者
新版的SRS_F6支持无人应答安装,明天发布。
回复

使用道具 举报

285#
发表于 2010-1-9 22:07:27 | 只看该作者
好贴




明天继续
回复

使用道具 举报

286#
发表于 2010-1-10 04:23:32 | 只看该作者
原帖由 zhhsh 于 2010-1-9 21:56 发表
新版的SRS_F6支持无人应答安装,明天发布。

期待新版。。。
回复

使用道具 举报

287#
发表于 2010-1-10 09:20:50 | 只看该作者
期待新版!LZ何时发布?
回复

使用道具 举报

288#
发表于 2010-1-10 10:23:06 | 只看该作者
zhhsh楼主的工具用上了好几位大侠智慧的结晶,你们都辛苦了.
我用了几天的时间消化了一下,感觉zhhsh的工具非常实用...就等你们在进一步的完善.
回复

使用道具 举报

289#
发表于 2010-1-10 14:11:19 | 只看该作者
不错,不错,可以修复7B错误
回复

使用道具 举报

290#
发表于 2010-1-10 14:11:35 | 只看该作者
zhhsh楼主您辛苦了
回复

使用道具 举报

291#
发表于 2010-1-10 15:08:43 | 只看该作者
新版的SRS_F6怎么还没有发布?期待中!!
回复

使用道具 举报

292#
 楼主| 发表于 2010-1-10 18:20:59 | 只看该作者
01.10不管版更新
============
1.支持无人应答安装[应该是半无人应答安装](相对于P大的f6模块更方便,本功能是无需把无人应答安装文件放入WIN$.iso中的)
该功能使用方法:

首先把无人应答安装文件命名为WINNT.sif ,把它放在任意磁盘(WIN$.ISO所在的磁盘)的根目录上。
使用本工具正常安装WIN$.ISO
完成文本安装模式(重启电脑)后选择菜单“[3]只加载WIN$.ISO继续安装系统(完成文本安装模式后)[启用无人应答安装功能]”来加载WIN$.ISO继续安装系统。后面的安装过程就不用你输入序列号等。

2.注入SRS驱动时可用OEM_SRS.zip(即用户提供的厂商F6驱动)
注:注入SRS驱动所选的是由[Default]项scsi 的值决定
3.允许SRS.ZIP由txtsetup.sif文件和含.sy?的Drivers目录构成。方便将其它PE带的SRS驱动直接搬到本工具中使用。[跟0PE一样]
4.更新plpbt.bin版本为最新版本
5.采纳N版的建议:“如果有多个磁盘控制器则取消Default项,强制手动选择”,具体没有测试
6.改了下菜单内容
回复

使用道具 举报

293#
发表于 2010-1-10 19:12:24 | 只看该作者
我怎么替换了元旦版,加载出错呢
回复

使用道具 举报

294#
发表于 2010-1-10 19:20:52 | 只看该作者
晕,原来又是大小写的问题
回复

使用道具 举报

295#
发表于 2010-1-10 20:15:38 | 只看该作者

回复 #294 ynkm169 的帖子

能具体说下么,哪个地方大小写的问题,好给其他坛友参考参考。

这个工具我收藏了,但是目前没机会使用。
回复

使用道具 举报

296#
发表于 2010-1-10 21:17:31 | 只看该作者
收藏了。。。。。。。。。
回复

使用道具 举报

297#
发表于 2010-1-10 21:35:20 | 只看该作者
原帖由 ynkm169 于 2010-1-10 19:20 发表
晕,原来又是大小写的问题

替换方法贴出来分享?
回复

使用道具 举报

298#
发表于 2010-1-10 23:23:18 | 只看该作者
谢谢楼主的分享,你的那个ghost注入驱动方法正是我一直想要的,以后做ghost系统就不用花费大量的精力去集成srs驱动到系统中了。有时间测试下,有问题再来反馈。
刚从FTP下了你最新的不管版,不过那FTP的更新时间有点怪怪的,显示的更新时间是2010-1-11 2:06。

[ 本帖最后由 七仙花 于 2010-1-10 23:27 编辑 ]
回复

使用道具 举报

299#
发表于 2010-1-11 00:36:36 | 只看该作者
我也来支持一下,元旦版的我下载了。
感觉很不错。最好再加一个 DOS Navigator,
和maxdos,pe 合在一起,那就所向无敌了。
回复

使用道具 举报

300#
发表于 2010-1-11 01:12:08 | 只看该作者
WINNT.sif 有没有通用的?发上来分享!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-23 01:08

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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