Phần 2: Khác biệt giữa Mac và PC – Cách giải quyết III/ Giới thiệu về EFI và DSDT, hệ thống driver trên Windows và kext trên Mac OS X EFI là gì? EFI là từ viết tắt của Extensible Firmware Interface, một bộ đặc tả giao thức phần mềm chịu trách nhiệm giao tiếp giữa hệ điều hành (OS) và firmware hệ thống. Nói tới EFI thì quả là lạ lẫm, nhưng nếu nói tới BIOS (Basic Input/Output System) thì chắc các bạn, nhất là anh em tại vOz chẳng xa lạ gì. Và thật vui khi biết rằng, EFI và BIOS thực ra có thể coi là huynh đệ của nhau. BIOS chính xác cũng là một firmware interface, viết bằng assembly, có chức năng tự chạy đầu tiên khi bật máy tính, nó thực hiện quá trình Power On-Self Test, kiểm tra các thiết bị và rồi giao hết lại cho hệ điều hành (như Windows chẳng hạn). OS vẫn phải dựa vào BIOS để liên lạc với một số thiết bị, chẳng hạn như pin trên laptop hoặc đọc một số thông số hệ thống. Do việc phải thức khuya dậy sớm như vậy nên BIOS được đặc cách ngủ một phòng riêng có tên là EPPROM ngay trong nhà mainboard. EFI thì khác, viết bằng C, đô con hơn, mở rộng tốt hơn, phức tạp hơn và giống một hệ điều hành thu nhỏ hơn. EFI được phát triển bởi Intel, tương lai sẽ là kẻ kế vị cho BIOS khi gã cao tuổi này về hưu. Nhưng vì sao chúng ta phải nhắc đến EFI nhỉ? À, thật ra là vì Mac dùng EFI (hay đúng hơn là một mô tả riêng từ chuẩn EFI ban đầu của Intel), chứ không phải BIOS như PC. Đây là vấn đề gay go đầu tiên cho mộng ước hợp nhất của chúng ta. Ngoài việc nó khác nhau ra, thì EFI còn nắm giữ nhiều thành phần quan trọng của một hệ điều hành mà không nhắc tới nó không được: service, protocol, device driver, driver cho file system, disk support, và cả boot manager. Ngày xưa, dân OSX86 ta đơn giản bỏ qua EFI vì nó phức tạp và khó nhai quá, trực tiếp sửa đổi kernel của Mac OS X cho nó chạy trên PC là xong. Nhưng sự thực thì sau đó không ít phiền toái kéo tới. Các kext (kernel extension) chuẩn không chạy được với kernel sửa đồi, rồi thì mỗi lần Apple tung gói update mới lại phải hì hụi sửa lại cái kernel. Sau này phương pháp giả lập EFI thông qua bootloader được đưa ra bởi các bác hacker Nga khét tiếng (Netkas), giúp cho dân đen chúng ta tránh được rất nhiều phiền phức. Về thiết bị phần cứng, có một thiết bị gọi là EFI-X được bày bán, cắm vào máy là chạy EFI được ngay. Đáng tiếc công ty sản xuất thiết bị hay ho này về sau bị pháp luật tóm gáy, và vậy là OSX86 cho ra đời phương pháp giả lập EFI khác có tên Boot-132, hoạt động y chang thiết bị kia (đúng hơn thì Boot-132 có trước và EFI-X bắt chước mà thôi). Chúng ta sẽ sử dụng phương pháp giả lập Boot-132 này trong phần 3 của loạt bài. DSDT là gì? Thêm một thuật ngữ khó nhằn khác cần được giải thích, rất may là phần DSDT này cũng ngắn mà thôi. DSDT (Differentiated System Description Table) là một bảng quan trọng trong đặc tả ACPI, compiled dưới dạng file .aml (ACPI Machine Language), cung cấp thông tin cho hệ điều hành về một số thiết bi bên dưới. Thiếu hoặc sai bảng DSDT thường dẫn đến những trục trặc như không thể sleep, quạt không điều chỉnh tốc độ được, màn hình không tắt khi đóng laptop (close lid), v v Vấn đề là đa số PC đều được sản xuất với DSDT đặc tả cho Windows, vì vậy ngay cả Linux đôi khi cũng phải sửa đổi DSDT để có thể hoạt động trơn tru. Mac thì như chúng ta đã biết, đỏng đảnh hơn nhiều chứ đâu bình dân như Linux, vì vậy Mac sử dụng hẳn một bảng DSDT khác (đúng hơn là một subset không hoàn chỉnh) với DSDT của đặc tả ACPI trên PC. Việc thay đổi DSDT thường được thực hiện như sau: trích xuất DSDT từ ACPI trên mainboard -> patching & modifying DSDT -> chỉ dẫn bootloader sử dụng DSDT mới này thay vì DSDT nguyên gốc trong BIOS (tránh việc ghi đè lại DSDT của hệ thống). Công việc patching khó khăn này giờ đã được đảm nhận bởi những công cụ với giao diện đồ họa, sử dụng hết sức đơn giản. Hệ thống driver trên Windows và kernel extensions trên Mac: Do sử dụng 2 trường phái kernel khác nhau, Windows với monolithic kernel (vâng, “thiết kế nguyên khối” y như quảng cáo Sony Bravia gần đây) còn Mac sử dụng microkernel nên 2 hệ điều hành này cũng có hệ thống driver cho thiết bị khác nhau. Bản chất các file .kext (kernel extension) cũng giống với device driver trên Windows, giúp mở rộng khả năng của nhân hệ điều hành, điều khiển và tích hợp các thiết bị phần cứng khác của máy tính. Vậy điều khác biệt ở đây là gì? Driver Windows được các hãng sản xuất thiết bị viết ra theo một chuẩn chung (nói nôm na là driver interface) do Microsoft ban hành, và Microsoft không can thiệp gì vào quá trình viết driver này. Ví dụ như driver wireless card nào cũng phải tuân theo nguyên tắc chung: capture broadcast SSID, signal strength, encryption method, etc rồi trả về cho Windows. Các tính năng đặc trưng của mỗi NSX tính sau. Chính nhờ hệ thống driver interface này mà Windows có thể kết nối với vô số thiết bị, miễn là NSX viết driver theo đúng chuẩn của Microsoft. Microsoft không phải và không cần can thiệp vào quá trình viết driver, chỉ việc ngồi đóng dấu chứng chỉ WHQL là xong. Các NSX cũng không phải ngồi chầu chực đợi nói chuyện với Microsoft về vấn đề viết driver như thế nào, chỉ việc viết xong đem test WHQL là xong. Do vậy số thiết bị được sản xuất cho PC (một nền tảng mở) và tương thích với Windows (driver interface mở) là nhiều hơn rất nhiều so với Mac. Về phần Apple, ngược lại, do sử dụng microkernel và không thiết lập chuẩn chung cho driver, Mac OS lại mang tính chất proprietary (sở hữu riêng, mã đóng), nên các thiết bị sử dụng cho Mac OS phải được Apple và NSX cùng nhau viết driver. Thêm một quy định khác của Apple là Mac OS chỉ chạy trên máy Macintosh, vì vậy kext của các thiết bị được tích hợp sẵn vào Mac OS luôn cho tiện, chứ ít được phân phối bởi NSX thiết bị như trên Windows. Các kext của Mac OS X nằm trong thư mục /System/Library/Extensions/ (đường dẫn Unix), cách cài đặt và gỡ bỏ “driver” này cũng hết sức đơn giản, chúng ta sẽ nói thêm ở phần 3 của bài. IV/ Giới thiệu Chameleon – bootloader cho Mac OS X Bootloader là gì? Bootloader, hiểu đơn giản, là một đoạn mã chỉ dẫn nằm ở phần Master Boot Record (đối với MBR disk) hoặc EFI parition (đối với GPT disk). Sau khi BIOS giao lại quyền boot hệ thống cho đĩa cứng, đây là đoạn mã được chạy đầu tiên để từ đó dò tìm file boot của hệ điều hành tương ứng. Do mỗi hệ điều hành có file boot đặc trưng nên bootloader của mỗi OS cũng sẽ khác nhau. Windows NT sử dụng file ntldr, Vista và 7 sử dụng bootmgr. Trong các hệ thống có nhiều OS, bootloader còn kiêm luôn chức năng hiển thị menu lựa chọn và boot vào OS tương ứng. Chameleon là gì? Do Mac OS X sử dụng file system thuộc dạng “nông thôn miền núi” mang tên HFS+ (kiểu như NTFS trên Windows), gần như chẳng có bootloader thông dụng nào có thể đọc được phân vùng của nó. Trên nguyên bản Macintosh thì bootloader cho Mac OS X nằm trong chính EFI, trong đó tích hợp cả driver read-only cho file system HFS+ và nhiều thứ linh tinh khác. Không chấp nhận bó tay với chiêu này của Apple, cộng đồng OSX86 nổi lên một vị anh hùng tài năng cái thế tên là Voodoo team. Ngoài việc viết driver sound card, driver cho keyboard và trackpad linh tinh, thì đóng góp lớn nhất của Voodoo team chính là Chameleon – bootloader đa năng có khả năng đọc được HFS+ của Mac OS X. Từ đây, khả năng multi-boot Mac OS X cùng nhiều hệ điều hành khác đã trở thành hiện thực. V/ Cách kiểm tra thông số phần cứng – device ID & vendor ID. So sánh compatibility list Device ID và Vendor ID: Có lẽ nhiều bạn đã gục ngã trên bàn phím sau mớ lý thuyết lòng thòng phía trên, và để đổi gió trước khi bước qua phần cài đặt chính thức, chúng ta hãy cùng thử tìm hiểu kĩ hơn về những thiết bị phần cứng mình đang sử dụng. Việc cài đặt Mac OS X và tìm kiếm driver cho các thiết bị là một công việc khá gian khổ, đồng thời tốn không ít thời gian, do vậy các bạn cần có sự chuẩn bị thật tốt trước khi bắt tay vào quậy phá. Đầu tiên cần phải kể đến phải là thông số chi tiết của các thiết bị phần cứng trên máy PC của bạn. Đối với Windows, để tìm kiếm driver có lẽ quá dễ với một cái tên chung chung kiểu Intel X3100 GMA, sound card onboard Realtek, v v nhưng đối với Mac OS X, mọi việc không đơn giản như vậy. Bạn cần xác định rõ devce ID và vendor ID của thiết bị, chẳng hạn riêng GMA 950 của Intel đã có tới 3 device ID khác nhau: 27AE, 27A2, 2702. Việc xác định này cũng hết sức đơn giản: Mở device manager, tìm tới properties của thiết bị cần tìm và copy lại dòng hardware Ids là xong. Các thiết bị cần được xác định rõ là: VGA, audio chip, network card, wireless card, SATA/IDE controller, chipset series, các thiết bị phụ kiện khác. Đây là thông tin VGA 4500MHD của Intel (vendor ID 8086 - device ID 2A42). Các bạn chú ý đây là sound HDMI (có vendor ID 8086 của Intel) chứ không phải sound chip trên máy. Đây mới là sound chip Conexant High Definition Audio-Venice 5051. Các bạn sau khi có device ID và vendor ID có thể lên tra tên thiết bị ở PCIDatabase. Compatibility list: Cũng như Windows, cộng đồng OSX86 đã xây dựng một database Hardware Compatibility List, ghi rõ các thiết bị tương thích với Mac OS X và cách cài đặt cũng như giải quyết sự cố. Trước khi tiến hành cài đặt, các bạn nên tham khảo qua danh sách này để biết “vận may” của mình đến đâu. Trang wiki của OSX86 và HCL có tại: http://wiki.osx86project.org . cộng đồng OSX8 6 đã xây dựng một database Hardware Compatibility List, ghi rõ các thiết bị tương thích với Mac OS X và cách cài đặt cũng như giải quyết sự cố. Trước khi tiến hành cài đặt, các. Mac OS chỉ chạy trên máy Macintosh, vì vậy kext của các thiết bị được tích hợp sẵn vào Mac OS luôn cho tiện, chứ ít được phân phối bởi NSX thiết bị như trên Windows. Các kext của Mac OS X nằm trong. Phần 2: Khác biệt giữa Mac và PC – Cách giải quyết III/ Giới thiệu về EFI và DSDT, hệ thống driver trên Windows và kext trên Mac OS X EFI là gì? EFI là từ viết tắt của Extensible