使用开放式固件设置硬件默认值

时间:2019-03-13 21:34:12

标签: macos firmware

我知道这是一个漫长的征求有关开放固件和旧硬件的建议。

我设法在PowerBook G4上安装和引导Mac OS 9(不受支持)。由于OS9无法管理不受支持的硬件上的冷却,因此机器在使用约1小时后变得很热。

我已经使用Open Firmware和以下代码从启动中打开了风扇:

" fan" open-dev constant fan-ih

" fans-on" fan-ih $call-method

这将使风扇全速运行,但我只希望它们以50%的速度运行,或者更改它们启动时的硬件温度限制。

但是,我不知道如何使用任何例程。看起来有很多选项可以修改,但是要弄清楚覆盖默认值的正确语法是一个问题。例如,当使用“ see”方法时,“ set-speed”和“ .set-speed”给出的输出非常不同,并且对于可编辑的内容没有给出太多指示:

> see .speed
1 read-speed cr " TACH1 = " type .d 2 read-speed cr " TACH2 = " type .d 3 read-speed cr " TACH3 = " type .d 4 read-speed cr " TACH4 = type .d ; ok
> see set-speed
>r 40 dup read-reg 8 andc write-reg case
    1 of
      5c dup read-reg e0 or write-reg 30 r> write-reg
      endof
    2 of
      5d dup read-reg e0 or write-reg 31 r> write-reg
      endof
    3 of
      5e dup read-reg e0 or write-reg 32 r> write-reg
      endof
    dup of
      5e dup read-reg e0 or write-reg 32 r> write-reg
      endof
  endcase
; ok
> see set-speeds
1 over set-speed 2 over set-speed 3 swap set-speed

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:2)

在Forth and Open Firmware中,单词的名称以句号开头(发音的点)表明该单词将打印某些内容。 例如,要打印(放下)参数堆栈中的前一个数字,我们称之为。 (是的,这是一个时期,它是第四个字)。

因此.speed表示“打印速度信息。 1读取速度读取tach1的速度,并将该值放在参数堆栈中。

cr“ TACH1 =”类型打印回车符,字符串TACH1 =

.d 打印读取速度放在堆栈上的值。 d表示以十进制显示值。

设置速度看起来需要3个参数(在调用set-speed之前在命令行中输入它们)。 (速度转速数字地址?)因此,看起来您键入的最后一个参数(当您调用set-speed时将位于参数堆栈的顶部)是某种地址,但我不清楚确切地这是什么。 因此,调用set-speed可能类似于:  1设定速度  2设定速度

我从您展示的反编译中推断出这一点。

我认为这不是足够的信息,(我对这件事很不了解),但它可能会使您走得更远。

也许您可以显示以下内容的输出:

请参阅阅读记录

请参阅write-reg

这可能会有所帮助。

答案 1 :(得分:2)

我在很大程度上同意兰迪的观点,但是在我看来,设定速度有两个论点。堆栈的顶部是与所需速度相关的某个值,在其下方是风扇编号(1、2或3)。

在Forth堆栈图符号中,这些词将被描述为:

.speed  ( -- )  \ Display the speeds of all the fans
set-speed  ( fan# speed -- )  \ Set the speed of one fan
set-speeds  ( speed -- )  \ Set  the speeds of all the fans

这是一个合理的猜测,.speed显示的数字与可用作设置速度和设置速度的速度参数的数字相同。如果正确,那么可以使用以下咒语将速度减半:

" fan" open-dev constant fan-ih
" fans-on" fan-ih $call-method
TACH1 = <some number>
TACH2 = <some number>
TACH3 = <some number>

为了论证,假设

decimal 46 2 / "set-speeds" fan-ih $call-method

很有可能使所有粉丝的速度减半。

使用诸如 select-dev 之类的词有更多简化的方法,具体取决于Apple OFW实现的便利性,但是上面仅使用标准要求的词,因此在不同的实现中都是可靠的。

如果要查找与风扇控制有关的所有单词,可以编写:

dev fan
words

,然后用请参见进行反编译。

通过将命令放在nvramrc中,您也许可以自动设置风扇速度。

答案 2 :(得分:2)

这看起来不错。 dev fan 和随后的 device-end 行是不必要的,但无害,因为 open-dev $ call-method 无需在设备节点上下文中即可工作。第一个 dev / cpus / PowerPC,G4 @ 0 及其结束的 device-end 是必需的,因为属性必须从内部完成设备节点。 享受吧!

答案 3 :(得分:0)

非常感谢Mitch和Randy!我无法在评论中正确设置其格式,因此已将其发布为答案。 我设法使用以下脚本使其工作:

\ comment
cr
dev /cpus/PowerPC,G4@0
80010201 encode-int " cpu-version" property
device-end
dev fan
" fan" open-dev constant fan-ih
1 3B6 " set-speed" fan-ih $call-method
2 3B6 " set-speed" fan-ih $call-method
device-end
boot hd:,\\:tbxi

然后我将引导设备更改为以下内容,以便在引导时自动加载: setenv boot-device hd:\bootscript

非常感谢,我真的很感激!我很高兴拥有运行Mac OS 9的PowerBook,速度非常快!将继续努力。