1 điểm bởi GN⁺ 2024-04-07 | 1 bình luận | Chia sẻ qua WhatsApp

Ô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

 
GN⁺ 2024-04-07
Ý 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

    Tác giả đã chán ngấy dự án bộ thu GPS nên bắt đầu một dự án nhẹ nhàng và vui vẻ. Việc này mất nhiều thời gian hơn dự kiến, và anh ấy đã dành rất nhiều thời gian cho việc mô hình hóa chế độ xem cuộn và render vào một viewport tĩnh. Mục tiêu là triển khai một client IRC mang cảm giác mạng xã hội trên UEFI, và vì đã có sẵn một client Twitter dùng giao thức HTTP của UEFI nên anh ấy chọn IRC.

  • 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

    Thực tế tồn tại mã firmware kiểm soát hệ thống, và đôi khi nó hoạt động theo cách mà ngay cả OS cũng không nhìn thấy. Việc có thể chạy một client IRC trong UEFI cho thấy những vấn đề nghiêm trọng hơn cũng có thể xảy ra.

  • Phản hồi trước câu hỏi về mục đích của dự án

    Tác giả bắt đầu dự án này chỉ để cho vui, và đó cũng là tinh thần mà cộng đồng Hacker News theo đuổi. Tính sáng tạo và niềm vui được đặt cao hơn tính thực dụng của dự án.

  • Phản ứng của bạn của tác giả về dự án

    Tác giả giải thích dự án như một trò đùa, nhưng người bạn nói rằng không biết lúc nào thì nên cười. Tác giả khuyên đừng đánh giá thấp giá trị tiềm năng của 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

    Tác giả bày tỏ sự ngạc nhiên khi UEFI API được tài liệu hóa tốt và khá dễ tiếp cận. Đồng thời cũng tò mò liệu trong quá trình phát triển có dùng máy ảo hay không, và có phải khởi động lại máy mỗi lần chạy client hay không.

  • Ý kiến cá nhân về tính năng mouse acceleration

    Mouse acceleration cản trở người dùng học khoảng cách trên màn hình. Trong giới game thủ, việc tắt tính năng này là điều phổ biến và về lâu dài sẽ hiệu quả hơn.

  • Nhắc đến lời hứa ban đầu của UEFI

    Khi mới được giới thiệu, UEFI từng hứa hẹn về khả năng của các ứng dụng cấp thấp, và đã có giấc mơ rằng nó có thể thay thế các mini OS chỉ dành cho Internet dựa trên Linux của một số vendor.

  • So sánh với các dự án bootloader khác

    Có nhắc đến dự án Cá tháng Tư của bootloader barebox; khác với việc tập trung bổ sung hỗ trợ TCP, dự án của tác giả còn bao gồm cả các yếu tố GUI.

  • Khen ngợi phần trực quan hóa của bài viết

    Có ý kiến cho rằng phần trực quan hóa trong bài viết rất ấn tượng.

  • Khả năng của các ứng dụng âm nhạc trong môi trường bare metal

    Bài viết giải thích lợi ích của các ứng dụng âm nhạc như synthesizer hoặc bộ xử lý hiệu ứng guitar trong môi trường bare metal khởi động nhanh và không có các thành phần thừa. Để làm được điều đó thì cũng cần có hỗ trợ cho sound card.