zoukankan      html  css  js  c++  java
  • 将设备驱动程序添加到 Solaris 10 操作系统(x86 平台版)中的新引导安装映像 From Sun

     
     

    将设备驱动程序添加到 Solaris 10 操作系统(x86 平台版)中的新引导安装映像

    James C. Liu 和 Brian Dowdy,2006 年 6 月

    目录:

    摘要:此工程参考说明如何将新设备驱动程序二进制文件添加到 Solaris 操作系统 (Operating System, OS) 的安装映像,以便具有新设备的系统在安装过程中和安装后将能够安装和支持此设备。本文档适用于具有 UNIX 工作背景的系统管理员和开发者。目标操作系统是具有新引导体系结构的适用于 x86 平台的 Solaris 10 01/06 发行版(也称为 Update 1)以及 OpenSolaris(也称为 Nevada)。此说明不适用于早期版本的 Solaris 10 操作系统(x86 平台版,GA 发行版 03/05)或任何版本的 Solaris 操作系统(SPARC 平台版)。

    简介

    随着更多的用户开始采用适用于 x86 平台和 x64 平台的 Solaris 10 操作系统,驱动程序的开发和测试也越来越多。通过软盘或 USB 海量存储设备,可以在系统安装后添加某些驱动程序。大多数网络驱动程序都是如此。如果系统具有光驱,则可以先安装 Solaris 操作系统,在系统引导自身后再添加新驱动程序。

    但是,当用户要在更多系统(某些系统没有光驱、软盘或 USB 端口)或具有新类型存储控制器的系统上使用 Solaris 操作系统时,会出现一个问题:如果 Solaris 安装介质中没有某个设备的驱动程序二进制文件,如何在需要该设备的系统上安装 Solaris 操作系统呢?对于存储控制器,除非确定安装程序介质具有驱动程序,否则无法将安装软件包保留到磁盘存储器上。而对于主要提供网络接口(几乎没有其他 I/O 接口)的薄型计算机,如果通过网络引导系统的初始 Solaris 实例没有用于网络接口的驱动程序,则在该系统上将无法执行 Solaris 操作系统的网络安装。

    因此,此说明文档提供了一组简明指导,帮助您将新设备驱动程序二进制文件插入安装介质中。它主要介绍以下两种安装方法:

    • 使用 PXE 引导/DHCP 进行网络安装
    • 创建您自己的可引导 ISO 安装 CD 和 DVD

    本文档仅适用于使用新 Solaris 引导体系结构的 Solaris 10 1/06(也称为 Update 1)和 OpenSolaris (Nevada) 版本。(有关详细信息,请参见“资源”部分。)

    网络 PXE 引导安装

    目前安装 Solaris 操作系统的最快、最便捷的方法可能是通过网络从 Solaris JumpStart 服务器进行安装。使用 Solaris Enterprise System 的许多管理员可能已经了解适用于基于 SPARC 技术的 Sun 服务器和工作站(具有网络感知 Open Boot PROM 固件)的 JumpStart 技术。Sun 大约在 20 年前就普及了此安装方法。其基本过程包括以下简单步骤:

    1. 将网络安装客户机配置为通过网络引导。
    2. 一打开电源,客户机即使用 BOOTP 进行广播以获取网络信息。
    3. BOOTP 服务器以网络、引导和安装信息进行回复。
    4. 客户机配置其网络并检索引导和安装文件。

    最近几年,以太网接口也几乎已经成为所有 PC 上的标准接口,并且许多 PC 在出厂时就启用了 Intel 预引导执行环境 (Pre-boot Execution Environment, PXE) 固件,该固件扩展了 PC BIOS,使其具有类似于执行网络引导和安装的功能。PC 上的过程基本上都是相同的,唯一的不同之处在于,在步骤 (2) 和 (3) 中 PXE 引导利用 DHCP 检索网络、引导和安装信息。但是,许多 Solaris 系统管理员可能不知道,在添加了对 PXE 引导客户机的 DHCP 服务器支持后,Solaris JumpStart 服务器还可以引导 PC。所有必需的服务器软件组件都已捆绑到 Solaris 操作系统中,您只需进行配置即可。

    设置 JumpStart PXE 引导服务器

    Solaris 安装介质通常包含一个用于安装基本 JumpStart 服务器的实用程序。将光盘插入正在运行的 Solaris 系统时,通常会提示卷管理器在 /cdrom 下挂载介质。转到以下目录时,您应该看到 JumpStart 安装脚本 setup_install_server(1m)

       # cd /cdrom/sol_10_106_x86/Solaris_10/Tools
    

    用法比较直观。只需指定命令和目标安装目录即可:

       # ./setup_install_server /export/install
    

    用户可以根据需要将目标目录 /export/install 更改为其他位置。目标目录所在的分片上必须具有大约 3 GB 或更多的磁盘空间才能运行此命令。此命令可能需要一个小时或更长时间,因为要将所有组件从光盘复制到目标目录。所用时间取决于光驱的速度和主系统的速度。

    如果用户只有 CD-ROM 驱动器且不支持 DVD,将从多个光盘进行安装。对于 CD1 和 DVD,初始安装是相同的。执行初始 setup_install_server 之后,您可以退出当前目录,返回到 /root 目录,从文件管理器窗口弹出第一张 CD,然后插入其他 CD。在每张 CD 上,转回 /cdrom/sol_10_106_*/Solaris10/Tools/ 目录,以启动时使用的目标目录运行 add_to_install_server(1M) 命令。

    安装服务器设置完成后,请务必将安装文件系统导出到网络上。要执行此操作,请编辑 /etc/dfs/dfstab 文件并插入以下一行:

       share -F nfs -o ro,anon=0 -d "jumpstart dir" /export/install
    

    可以将 /export/install 编辑为解压缩安装服务器时所在的任何位置。保存并退出编辑器后,应通过运行以下命令启用或重新启动 NFS 服务器:

       # svcadm enable svc:/network/nfs/server ; shareall
    

    为了完整起见,可以创建以下目录:

       # mkdir /export/install/jumpstart
    

    然后将样例 jumpstart_sample 文件复制到该目录:

       # cp -r /export/install/Solaris_10/Misc/jumpstart_sample/* \
        /export/install/jumpstart
    
    为 PXE 引导设置 DHCP 服务器

    在上一部分,您完成了将 JumpStart 安装软件包传输到服务器所需的大多数任务,并使这些软件包可以通过 NFS 在网络上进行访问。但是,PC 引导客户机必须先通过网络引导并获取用于开始安装的初始网络和引导文件,才能访问这些软件包。对于大多数的网络安装环境,同一 JumpStart 主机还运行引导客户机的 DHCP 和 PXE 引导服务器进程。

    PXE 引导客户机启动时,它将进行广播以获取网络信息和引导文件。网络信息是通过 DHCP 提供的。然后使用 TFTP 传输 Solaris 网络引导程序 (network boot program, nbp) 和其他初始化文件(如 Solaris x86.miniroot),最后,在 Solaris 安装程序启动后,将通过 NFS 传输 JumpStart 安装软件包。

    配置 Solaris DHCP 需要执行以下操作:

    • 应该将 DHCP 服务器配置为识别和响应 PXE 引导客户机。
    • 应该创建所有的 PXE 引导目录,并应复制或链接客户机在引导过程中所需的相应文件。

    如果已配置 DHCP 服务器,则可以通过在 dhcpconfig(1M) 命令中使用取消配置标志来取消配置,例如:

       # dhcpconfig -Ux
    

    在此处配置的服务器将对 x86 平台上 Solaris 操作系统的所有 PXE 引导请求进行应答,并且可以在它是唯一安装服务的隔离子网上正常工作。但是,如果此 DHCP 服务必须与其他服务共存,或者需要特定配置,则可以进行定制以便仅应答来自特定 MAC 地址或特定网络的请求。有关详细信息,请参见 Solaris DHCP Administration Guide(Solaris DHCP 管理指南)

    以下脚本可简化 PXE 的大多数常规 DHCP 配置:

     #!/bin/sh
    dhcpconfig -D -r SUNWbinfiles -p /var/dhcp
    dhcpconfig -N <network> -m <netmask> -t <routerip>
    dhtadm -A -s SrootOpt -d 'Vendor=SUNW.i86pc,1,ASCII,1,0'
    dhtadm -A -s SrootIP4 -d 'Vendor=SUNW.i86pc,2,IP,1,1'
    dhtadm -A -s SrootNM -d 'Vendor=SUNW.i86pc,3,ASCII,1,0'
    dhtadm -A -s SrootPTH -d 'Vendor=SUNW.i86pc,4,ASCII,1,0'
    dhtadm -A -s SswapIP4 -d 'Vendor=SUNW.i86pc,5,IP,1,0'
    dhtadm -A -s SswapPTH -d 'Vendor=SUNW.i86pc,6,ASCII,1,0'
    dhtadm -A -s SbootFIL -d 'Vendor=SUNW.i86pc,7,ASCII,1,0'
    dhtadm -A -s Stz -d 'Vendor=SUNW.i86pc,8,ASCII,1,0'
    dhtadm -A -s SbootRS -d 'Vendor=SUNW.i86pc,9,NUMBER,2,1'
    dhtadm -A -s SinstIP4 -d 'Vendor=SUNW.i86pc,10,IP,1,1'
    dhtadm -A -s SinstNM -d 'Vendor=SUNW.i86pc,11,ASCII,1,0'
    dhtadm -A -s SinstPTH -d 'Vendor=SUNW.i86pc,12,ASCII,1,0'
    dhtadm -A -s SsysidCF -d 'Vendor=SUNW.i86pc,13,ASCII,1,0'
    dhtadm -A -s SjumpsCF -d 'Vendor=SUNW.i86pc,14,ASCII,1,0'
    dhtadm -A -s Sterm -d 'Vendor=SUNW.i86pc,15,ASCII,1,0'
    dhtadm -A -s SbootURI -d 'Vendor=SUNW.i86pc,16,ASCII,1,0'
    dhtadm -A -m PXEClient:Arch:00000:UNDI:002001 -d ':BootFile="nbp.SUNW.i86pc":BootSrvA=<serverip>:'
    dhtadm -A -m SUNW.i86pc -d \ 
       ':SinstNM="<server>":SinstIP4=<serverip>:\
    SinstPTH="/export/install":SrootNM="<server>":\
    SrootIP4=<serverip>:\
    SrootPTH="/export/install/Solaris_10/Tools/Boot":\
    SjumpsCF="<server>:/export/install/jumpstart":\
    SsysidCF="<server>:/export/install/jumpstart":'
    

    在开头部分,应将 <network> 替换为您子网的网络地址(例如,192.168.100.0)。<netmask> 是网络掩码(例如,255.255.255.0),<routerip> 是路由器的 IP 地址(例如,192.168.100.1)。在脚本的最后一行上,将 <server> 替换为安装服务器的主机名(该名称也是之前您在最后一行上命名的 dhtadm 宏的名称),并将 <serverip> 替换为安装服务器的 IP 地址。将脚本剪切并粘贴到文件中,并以超级用户身份运行该脚本。

    此外,编辑 /etc/hosts 文件,并添加一个或多个具有 IP 地址的客户机条目。对于两个客户机,执行以下操作:

       192.168.100.101 pxeclient1
       192.168.100.102 pxeclient2
    

    现在,使用 pntadm(1M) 命令将它们添加到 DHCP 服务器客户机表:

       # pntadm -A 192.168.100.101 -m <server> -h pxeclient1 <network> 
       # pntadm -A 192.168.100.102 -m <server> -h pxeclient2 <network>
    

    请注意,对于上面 PXE 配置脚本的最后一行所指定的服务器和网络宏,<server><network> 的含义相同。然后通过发出以下命令将 -HUP 信号发送给 in.dhcp 进程:

       #  pkill -HUP in.dhcpd 
    

    此信号将强制 DHCP 服务器重新读取其配置文件。这应该处理了 DHCP 服务器配置的第一步。

    为了配置用于 TFTP 的引导文件,Solaris 操作系统提供了一个命令,以简化所有文件的创建和复制到 /tftpboot 目录的过程。只需从 /export/install/images/Solaris_10/Tools 目录运行以下命令即可:

       # ./add_install_client -d SUNW.i86pc i86pc
    

    现在,应该能够在 Solaris 操作系统上测试 PC 客户机和引导 PXE。

    添加更多驱动程序

    为 PXE 引导客户机添加驱动程序包括两个步骤。如前面所述,通常,最关键的是添加存储控制器和网络接口驱动程序。第一步是将这些驱动程序插入通过 TFTP 装入的 x86.miniroot 中。

    如果遵循上述指导,则该文件应位于以下位置:

       /export/install/boot/x86.miniroot
    

    但是该文件可能位于 /export/<solaris_root_install_dir>/boot/x86.miniroot 中,其中 <solaris_root_install_dir> 是解压缩安装介质时所在的 /export 下的顶级目录名称。要执行第一步,即解压缩 miniroot,可以在安装服务器上运行 root_archive(1M) 命令。这仅适用于 Solaris 10 1/06 发行版(x86 平台版)和更高版本。将目录转到 /export/install/boot 或安装服务器设置放置软件包的任何位置,然后使用以下命令解压缩 miniroot:

       # /boot/solaris/bin/root_archive unpack ./x86.miniroot ./unpacked
    

    解压缩 miniroot 后,将 32 位驱动程序二进制文件和 driver.conf 文件复制到 /unpacked/kernel/drv 目录,然后使用正确的 PCI ID 和权限,对已解压缩的 miniroot 目录运行 /usr/sbin/add_drv 命令。例如:

      # add_drv -b <fullpath-to-unpacked> -n -v -m '* 0600 root sys' -i "<device ids>" <mydrivername>
    

    请注意,<mydrivername> 是刚才复制到 ./unpacked/kernel/drv 目录的二进制文件的名称,<device ids> 是 PCI 设备 ID 的字符串列表,可能与以下内容类似:

       '"pci1a44,9043" "pci1a44,9065" "pci1a44,9106" "pci1a44,9053"'
    

    此外,-b 标志允许您设置应用驱动程序添加操作的根路径(它指向解压缩的 miniroot)。请注意,x86.miniroot 是 32 位的,它仅支持 32 位驱动程序。

    最后一步是使用同一命令重新压缩 miniroot,但是将 pack 指定为关键字。执行该操作前,可以(或许应该)在同一根目录中创建原始 x86.miniroot 的副本。例如:

       # cp ./x86.miniroot ./x86.miniroot.orig
    

    然后运行 root_archive(1M) 命令:

       # /boot/solaris/bin/root_archive pack ./x86.miniroot ./unpacked
    

    如果之前 PXE 引导服务器正在工作,则客户机应该能够引导和装入 x86.miniroot,并完成 Solaris 10 1/06 发行版(x86 平台版)的常规安装。在安装过程中将出现安装选项菜单;缺省为执行交互式安装。执行交互式安装时,安装程序将允许选择自动重新引导或手动重新引导。请选择手动重新引导,因为尽管在先前步骤中已将驱动程序置于 miniroot 中,但是它们不会执行任何操作以将缺少的网络驱动程序安装到最终的客户机系统上。请选择手动重新引导,以便可以在重新引导之前将驱动程序复制过来,并在最终客户机磁盘映像上运行 add_drv 命令。否则,新安装的系统仍将没有网络驱动程序。

    现在的问题是,您应将驱动程序二进制文件放置在何处,才能使安装客户机能够将其复制过来?

    可以从 miniroot 已有的 /kernel/drv 中复制文件。如果系统仅为 32 位,且只在此模式下运行,则可以使用这种方法。但是,如果系统支持 x64,则您并没有将 64 位驱动程序二进制文件复制到 miniroot 的 /kernel/drv/amd64 目录中,这是因为 miniroot 仅为 32 位且没有 ./kernel/drv/amd64 目录。在前面的步骤中您可能已创建该目录,但那不是必需的。在 Solaris PXE 引导安装过程中,客户机通过 NFS 挂载安装服务器目录。因此,在重新引导之前,仅将驱动程序文件置于安装服务器的已导出 PXE 引导目录,尤其是客户机在安装过程中就已挂载文件的 jumpstart 目录中是十分容易的。可以在服务器的已导出目录中放置 ./jumpstart/drv 子目录。在安装客户机上,它通常作为 /tmp/install_config 挂载。如果找不到该子目录,请使用 df(1M) 命令查看文件系统及其挂载点的列表。

    CD/DVD-ROM 介质安装

    创建具有其他驱动程序的可引导 CD 或 DVD 安装介质的过程与在网络安装中更改 x86.miniroot 的过程类似。需要进行的额外工作主要是挂载 CD 或 DVD,将整个光盘映像内容复制到其他目录,在安装映像副本上执行相同的驱动程序插入操作,然后重新打包文件并创建可以刻录到 CD 或 DVD 介质上的可引导 ISO 映像。

    使用 CD/DVD-ROM 介质

    如果 DVD 或 CD-ROM 介质已存在,则复制文件的过程应该十分简单。只需将光盘插入驱动器,然后在命令行中执行以下操作即可:

       # cd /cdrom/sol_10_106/x86; find . -depth -print|cpio -vpdm <targetdir>
    

    请注意,<targetdir> 是目标工作目录的完整路径。在复制后,miniroot 通常位于 <targetdir>/boot/x86.miniroot 中。重复先前“添加更多驱动程序”部分中的步骤。

    完成后,使用 mkisofs(8) 命令将文件重新打包为要刻录的可引导 ISO 映像。具体操作如下:

       # mkisofs -o <outfilename.iso> -b boot/grub/stage2_eltorito \
         -c .catalog -no-emul-boot -boot-load-size 4 \
         -boot-info-table -relaxed-filenames -N -L -l -r -J \
         -d -D -V <volname> <targetdir> 
    

    <outfilename.iso> 替换为要输出的文件名,并将 <volname> 替换为卷名(例如,MYS10VOL)。<targetdir> 是从中复制了原始文件的目录。

    使用 CD/DVD ISO 文件

    如果没有介质,但已下载 ISO 文件,则无需先刻录介质再将其挂载。Solaris 操作系统提供了回送文件系统挂载命令 lofiadm(1M),用户可以使用该命令挂载 ISO 映像。只需使用以下命令即可:

     # /usr/sbin/lofiadm -a <isoimagepath>
    

    请注意,<isoimagepath> 是已下载的安装 ISO 映像的完整路径。通常,lofiadm(1M) 命令将块设备位置返回为 /dev/lofi/1/dev/lofi/2/dev/lofi/,具体取决于已挂载的回送文件系统数。要将其作为可读文件系统进行挂载,请使用 mount(1M) 命令:

       # mount -F hsfs /dev/lofi/1 /mnt
    

    正如“使用 CD/DVD-ROM 介质”部分中所述,现在可以访问这些文件,但在 /mnt 挂载点上的文件除外。重复将驱动程序插入安装映像的过程(如“添加更多驱动程序”中所述),并使用“使用 CD/DVD-ROM 介质”部分中的命令将其重新打包为可刻录的可引导 ISO 映像。

    完成回送文件系统挂载后,只需运行 umount(1M) 和 lofiadm(1M) 命令进行卸载:

       # umount /mnt; lofiadm -d /dev/lofi/1
    

    /mnt/dev/lofi/1 替换为前面命令中的挂载点。

    资源

    有关详细信息,请参见以下有用链接:

      
     
     
     
    Breathe Easier
    Take a Sun certification exam, and if you need it, receive a free retake.
    Did you know Sun offers middleware?


  • 相关阅读:
    Could not find file '..inhibernate.cfg.xml'解决方法:
    图片轮播插件-carouFredSel
    C语言数组
    C语言字符串
    C语言指针基础
    python 多线程
    Andriod之Activity
    Java面向对象的编程
    C++模板编程
    关于思考
  • 原文地址:https://www.cnblogs.com/liangqihui/p/1232705.html
Copyright © 2011-2022 走看看