编写设备驱动程序

读取和写入

PROM 提供了许多 8 位、16 位以及 32 位操作。通常,c(字符)前缀表示 8 位(一字节)操作;w(字)前缀表示 16 位(二字节)操作;L(长字)前缀表示 32 位(四字节)操作。

后缀 ! 表示写入操作。写入操作用于从栈中取出前两项。第一项是地址,第二项是值。


ok 55 ffe98000 c!

后缀 @ 表示读取操作。读取操作用于从栈中取出地址。


ok ffe98000 c@
ok .s
55

后缀 ? 用于显示值,并且不会影响栈。


ok ffe98000 c?
55

尝试查询设备时,请务必谨慎。如果未正确设置映射,则尝试读取或写入可能会导致错误。为处理这些情况,提供了特殊字。例如,cprobewprobelprobe 会从给定地址进行读取,但是如果此位置不响应,则会返回零;如果此位置响应,则返回非零值。


ok fffa4000 c@
Data Access Error

ok fffa4000 cprobe
ok .s0

ok ffe98000 cprobe
ok .s
0 ffffffffffffffff

使用字 dump 可以显示内存的区域。这会采用 addresslength,并以字节为单位显示内存区域的内容。

在以下示例中,字 fill 用于使用某种模式填充视频内存。fill 会采用地址、要填充的字节数以及要使用的字节。对于字和长字,请分别使用 wfillLfill。此填充示例会导致 cgsix 基于传递的字节显示简单模式。


ok " /sbus" select-dev
ok 800000 2 100000 map-in
ok constant fb
ok fb 10000 ff fill
ok fb 20000 0 fill
ok fb 18000 55 fill
ok fb 15000 3 fill
ok fb 10000 5 fillok fb 5000 f9 fill