论文部分内容阅读
摘要:通過对Solaris基本的驱动规格的研究,介绍了Solaris下的设备驱动器和设备配置,比较了Solaris 10和linux2.6环境下设备驱动配置的异同。文章涉及的大部分内容可以在早期的版本中使用。
关键词:设备;设备驱动;Sun Solaris 10;Linux
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)36-2801-04
Introduction to Solaris10 Drivers
ZHANG Le
(College of software Engineering, Southeast University, Nanjing 210036, China)
Abstract: This article explains basic driver programming inside Solaris 10. It introduces device drivers and devices and compares Solaris 10 and Linux in general. Most of the article should hold for earlier releases of either system.
Key words: devices; device drivers; Sun Solaris 10; Linux
1 引言
Solaris 10是一款多任务处理的分布式企业网络系统,最初运行在SUN公司的SPARC系列芯片之上。最多4万台 Solaris 10网络操作系统组合成的企业网络计算环境可以集中用一台工作站来进行统一管理,Solaris操作系统一直以稳定和强健的特性在Unix多路计算机处理 领域占有重要的地位。Solaris使用Motif图形用户接口以及NFS、NIS、ZFS等网络文件系统,目前版本的Solaris 10也可运行在x64处理器架构的计算机上。在Solaris和Linux系统中,设备驱动的用途和目的相同,就是为系统提供一种控制和连接设备的一种手段,通常情况下,使用者连接设备是通过标准的I/O 命令进行系统调用:比如 open,close,这些系统命令调用了设备驱动程序。另外,操作系统也会自动调用相关的程序去处理错误和连接那些可能存在于系统中的不同的总线结构。此外许多系统管理相关的命令也可能调用设备驱动程序。因此掌握Solaris的设备和设备驱动管理是在Solaris系统下编程必不可少的过程。
2 系统结构和设备树
Solaris使用设备树来表示它的设备。每一个设备树上的节点表示一个设备。设备树显示了设备在系统的物理位置。使用者和程序能够通/devices和prtconf命令显示设备驱动。下面就是一些例子。
bash-2.05b# ls -R /devices
/devices: <---the "root" of the device tree
isa pci@0,0 pseudo:devctl xsvc
objmgr pci@0,0:devctl scsi_vhci xsvc:xsvc
options pseudo scsi_vhci:devctl
/devices/isa: <--- the system has an isa bus
asy@1,2f8 asy@1,2f8:b,cu i8042@1,60lp@1,3bc:ecpp0 <--- devices on the isa bus
asy@1,2f8:b fdc@1,3f0 lp@1,3bc
/devices/isa/fdc@1,3f0: <--- a floppy disk controller on the isa bus
fd@0,0 fd@0,0:a,raw fd@0,0:b,raw fd@0,0:c,raw <--- floppy disk drives/slices
fd@0,0:a fd@0,0:b fd@0,0:c
/devices/isa/i8042@1,60: <--- an i8042 controller
keyboard@0 keyboard@0:kb8042mouse@1mouse@1:l
/devices/pci@0,0: <--- pci-host bus bridge
pci-ide@7,1 pci8086,7112@7,2 pci8086,7112@7,2:hubd
pci1014,130@2 pci8086,7112@7,2:1 pci8086,7191@1
pci1014,130@2,1 pci8086,7112@7,2:2 pci8086,7191@1:devctl
/devices/pci@0,0/pci-ide@7,1: <--- pci-ide bridge
ide@0ide@0:controlide@1ide@1:control
/devices/pci@0,0/pci-ide@7,1/ide@0: <--- 1 of 2 ide controllers
cmdk@0,0 cmdk@0,0:e cmdk@0,0:i,raw cmdk@0,0:n cmdk@0,0:r,raw<--- disks/slices
cmdk@0,0:a cmdk@0,0:e,raw cmdk@0,0:j cmdk@0,0:n,raw cmdk@0,0:s
cmdk@0,0:a,raw cmdk@0,0:f cmdk@0,0:j,rawcmdk@0,0:o cmdk@0,0:s,raw
cmdk@0,0:b cmdk@0,0:f,raw cmdk@0,0:k cmdk@0,0:o,raw cmdk@0,0:t
cmdk@0,0:b,raw cmdk@0,0:g cmdk@0,0:k,raw cmdk@0,0:p cmdk@0,0:t,raw
cmdk@0,0:c cmdk@0,0:g,raw cmdk@0,0:l cmdk@0,0:p,raw cmdk@0,0:u
cmdk@0,0:c,raw cmdk@0,0:h cmdk@0,0:l,raw cmdk@0,0:q cmdk@0,0:u,raw
cmdk@0,0:d cmdk@0,0:h,raw cmdk@0,0:m cmdk@0,0:q,raw
cmdk@0,0:d,raw cmdk@0,0:i cmdk@0,0:m,raw cmdk@0,0:r
/devices/pci@0,0/pci-ide@7,1/ide@1: <--- second ide controller
sd@0,0 sd@0,0:e sd@0,0:i,raw sd@0,0:n sd@0,0:r,raw
sd@0,0:a sd@0,0:e,raw sd@0,0:j sd@0,0:n,raw sd@0,0:s
sd@0,0:a,raw sd@0,0:f sd@0,0:j,raw sd@0,0:o sd@0,0:s,raw
sd@0,0:b sd@0,0:f,raw sd@0,0:k sd@0,0:o,raw sd@0,0:t
sd@0,0:b,raw sd@0,0:g sd@0,0:k,raw sd@0,0:p sd@0,0:t,raw
sd@0,0:c sd@0,0:g,raw sd@0,0:l sd@0,0:p,raw sd@0,0:u
sd@0,0:c,raw sd@0,0:h sd@0,0:l,raw sd@0,0:q sd@0,0:u,raw
sd@0,0:d sd@0,0:h,raw sd@0,0:m sd@0,0:q,raw
sd@0,0:d,raw sd@0,0:i sd@0,0:m,raw sd@0,0:r
/devices/pseudo: <--- pseudo device nexus node
arp@0 pm@0 ptsl@0:ttyp4 <--- pseudo devices
arp@0:arp pm@0:pm ptsl@0:ttyp5
bl@0 poll@0 ptsl@0:ttyp6
关键词:设备;设备驱动;Sun Solaris 10;Linux
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)36-2801-04
Introduction to Solaris10 Drivers
ZHANG Le
(College of software Engineering, Southeast University, Nanjing 210036, China)
Abstract: This article explains basic driver programming inside Solaris 10. It introduces device drivers and devices and compares Solaris 10 and Linux in general. Most of the article should hold for earlier releases of either system.
Key words: devices; device drivers; Sun Solaris 10; Linux
1 引言
Solaris 10是一款多任务处理的分布式企业网络系统,最初运行在SUN公司的SPARC系列芯片之上。最多4万台 Solaris 10网络操作系统组合成的企业网络计算环境可以集中用一台工作站来进行统一管理,Solaris操作系统一直以稳定和强健的特性在Unix多路计算机处理 领域占有重要的地位。Solaris使用Motif图形用户接口以及NFS、NIS、ZFS等网络文件系统,目前版本的Solaris 10也可运行在x64处理器架构的计算机上。在Solaris和Linux系统中,设备驱动的用途和目的相同,就是为系统提供一种控制和连接设备的一种手段,通常情况下,使用者连接设备是通过标准的I/O 命令进行系统调用:比如 open,close,这些系统命令调用了设备驱动程序。另外,操作系统也会自动调用相关的程序去处理错误和连接那些可能存在于系统中的不同的总线结构。此外许多系统管理相关的命令也可能调用设备驱动程序。因此掌握Solaris的设备和设备驱动管理是在Solaris系统下编程必不可少的过程。
2 系统结构和设备树
Solaris使用设备树来表示它的设备。每一个设备树上的节点表示一个设备。设备树显示了设备在系统的物理位置。使用者和程序能够通/devices和prtconf命令显示设备驱动。下面就是一些例子。
bash-2.05b# ls -R /devices
/devices: <---the "root" of the device tree
isa pci@0,0 pseudo:devctl xsvc
objmgr pci@0,0:devctl scsi_vhci xsvc:xsvc
options pseudo scsi_vhci:devctl
/devices/isa: <--- the system has an isa bus
asy@1,2f8 asy@1,2f8:b,cu i8042@1,60lp@1,3bc:ecpp0 <--- devices on the isa bus
asy@1,2f8:b fdc@1,3f0 lp@1,3bc
/devices/isa/fdc@1,3f0: <--- a floppy disk controller on the isa bus
fd@0,0 fd@0,0:a,raw fd@0,0:b,raw fd@0,0:c,raw <--- floppy disk drives/slices
fd@0,0:a fd@0,0:b fd@0,0:c
/devices/isa/i8042@1,60: <--- an i8042 controller
keyboard@0 keyboard@0:kb8042mouse@1mouse@1:l
/devices/pci@0,0: <--- pci-host bus bridge
pci-ide@7,1 pci8086,7112@7,2 pci8086,7112@7,2:hubd
pci1014,130@2 pci8086,7112@7,2:1 pci8086,7191@1
pci1014,130@2,1 pci8086,7112@7,2:2 pci8086,7191@1:devctl
/devices/pci@0,0/pci-ide@7,1: <--- pci-ide bridge
ide@0ide@0:controlide@1ide@1:control
/devices/pci@0,0/pci-ide@7,1/ide@0: <--- 1 of 2 ide controllers
cmdk@0,0 cmdk@0,0:e cmdk@0,0:i,raw cmdk@0,0:n cmdk@0,0:r,raw<--- disks/slices
cmdk@0,0:a cmdk@0,0:e,raw cmdk@0,0:j cmdk@0,0:n,raw cmdk@0,0:s
cmdk@0,0:a,raw cmdk@0,0:f cmdk@0,0:j,rawcmdk@0,0:o cmdk@0,0:s,raw
cmdk@0,0:b cmdk@0,0:f,raw cmdk@0,0:k cmdk@0,0:o,raw cmdk@0,0:t
cmdk@0,0:b,raw cmdk@0,0:g cmdk@0,0:k,raw cmdk@0,0:p cmdk@0,0:t,raw
cmdk@0,0:c cmdk@0,0:g,raw cmdk@0,0:l cmdk@0,0:p,raw cmdk@0,0:u
cmdk@0,0:c,raw cmdk@0,0:h cmdk@0,0:l,raw cmdk@0,0:q cmdk@0,0:u,raw
cmdk@0,0:d cmdk@0,0:h,raw cmdk@0,0:m cmdk@0,0:q,raw
cmdk@0,0:d,raw cmdk@0,0:i cmdk@0,0:m,raw cmdk@0,0:r
/devices/pci@0,0/pci-ide@7,1/ide@1: <--- second ide controller
sd@0,0 sd@0,0:e sd@0,0:i,raw sd@0,0:n sd@0,0:r,raw
sd@0,0:a sd@0,0:e,raw sd@0,0:j sd@0,0:n,raw sd@0,0:s
sd@0,0:a,raw sd@0,0:f sd@0,0:j,raw sd@0,0:o sd@0,0:s,raw
sd@0,0:b sd@0,0:f,raw sd@0,0:k sd@0,0:o,raw sd@0,0:t
sd@0,0:b,raw sd@0,0:g sd@0,0:k,raw sd@0,0:p sd@0,0:t,raw
sd@0,0:c sd@0,0:g,raw sd@0,0:l sd@0,0:p,raw sd@0,0:u
sd@0,0:c,raw sd@0,0:h sd@0,0:l,raw sd@0,0:q sd@0,0:u,raw
sd@0,0:d sd@0,0:h,raw sd@0,0:m sd@0,0:q,raw
sd@0,0:d,raw sd@0,0:i sd@0,0:m,raw sd@0,0:r
/devices/pseudo: <--- pseudo device nexus node
arp@0 pm@0 ptsl@0:ttyp4 <--- pseudo devices
arp@0:arp pm@0:pm ptsl@0:ttyp5
bl@0 poll@0 ptsl@0:ttyp6