linux刻录引导:从 FireWire 设备引导 Linux

=tf width="98%" align=center border=0>
=bw width="100%">=htd id=font_word style="FONT-SIZE: 14px; FONT-FAMILY: 宋体, Verdana, Arial, Helvetica, sans-ser">在移动驱动器上安装 Linux
duAfbaiducukDkn级别: 中级
duAfbaiducukDkn 
duAfbaiducukDkn
duAfbaiducukDknMartyn Honeyford ([email protected]) 
duAfbaiducukDkn软件工程师, IBM UK Labs
duAfbaiducukDkn2004 年 8 月 
duAfbaiducukDkn
duAfbaiducukDkn获得外置驱动器是种为较老设备注入生机极好方法或者允许您在不能(或不想)改变内置硬盘驱动器机器上运行 Linux
duAfbaiducukDkn假设您想在双引导系统中使用 Linux但计算机硬盘驱动器中没有任何可用空间个解决方案就是使用“活动”Linux 发行版如 Knoppix它可以直接从 CD 运行如果是偶尔使用这种方法确实可行但是它有许多严重缺点: 
duAfbaiducukDkn
duAfbaiducukDkn您仍需要些数据文件永久存储如果仅使用非常小文件可以使用软盘;对于中等大小文件USB 闪存盘可能就足够了但是它们都不是理想方法 
duAfbaiducukDkn当使用“活动”CD 时要安装自己应用或定制现有应用会非常困难甚至不可能 
duAfbaiducukDkn使用活动发行版会降低性能最显著就是当启动检测所有设备时 —— 但运行时也会降低性能(所有东西都必须从 CD 加载这通常要比从硬盘驱动器加载慢得多) 
duAfbaiducukDkn自然还有其他选择例如可以买其他内置驱动器并在其中安装 Linux但常见情况是机器中可能没有任何可用驱动器托架(笔记本电脑更是如此它通常仅允许个内置硬盘驱动器) 
duAfbaiducukDkn
duAfbaiducukDkn或者您可以使用更大驱动器替代当前驱动器并在由此得到额外空间中安装 Linux不过这是个花费时间选择它需要您在新驱动器上重新安装现有 OS 系统重新安装和重新配置所有应用及还原所有数据 
duAfbaiducukDkn
duAfbaiducukDkn种更好解决方案是购买外置硬盘驱动器并在其中安装 Linux这使您可以不更改现有硬件和软件仅在想使用 Linux 时候连接外置驱动器即可 
duAfbaiducukDkn
duAfbaiducukDkn可移动驱动器选项
duAfbaiducukDkn可在其中安装 Linux 移动设备范围包括从软盘驱动器到 USB 闪存设备再到 USB/FireWire 硬盘驱动器等等 
duAfbaiducukDkn
duAfbaiducukDkn虽然确可能将 Linux 安装在小容量设备中如 1.44 MB 软盘或 32 MB USB 盘但这些通常(必然)都是专门经过缩减发行版例如用于拯救损坏安装 
duAfbaiducukDkn
duAfbaiducukDkn不过外置硬盘驱动器以合理成本为通用 Linux 发行版提供最多灵活性 
duAfbaiducukDkn
duAfbaiducukDkn外置驱动器来自许多不同制造商(Maxtor、Western Digital 等等)可以有各种不同大小这些驱动器都包含个外置盒放置标准 3-1/2 英寸或 2-1/2 英寸 IDE 驱动器这些驱动器通常都通过 USB 或 IEEE1394(FireWire)连接到计算机上 
duAfbaiducukDkn
duAfbaiducukDknUSB 有两个主要版本1.1 和 2.0版本 1.1 最大传输速度为 12 Mbit/s(兆比特/秒)而版本 2.0 支持最高达 480 Mbit/s 传输速度虽然大多数兼容 2.0 驱动器都可向后兼容 1.1但是般最好避免使用 1.1除非别无选择(速度比较慢) 
duAfbaiducukDkn
duAfbaiducukDknFireWire 标准还定义了许多不同可能速度但是实际上无论何时人们说到 FireWire他们都是指“FireWire400”它支持最高达 400 Mbit/s 传输 
duAfbaiducukDkn
duAfbaiducukDkn从速度来看在 USB 2.0 和 FireWire 之间没什么可选择:虽然 USB 2.0 报出速度较高实际上协议不同它们都是差不多如果您计算机两者都有或许使用 USB 更好而不是 FireWire(后面我会讲明原因)但是如果仅有 FireWire则当然只能选择 FireWire为了获得最大灵活性从大量支持 USB 2.0 和 FireWire 驱动器中选择个(比如我在本文稍后使用驱动器) 
duAfbaiducukDkn
duAfbaiducukDkn对于没有所需端口、PCI(对于台式电脑)和 PCMCIA(对于笔记本电脑)计算机可以很便宜地买到 FireWire 和 USB 2.0 卡:例如我在本文后面使用 PCMCIA FireWire 卡大概是用 10 GBP(不到 20 美元)买到 
duAfbaiducukDkn
duAfbaiducukDkn为了完成本文我购买了 5-1/4 英寸外置驱动器盒这是非常灵活盘盒它不与任何驱动器起提供可以装入任何标准 IDE 设备包括 3-1/2 英寸硬盘驱动器和 5-1/4 英寸 IDE 设备如 CD-RW/DVD-RW 驱动器该盘盒具有 USB 2.0 和 FireWire 连接 
duAfbaiducukDkn
duAfbaiducukDkn为了将盘盒连接到我 IBM Thinkpad T30 笔记本电脑我还购买了 PCMCIA FireWire 卡(内置 USB 端口仅支持 USB 1.1) 
duAfbaiducukDkn
duAfbaiducukDkn盘盒和 FireWire 卡都比较便宜(分别是 50 GBP 和 10 GBP) 
duAfbaiducukDkn
duAfbaiducukDkn出于测试目我将盘盒与我准备 13GB 3-1/2 英寸 IDE 驱动器连接 —— 在实际使用时我会购买更大容量驱动器这些驱动器现在也非常便宜(大约每 GB 50 GBP!) 
duAfbaiducukDkn
duAfbaiducukDknLinux 支持
duAfbaiducukDkn正如您可能期望那样Linux 对这些盘盒支持确实很好任何遵守“大容量存储设备” SBP(Serial Bus Protocol)标准设备都可以很容易地与 Linux 起使用 
duAfbaiducukDkn
duAfbaiducukDkn般来说要启用对这些设备支持内核需要支持许多内容(直接编译或通过模块) 
duAfbaiducukDkn
duAfbaiducukDkn对于 USB 和 FireWireSBP 设备支持都通过 SCSI 仿真实现 —— 即设备显示给 Linux 就好像它们是 SCSI 磁盘这是在 Linux 中抽象存储设备种通用方法(例如IDE CD/DVD 驱动器也通常使用 SCSI 仿真连接)因此需要下列内核支持: 
duAfbaiducukDkn
duAfbaiducukDknSCSI 支持 
duAfbaiducukDknSCSI 仿真 
duAfbaiducukDknSCSI 磁盘支持 
duAfbaiducukDkn另外根据连接方法还会需要下列支持: 
duAfbaiducukDkn
duAfbaiducukDkn对于 FireWire: 
duAfbaiducukDknIEEE1394 支持 
duAfbaiducukDknOHCI1394 支持 
duAfbaiducukDknRAW1394 支持 
duAfbaiducukDknSBP-2 支持 
duAfbaiducukDkn对于 USB: 
duAfbaiducukDkn(主机端)USB 支持 
duAfbaiducukDknOHCI 支持 
duAfbaiducukDknUHCI 支持 
duAfbaiducukDknUSB 大容量存储支持 
duAfbaiducukDkn显然您必须完全正常支持其他硬件(显卡等等)根据您实际硬件情况可能还需要些其他模块 
duAfbaiducukDkn
duAfbaiducukDkn例如我使用 PCMCIA (cardbus) FireWire 卡所以需要添加: 
duAfbaiducukDkn
duAfbaiducukDknPCMCIA 支持 
duAfbaiducukDkncardbus 支持 
duAfbaiducukDkn安装
duAfbaiducukDkn现在我们有了外置设备将开始在其中安装 Linux 
duAfbaiducukDkn
duAfbaiducukDkn现在安装 Linux 最容易方法(当然是我观点)是连接所有硬件(在这里包含插入 PCMCIA FireWire 卡、将 FireWire 线缆连到 PCMCIA 卡和驱动器上、打开驱动器电源开关);然后使用您选择发行版安装 CD 来引导计算机 
duAfbaiducukDkn
duAfbaiducukDkn我选择发行版是 Gentoo(请参阅参考资料获得相关链接)所以我使用最新“Universal” x86 Live CD (2004.1)其他发行版所需步骤应该会比这里讲述步骤多或者少 
duAfbaiducukDkn
duAfbaiducukDkn旦已经使用安装 CD 引导如果幸运它应该已经识别了您驱动器驱动器应该显示为 /dev/sdX 下磁盘其中 X 是从“a”开始小写字母在我系统中外置驱动器被检测为 /dev/sda但是如果您有其他 SCSI 磁盘(模拟 SCSI 磁盘)这将发生变化;在那种情况下它可能是 /dev/sdb 或其他字母如果驱动器没有被自动检测可能需要进步骤 —— 例如您可能必须通过引导选项来启用 FireWire 或 PCMCIA或者可能必须手工加载些内核模块或类似其他项(请参阅参考资料获得故障排除指南链接) 
duAfbaiducukDkn
duAfbaiducukDkn旦驱动器已经被识别就考虑安装其余部分而言它应该确实像内置硬盘驱动器样运转;所以您应该可以根据需要对其进行分区和像平常样安装 Linux 
duAfbaiducukDkn
duAfbaiducukDkn不过提醒句:当决定安装引导加载(通常是 GRUB 或 LILO)位置时定要小心 —— 我建议不要将其安装在 Master Boot Record (MBR)(通常默认就是这样)中而是应该安装在外置驱动器根分区(或引导分区如果使用单独引导加载)中 
duAfbaiducukDkn
duAfbaiducukDkn现在我们已经在设备中安装了 Linux接着要引导 Linux从这里可以开始有些技巧 
duAfbaiducukDkn
duAfbaiducukDkn引导
duAfbaiducukDkn在讨论引导新驱动器之前需要了解些引导加载理论 
duAfbaiducukDkn
duAfbaiducukDkn引导加载通常安装在计算机第个硬盘 MBR 中引导加载时(BIOS 自动执行 MBR 中代码)它通常显示可以引导 OS 菜单选择个给定 OS 引导 
duAfbaiducukDkn
duAfbaiducukDkn关于此场景应该注意两点: 
duAfbaiducukDkn
duAfbaiducukDknOS 选择菜单(通常)从磁盘加载 
duAfbaiducukDkn要引导相关 OS引导加载需要从磁盘读取相关内核 
duAfbaiducukDkn由于以上操作在加载 OS 之前发生它意味着所有磁盘读取都必须通过 BIOS 方式发生这会涉及严重问题:即为了直接引导磁盘 BIOS 必须支持通过 FireWire 或 USB 连接磁盘这通常可以看作从这些类型磁盘引导个 BIOS 选项实际上 FireWire BIOS 支持当前很少见但 USB 支持正在变得相当普遍因此如果您在相对较新计算机中使用 USB应该可以直接在 Linux 中引导驱动器 
duAfbaiducukDkn
duAfbaiducukDkn在外置驱动器 MBR 中安装了 GRUB 之后当通过 USB 连接时我可以直接引导该驱动器当引导连接磁盘时很简单地进入了 BIOS 设置外置磁盘将显示为普通硬盘驱动器:移动该磁盘使它在引导顺序中位于内置驱动器之前 
duAfbaiducukDkn
duAfbaiducukDkn我也可以在内置驱动器 MBR 中安装引导加载并使用它引导 USB 驱动器(这时它在 GRUB 中显示为 hd1 in GRUB)如果您使用 FireWire有可能 BIOS 不能直接引导驱动器将需要些其他操作 
duAfbaiducukDkn
duAfbaiducukDkn幸运地是 Linux 灵活性如果您不能直接引导(使用 PCMCIA FireWire 卡情况肯定是这样!)会有相当简单解决方案可以从支持设备(如软盘驱动器、CD、USB key 或主驱动器上微小分区)执行引导步骤然后使用外置驱动器进行其他操作 
duAfbaiducukDkn
duAfbaiducukDkn构建引导映像
duAfbaiducukDkn可以使用两种方法引导: 
duAfbaiducukDkn
duAfbaiducukDkn阶段引导 
duAfbaiducukDkn内核引导、安装根文件系统并通过化脚本(通常是 /sbin/init)继续进行 
duAfbaiducukDkn两阶段(initrd)引导 
duAfbaiducukDkn内核引导、安装 ram 磁盘(initrd)执行进可定制然后安装根文件系统并继续进行化(通常也是通过 /sbin/init) 
duAfbaiducukDkn这两种方法都有自己优点和缺点 
duAfbaiducukDkn
duAfbaiducukDkn阶段引导
duAfbaiducukDkn为了使用阶段引导我们需要构建内核其具有安装内置根文件系统所需所有驱动器(其他任何驱动器都可以在正常化过程中在能够从根分区加载模块中构建) 
duAfbaiducukDkn
duAfbaiducukDkn如果我们要从非常小设备引导(如软盘)最好方法是构建内核仅具有足够使我们可以安装根外置文件系统内置驱动器 —— 然后将其他所有项构建为模块例如我内置了 SCSI 支持、PCMCIA 支持、IEE1394、SBP 和类似支持但是其他所有项(包括显卡支持、网络设备支持等等)都作为模块构建这些模块存储在根分区(在外置驱动器上)中而不是软盘上 
duAfbaiducukDkn
duAfbaiducukDkn使用简单(阶段)引导过程我们应该能够构建具有所需支持内核将其放在软盘驱动器中在软盘中安装引导加载(我使用 GRUB但还有其他选择如 LILO)然后使用与此内核(对于 GRUB)相似内核引导: 
duAfbaiducukDkn
duAfbaiducukDknroot (fd0) 
duAfbaiducukDknkernel (fd0)/boot/bzImage root=/dev/sda1 
duAfbaiducukDkn
duAfbaiducukDkn这种方法基本上可以工作但有两个问题: 
duAfbaiducukDkn
duAfbaiducukDkn SBP 支持使用 SCSI 仿真为了检测磁盘和允许安装 /dev/sda1需要“重新扫描”仿真 SCSI 总线这种扫描使用组简单命令执行不过遗憾使用阶段引导我们不能运行任何命令直到内核已经完成引导而内核直到安装了根文件系统才能完成引导 —— 典型自相矛盾困境令人感到高兴对于导致 SCSI 总线在启动时被扫描 2.4 内核有可用修补(有关更多详细信息请参阅参考资料)通过应用此修补我可以使外置驱动器在引导过程中由内核自动检测而不需要任何重新扫描命令这使我们进入了下个问题 
duAfbaiducukDkn内核中有定时窗口这意味着内核经常在其能够被正确监测和化之前尝试安装根设备对于此问题也有可用修补(请参阅参考资料获得相关链接)它只是使内核在启动时等待很短时间并使其在安装根文件系统失败时重试(为外置驱动器提供时间识别) 
duAfbaiducukDkn通过应用这两个修补我可以成功地在可引导软盘上构建内核其将引导然后使用外置 FireWire 驱动器作为根 
duAfbaiducukDkn
duAfbaiducukDkn这种方法主要问题是需要我们给内核源码打补丁 —— 这最多是件痛苦之事(当发行新内核版本时)严重时会是个大问题(如果没有维护补丁与内核发生其他更改保持话) 
duAfbaiducukDkn
duAfbaiducukDkn您可能已经想到如果我们 BIOS 支持 USB 或 FireWire 且我们直接引导我们就可以避免这两个问题不幸情况并不是这样:虽然此方法在引导过程中使用 BIOS 来访问磁盘旦内核开始将不再使用 BIOS而是使用内核驱动器访问磁盘 —— 这样就会遇到相同问题 
duAfbaiducukDkn
duAfbaiducukDkn两阶段引导
duAfbaiducukDkn到了内核版本 2.0.X向 Linux 内核添加了项引人注意能力 —— 使用“initial RAM disk”(或 initrd)提供两阶段引导过程 
duAfbaiducukDkn
duAfbaiducukDkn简而言之内核像平常样引导;但不安装“真实”根文件系统而是在 RAM 中创建微型根文件系统并安装该系统在安装真实根、切换为使用真实根并销毁 initial RAM disk 之前任何步骤都可以在此环境中执行 
duAfbaiducukDkn
duAfbaiducukDkn这在各种环境中都有用但是为了便于说明我们将仅使用我们迷你环境重新扫描 SCSI 总线等待外置磁盘被识别然后切换为使用该磁盘作为真实根继续引导 
duAfbaiducukDkn
duAfbaiducukDkn为了使用这种方法我们需要创建两项内核和 initrd 映像 
duAfbaiducukDkn
duAfbaiducukDkn内核就是具有内置 initrd 支持普通内核initrd 映像是包含我们迷你根文件系统回送文件系统映像(此映像可以使用 gzip 进行压缩以减少其大小) 
duAfbaiducukDkn
duAfbaiducukDkn有关创建或定制自己 initrd 映像详细信息可以查看参考资料部分 
duAfbaiducukDkn
duAfbaiducukDkn在 initrd 映像中个名为 linuxrc 文件当加载 initrd 时会执行此文件所以确保其具有执行权限!我们为了进行说明所以 linuxrc 非常简单: 
duAfbaiducukDkn
duAfbaiducukDkn清单 1. initrd linuxrc
duAfbaiducukDkn
duAfbaiducukDkn#!/bin/sh
duAfbaiducukDknREAL_ROOT=/dev/sda1
duAfbaiducukDkn# mount the /proc filesystem
duAfbaiducukDknmount -t proc none /proc
duAfbaiducukDkn
duAfbaiducukDkn#for scsi-emulation
duAfbaiducukDkn# modprobe sd_mod
duAfbaiducukDkn
duAfbaiducukDkn#for pcmcia
duAfbaiducukDkn# modprobe pcmcia_core
duAfbaiducukDkn
duAfbaiducukDkn#for FireWire
duAfbaiducukDkn# modprobe ieee1394
duAfbaiducukDkn# modprobe ohci1394
duAfbaiducukDkn# modprobe raw1394
duAfbaiducukDkn# modprobe sbp2
duAfbaiducukDkn
duAfbaiducukDkn#for USB
duAfbaiducukDkn# modprobe usbcore
duAfbaiducukDkn# modprobe ohci-hcd
duAfbaiducukDkn# modprobe uhci-hcd
duAfbaiducukDkn# modprobe usb-storage
duAfbaiducukDkn
duAfbaiducukDkn# loop rescanning the scsi bus + rerunning devfsd
duAfbaiducukDknretries=5
duAfbaiducukDkni=1
duAfbaiducukDknuntil [ -e $REAL_ROOT ]
duAfbaiducukDkndo
duAfbaiducukDkn   [ $i -gt $retries ]
duAfbaiducukDkn  then
duAfbaiducukDkn     echo "Unable to mount real root ($REAL_ROOT) - Giving up!"
duAfbaiducukDkn     /bin/ash
duAfbaiducukDkn     exit
duAfbaiducukDkn  fi
duAfbaiducukDkn
duAfbaiducukDkn  echo "Real root ($REAL_ROOT) not found, retrying ($i)"
duAfbaiducukDkn  sleep 1
duAfbaiducukDkn  echo "scsi add-single-device 0 0 0" > /proc/scsi/scsi
duAfbaiducukDkn  echo "scsi add-single-device 1 0 0" > /proc/scsi/scsi
duAfbaiducukDkn  echo "scsi add-single-device 2 0 0" > /proc/scsi/scsi
duAfbaiducukDkn  /bin/devfsd /dev -np
duAfbaiducukDkn  i=$((i+1))
duAfbaiducukDkndone
duAfbaiducukDkn
duAfbaiducukDkn#umount /proc as it will be remounted by the normal init process
duAfbaiducukDknumount /proc
duAfbaiducukDkn
duAfbaiducukDkn#now we simply exit, and the normal boot process should continue
duAfbaiducukDknexit 0
duAfbaiducukDkn
duAfbaiducukDkn 
duAfbaiducukDkn
duAfbaiducukDkn我们做所有操作都是加载适当模块来支持外置驱动器:它们应该根据需要被解注(我在内核中构建了所有必需支持因此不需要任何模块)然后我们进行循环重新扫描 SCSI 总线(通过将命令回送到 /proc pseudo-filesystem 中特殊文件 devfsd)直到出现根设备(我例子中为 /dev/sda1)在我例子中讨论仿真 FireWire SCSI 总线是 1 0 0不过也可以尝试其他而不会有任何负面影响 —— 如果您知道要使用总线可以裁剪脚本同样如果您有其他 SCSI 设备(或仿真 SCSI 设备)驱动器可能会有不同字母(例如/dev/sdb1)如果不使用外置驱动器个分区则需要使用不同编号(例如/dev/sda2) 
duAfbaiducukDkn
duAfbaiducukDkn现在所需要做就是将相关文件复制到 initrd 映像中(可以使用 mount -o loop 命令安装未压缩映像)特别地需要确保具有 linuxrc 文件、在其中使用所有命令和那些命令依靠所有库然后(未装载)映像可以进行压缩 
duAfbaiducukDkn
duAfbaiducukDkn接着把内核(bzImage)和 initrd 映像(initrd.gz)复制到(bootable, ext3)软盘中 
duAfbaiducukDkn
duAfbaiducukDkn最后步是在软盘中安装引导加载并使用下列选项引导内核:kernel bzImage root=/dev/sda1 initrd=initrd.gz 
duAfbaiducukDkn
duAfbaiducukDkn现在应该可以使用软盘进行引导:它将从软盘加载内核将 initrd 映像加载到 RAM 中等待识别根设备然后像平常样从那里继续引导从此以后可以移除软盘 
duAfbaiducukDkn
duAfbaiducukDkn如果软盘不适合(例如如果计算机没有软盘驱动器)则可以使用能够通过 BIOS 引导任何设备就个人而言为了写作本文我使用小 32Mb USB 盘或者如果您不介意改变内置硬盘驱动器为了更便于引导可以在其中创建小分区 
duAfbaiducukDkn
duAfbaiducukDkn参考资料 
duAfbaiducukDkn
duAfbaiducukDknMartyn 选择发行版是 Gentoo Linux 
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDkn有关在 Linux 上安装 USB 大容量存储设备疑难解答技巧请参阅 Adding USB mass storage devices in Fedora Core 
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDknIEEE 1394 for Linux 提供了有关 Linux 中 FireWire 信息和链接 
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDkn免费百科全书 Wikipedia 包含关于 FireWire 和引导加载文章对于 Linux最常用引导加载是 LILO 和GNU GRUB 
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDknsbp2 hotplug patch 和 SPB-Linux 补丁对于阶段引导操作非常有用 
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDkn有关从头创建自己定制 initrd 映像帮助说明请参阅 The Linux Bootdisk HOWTO要修改现有 initrd 映像以满足自己需要请参阅 Brian Writes about His BOEL(Linux Devices2002)它基于 tomsrtbt(另请参阅 tomsrtbt wiki  BuildElToritoFloppyImage) 
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDkn“Knoppix 提供了个可引导、容量为张光盘 Linux”(developerWorks2003 年 2 月)介绍了这种采用张 CD 可引导 Linux 版本 
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDkn“在 Java 应用中访问 USB 设备”(developerWorks2003 年 9 月)研究了两个项目通过它们提供 APIJava 应用可以使用 USB 设备 
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDkn“在 Linux 上烧录 CD”(developerWorks2003)说明了如何充分使用命令行创建自己 .iso 映像 
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDkn以前在 developerWorks 中Martyn 撰写了“用 DCOP 连接 KDE 应用”(developerWorks2004 年 2 月)、“Postmortem memory profiling with PERL”(developerWorks2003 年 12 月)和 Signicant trace 系列文章(developerWorks2003 年 4 月)
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDkn在developerWorks Linux 专区可以找到为 Linux 开发人员准备更多资源
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDkn在 Developer Bookstore  Linux 区购买打折出售 Linux 书籍
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDkn通过 developerWorks Subscription 使用最新 IBM 工具和中间件来开发和测试您 Linux 应用:您可以自 WebSphere、DB2、 Lotus、Rational、和 Tivoli 得到 IBM 软件以及个可以在 12 个月内使用这些软件许可所有花费都比您想像要低
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDkn自 developerWorks  Speed-start your Linux app 专区下载可以运行于 Linux 之上经过挑选 developerWorks Subscription 产品免费测试版本包括 WebSphere Studio Site Developer、WebSphere SDK for Web services、WebSphere Application Server、DB2 Universal Database Personal Developers Edition、Tivoli Access Manager 和 Lotus Domino Server要更快速地开始上手请参阅针对各个产品 how-to 文章和技术支持 
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDkn
duAfbaiducukDkn关于作者
duAfbaiducukDkn Martyn Honeyford 在 1996 年毕业于诺丁汉大学并获得了计算机科学理科学士学位 从那时起到现在直作为名软件工程师在英国 Hursley  IBM UK Labs 工作他现在是 WebSphere MQ Everyplace 开发小组中开发人员不工作时Martyn 通常弹电吉他(非常经常)或玩电视游戏不只是大多数人会考虑有益于健康您可以通过[email protected]与 Martyn 联系  
duAfbaiducukDkn
Tags:  grub引导linux linux引导文件 linux引导 linux刻录引导

延伸阅读

最新评论

发表评论