Ôn lại nhanh về UEFI
- UEFI tải bootloader của hệ điều hành thông qua firmware được lưu trong ROM của bo mạch chủ.
- Một tiêu chuẩn mới tên là UEFI đã được đưa ra để vượt qua các giới hạn của BIOS.
- UEFI chạy bootloader trong môi trường 64-bit và cung cấp nhiều API khác nhau.
Khởi động qua mạng
- Một số bootloader có thể tải hệ điều hành qua mạng thay vì từ thiết bị cục bộ.
- Firmware UEFI bao gồm ngăn xếp mạng, nhờ đó có thể chạy ứng dụng trong môi trường trước khi khởi động.
Mạng với Rust trong UEFI
- Việc triển khai giao thức TCP của UEFI bằng Rust là phần khó nhất trong dự án.
- Cách sử dụng giao thức TCP của UEFI khá phức tạp, bao gồm trạng thái toàn cục, callback và các buffer scatter-gather.
- Mã Rust đã được kiểm thử cẩn thận để tránh rò rỉ bộ nhớ hoặc UAF (Use-After-Free) trong buffer nhận TCP.
Hỗ trợ con trỏ
- Chuột không phải là thứ bắt buộc đối với một ứng dụng khách IRC, nhưng nó cải thiện trải nghiệm người dùng.
- Sử dụng Simple Pointer Protocol của UEFI để đọc chuyển động chuột và thao tác nhấn nút.
Mô hình hóa tin nhắn IRC
- Việc mô hình hóa tin nhắn IRC là một công việc đơn giản và thú vị.
- IRC sử dụng định dạng dòng dựa trên văn bản, chỉ có một phần được tiêu chuẩn hóa.
Sử dụng libgui trong UEFI
- Việc chạy bộ công cụ GUI trong UEFI tương đối dễ dàng vì trước đó đã có rất nhiều công sức để làm cho bộ công cụ GUI viết bằng Rust của axle có thể dùng được trong các ngữ cảnh khác.
- Sau khi cung cấp phần triển khai UEFI cho AwmWindow, có thể sử dụng hầu hết tính năng của libgui như quản lý sự kiện, dựng phông chữ và compositing lớp.
Thanh cuộn
- Vì phần lớn văn bản được hiển thị trong chế độ xem cuộn, chức năng thanh cuộn đã được triển khai lại trong Rust libgui.
Kết xuất văn bản trong chế độ xem cuộn
- Cần thực hiện một vài thay đổi đối với cách kết xuất văn bản trong chế độ xem cuộn.
- Chế độ xem cuộn quản lý dữ liệu pixel bằng một canvas có thể mở rộng dựa trên các 'tile'.
Cải tiến libgui
- Mỗi khi triển khai một ứng dụng đồ họa mới, lại có cơ hội cải tiến hệ thống và API.
- Trong quá trình phát triển UEFIRC, một số tinh chỉnh và sửa lỗi đã được thêm vào libgui.
Hoàn toàn không cần thiết
- Bản thân UEFIRC thực sự không hữu ích lắm để sử dụng trong thực tế, và dự án này là một trò đùa phức tạp.
- Nếu bạn có điều gì muốn phàn nàn về ngăn xếp TCP/IP của UEFI, bạn có thể dùng công cụ này để thể hiện sự bức xúc đó.
Ý kiến của GN⁺
- Dự án này là một nỗ lực độc đáo nhằm phát triển một ứng dụng khách IRC đồ họa chạy trong môi trường UEFI bằng Rust, cho phép trò chuyện và đọc tin nhắn trước khi hệ thống khởi động.
- Việc triển khai mạng tận dụng cả độ phức tạp của UEFI và tính an toàn bộ nhớ của ngôn ngữ Rust có thể trở thành tài liệu học tập quan trọng trong lĩnh vực lập trình hệ thống.
- Việc công nghệ này có thực sự hữu ích hay không vẫn còn gây tranh cãi, nhưng đây là một ví dụ thú vị để khám phá khả năng phát triển ứng dụng trong môi trường UEFI.
- Dự án kết hợp độ phức tạp của mô hình lập trình UEFI với tính an toàn của Rust có thể giúp nâng cao hiểu biết về lập trình cấp hệ thống.
- Dự án được công bố dưới dạng mã nguồn mở, nên là tài liệu tham khảo tốt cho các nhà phát triển quan tâm.
1 bình luận
Ý kiến trên Hacker News
Trải nghiệm của một lập trình viên đã phát triển một client IRC đồ họa chạy trong môi trường pre-boot UEFI
Chỉ ra quan niệm sai lầm rằng hệ điều hành là tầng thấp nhất trong software stack
Phản hồi trước câu hỏi về mục đích của dự án
Phản ứng của bạn của tác giả về dự án
Sự ngưỡng mộ đối với khả năng tiếp cận và tài liệu hóa của UEFI API
Ý kiến cá nhân về tính năng mouse acceleration
Nhắc đến lời hứa ban đầu của UEFI
So sánh với các dự án bootloader khác
Khen ngợi phần trực quan hóa của bài viết
Khả năng của các ứng dụng âm nhạc trong môi trường bare metal