无忧启动论坛

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

[原创]支持外置硬盘控制器驱动,可任意方式启动的PE[10-01-13稳定版]

  [复制链接]
1501#
发表于 2009-12-26 22:16:10 | 只看该作者
早试过这个办法了,其实不用试也知道,问题出在中断向量恢复上,但这个只有不点大人等高人能看懂。
算是提供点资料吧,碰到这样的机器也不容易。
回复

使用道具 举报

1502#
发表于 2009-12-27 12:59:00 | 只看该作者
C大已把相对路径改成了绝对路径。
回复

使用道具 举报

1503#
发表于 2009-12-28 14:59:13 | 只看该作者
今天又一台机器进不了PE,NV的主板,PXE启动到DOS处就退出了。grldr12.23及12.25版本都一样。

IMG087.jpg (118.53 KB, 下载次数: 188)

IMG087.jpg
回复

使用道具 举报

1504#
 楼主| 发表于 2009-12-28 17:39:43 | 只看该作者
Shift按键卡住了,试试不任何按键看看。。。
回复

使用道具 举报

1505#
发表于 2009-12-28 18:02:38 | 只看该作者
原帖由 chenall 于 2009-12-28 17:39 发表
Shift按键卡住了,试试不任何按键看看。。。


真是键盘问题,键盘某几个键不灵,换了键盘就好了。

另外,1505#楼的问题也找到原因了,是硬盘问题,用geometry (hd0)查看多了一个无效分区,查看结果也卡住,后来把硬盘低格了一下,就OK了。
这也说明,find命令geometry命令等搜索硬件的碰到硬件问题需要一个跳出开关,不然会卡住。

以前碰到过一个硬盘有大量坏道的也卡住。

[ 本帖最后由 zhaohj 于 2009-12-28 18:14 编辑 ]
回复

使用道具 举报

1506#
 楼主| 发表于 2009-12-28 18:06:02 | 只看该作者
^_^,

抽空制了一个NT5.X/NT6.X通用启动软盘镜像,有空测试下。

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=158244
回复

使用道具 举报

1507#
发表于 2009-12-29 11:18:35 | 只看该作者
chenall ,啥时候把cspe传到你的网盘呀?
回复

使用道具 举报

1508#
发表于 2009-12-29 11:34:14 | 只看该作者
原帖由 紫狐 于 2009-12-29 11:18 发表
chenall ,啥时候把cspe传到你的网盘呀?


版主也不看看帖子,我的FTP上与LIVEMESH一直来是同步的。
回复

使用道具 举报

1509#
 楼主| 发表于 2009-12-29 11:52:20 | 只看该作者
原帖由 紫狐 于 2009-12-29 11:18 发表
chenall ,啥时候把cspe传到你的网盘呀?


等过一段时间稳定下来了再传。因为我这里上传速度很慢。
回复

使用道具 举报

1510#
发表于 2009-12-30 21:13:50 | 只看该作者
@chenall

我又更改了 echo.c 的代码和编译选项。请看注释部分。

发现 -fPIE 选项比 -fPIC 好。这个 -fPIE 可以把函数的地址也按照动态去处理了。
  1. /*
  2. * compile:                     

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

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

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

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

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

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

  23. int
  24. main()
  25. {
  26.         void *p = &main;

  27. //      void *p = &&label002;
  28. //label002:
  29. //        asm("1:");
  30. //        asm("subl $(1b-main), %0":"=m"(p));
  31.         
  32.         return
  33.         /* the following line is calling the grub_sprintf function. */
  34.         ((int (*)(char *, const char *, ...))((*(int **)0x8300)[0]))
  35.         /* the following line includes arguments passed to grub_sprintf. */
  36.                 (0, p - (*(int *)(p - 8)));
  37. }
复制代码
说明:0x8300 处放置的是一个指针,指向 system_functions。

所以,(*(int **)0x8300) 就是 system_functions 的地址。
所以,((*(int **)0x8300)[0]) 就是 system_functions 数组的首项的值。这个值又是 grub_sprintf 的地址。
因此,在其前面加上一个类型转换符 ((int (*)(char *, const char *, ...)) 就变成了函数的地址了。

最后一行是传递给 grub_sprintf 函数的参数。第一个参数 0 表示输出的目的地是屏幕。第二个参数就是 Format 格式字符串,这里指向命令行。

下面解释为什么第二个参数是指向命令行的。

p 是 main 的地址。(p-8)处的整数,即 *(int *)(p-8) 是命令行起始地址到main的距离(以字节计)。
因此,p 再减去这个整数就是命令行的地址了。

这里仍然需要解释,grub4dos 在装载程序映像到内存之前,先建立一个程序段前缀 PSP,这里沿用 DOS 的术语。不过,DOS 的 PSP 是固定长度,恰好有 256 个字节,而我们的 PSP 却是不定长的,由 grub4dos 动态决定 PSP 的长度。程序映像紧接 PSP 之后放置,就像 DOS 的 com 程序的情况那样。

我们的 PSP 的长度记录在紧接程序映像之前的一个整数中,因此这个整数的地址相对于 main 的偏移量就是 -4 了。而偏移量 -8 处的整数则就是我们的命令行的地址了。这些位于 main 之前的整数、字符串,都在 PSP 中。grub4dos 的程序装载器会把命令行等必要的数据复制到 PSP 中,保证程序能够正常运行。

grub4dos 现在的运行程序的功能虽然是初步的,但确实已经可以工作了。我们还没有实现内存管理的功能,但是却抢先实现了进程的管理。
因为没有实现内存管理,所以,应用程序无法动态申请内存,也无法释放内存。不过,应用程序可以使用静态内存,这样就避免使用动态内存了。静态内存就是在程序中显式定义了的内存,例如 C 语言的 int i; 就是显式定义了一个整数 i。这个 i 所使用的空间就是静态的,无须再经过“向操作系统申请内存”的步骤。

所以,其实现在用户已经可以编写很多简单的程序了,只要这些程序不访问磁盘文件,而且也不申请动态内存便可。
回复

使用道具 举报

1511#
 楼主| 发表于 2009-12-30 23:48:33 | 只看该作者
GRUB4DOS越来越强了,最近这两天就没什么时间,过两天再试下,可以使用标准的C函数吗?

以后扩展就方便了。呵呵。
回复

使用道具 举报

1512#
发表于 2009-12-31 00:34:04 | 只看该作者
不点,chenall两位前辈,时空论坛怎么挂掉了啊Apache 2 Test Pagepowered byCentOS元旦放假??

[ 本帖最后由 yyjdelete 于 2009-12-31 00:35 编辑 ]
回复

使用道具 举报

1513#
发表于 2009-12-31 08:48:41 | 只看该作者
原帖由 zhaohj 于 2009-12-29 11:34 发表


版主也不看看帖子,我的FTP上与LIVEMESH一直来是同步的。



知道你的FTP是同步,,前几天有下载过一个,但是现在又改进了不少,cspe一直都在不断的完善,一般都是稳定版本了,chenall才会上传到他的网盘,所以一直在等稳定、完善的版本,呵呵。
回复

使用道具 举报

1514#
发表于 2009-12-31 08:49:44 | 只看该作者
原帖由 chenall 于 2009-12-29 11:52 发表


等过一段时间稳定下来了再传。因为我这里上传速度很慢。



呵呵,就是在期待你的稳定版。chenall是不是和我一样,使用512K的ADSL呀?
回复

使用道具 举报

1515#
发表于 2009-12-31 09:19:10 | 只看该作者
@chenall

boot land 上有人报告 message 文件导致 gfxmenu 死机,你能否跟踪一下,看看问题在哪里?

http://www.boot-land.net/forums/index.php?showtopic=10096
回复

使用道具 举报

1516#
发表于 2009-12-31 16:03:51 | 只看该作者
老话重提NVIDIA网卡的问题:
新的网卡出来了,NVIDIA网卡按小马的驱动0417及6789可以通吃,但他用的是RIS驱动,无任何DLL文件。
测试了一下,CSPE可以安装NVIDIA网卡的RIS驱动,但NVIDIA的网卡驱动需要两次。如驱动是RIS6789.CAB,需要:
pecmd devi RIS6789.CAB
bartpe -pnp
pecmd devi RIS6789.CAB
bartpe -pnp
C大能不能根据NVIDIA网卡的特殊性处理一下。

按照现在的方式,我测试CSPE启动到桌面后,网卡实际上已经安装好了,但网络没有自动连接没有自动映射导致AUTORUNS下的程序都没执行。这时手动映射网络可以成功,再运行WXPE\SYSTEM32\AUTORUN_.CMD也能达到要求。
回复

使用道具 举报

1517#
发表于 2009-12-31 16:06:41 | 只看该作者
补充一下,NVIDIA网卡的ID都是PCI\VEN_10DE开头的。
回复

使用道具 举报

1518#
 楼主| 发表于 2010-1-1 08:13:12 | 只看该作者
原帖由 zhaohj 于 2009-12-31 16:03 发表
老话重提NVIDIA网卡的问题:
新的网卡出来了,NVIDIA网卡按小马的驱动0417及6789可以通吃,但他用的是RIS驱动,无任何DLL文件。
测试了一下,CSPE可以安装NVIDIA网卡的RIS驱动,但NVIDIA的网卡驱动需要两次。 ...


NV的记得已经处理过了,有运行了两次的网卡驱动安装.(我没有用NV网卡,没有试过)

启动时看一下有没有什么提示?如果没有提示那应该是已经自动装好了的.
回复

使用道具 举报

1519#
 楼主| 发表于 2010-1-1 08:26:47 | 只看该作者
@不点
发现你已经试过了,另外新版的find命令也确实有问题

应该是出在cmdline.c上.

哦错了,新版改了builtins.c 的find_func函数.

以下代码.前面加一个if (*arg)就OK了,
  1. //  if (*arg >= 'a' && *arg <= 'z')
  2.   {
  3.     builtin1 = find_command (arg);
  4.     if ((int)builtin1 != -1)
  5.     if (! builtin1 || ! (builtin1->flags & flags))
  6.     {
  7. errnum = ERR_UNRECOGNIZED;
  8. return 0;
  9.     }
  10.     if ((int)builtin1 != -1)
  11. arg = skip_to (1, arg); /* get argument of command */
  12.     else
  13. builtin1 = &builtin_command;
  14.   }
复制代码
汗..
发现不点新版早已经更正了.

[ 本帖最后由 chenall 于 2010-1-1 09:05 编辑 ]
回复

使用道具 举报

1520#
发表于 2010-1-1 11:42:48 | 只看该作者
原帖由 zhaohj 于 2009-12-31 16:03 发表
老话重提NVIDIA网卡的问题:
新的网卡出来了,NVIDIA网卡按小马的驱动0417及6789可以通吃,但他用的是RIS驱动,无任何DLL文件。
测试了一下,CSPE可以安装NVIDIA网卡的RIS驱动,但NVIDIA的网卡驱动需要两次。 ...

有没有试过把nv网卡内置到setupreg.hiv
CriticalDeviceDatabase项下建立(如果没有此项,则先在ControlSet001建立此项)
[pci#ven_10de&dev_xxxx]
classGUI="...."
Service="..."
然后在sevice建立对应的服务
DisplayName="..."
...
Group="..."
ImagePath="..."
....
Start=dword:3(手动)
Type=dword:...
启动时检测Enum\pci下面有无nv网卡项(有表示存在该网卡),有存在则用pecmd的serv启动相关服务。
采用setupreg.hiv加载驱动原理和NT5.x的system注册表识别硬件是一样的。
***intel ahci驱动注入、ghost硬件识别其实也是这么搞的****

[ 本帖最后由 netwinxp 于 2010-1-1 12:02 编辑 ]
回复

使用道具 举报

1521#
发表于 2010-1-1 13:59:43 | 只看该作者
回NET版主:
    内置到setupreg.hiv,我认为全内置的这样做比较合适。nv网卡的pci#ven_10de&dev_xxxx多达30条,感觉也麻烦了点。
回C大:
    感觉网卡识别也正常,在DOS处也正常传递驱动,问题出在NET USE上没有起作用(可能是NET.WIM的问题)。到时我再跟踪一下。

c大现在是不是WIN文件@0#改成@0$了?估计你的livemesh又出问题了,DESKTOP上没有变化,而MESH记录上显示更新了。

[ 本帖最后由 zhaohj 于 2010-1-1 15:05 编辑 ]
回复

使用道具 举报

1522#
发表于 2010-1-2 12:10:59 | 只看该作者
NVIDIA RIS 驱动的问题找到原因了,问题出在启动网络服务后MAP的问题上,可能WAIT时间不够。
下面贴图可以说明:

我手动结束批处理后,net use y: \\cwserver\tftp 也就是net use y: \\192.168.1.6\tftp可以成功

[ 本帖最后由 zhaohj 于 2010-1-2 12:14 编辑 ]

IMG088.jpg (168.58 KB, 下载次数: 129)

IMG088.jpg

IMG089.jpg (183.16 KB, 下载次数: 128)

IMG089.jpg

IMG090.jpg (150.93 KB, 下载次数: 126)

IMG090.jpg

IMG093.jpg (80.39 KB, 下载次数: 132)

IMG093.jpg

IMG094.jpg (81.01 KB, 下载次数: 125)

IMG094.jpg

IMG096.jpg (159.56 KB, 下载次数: 118)

IMG096.jpg

IMG097.jpg (140.14 KB, 下载次数: 121)

IMG097.jpg
回复

使用道具 举报

1523#
发表于 2010-1-3 16:58:59 | 只看该作者
感觉是NVIDIA网卡启动网络有关服务很慢导致PING很长时间不通,我手动测试过,多PING几次就通了。
这个问题很难解,要不等待服务全启动用NET START /WAIT DHCP之类一个一个启动服务?
是不是需要添加network connection服务(netman),这个服务就牵连ICS及rpc。
上传NVIDIA的网卡RIS驱动,希望有此网卡网友测试下。
                    PCI\VEN_10DE&DEV_0372,\ ;MCP55
                    PCI\VEN_10DE&DEV_0373,\ ;MCP55, BRIDGE
                    PCI\VEN_10DE&DEV_0389,\ ;MCP55, BRIDGE
                    PCI\VEN_10DE&DEV_03EE,\ ;MCP61
                    PCI\VEN_10DE&DEV_03EF,\ ;MCP61, BRIDGE
                    PCI\VEN_10DE&DEV_03E5,\ ;NBP01
                    PCI\VEN_10DE&DEV_03E6,\ ;NBP01, BRIDGE
                    PCI\VEN_10DE&DEV_0450,\ ;MCP65
                    PCI\VEN_10DE&DEV_0452,\ ;MCP65, BRIDGE
                    PCI\VEN_10DE&DEV_0451,\ ;MCP65_NBP01
                    PCI\VEN_10DE&DEV_0453,\ ;MCP65_NBP01, BRIDGE
                    PCI\VEN_10DE&DEV_0478,\ ;T65
                    PCI\VEN_10DE&DEV_047B,\ ;T65, BRIDGE
                    PCI\VEN_10DE&DEV_0479,\ ;T65_NBP01
                    PCI\VEN_10DE&DEV_047A,\ ;T65_NBP01, BRIDGE
                    PCI\VEN_10DE&DEV_054C,\ ;MCP67
                    PCI\VEN_10DE&DEV_054E,\ ;MCP67, BRIDGE
                    PCI\VEN_10DE&DEV_054D,\ ;MCP67_NBP01
                    PCI\VEN_10DE&DEV_054F,\ ;MCP67_NBP01, BRIDGE
                    PCI\VEN_10DE&DEV_07DC,\ ;MCP73
                    PCI\VEN_10DE&DEV_07DE,\ ;MCP73, BRIDGE
                    PCI\VEN_10DE&DEV_07DD,\ ;MCP73_NBP01
                    PCI\VEN_10DE&DEV_07DF,\ ;MCP73_NBP01, BRIDGE
                    PCI\VEN_10DE&DEV_0760,\ ;MCP77
                    PCI\VEN_10DE&DEV_0761,\ ;MCP77_NBP01
                    PCI\VEN_10DE&DEV_0762,\ ;MCP77_OEM
                    PCI\VEN_10DE&DEV_0763,\ ;MCP77_Channel
                    PCI\VEN_10DE&DEV_0AB0,\ ;MCP79
                    PCI\VEN_10DE&DEV_0AB1,\ ;MCP79
                    PCI\VEN_10DE&DEV_0AB2,\ ;MCP79
                    PCI\VEN_10DE&DEV_0AB3,\ ;MCP79
                    PCI\VEN_10DE&DEV_0BC4,\ ;MCP7B
                    PCI\VEN_10DE&DEV_0BC5,\ ;MCP7B
                    PCI\VEN_10DE&DEV_0BC6,\ ;MCP7B
                    PCI\VEN_10DE&DEV_0BC7 ;MCP7B

[ 本帖最后由 zhaohj 于 2010-1-3 17:15 编辑 ]

RIS6789.CAB.rar

166.24 KB, 下载次数: 55, 下载积分: 无忧币 -2

去掉RAR

回复

使用道具 举报

1524#
 楼主| 发表于 2010-1-20 01:06:01 | 只看该作者
没注意看贴子,汗。。。。

没有N卡,所以只能等待别人的解决方法了。


稳定版本2010-01-13已经上传到
http://www.brsbox.com/chenall
文件:CSPE 2009_MIN.rar

最新测试版已经更新到LIVE MESH。
使用了新版的GRUB4DOS和FAT命令测试。

最新测试版,可以比较方便的扩展SRS驱动,没有了以前的文件大小限制(只要不超过19MB就行了)

至于这个19MB的限制是FAT命令固意限制的。
回复

使用道具 举报

1525#
发表于 2010-1-20 10:52:25 | 只看该作者
无忧zhaohj兄弟的FTP上的CSPE还是09年12月23日的版本,最好也能同步更新。这样也可以方便更多论坛上兄弟们测试。
回复

使用道具 举报

1526#
发表于 2010-1-20 11:29:18 | 只看该作者
嗯,马上同步更新,使用新版的grldr看看,估计很多命令简单方便了。

fat可以直接创建文件了,如:
fat file create size=* (fd0)/SRS.ZIP

BUG报告:
PXE启动出现

[ 本帖最后由 zhaohj 于 2010-1-20 12:05 编辑 ]

Snap1.jpg (96.56 KB, 下载次数: 120)

Snap1.jpg
回复

使用道具 举报

1527#
 楼主| 发表于 2010-1-20 12:26:01 | 只看该作者
因为我的疏忽,重新打包时,少了一个文件(和DEBUG模式有关)。

暂时不要使用DEBUG模式进去就可以了,或者修改MICROPE.LST菜单文件
查找MSDOS.sys把这一行注释掉就可以了。

另外目前的FAT命令还是测试的,如果没有问题准备想办法把这些复制文件的命令整合在一起。

然后就可以直接fat file copy 比较方便使用。

[ 本帖最后由 chenall 于 2010-1-20 12:28 编辑 ]
回复

使用道具 举报

1528#
发表于 2010-1-20 12:51:28 | 只看该作者
好像还是有问题啊,看看

Snap1.jpg (139.88 KB, 下载次数: 115)

Snap1.jpg
回复

使用道具 举报

1529#
 楼主| 发表于 2010-1-20 12:54:38 | 只看该作者
必须使用新版的GRLDR。还有KERNEL目录下有一个FAT文件也是必须的。
回复

使用道具 举报

1530#
发表于 2010-1-20 12:59:40 | 只看该作者
GRLDR肯定是用新版的2010-01-13,FAT文件有什么要求?哦,FAT是外部命令吗?

[ 本帖最后由 zhaohj 于 2010-1-20 13:04 编辑 ]

Snap1.jpg (202.33 KB, 下载次数: 128)

Snap1.jpg
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-5 17:49

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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