Sau 25 năm, card màn hình huyền thoại 3dfx Voodoo 3 nhận bản cập nhật driver Linux
Nhân Linux chuẩn bị đón nhận bản cập nhật cho driver tdfxfb giúp dòng card 3dfx Voodoo 3 có thể khởi động trực tiếp mà không cần BIOS của hệ thống. Đây là một nỗ lực thú vị giúp dòng phần cứng cổ điển này chạy được trên các nền tảng phi x86 hoặc hệ thống mới không hỗ trợ VGABIOS cũ.

Nhân Linux phiên bản 7.3 sắp mang đến một bản cập nhật mang tính hoài niệm cho dòng card đồ họa 3dfx Voodoo 3, một trong những cái tên nổi bật nhất vào cuối những năm 1990. Đừng quá phấn khích; bộ gia tốc PCI và AGP lâu đời này không bỗng nhiên nhận được một bộ công cụ đồ họa Linux hiện đại, nhưng driver framebuffer tdfxfb hiện có của nhân đang được cập nhật để nó có thể tự khởi tạo Voodoo 3 thay vì phải dựa vào việc firmware hệ thống đã chạy video BIOS của card từ trước. Đây là một thay đổi nhỏ với mục đích vô cùng cụ thể, đồng thời minh họa lý do tại sao phần cứng cổ xưa đôi khi lại nhận được sự chú ý trong hệ sinh thái Linux đương đại.
Vấn đề nằm ở chỗ driver tdfxfb từ trước đến nay luôn mặc định rằng card Voodoo đã được khởi tạo sẵn bởi firmware của máy tính. Lý do là vào thời điểm nó được viết, đó là một giả định hợp lý trên một chiếc máy tính x86 thông thường. Firmware hệ thống sẽ thực thi video BIOS của card trong quá trình khởi động, định cấu hình phần cứng và sau đó bàn giao cho Linux một thiết bị đã có khả năng hiển thị hình ảnh. Giả định đó không còn chính xác trên các nền tảng mới hơn hoặc bất thường, nơi firmware không thể hoặc không chạy VGABIOS. Mô tả bản vá của tác giả nêu rõ các máy tính không phải x86, các hệ thống có card đồ họa khác làm card chính và các dòng BIOS mới hơn không thể chạy video BIOS cũ.
Nhà phát triển đứng sau các bản vá, Daniel Palmer, đã sử dụng một chiếc Voodoo 3 trong một hệ thống Amiga 4000 được trang bị cầu nối PCI khi vấn đề này phát sinh. Linux có thể phát hiện ra card, nhưng Voodoo vẫn hoàn toàn chưa được khởi tạo, khiến anh phải đối mặt với màn hình "không phát hiện tín hiệu". Đoạn mã mới sử dụng thông tin cấu hình từ chính video BIOS của card để thực hiện việc khởi tạo ngay từ Linux, cho phép driver kích hoạt nhân VGA và thiết lập màn hình hoạt động mà không phụ thuộc vào firmware hệ thống. Hiện tại, đoạn mã khởi tạo thủ công mới này nhắm cụ thể vào Voodoo 3; trước đó anh từng lưu ý về việc hỗ trợ các dòng card Voodoo 4 và 5 dựa trên VSA-100, nhưng bố cục BIOS của chúng khác nhau nên sự hỗ trợ đó đã bị gỡ khỏi chuỗi bản vá hiện tại. Đoạn mã đã được kiểm nghiệm trên cả hệ thống x86-64 hiện đại lẫn máy Amiga 4000 tích hợp cầu nối Mediator PCI.
Trên một cỗ máy x86-64 hiện đại thông thường được lắp Voodoo 3, kết quả thực tế mang lại khá khiêm tốn. Tải tdfxfb lên và bạn sẽ nhận được một thiết bị framebuffer Linux hoạt động bình thường, thường hiển thị dưới dạng /dev/fb0, với card Voodoo điều khiển màn hình có thể chứa bảng điều khiển ảo (virtual console) của Linux. Nói cách khác, điều này đủ để biến chiếc Voodoo từ một "thiết bị PCI mà Linux có thể nhận diện" thành một bộ điều hợp hiển thị thực thụ, có khả năng xuất pixel lên màn hình ngay cả khi firmware chưa khởi tạo nó trước đó. Các ứng dụng biết cách sử dụng giao diện framebuffer của Linux cũng có thể vẽ lên đó, giống như cách chúng làm với các thiết bị framebuffer cũ khác.
Vấn đề là đó cũng là lúc những giới hạn của công nghệ này bộc lộ rõ. Linux fbdev là một giao diện đồ họa cũ kỹ và từ lâu đã bị thay thế bởi cơ sở hạ tầng đồ họa DRM/KMS của Linux, vì vậy đây không phải là sự hồi sinh của Voodoo 3 như một GPU Linux đương đại. Việc tải tdfxfb không mang lại cho bạn ngăn xếp Mesa, OpenGL hiện đại, khả năng tăng tốc Wayland hay các tính năng 3D mà bạn mong đợi. Về cơ bản, đây là một cơ chế "bắn pixel lên màn hình" theo lối rất cổ xưa, nhưng chừng đó đủ hữu ích cho bảng điều khiển Linux, các ứng dụng framebuffer dạng nhúng và rõ ràng là cho những ai thích gắn các card đồ họa PCI kỳ lạ vào những cỗ máy cổ còn kỳ lạ hơn, chứ đây không hẳn là lý do thuyết phục để cài Voodoo 3 vào một cỗ máy bàn hiện đại.
Điểm thú vị hơn là Palmer đang phát triển một luồng 3D riêng biệt cho Voodoo 3, và nỗ lực đó đã tiến xa hơn nhiều so với những gì công việc làm framebuffer có thể cho thấy. Giao diện thử nghiệm này phơi bày không gian thanh ghi (register space) của Voodoo ra không gian người dùng thông qua một thiết bị hỗn hợp /dev/tdfx3d mới, nơi giao diện mmap() cho phép phần mềm lập trình trực tiếp phần cứng 3D của card. Nằm trên đỉnh của nó là smoltdfx, một thư viện không gian người dùng nhỏ gọn để điều khiển Voodoo 3, và smolminigl, một cài đặt OpenGL 1.x nhỏ được xây dựng dựa trên đó. Palmer cho biết anh đã thử nghiệm dự án trên phần cứng Voodoo 3 thực tế và nó có thể kết xuất trực tiếp thông qua các thanh ghi của card mà không cần X, Mesa hay Glide.
Palmer đang phát triển công việc đó song song với việc giả lập Voodoo 3 bằng QEMU. Nhà phát triển cho biết Claude đã giúp xây dựng trình giả lập ngay từ đầu để gỡ lỗi vấn đề đưa card hoạt động trên chiếc Amiga của anh. Giờ đây, các chương trình thử nghiệm có thể chạy trên cả card giả lập lẫn phần cứng thực, với các điểm khác biệt được phản hồi ngược lại vào trình giả lập cho đến khi hành vi trùng khớp. Dự án smoltdfx hiện sử dụng các bài kiểm tra kết xuất giống nhau trên cả QEMU lẫn phần cứng Voodoo 3 vật lý, so sánh các bản tóm tắt khung hình (frame digest) để bắt lỗi khác biệt. Theo Palmer, phần thực thi MiniGL kết quả đã có thể chạy được tựa game Quake trên card thực, mặc dù hiệu năng không thực sự tốt và một số vấn đề về khả năng đa kết cấu (multitexturing) của Voodoo 3 vẫn cần được khắc phục.
Rõ ràng, điều đó thú vị hơn rất nhiều so với việc chỉ đưa một chiếc console Linux lên Voodoo 3. Tổng hòa lại là một bộ công cụ đồ họa 3dfx mang tính thử nghiệm cao được xây dựng từ dưới lên: Linux cung cấp framebuffer và quyền truy cập thiết bị cấp thấp, các chương trình không gian người dùng lập trình trực tiếp Voodoo và một phần mềm cài đặt OpenGL nhẹ nằm bên trên để cung cấp đủ tính năng cho phần mềm 3D cổ điển điều khiển card.
Mặt khác, mọi thứ có thể trở nên cực kỳ thú vị đối với lĩnh vực máy tính hoài cổ và ảo hóa. Một chiếc PCI Voodoo 3 là dạng thiết bị ít nhất về mặt lý thuyết có thể được gán cho một máy ảo thông qua tính năng PCI passthrough, cho phép hệ điều hành khách (guest OS) trò chuyện trực tiếp với bộ gia tốc thực bằng driver 3dfx chính hãng đúng thời kỳ. Trong phiên bản tưởng tượng của thiết lập đó, bạn có thể để một máy chủ Linux hiện đại bàn giao một chiếc Voodoo 3 thực sự cho máy ảo chạy Windows 98 hoặc thời DOS, sau đó để máy ảo sử dụng chính phần cứng mà các phần mềm cũ từng mong đợi. Các chi tiết kỹ thuật phức tạp hơn nhiều so với những gì khái niệm thể hiện (đặc biệt là xung quanh việc thiết lập lại và phơi bày phần cứng cũ một cách sạch sẽ), nhưng khả năng mới trong việc khởi tạo một chiếc Voodoo vốn đang ở trạng thái ngủ đông từ Linux ít nhất cũng là một mảnh ghép hữu ích cho bài toán đó.
Tuy nhiên, ở hiện tại, tiêu đề bài viết mang ý nghĩa lớn hơn tập hợp tính năng tức thời của nó. Nhân Linux 7.3 không hề biến một chiếc Voodoo 3 đã 25 tuổi thành một GPU có thể sử dụng hàng ngày; nó đang giúp một driver framebuffer hiện có có khả năng làm cho chiếc card sống lại trên các hệ thống mà firmware không thể làm nổi công việc đó, đây là một lỗ hổng rất nhỏ nhưng có thật trong việc hỗ trợ phần cứng. Đáng chú ý hơn, nỗ lực tương tự đã lan sang mảng tăng tốc 3D thử nghiệm trên phần cứng thực, với thư viện Voodoo 3 dành cho không gian người dùng và một trình triển khai OpenGL có khả năng chạy Quake. Voodoo 3 có thể đã hơn 25 tuổi, nhưng vẫn có ai đó đang dạy cho Linux những
🔧 SAU 25 NĂM, CARD MÀN HÌNH HUYỀN THOẠI 3DFX VOODOO 3 NHẬN BẢN CẬP NHẬT DRIVER LINUX Nhân Linux phiên bản 7.3 sắp mang đến một bản cập nhật mang tính hoài niệm cho dòng card đồ họa 3dfx Voodoo 3, một trong những cái tên nổi bật nhất vào cuối những năm 1990. Đừng quá phấn khích; bộ gia tốc PCI và AGP lâu đời này không bỗng nhiên nhận được một bộ công cụ đồ họa Linux hiện đại, nhưng driver framebuffer tdfxfb hiện có của nhân đang được cập nhật để nó có thể tự khởi tạo Voodoo 3 thay vì phải dựa vào việc firmware hệ thống đã chạy video BIOS của card từ trước. Đây là một thay đổi nhỏ với mục đích vô cùng cụ thể, đồng thời minh họa lý do tại sao phần cứng cổ xưa đôi khi lại nhận được sự chú ý trong hệ sinh thái Linux đương đại. Vấn đề nằm ở chỗ driver tdfxfb từ trước đến nay luôn mặc định rằng card Voodoo đã được khởi tạo sẵn bởi firmware của máy tính. Lý do là vào thời điểm nó được viết, đó là một giả định hợp lý trên một chiếc máy tính x86 thông thường. Firmware hệ thống sẽ thực thi video BIOS của card trong quá trình khởi động, định cấu hình phần cứng và sau đó bàn giao cho Linux một thiết bị đã có khả năng hiển thị hình ảnh. Giả định đó không còn chính xác trên các nền tảng mới hơn hoặc bất thường, nơi firmware không thể hoặc không chạy VGABIOS. Mô tả bản vá của tác giả nêu rõ các máy tính không phải x86, các hệ thống có card đồ họa khác làm card chính và các dòng BIOS mới hơn không thể chạy video BIOS cũ. Nhà phát triển đứng sau các bản vá, Daniel Palmer, đã sử dụng một chiếc Voodoo 3 trong một hệ thống Amiga 4000 được trang bị cầu nối PCI khi vấn đề này phát sinh. Linux có thể phát hiện ra card, nhưng Voodoo vẫn hoàn toàn chưa được khởi tạo, khiến anh phải đối mặt với màn hình "không phát hiện tín hiệu". Đoạn mã mới sử dụng thông tin cấu hình từ chính video BIOS của card để thực hiện việc khởi tạo ngay từ Linux, cho phép driver kích hoạt nhân VGA và thiết lập màn hình hoạt động mà không phụ thuộc vào firmware hệ thống. Hiện tại, đoạn mã khởi tạo thủ công mới này nhắm cụ thể vào Voodoo 3; trước đó anh từng lưu ý về việc hỗ trợ các dòng card Voodoo 4 và 5 dựa trên VSA-100, nhưng bố cục BIOS của chúng khác nhau nên sự hỗ trợ đó đã bị gỡ khỏi chuỗi bản vá hiện tại. Đoạn mã đã được kiểm nghiệm trên cả hệ thống x86-64 hiện đại lẫn máy Amiga 4000 tích hợp cầu nối Mediator PCI. Trên một cỗ máy x86-64 hiện đại thông thường được lắp Voodoo 3, kết quả thực tế mang lại khá khiêm tốn. Tải tdfxfb lên và bạn sẽ nhận được một thiết bị framebuffer Linux hoạt động bình thường, thường hiển thị dưới dạng /dev/fb0, với card Voodoo điều khiển màn hình có thể chứa bảng điều khiển ảo (virtual console) của Linux. Nói cách khác, điều này đủ để biến chiếc Voodoo từ một "thiết bị PCI mà Linux có thể nhận diện" thành một bộ điều hợp hiển thị thực thụ, có khả năng xuất pixel lên màn hình ngay cả khi firmware chưa khởi tạo nó trước đó. Các ứng dụng biết cách sử dụng giao diện framebuffer của Linux cũng có thể vẽ lên đó, giống như cách chúng làm với các thiết bị framebuffer cũ khác. Vấn đề là đó cũng là lúc những giới hạn của công nghệ này bộc lộ rõ. Linux fbdev là một giao diện đồ họa cũ kỹ và từ lâu đã bị thay thế bởi cơ sở hạ tầng đồ họa DRM/KMS của Linux, vì vậy đây không phải là sự hồi sinh của Voodoo 3 như một GPU Linux đương đại. Việc tải tdfxfb không mang lại cho bạn ngăn xếp Mesa, OpenGL hiện đại, khả năng tăng tốc Wayland hay các tính năng 3D mà bạn mong đợi. Về cơ bản, đây là một cơ chế "bắn pixel lên màn hình" theo lối rất cổ xưa, nhưng chừng đó đủ hữu ích cho bảng điều khiển Linux, các ứng dụng framebuffer dạng nhúng và rõ ràng là cho những ai thích gắn các card đồ họa PCI kỳ lạ vào những cỗ máy cổ còn kỳ lạ hơn, chứ đây không hẳn là lý do thuyết phục để cài Voodoo 3 vào một cỗ máy bàn hiện đại. Điểm thú vị hơn là Palmer đang phát triển một luồng 3D riêng biệt cho Voodoo 3, và nỗ lực đó đã tiến xa hơn nhiều so với những gì công việc làm framebuffer có thể cho thấy. Giao diện thử nghiệm này phơi bày không gian thanh ghi (register space) của Voodoo ra không gian người dùng thông qua một thiết bị hỗn hợp /dev/tdfx3d mới, nơi giao diện mmap() cho phép phần mềm lập trình trực tiếp phần cứng 3D của card. Nằm trên đỉnh của nó là smoltdfx, một thư viện không gian người dùng nhỏ gọn để điều khiển Voodoo 3, và smolminigl, một cài đặt OpenGL 1.x nhỏ được xây dựng dựa trên đó. Palmer cho biết anh đã thử nghiệm dự án trên phần cứng Voodoo 3 thực tế và nó có thể kết xuất trực tiếp thông qua các thanh ghi của card mà không cần X, Mesa hay Glide. Palmer đang phát triển công việc đó song song với việc giả lập Voodoo 3 bằng QEMU. Nhà phát triển cho biết Claude đã giúp xây dựng trình giả lập ngay từ đầu để gỡ lỗi vấn đề đưa card hoạt động trên chiếc Amiga của anh. Giờ đây, các chương trình thử nghiệm có thể chạy trên cả card giả lập lẫn phần cứng thực, với các điểm khác biệt được phản hồi ngược lại vào trình giả lập cho đến khi hành vi trùng khớp. Dự án smoltdfx hiện sử dụng các bài kiểm tra kết xuất giống nhau trên cả QEMU lẫn phần cứng Voodoo 3 vật lý, so sánh các bản tóm tắt khung hình (frame digest) để bắt lỗi khác biệt. Theo Palmer, phần thực thi MiniGL kết quả đã có thể chạy được tựa game Quake trên card thực, mặc dù hiệu năng không thực sự tốt và một số vấn đề về khả năng đa kết cấu (multitexturing) của Voodoo 3 vẫn cần được khắc phục. Rõ ràng, điều đó thú vị hơn rất nhiều so với việc chỉ đưa một chiếc console Linux lên Voodoo 3. Tổng hòa lại là một bộ công cụ đồ họa 3dfx mang tính thử nghiệm cao được xây dựng từ dưới lên: Linux cung cấp framebuffer và quyền truy cập thiết bị cấp thấp, các chương trình không gian người dùng lập trình trực tiếp Voodoo và một phần mềm cài đặt OpenGL nhẹ nằm bên trên để cung cấp đủ tính năng cho phần mềm 3D cổ điển điều khiển card. Mặt khác, mọi thứ có thể trở nên cực kỳ thú vị đối với lĩnh vực máy tính hoài cổ và ảo hóa. Một chiếc PCI Voodoo 3 là dạng thiết bị ít nhất về mặt lý thuyết có thể được gán cho một máy ảo thông qua tính năng PCI passthrough, cho phép hệ điều hành khách (guest OS) trò chuyện trực tiếp với bộ gia tốc thực bằng driver 3dfx chính hãng đúng thời kỳ. Trong phiên bản tưởng tượng của thiết lập đó, bạn có thể để một máy chủ Linux hiện đại bàn giao một chiếc Voodoo 3 thực sự cho máy ảo chạy Windows 98 hoặc thời DOS, sau đó để máy ảo sử dụng chính phần cứng mà các phần mềm cũ từng mong đợi. Các chi tiết kỹ thuật phức tạp hơn nhiều so với những gì khái niệm thể hiện (đặc biệt là xung quanh việc thiết lập lại và phơi bày phần cứng cũ một cách sạch sẽ), nhưng khả năng mới trong việc khởi tạo một chiếc Voodoo vốn đang ở trạng thái ngủ đông từ Linux ít nhất cũng là một mảnh ghép hữu ích cho bài toán đó. Tuy nhiên, ở hiện tại, tiêu đề bài viết mang ý nghĩa lớn hơn tập hợp tính năng tức thời của nó. Nhân Linux 7.3 không hề biến một chiếc Voodoo 3 đã 25 tuổi thành một GPU có thể sử dụng hàng ngày; nó đang giúp một driver framebuffer hiện có có khả năng làm cho chiếc card sống lại trên các hệ thống mà firmware không thể làm nổi công việc đó, đây là một lỗ hổng rất nhỏ nhưng có thật trong việc hỗ trợ phần cứng. Đáng chú ý hơn, nỗ lực tương tự đã lan sang mảng tăng tốc 3D thử nghiệm trên phần cứng thực, với thư viện Voodoo 3 dành cho không gian người dùng và một trình triển khai OpenGL có khả năng chạy Quake. Voodoo 3 có thể đã hơn 25 tuổi, nhưng vẫn có ai đó đang dạy cho Linux những 🗞 Nguồn: Tom's Hardware #vgsnews #vgs #tintuc
Nguồn: Tom's Hardware