无忧启动论坛

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

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

  [复制链接]
跳转到指定楼层
1#
发表于 2008-2-24 19:03:43 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
更多资料请到我的主页查看.
最近更新:  http://www.366840202.cn/blog/upload/2009/1/更新历史.txt
新版下载: http://www.brsbox.com/chenall
PE定制,外置组件模块化下载地址,请点击我的主页,里面的网络硬盘可下载(电信服务器)
可自行下载需要的组件,然后自动生成一个MicroPE.iso文件

2010-01-19
新功能测试

2010-01-13
稳定版,上传到
http://www.brsbox.com/chenall


更多外置程序(canmao Wim格式工具集)
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=136901

2009-05-01修正版ISO下载
http://chenall.liondrive.com/MicroPE/MicroPE.rar?action=download/download

2009-05-01成品ISO下载测试
http://dl.getdropbox.com/u/835279/MicroPE.ISO

如果没有什么大的问题.05-01以后这个将不再更新.

注:后面的内容只供参考,部份因为更新已经改变.具体使用请查看里面的说明文件和更新历史.

其它参考链接
[分享]支持ISCSI启动的PE
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=134384

PXE启动效果图

启动到桌面后.



ISCSI启动效果图请从这里查看.
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=134384&page=3#pid1598004


目前支持两种方式的外置驱动
具体请点击以下地址查看.
外置硬盘控制器驱动使用添加方法[已更换另一方法]


决定采用第二种方法。(利用无盘天使驱动)
已经上传了测试版本=080303=XXXX.RAR(两个文件,一个内核一个驱动)使用方法内详

这个内核除了具有
[原创&分享]新型PE内核(无限扩展,无限可能).

同样的功能外,另支持多种启动方式(首创)

具体:  PE多功能内核   ISO文件下载 =080303=多启PE演示.rar

PE内核多功能版演示
若只需使用其中一种方式WINPE.IMG可以压缩成相应格式.第1,2可以压缩成CAB格式(目前压缩后14MB左右)
第3,4可以压缩成GZIP格式(压缩后15.6MB).
多功能:
1.可以使用RAMDISK方式启动(第1个.2个菜单)
winnt.sif内容(注此ISO里面是WINNT.XPE)

[SetupData]
BootDevice="ramdisk(0)"
BootPath="\WXPE\SYSTEM32\"
OsLoadOptions="/minint /fastdetect /rdpath=WXPE\WinPE.IMG"


启动例子:

title 1. Micro Windows PE Without Sata/Raid/SCSI (ramdisk)
chainloader ()/WXPE/SETUPLDR.BIN
title 2. Micro Windows PE With Universal ATA driver (ramdisk)
chainloader ()/WXPE/SETUPLDR.B2N


2.可以直接独立启动,不依赖WINNT.SIF(第3,4个,只需一个WINPE.IMG)
只需要一个WINPE.IMG即可,不需要其它文件(WINNT.SIF,SETUPLDR.BIN等都不需要)
启动例子:

title 3. Micro Windows PE Without Sata/Raid/SCSI (WDSYS)
map --mem --unsafe-boot ()/WXPE/WINPE.IMG (hd0)
map --hook
chainloader (hd0,0)/setupldr.bin
title 4. Micro Windows PE With Universal ATA driver (WDSYS)
map --mem --unsafe-boot ()/WXPE/WINPE.IMG (hd0)
map --hook


3.非RAMDISK方式启动,测试方法
直接将里面的文件复制到系统盘根目录下(不需要改名)
直接启动里面的setupldr.bin即可

注:这只是一个演示,更方便的用途在于使用PXE方式启动.
可以有双重启动方式,一种不行就换另一种.
而且不管使用哪种方式启动,使用的内存都是差不多的

所有使用RAMDISK启动的PE都可以改成这种方式

更多信息请访问
http://chenall.blog.163.com



以下的内容可以不用看了.
其它参考
方式1.
缺点:DOS部份可以全自动,但后期需要按F6进行手工加载.
优点:.....????比较传统,可以保证正常加载

利用GRUB虚拟一个内存盘A:(1.44MB的镜像足够),360KB的也应该够用了(硬盘控制器的驱动不会很大)
map --mem .../scsi.gz (fd0)   (用内存盘的模式加载镜像里面只有启动文件还有几个必要的文件)
map .../scsi_ext.img (fd1)     (不使用内存盘加载这个镜像里面存放了硬盘控制器的驱动)(当然内存够大也可以内存加载)
..
chainloader (fd0)+1

1,首先启动到DOS模式
2.检测本机对应的硬盘控制器驱动.
3.复制对应的TXTSETUP.OEM到A:根目录.

用GRUB启动PE,再按F6直接加载驱动.

当然了也可以将所有的驱动搞成一个TXTSETUP.OEM文件,启动时按F6选择相应的驱动(会有许多,需要选择正确的驱动不方便)

方式2:
缺点:由于使用了全新的方式,可能会加载不了。测试中......
优点:可以做到全自动化。其它的等待发掘....

利用无盘天使来启动.还是使用GRUB
1.将PE做成无盘天使的镜像.再利用GRUB启动
map --mem ..../winpe.dsk (hd0)
map .../scsi_ext.img (fd0)
..
启动到DOS.由于已经将PE的镜像加载到的(hd0)所以在DOS下可以直接通过访问C:就是PE镜像了(要求镜像要用FAT/FAT32格式的)

2.检测硬盘控制器驱动,将找到的驱动的.SYS文件复制到DRIVERS目录下.
  再用INIFILE修改TXTSETUP.SIF

3.启动GRUB加载SETUPLDR.BIN启动.

[ 本帖最后由 chenall 于 2010-1-20 01:02 编辑 ]

评分

参与人数 1无忧币 +5 收起 理由
nytc006 + 5 很给力!

查看全部评分

推荐
发表于 2008-2-24 20:04:10 | 只看该作者
原帖由 chenall 于 2008-2-24 07:32 PM 发表


呵呵,这都想得到.

假定dos启动是万能的,启动后把PE核心文件从XP系统目录复制到硬盘另一目录(不用做成img或iso),配以适当的注册表等文件(原硬盘没有),直接用grub.exe引导,就像普通硬盘装两个XP那样。即使原XP系统坏了(主要是注册表等乱了,主要文件还在)PE一般也能启动。
0体积原理想过,似乎可行,但没时间弄了。
楼主的PE已经接近0体积了,例如system。wim可以从XP提取,要是进一步,把img的东西也从XP取就成了,hiv等参照移植。
回复

使用道具 举报

推荐
 楼主| 发表于 2008-2-24 19:32:09 | 只看该作者
原帖由 pseudo 于 2008-2-24 07:24 PM 发表

两阶段启动:
1、启动到dos,利用现有XP系统,检测、复制文件到硬盘或内存,形成PE必要文件目录,甚至生成PE映像。
2、调用grub。exe启动PE
PE可以接近0体积。


呵呵,这都想得到.
回复

使用道具 举报

推荐
发表于 2008-2-24 19:24:59 | 只看该作者
原帖由 chenall 于 2008-2-24 07:03 PM 发表
其它的我就不多说了.只简单说一下我的思路.
都是通过DOS前期处理,然后再启动的,所以启动速度肯定受影响.
不知有没有实用,呵呵...
这样一来PE内核就可以更小,更新驱动更方便.

方式1.
缺点:DOS部份可以全自 ...

两阶段启动:
1、启动到dos,利用现有XP系统,检测、复制文件到硬盘或内存,形成PE必要文件目录,甚至生成PE映像。
2、调用grub。exe启动PE
PE可以接近0体积。

[ 本帖最后由 pseudo 于 2008-2-24 07:30 PM 编辑 ]
回复

使用道具 举报

1747#
发表于 2011-6-2 01:45:09 | 只看该作者
那不是很爽啊,感谢分享.
回复

使用道具 举报

1746#
发表于 2011-4-19 19:05:39 | 只看该作者
看着确实不错,收下了!
回复

使用道具 举报

1745#
发表于 2011-1-5 22:03:13 | 只看该作者
楼主有必要更新下你的pe啦!
回复

使用道具 举报

1744#
发表于 2010-10-16 14:14:15 | 只看该作者
感谢楼主分享!!!!!!!!1
回复

使用道具 举报

1743#
发表于 2010-10-11 15:15:42 | 只看该作者
看的头都晕了,看来还是直接用吧
回复

使用道具 举报

1742#
发表于 2010-5-5 18:10:24 | 只看该作者
5.3版本的grldr会出现下面提示,以前版本没有的。但可以继续运行下去。

Snap1.jpg (25.92 KB, 下载次数: 352)

Snap1.jpg
回复

使用道具 举报

1741#
发表于 2010-4-30 17:43:08 | 只看该作者
外部命令有GO命令,能不能加个CALL命令,就象DOS的CALL,但这里不是执行另一个菜单文件。
目的是执行完毕能返回(当然有些可能不能返回)。
大量重复的代码用CALL很实用。

[ 本帖最后由 zhaohj 于 2010-5-1 07:27 编辑 ]
回复

使用道具 举报

1740#
发表于 2010-4-27 10:49:28 | 只看该作者
我的想法是这样(针对PXE):
1)保留NETID.TXT的方法,取消DOS下传递_NET.CAB等驱动。因为经过实机使用,DOS下处理_NET.CAB基本没成功驱动网卡。
2)如果存在DRIVERS\_NET.CAB,FAT COPY FILE到(hd0,0)。这个因为驱动比较大,DOS下传递太慢。
3)NETID.TXT的方法驱动加载失败,传递一个标志,PE到桌面过程根据这个标志同时处理网卡驱动
上面是自动处理的方法
还有一种方式就是做成选择式的加载网卡驱动,可以手动输入。
回复

使用道具 举报

1739#
 楼主| 发表于 2010-4-27 00:07:22 | 只看该作者
原帖由 zhaohj 于 2010-4-26 16:47 发表
也许某一天网卡驱动的ID也能自动检测。


目前就是自动检测的吧,只要有提供NETID.TXT。

有空再调整一下。麻烦给整些修改思路。好久没有整了,有些生了。
回复

使用道具 举报

1738#
发表于 2010-4-26 16:47:50 | 只看该作者
也许某一天网卡驱动的ID也能自动检测。
回复

使用道具 举报

1737#
 楼主| 发表于 2010-4-26 16:18:29 | 只看该作者
原帖由 zhaohj 于 2010-4-26 16:03 发表
这几天没事做了个外置网卡驱动,就不管它了。现在的结构也比较紧凑。
SRS也做了更新。
上传到FTP/CHENALL/CSPE



呵呵,我好久没有弄了.也没有什么可改的了.无除就是驱动,工具的更新.
回复

使用道具 举报

1736#
发表于 2010-4-26 16:16:33 | 只看该作者
SRS驱动及NET驱动做成选择呢?经典的作品,现在太全自动化了。
SRS目前比较成熟,NET部分再强化点那再好。我的想法是当NET目录下面的驱动失败的时候,做个标记,在进入桌面后能处理DRIVERS\_DEF.CAB.
在DOS下处理DRIVERS\_NET.CAB往往失败。同样的驱动做成NETID的方式是成功的。
回复

使用道具 举报

1735#
发表于 2010-4-26 16:09:46 | 只看该作者
原帖由 chenall 于 2010-4-26 16:07 发表
忘了一点.

放到根目录下的文件启动后会自动删除...


是啊,FAT也不能放到目录。这个要NET.WIM处理一下了。
回复

使用道具 举报

1734#
 楼主| 发表于 2010-4-26 16:07:21 | 只看该作者
忘了一点.

放到根目录下的文件启动后会自动删除...
回复

使用道具 举报

1733#
发表于 2010-4-26 16:03:38 | 只看该作者
这几天没事做了个外置网卡驱动,就不管它了。现在的结构也比较紧凑。
SRS也做了更新。
上传到FTP/CHENALL/CSPE
回复

使用道具 举报

1732#
发表于 2010-4-24 19:17:57 | 只看该作者
测试了一下,在MICROPE.LST中添加:FAT file copy (bd)/CSPE/DRIVERS/_DEF.CAB (hd0,0)/_DEF.CAB
显示过程成功,但启动到桌面后看不到这个文件存在。
是不是开启FBWF的原因?
回复

使用道具 举报

1731#
 楼主| 发表于 2010-4-23 17:53:46 | 只看该作者
是没有处理啊。所以才要你在GRUB4DOS菜单中添加,直接添加应该就可以了。
回复

使用道具 举报

1730#
发表于 2010-4-23 17:00:57 | 只看该作者
原帖由 chenall 于 2010-4-23 16:31 发表
在GRUB4DOS菜单中直接用FAT复制过去应该可以用吧。最好不要用_NET.CAB文件名(会和DOS批处理的冲突)。
试试_def.cab等。应该就没关系了。


目前的版本好像不会处理_def.cab吧。
两难的选择,目前的网卡驱动包也很大,CAB都达到6m,zip就达到10多M。
NETID.TXT方式速度快,但网卡驱动找不到时很麻烦,这个时候已经退出grldr了。
那现在只有先拷贝_def.cab,DOS下先判断NETID.TXT及驱动是否有效,有效就老方式处理,无效的话,应该写个标志,进PE桌面后再处理网卡驱动等操作。

原来的DOS下处理_NET.CAB干脆取消,成功率很低。我没有成功过。

img镜像看来要增大了。

[ 本帖最后由 zhaohj 于 2010-4-23 17:03 编辑 ]
回复

使用道具 举报

1729#
 楼主| 发表于 2010-4-23 16:31:45 | 只看该作者
在GRUB4DOS菜单中直接用FAT复制过去应该可以用吧。最好不要用_NET.CAB文件名(会和DOS批处理的冲突)。
试试_def.cab等。应该就没关系了。
回复

使用道具 举报

1728#
发表于 2010-4-23 16:18:38 | 只看该作者
下面是Python做的生成NETID.TXT,系统需要安装Python2.5版本以上。
程序有点缺点,NVIDIA的 %nvnetbus.DeviceDesc%=nvnetBus_Device, PCI\VEN_10DE&DEV_03E6不会生成
网友jamesdai2002对RIS比较熟悉,以下是他写的程序。在此表示感谢!

#coding:gb2312
#!/usr/bin/env python
# -*- Mode: Python; tab-width: 4 -*-
# 在网卡驱动文件夹内生成.cab文件, 并且生成NETID.TXT
# Inf Driver parser
#
# ======================================================================

from codecs import utf_16_le_decode, BOM_LE, BOM_BE
from sys import argv, exit as sys_exit
from os.path import isfile
from glob import glob
from cPickle import dump
from traceback import format_exc
import os


__version__ = '1.0'

### Compatibility with python 2.1
if getattr(__builtins__, 'True', None) is None:
    True=1
    False=0

class_guids = ['{4d36e972-e325-11ce-bfc1-08002be10318}']
classes = ['net']

exclude = ['layout.inf', 'drvindex.inf', 'netclass.inf']

debug = 0
dumpdev = 0

bustype = { 'USB'   :  1,
            'PCI'   :  5,
            'PCMCIA':  8,
            'ISAPNP': 14
            }

def csv2list(value):
    values = value.strip().split(',')
    for i in range(len(values)):
        values = values.strip()
    return values

def str_lookup(dc, c_key):
    for key in dc.keys():
        if key.lower() == c_key.lower():
            if len(dc[key])>0:
                return dc[key].pop()
    return 'NoDesc'

def item_lookup(dc, c_key):
    for key in dc.keys():
        if key.lower() == c_key.lower():
            return dc[key]
    return None

def fuzzy_lookup(strlist, pattern, ends=None):
    for s in strlist:
        if ends is not None and not s.endswith('services'): continue
        if s.startswith(pattern): return s
    return None


def unquote(text):
    return ''.join(text.split('"'))

def skip_inf(line):
    ## Check if driver is requested
    if line.find('=') == -1: return False
    key, value = line.split('=', 1)
    key = key.strip().lower()
    value = value.strip().lower()
    if key == 'class' and value not in classes: return True
    if key == 'classguid' and value not in class_guids: return True
    return False

def parse_line(sections, secname, lineno, line):
    equal = line.find('=')
    comma = line.find(',')
    if equal + comma != -2:
        if equal == -1:
            equal = comma+1
        if comma == -1:
            comma = equal+1

    if debug > 2: print '[%d] [%s] equal = %d - comma = %d' % (lineno, secname, equal, comma)

    if len(line) + equal + comma == -1:
        if debug: print '[%d] [%s] Invalid line' % (lineno, secname)
        return True

    ### Values
    if equal < comma:
        if type(sections[secname]) != type({}):
            sections[secname] = {}
        section = sections[secname]
        key, value = line.split('=', 1)
        key = key.strip()

        ### SkipList
        if key == '0':return True

        if section.has_key(key):
            values = csv2list(value)
            ### SkipList
            if (len(values) < 2) or (value.find('VEN_') == -1) or (value.find('DEV_') == -1):
                return True
            oldkey = key
            key = key + '_dev_' + values[1]

            if debug > 1: print '[%d] [%s] Duplicate key %s will be renamed to %s' % \
               (lineno, secname, oldkey, key)

        if secname == 'manufacturer':
            mlist = value.strip().split(',')
            mf = mlist[0].strip().lower()
            if len(mlist) > 1:
                ml = []
                for m in mlist[1:]:
                    ml.append('.'.join([mf, m.strip().lower()]))
                mlist = [mf] + ml
            else:
                mlist = [mf]

            if debug > 0: print 'Preprocessing Manifacturers:', ', '.join(mlist)
            section[key] = mlist
            if debug > 0: print 'Manifacturer %s=%s' % (key, section[key])
            return True

        section[key] = csv2list(value)
        if debug > 1: print '[K] [%d] [%s] %s=%s' % (lineno, secname, key, section[key])
        return True

    values = csv2list(line)
    if debug > 1: print '[V] [%d] [%s] Values = %s' % (lineno, secname, ','.join(values))
    sections[secname] = values
    return True

def parse_inf(filename):
    lineno = 0
    name = ''
    sections = {}
    section = None
    data = open(filename).read()

    ## Cheap Unicode to ascii
    if data[:2] == BOM_LE or data[:2] == BOM_BE:
        data = utf_16_le_decode(data)[0]
        data = data.encode('ascii', 'ignore')

    ## De-inf fixer ;)
    data = 'Copy'.join(data.split(';Cpy'))
    data = '\n'.join(data.split('\r\n'))
    data = ''.join(data.split('\\\n'))

    for line in data.split('\n'):
        lineno = lineno + 1
        line = line.strip()
        line = line.split(';', 1)[0]
        line = line.strip()

        if len(line) < 1: continue # empty lines

        if line[0] == ';': continue # comment

        ## We only need network drivers
        if name == 'version' and skip_inf(line):
            if debug > 0: print 'Skipped %s not a network inf' % filename
            return None

        ## Section start
        if line.startswith('[') and line.endswith(']'):
            name = line[1:-1].lower()
            sections[name] = {}
            section = sections[name]
        else:
            if section is None: continue
            if not parse_line(sections, name, lineno, line):
                break
    return sections

def scan_inf(filename):
    if debug > 0: print 'Parsing ', filename
    inf = parse_inf(filename)
    if inf is None: return {}

    devices = {}
    if inf and inf.has_key('manufacturer'):
        devlist = []
        for sections in inf['manufacturer'].values():
            devlist = devlist + sections
        if debug > 0: print 'Devlist:', ', '.join(devlist)
        for devmap in devlist:
            devmap_k = unquote(devmap.lower())
            if not inf.has_key(devmap_k):
                if debug > 0: print 'Warning: missing [%s] driver section in %s, ignored' % (devmap, filename)
                continue
            devmap = devmap_k
            for dev in inf[devmap].keys():
                if dev.find('%') == -1: continue # bad infs

                device = dev.split('%')[1]
                desc = unquote(str_lookup(inf['strings'], device))

                sec = inf[devmap][dev][0]
                hid = inf[devmap][dev][1]
                sec = sec.lower()

                hid = hid.upper()

                if inf.has_key(sec):
                    mainsec = sec
                else:
                    mainsec = fuzzy_lookup(inf.keys(), sec)
                    if mainsec is None: continue

                if mainsec.endswith('.services') and inf.has_key(mainsec):
                    serv_sec = mainsec
                elif inf.has_key(mainsec + '.services'):
                    serv_sec = mainsec + '.services'
                else:
                    serv_sec = fuzzy_lookup(inf.keys(), mainsec.split('.')[0], '.services')
                    if serv_sec is None:
                        if debug > 0: print 'Service section for %s not found, skipping...' % mainsec
                        continue

                if devices.has_key(hid): continue # Multiple sections define same devices

                if dumpdev: print 'Desc:', desc
                if dumpdev: print 'hid:', hid

                tmp = item_lookup(inf[serv_sec], 'addservice')
                if tmp is None:
                    if debug > 0: print 'Warning: addservice not found %s' % serv_sec
                    continue
                service = tmp[0]
                sec_service = tmp[2]

                driver = None
                if (type(inf[mainsec]) == type({})
                    and inf[mainsec].has_key('copyfiles')):
                    sec_files = inf[mainsec]['copyfiles'][0].lower()
                    if type(inf[sec_files]) == type([]):
                        driver = inf[sec_files][0]

                if driver is None:
                    if not inf.has_key(sec_service.lower()):
                        print 'Warning missing ServiceBinary for %s' % sec_service
                        print 'Please report including this file: %s\n' % filename
                        continue
                    driver = inf[sec_service.lower()]['ServiceBinary'][0].split('\\').pop()

                if dumpdev: print 'Driver', driver

                try:
                    char = eval(inf[mainsec]['Characteristics'][0])
                except:
                    char = 132

                if dumpdev: print 'Characteristics', char
                try:
                    btype = int(inf[mainsec]['BusType'][0])
                except:
                    try:
                        btype = bustype[hid.split('\\')[0]]
                    except:
                        btype = 0

                if dumpdev: print 'BusType', btype
                if dumpdev: print 'Service', service
                if dumpdev: print '-'*78


                devices[hid] = { 'desc' : desc,
                                 'char' : str(char),
                                 'btype': str(btype),
                                 'drv'  : driver,
                                 'svc'  : service,
                                 'inf'  : filename.split('/').pop() }
    return devices


if __name__ == '__main__':                  #主模块
    if len(argv) != 2:
        print 'Usage %s: directory_with_infs' % argv[0]
        sys_exit(-1)

    if not os.path.isdir(argv[1]):         #命令行参数必须是一个驱动文件夹
        print 'Usage %s: directory_with_infs' % argv[0]
        sys_exit(-1)
    else:
        rootpath = argv[1]

    devlist = {}
   
    for root,dirs,files in os.walk(rootpath):
        if len(glob(root + '/*.inf')) >= 1:                #目录内inf文件个数>=1个则进行处理
            entry =os.path.split(root)                     #分割全路径
            cabfilename=entry[len(entry)-1]                #使用分割后的最后一项作为压缩包名词
            if os.path.isfile(root + '\\' + cabfilename +'.CAB'):
                 os.remove(root + '\\' + cabfilename +'.CAB')
            
            cab_arch_cmd = 'cabarc -m lzx:21 n ' + cabfilename.upper() + '.CAB ' + root +'\\*  '
            print cab_arch_cmd
            os.system(cab_arch_cmd)
            os.rename( cabfilename.upper()+ '.CAB', root+'\\'+cabfilename.upper()+ '.CAB')
            for inffile in glob(root + '/*.inf'):  #获取当前路径下面所有的inf文件
                print "Get nic hardware id ---> "+ inffile
                if inffile.split('/').pop() not in exclude:
                    try:
                        devlist.update(scan_inf(inffile))
                    except:
                        print '--'
                        print 'Error parsing %s' % inffile
                        print 'Please report sending the inf file and this message:'
                        print '---- CUT HERE ----'
                        print '%s Version %s\n' % (argv[0], __version__)
                        print format_exc()
                        print '---- CUT HERE ----'

    print 'Compiled %d drivers' % len(devlist)

#    fd = open('devlist.cache', 'wb')
#    dump(devlist, fd)
#    fd.close()
#    print 'generated devlist.cache'

    fd = open('NETID.TXT', 'w')
    drvhash = {}
    for nic in devlist.items():
        entry = nic[0].split('&')
        if len(entry) < 2: continue # just to be sure
        if not entry[0].startswith('PCI'): continue # skip usb
        vid = entry[0].split('VEN_').pop().lower()
        pid = entry[1].split('DEV_').pop().lower()
        key = (vid, pid)
        entry = os.path.split(nic[1]['inf'])      #分割inf文件全路径变成路径和文件名称
        cabpath = entry[0]                        #取分割后的路径
        entry = os.path.split(cabpath)
        cabfilename= entry[1]
        line = 'PCI\\VEN_%4s&DEV_%4s="%s"\n' % (vid, pid, cabpath + '\\' + cabfilename)
        drvhash[key] = line.upper()

    drvlist = drvhash.values()
    drvlist.sort()
    fd.writelines(drvlist)
    fd.close()


    print 'generated NETID.TXT'


[ 本帖最后由 zhaohj 于 2010-4-23 16:25 编辑 ]
回复

使用道具 举报

1727#
发表于 2010-4-23 12:55:37 | 只看该作者
PXE启动处理方式要不改动一下,PXE启动网络是关键,NETID.TXT方式虽好,但网卡种类太多,不容易从其他地方移值;
而打包方式移值容易,但程序要做改动,先拷贝好驱动(可能内核要扩大几M),干脆到桌面后自动处理。
回复

使用道具 举报

1726#
发表于 2010-4-23 12:38:20 | 只看该作者
使用CSPE,PXE启动:
这几天有几台机器找不到网卡,就把网卡驱动打包成_NET.CAB,放在DRIVERS\_NET.CAB (文件大小5.6M)

问题1:tftp get %DRV_R%\Drivers\_NET.CAB %Tftp_SERVER%
          IF ERRORLEVEL 1 tftp get %DRV_R%\Drivers\_NET.ZIP %Tftp_SERVER%
          IF ERRORLEVEL 1 tftp get %DRV_R%\Drivers\_NET.7Z %Tftp_SERVER%
          copy %DRV_R%\Drivers\_NET.* c:\Drivers
     DOS下传输太慢,花费了2分多钟时间,效率太低。现在反正有FAT命令,干脆提前copy.
问题2:虚拟机测试,网卡是E1000,驱动肯定在包中,但失败。

[ 本帖最后由 zhaohj 于 2010-4-23 12:39 编辑 ]

Snap1.jpg (80.97 KB, 下载次数: 226)

Snap1.jpg
回复

使用道具 举报

1725#
发表于 2010-4-18 10:34:20 | 只看该作者
学习一下,使用看看了
回复

使用道具 举报

1724#
发表于 2010-4-15 15:22:03 | 只看该作者

怎么用呀

能不能说说怎么用,还有安装方法,我是新手,别见笑
回复

使用道具 举报

1723#
发表于 2010-4-10 19:21:48 | 只看该作者
独产网络包有没有!????????????
回复

使用道具 举报

1722#
 楼主| 发表于 2010-4-8 10:22:26 | 只看该作者
嘻嘻,一段时间没有接触,已经冷下来了。
没有XP的驱动可以用03的啊,一般情况下都可以使用的。
回复

使用道具 举报

1721#
发表于 2010-4-8 09:59:55 | 只看该作者
现在新机器,XP的驱动支持越来越少了。C大能不能考虑一下把内核改成03的呢?
回复

使用道具 举报

1720#
发表于 2010-3-24 15:05:40 | 只看该作者
学习了,谢谢chenall。
回复

使用道具 举报

1719#
 楼主| 发表于 2010-3-24 14:57:38 | 只看该作者
那个SETUPLDR.BIN是经过GZ压缩过的,所以才会那么小。。

至少修改的方法,记得我很早的时候在论坛上有介绍的,忘了在哪里了。你可以自己搜一下论坛。。

另外也可以看一下我搏客的相关文章,也许会有所启发。
http://www.chenall.com/blog/2009/11/SETUPLDR.html
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-25 11:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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