Làm cách nào tôi có thể buộc kext Mac OS X tải trước khi đăng nhập?


6

Tôi có một kext mà tôi muốn được tải vào lúc khởi động. Nó không cần phải được tải đặc biệt sớm trong quá trình, nhưng tôi muốn nó được tải trước khi người dùng đăng nhập.

Kext trong câu hỏi là InsomniaT, và không giống như trình điều khiển thiết bị, không có gì tự động yêu cầu nó được tải vào kernel, vì vậy chỉ cần đặt nó vào / System / Library / Tiện ích mở rộng sẽ không làm gì cả.

Cách tốt nhất để làm điều này là gì?


Tại sao không thêm kext đến /Library/Extensions, đặt quyền cho 755 và chủ sở hữu / nhóm thành root: wheel và xây dựng lại bộ đệm kernel sau khi tải nó?
Chealion

Sự hiểu biết của tôi là nó sẽ không thực sự được tải trừ khi có gì đó yêu cầu. Vì vậy, tôi có thể làm điều đó, nhưng tôi vẫn còn nhận được một cái gì đó để yêu cầu nó.
wfaulk

Câu trả lời:


6

Sử dụng trình nền khởi chạy để chạy / sbin / kextload khi khởi động.

Bạn có thể muốn một cái gì đó dọc theo những dòng này ... văn bản liên kết


liên kết của bạn không hợp lệ
Usman Nisar

1
Cảm ơn Mani. Sự nguy hiểm của việc đăng liên kết, eh?! câu trả lời của wfaulk dưới đây siêu người dùng.com / a / 47373 mô tả giải pháp mà liên kết được sử dụng để mô tả
Steve Folly

13

Liên kết của Steve Folly là chính xác, nhưng để có nó ở đây:

Tạo một tệp plist (chỉ là một tài liệu XML văn bản đơn giản) được đặt tên giống như com.domain.identifier.plist trong / Library / LaunchDaemons với nội dung tương tự như sau:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>KeepAlive</key>
        <false/>
        <key>Label</key>
        <string>com.domain.identifier</string>
        <key>ProgramArguments</key>
        <array>
                <string>/sbin/kextload</string>
                <string>/System/Library/Extensions/MyExtension.kext</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StandardErrorPath</key>
        <string>/dev/null</string>
        <key>StandardOutPath</key>
        <string>/dev/null</string>
        <key>UserName</key>
        <string>root</string>
</dict>
</plist>

(Có một manpage, launchd.plist (5) chỉ định cú pháp của các tệp plist LaunchDaemon.)

Sau đó tôi đã chuyển đổi nó thành một tệp plist nhị phân chỉ để kiểm tra cú pháp tầm thường:

plutil -convert binary1 com.domain.identifier.plist

Sau đó kích hoạt LaunchDaemon để chạy khi khởi động:

launchctl load -w /Library/LaunchDaemons/com.domain.identifier.plist

Và kiểm tra để chắc chắn rằng nó ở trong đó:

launchctl list | grep com.domain.identifier

LaunchDaemon sẽ chạy khi khởi động và tải kext.


1
plutil cũng có một -lint tùy chọn để kiểm tra cú pháp, cũng là tùy chọn mặc định không có đối số.
Will Ross
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.