IRQ: Vấn đề xung đột IRQ trên Mac OS X và cách khắc phục

Bài viết này gồm nhiều trang. Để chuyển sang các trang tiếp theo, các bạn vui lòng click vào số trang ở cuối bài viết.

Các bài trước: IRQ – Khái niệm, chức năng và lịch sử phát triểnIRQ – Thiết lập và khai báo trong DSDT

Bài viết có sự tham khảo từ các nguồn:

Wikipedia, InterruptInterrupt request (PC architecture)

UEFI Forum, ACPI Specification Version 6.0

John H. Baldwin, PCI Interrupts for x86 Machines under FreeBSD

The PC Guide, Interrupts (IRQs)

DukeRaoul, Fix for Firewire and HPET IRQ conflict using DSDT

Laqk, DSDT patch to fix “unable to get filterInterruptEventSource” errors

1. Vấn đề xung đột IRQ trên Mac OS X

Nếu như trên Windows, các IRQ được cấp phát cho các thiết bị theo cơ chế đã nói ở những bài trước, thì ở trên Mac OS X, do sự khác biệt về driver nên việc phân phối IRQ cũng có những khác biệt nhất định. Cụ thể là:

Read More »

IRQ: Thiết lập và khai báo trong DSDT

Bài viết này gồm nhiều trang. Để chuyển sang các trang tiếp theo, các bạn vui lòng click vào số trang ở cuối bài viết.

Bài trước: IRQ – Khái niệm, chức năng và lịch sử phát triển

Bài viết có sự tham khảo từ các nguồn:

Wikipedia, InterruptInterrupt request (PC architecture)

UEFI Forum, ACPI Specification Version 6.0

John H. Baldwin, PCI Interrupts for x86 Machines under FreeBSD

The PC Guide, Interrupts (IRQs)

Venkatesh Yadav, Edge Triggered Vs Level Triggered interrupts

University Corporation for Atmospheric Research (UCAR), DSM interrupt loads

1. Các loại ngắt

Như đã nói ở bài trước, ngắt là một loại tín hiệu điện tử, cho nên cách mà ngắt được truyền đi cũng tương tự như các loại tín hiệu điện tử khác. Trên kênh truyền ngắt sẽ có hai trạng thái điện là High (có điện hoặc điện thế cao) và Low (không có điện hoặc điện thế thấp). Người ta sẽ quy định một trong 2 trạng thái này là Active (mạch ở trạng thái hoạt động, thông thường sẽ là High) và trạng thái còn lại là Idle (mạch ở trạng thái tĩnh, thông thường sẽ là Low). Bình thường kênh sẽ ở trạng thái Idle, khi có tác nhân như thiết bị làm cho kênh chuyển trang trạng thái Active thì tín hiệu ngắt được sinh ra, khi đó CPU sẽ bắt lấy ngắt và xử lý.

Có hai loại ngắt như sau:

Read More »

IRQ: Khái niệm, chức năng và lịch sử phát triển

Bài viết này gồm nhiều trang. Để chuyển sang các trang tiếp theo, các bạn vui lòng click vào số trang ở cuối bài viết.

Bài viết có sự tham khảo từ các nguồn:

Wikipedia, InterruptInterrupt request (PC architecture)Advanced Programmable Interrupt ControllerMessage Signaled Interrupts

UEFI Forum, ACPI Specification Version 6.0

OSDev Wiki, Interrupts

John H. Baldwin, PCI Interrupts for x86 Machines under FreeBSD

The PC Guide, Interrupts (IRQs)

Fred Ghiradelli, Resolving IRQ Conflicts on Windows Workstations

The Linux Documentation Project, Plug-and-Play-HOWTO – PCI Interrupts

1. Giới thiệu về ngắt và IRQ

Trước hết ta nói về khái niệm ngắt (Interrupt). Ngắt là tín hiệu được gửi từ phần cứng hoặc phần mềm tới CPU nhằm yêu cầu CPU tạm dừng chương trình hiện thời và chạy một chương trình khác. Thông thường khi một sự kiện nào đó phát sinh trên phần cứng hoặc phần mềm (chẳng hạn như gõ phím, thiết bị USB được cắm vào, …), ngắt sẽ được tạo ra để hệ điều hành có thể nhận biết và xử lý sự kiện đó.

Read More »

Jettison – Tự động eject các thiết bị khi sleep trên Mac OS X

Với các bạn sử dụng GenericUSBXHCI hay patch AppleUSBXHCI với các USB 3.0 controller cũ (chẳng hạn như Renesas uDP72020), khi sleep thì controller sẽ bị tắt hoàn toàn và khởi động lại khi wake. Từ đó các thiết bị sẽ bị mất kết nối khi sleep, dẫn đến các thông báo như dưới đây:

Jettison1

Ngoài ra nó cũng gây rủi ro khi sleep lúc mà thiết bị đang truyền dữ liệu, dẫn đến lỗi dữ liệu. Vậy có giải pháp nào cho vấn đề này không?

Read More »

Patch AppleUSBXHCI để dùng với mọi USB 3.0 Controller – Phần 3

Phần 3 – Áp dụng patch và tận hưởng thành quả

PatchAppleUSBXHCI1

 Phần trước: Các patch cần áp dụng đối với AppleUSBXHCI

1. Đối với patch trực tiếp trên binary

Sau khi đã áp dụng các patch trên giao diện của 0xED, bạn vào menu File -> Save để lưu binary lại, như vậy file AppleUSBXHCI.kext trên Desktop đã được patch. Giờ bạn chỉ việc cài kext này bằng Kext Utility hoặc Kext Wizard (nhớ rebuild cache, repair permission) là xong.

Read More »

Patch AppleUSBXHCI để dùng với mọi USB 3.0 Controller – Phần 2

Phần 2 – Các patch cần áp dụng đối với AppleUSBXHCI

PatchAppleUSBXHCI1

Phần trước: Mục đích và các bước chuẩn bị

Lưu ý: Các patch dưới đây được áp dụng đối với phiên bản mới nhất tại thời điểm viết bài là AppleUSBXHCI version 705.4.14 (có trên Mac OS X 10.10 và 10.10.1). Với các phiên bản cũ hơn, bạn có thể tham khảo ở link nguồn bài viết trong phần 1.

A. Nguyên lí patch

Read More »

Patch AppleUSBXHCI để dùng với mọi USB 3.0 Controller – Phần 1

 Phần 1 – Mục đích và các bước chuẩn bị

PatchAppleUSBXHCI Bài viết có sự tham khảo từ các nguồn sau: 

http://www.insanelymac.com/forum/topic/285157-patched-appleusbxhci-from-os-1082/ http://www.insanelymac.com/forum/files/file/150-patched-appleusbxhci/

1. Mục đích của patch AppleUSBXHCI

AppleUSBXHCI là một plug-in của kext IOUSBFamily nhằm nhận biết và điều khiển USB 3.0 Controller. Nó được Apple phát triển khi Intel bắt đầu hỗ trợ USB 3.0 từ thế hệ chipset thứ 7 trở đi, và chỉ làm việc với USB 3.0 Controller của Intel. Rất may là thành viên Zenith432 trên diễn đàn InsanelyMac đã phát triển kext GenericUSBXHCI dựa trên mã nguồn của AppleUSBXHCI để có thể hoạt động với mọi USB 3.0 Controller. Nhưng nếu bạn muốn một giải pháp native hơn thì vẫn có cách, đó là patch AppleUSBXHCI.

Read More »