编写设备驱动程序

遍历 PROM 设备树

pwdcdls 命令将遍历 PROM 设备树以查找设备。必须首先使用 cd 命令在树中建立一个位置,然后pwd 才能运行。本示例为在 S 总线上带有 cgsix 帧缓存器的 Ultra 1 工作站。


ok cd /

要在树中查看连接到当前节点的设备,请使用 ls 命令。


ok ls
f006a064 SUNW,UltraSPARC@0,0
f00598b0 sbus@1f,0
f00592dc counter-timer@1f,3c00
f004eec8 virtual-memory
f004e8e8 memory@0,0
f002ca28 aliases
f002c9b8 options
f002c880 openprom
f002c814 chosen
f002c7a4 packages

可以使用全节点名称:


ok cd sbus@1f,0
ok ls
f006a4e4 cgsix@2,0
f0068194 SUNW,bpp@e,c800000
f0065370 ledma@e,8400010
f006120c espdma@e,8400000
f005a448 SUNW,pll@f,1304000
f005a394 sc@f,1300000
f005a24c zs@f,1000000
f005a174 zs@f,1100000
f005a0c0 eeprom@f,1200000
f0059f8c SUNW,fdtwo@f,1400000
f0059ec4 flashprom@f,0
f0059e34 auxio@f,1900000
f0059d28 SUNW,CS4231@d,c000000

如果不使用前一个示例中的全节点名称,则还可以使用缩写。缩写命令行项类似于以下示例:


ok cd sbus

对于 S 总线设备,名称实际为 device@slot,offsetcgsix 设备位于插槽 2 中,并在偏移 0 处开始。如果该树中显示了 S 总线设备,则表明 PROM 已经识别了此设备。

.properties 命令用于显示设备的 PROM 属性。通过检查这些属性可以确定设备导出的属性。以后可以使用此信息来确保驱动程序查找的是正确的硬件属性。这些属性与可以使用 ddi_getprop(9F) 检索的属性相同。


ok cd cgsix
ok .properties
character-set            ISO8859-1
intr                     00000005 00000000
interrupts               00000005
reg                      00000002 00000000 01000000
dblbuf                   00 00 00 00
vmsize                   00 00 00 01
...

reg 属性用于定义包含以下字段的寄存器说明结构的数组:


uint_t        bustype;       /* cookie for related bus type*/
uint_t        addr;          /* address of reg relative to bus */
uint_t        size;          /* size of this register set */

对于 cgsix 示例,地址为 0。