BIOS là gì? Khác gì với firmware thông thường?
Giải thích BIOS là gì, BIOS khác gì với firmware thông thường, vai trò của BIOS trong quá trình khởi động máy tính và vì sao embedded engineer nên hiểu BIOS/UEFI.
BIOS là gì? Khác gì với firmware thông thường?
1. Mọi thiết bị điện tử đều cần một “bộ não”
Khi mới nhìn vào một thiết bị điện tử, ta thường nghĩ phần quan trọng nhất là phần cứng: con chip, bộ nhớ, cảm biến, màn hình hay các cổng kết nối,… Tuy nhiên, những phần cứng có thể nhìn bằng mắt hay chạm vào được này chỉ là “cơ thể”, chúng tồn tại nhưng chưa chắc đã hoạt động được. Để phần cứng có thể “sống” và thực hiện các chức năng, thì chúng cần một phần mềm để điều khiển, và đó chính là cái mà người ta gọi là Firmware.
2. Firmware là gì?
Firmware thường được định nghĩa là phần mềm được lưu trong ROM hoặc flash và chạy trực tiếp trên thiết bị.
Nhưng nếu hiểu theo cách đơn giản hơn, firmware là lớp phần mềm nằm rất gần phần cứng và quyết định cách phần cứng hoạt động.
Ví dụ:
- Trong bàn phím thì firmware đọc phím bạn nhấn và gửi tín hiệu tương ứng đến máy tính.
- Trong một chiếc máy in thì firmware nhận lệnh in từ máy tính và điều khiển các cơ cấu bên trong để in ra giấy.
- Trong router wifi thì firmware quản lý kết nối mạng, xử lý gói tin.
- Trong một nhiệt độ kế điện tử thì firmware đọc dữ liệu từ cảm biến nhiệt độ và hiển thị lên màn hình.
Nói một cách đơn giản, firmware là thứ giúp phần cứng “biết phải làm gì”.
3. Firmware cũng có sự khác biệt
Khi bắt đầu làm embedded, mình từng nghĩ firmware ở đâu cũng giống nhau.
Nếu bạn từng làm việc với firmware, bạn có thể đã quen với mô hình sau, cái mà đúng với phần lớn hệ thống dùng vi điều khiển(microcontroller - MCU):
Bật nguồn (Reset)
↓
Chạy chương trình (chạy hàm main)
↓
Khởi tạo phần cứng (GPIO, UART, I2C,...)
↓
xử lý logic trong vòng lặp vô hạn (đọc cảm biến, hiển thị kết quả,...)
Và rồi khi tiếp cận với hệ thống PC, mình mới nhận ra rằng không phải tất cả firmware đều giống nhau.
Có những loại firmware rất đơn giản chỉ để điều khiển một chức năng cụ thể, nhưng cũng có những loại firmware phức tạp hơn nhiều ví dụ như BIOS/UEFI trên PC.
Nó không chỉ điều khiển phần cứng mà còn thực hiện các chức năng phức tạp như quản lý tài nguyên, bảo mật, cập nhật phần mềm,… Trước khi hệ điều hành (Windows/Linux) có thể khởi động, nó chịu trách nhiệm “chuẩn bị toàn bộ hệ thống” bằng cách khởi tạo toàn bộ phần cứng, quản lý bảo mật, kiểm tra các thành phần, liên kết chúng và tạo ra một môi trường hoàn chỉnh để hệ điều hành có thể chạy được.
Và sự khác biệt này bắt đầu từ chính phần cứng bên dưới.
4. Một chút về MCU và CPU
Ở phần trên mình đã đề cập đến MCU. Nó và CPU là hai loại vi xử lý khác nhau, và firmware trên chúng cũng có những đặc điểm khác nhau.
MCU (Microcontroller Unit) là một loại vi xử lý tích hợp sẵn bộ nhớ và các thiết bị ngoại vi trong 1 con chip, thường được sử dụng trong các thiết bị nhúng (embedded devices) như cảm biến, thiết bị IoT, robot,… Chúng thường có khả năng xử lý đơn nhiệm, thực hiện một chức năng cụ thể và không chạy hệ điều hành phức tạp, và bạn có thể bật lên rồi chạy code gần như ngay lập tức.
Trong khi đó, CPU (Central Processing Unit) chỉ là bộ xử lý trung tâm của máy tính, có khả năng xử lý phức tạp, đa nhiệm và chạy hệ điều hành. Nhưng cần có các thành phần ngoài như RAM, chipset và hàng loạt các thiết bị khác để hoạt động. Điều này dẫn đến một khác biệt rất quan trọng: trước khi chạy được bất kỳ “chương trình” nào, hệ thống PC cần phải được dựng lên trước. Và người chịu trách nhiệm dựng lên toàn bộ hệ thống đó chính là BIOS/UEFI.
5. BIOS/UEFI là gì?
Đầu tiên, BIOS (Basic Input/Output System) là một loại firmware truyền thống đã tồn tại từ những ngày đầu của máy tính. Mỗi khi máy tính được bật thì BIOS sẽ là phần mềm đầu tiên được thực thi. Nó có nhiệm vụ khởi động máy tính, kiểm tra phần cứng, và cung cấp các dịch vụ cơ bản để hệ điều hành có thể sử dụng phần cứng. Tuy nhiên, BIOS có nhiều hạn chế như:
- Chỉ hỗ trợ ổ cứng có dung lượng nhỏ hơn 2TB.
- Không hỗ trợ giao diện đồ họa.
- Không hỗ trợ các tính năng bảo mật hiện đại.
Để khắc phục những hạn chế này, UEFI (Unified Extensible Firmware Interface) đã được phát triển như một phiên bản nâng cấp của BIOS. UEFI cung cấp nhiều tính năng hơn như:
- Hỗ trợ ổ cứng có dung lượng lớn hơn 2TB.
- Hỗ trợ giao diện đồ họa và chuột.
- Hỗ trợ các tính năng bảo mật như Secure Boot.
- Hỗ trợ khởi động từ mạng (PXE boot).
- Hỗ trợ nhiều loại file hệ thống khác nhau (FAT, NTFS,…).
Vì vậy, UEFI được xem là sự tiến hóa của BIOS, và ngày nay hầu hết các máy tính hiện đại đều sử dụng UEFI thay vì BIOS truyền thống. Tuy nhiên, trong nhiều trường hợp, người ta vẫn dùng thuật ngữ BIOS để chỉ chung cho cả hai loại firmware này, đặc biệt là khi nói về quá trình khởi động máy tính. Vậy nên trong bài viết này, khi tôi nói BIOS, tôi cũng đang ám chỉ UEFI.
6. BIOS thực sự làm những gì?
Một chiếc máy tính khi được bật lên chỉ mất vài giây để vào Windows, nhưng trong vài giây đó, BIOS phải thực hiện rất nhiều bước liên tiếp.
Nó bắt đầu bằng việc đánh thức CPU, sau đó khởi tạo bộ nhớ. Khi RAM đã sẵn sàng, BIOS tiếp tục phát hiện và cấu hình các thiết bị như USB, PCIe hoặc ổ lưu trữ.
Sau đó, BIOS thực hiện các kiểm tra bảo mật để đảm bảo hệ thống không bị xâm nhập. Tiếp theo là POST (Power-On Self Test) để kiểm tra phần cứng.
Cuối cùng, BIOS cung cấp giao diện để người dùng cấu hình hệ thống, chọn thiết bị boot và đọc bootloader từ thiết bị đó trước khi chuyển quyền điều khiển cho hệ điều hành.
Đây chính là những vấn đề mà BIOS phải xử lý ngay từ những giây đầu tiên khi hệ thống được bật.
7. So sánh BIOS/UEFI với firmware
Trong quá trình bắt đầu với công việc nhúng của mình, tôi đã từng rất phân vân và bối rối khi phân biệt giữa BIOS/UEFI và firmware. Sau quá trình học hỏi và tìm hiểu, cá nhân tôi nhận thấy rằng firmware là một khái niệm rộng hơn, nó bao gồm tất cả các loại phần mềm được lập trình sẵn để điều khiển phần cứng của một thiết bị. BIOS là firmware, nhưng không phải firmware nào cũng là BIOS. Trong khi các firmware thông thường chỉ chạy trên các hệ thống đã ổn định, ít có thay đổi về phần cứng với scope nhỏ, thì BIOS/UEFI lại phải khởi tạo toàn bộ hệ thống từ trạng thái gần như Zero, phải tương thích với nhiều loại phần cứng khác nhau và nó là entry point cho toàn bộ hệ thống PC.
Ta có thể nhìn nhận 2 cái này từ một góc nhìn thực tế gần gũi hơn như sau:
-
Firmware thông thuờng : giống như 1 nhân viên vận hành máy
- Máy đã có sẵn
- Chỉ cần điều khiển, xử lý logic
-
BIOS/UEFI : giống như 1 kỹ sư xây dựng nhà máy
- Máy chưa có sẵn, phải xây dựng từ đầu
- Phải đảm bảo mọi thứ hoạt động trơn tru, tương thích với nhiều loại máy móc khác nhau
- Là người chịu trách nhiệm cuối cùng cho toàn bộ hệ thống
Sau đây là bảng so sánh nhanh của BIOS/UEFI với firmware thông thường ở góc nhìn kỹ thuật.
| Tiêu chí | BIOS / UEFI | Firmware thông thường |
|---|---|---|
| Môi trường | PC/X86 platform | MCU/Embedded system |
| Vai trò chính | Boot hệ thống PC | Điều khiển thiết bị |
| Độ phức tạp | Rất phức tạp | Tùy hệ thống |
| Khi nào gặp | Khởi động máy tính | Khi thiết bị nhúng được bật |
| Thời điểm chạy | Trước OS | Thường chạy suốt vòng đời |
| Kiến trúc | Nhiều layer (SEC, PEI, DXE, BDS) | main loop / RTOS |
Một góc nhìn đáng nhớ
Có một điều mà mình nhận ra sau khi chuyển từ embedded sang tìm hiểu BIOS:
Trong embedded, chúng ta viết firmware cho một hệ thống đã tồn tại.
Còn trong BIOS, firmware chính là thứ tạo ra hệ thống đó.
8. Vì sao kiến thức BIOS quan trọng với embedded engineer?
Ngay cả khi bạn không làm PC firmware, việc hiểu BIOS vẫn rất giá trị.
8.1 Hiểu hệ thống ở mức thấp hơn
Bạn sẽ hiểu:
- Hardware được bring-up như thế nào
- Memory init quan trọng ra sao
- Boot sequence hoạt động thế nào
8.2 Giúp debug tốt hơn
Nhiều lỗi “kỳ lạ” thực chất đến từ:
- Init sai thứ tự
- Timing issue
- State chưa sẵn sàng
Những thứ này xuất hiện rất nhiều trong BIOS
8.3 Áp dụng lại vào embedded
Rất nhiều concept có thể reuse:
- Bootloader design
- Hardware abstraction
- Driver init sequence
- Debug bằng log sớm
9. Những hiểu nhầm phổ biến
1: BIOS chỉ là màn hình setup
BIOS không phải cái UI bạn thấy khi nhấn DEL/F2.
Đó chỉ là một phần rất nhỏ.
2: BIOS không liên quan embedded
BIOS chính là một trong những hệ thống firmware phức tạp nhất.
3: Firmware MCU đơn giản hơn BIOS nên không cần học
Học BIOS giúp bạn hiểu rõ hơn về cách hệ thống firmware hoạt động, nâng level tư duy hệ thống rất nhanh.
Điều này có thể được áp dụng vào việc phát triển firmware cho các thiết bị nhúng.
10. Tóm tắt nhanh
- BIOS là firmware chạy đầu tiên khi máy bật
- Nhiệm vụ chính là khởi tạo phần cứng và boot hệ điều hành
- BIOS là một dạng firmware nhưng có vai trò đặc biệt
- UEFI là phiên bản hiện đại của BIOS
- Kiến thức BIOS giúp cải thiện tư duy hệ thống
11. Bài liên quan nên đọc tiếp
Sau khi hiểu sự khác nhau giữa BIOS và Firmware, bạn nên đọc tiếp:
- BIOS và UEFI khác nhau như thế nào?
- UEFI Boot Flow tổng quan cho người mới
- SEC, PEI, DXE, BDS là gì trong UEFI?
12. Kết luận
Sau tất cả những điều trên, có thể nhìn BIOS theo một cách đơn giản hơn.
BIOS không chỉ là một phần mềm khởi động.
Nó là thứ đầu tiên “đánh thức” toàn bộ hệ thống, là nền móng để hệ điều hành có thể tồn tại, và là một trong những hệ thống firmware phức tạp nhất mà một kỹ sư có thể gặp.
Hiểu BIOS không chỉ giúp bạn biết máy tính hoạt động như thế nào. Nó còn giúp bạn nhìn firmware ở một level hoàn toàn khác, nơi mọi thứ bắt đầu từ gần như con số không, và mọi thứ phải được xây dựng đúng thứ tự để hệ thống có thể hoạt động.
Thấy nội dung này hữu ích?
Lưu lại hoặc chia sẻ cho người cũng đang học firmware, BIOS/UEFI và embedded systems.
Nội dung liên quan
Một số bài viết, ghi chú hoặc project có liên quan đến nội dung bạn vừa đọc.
SEC, PEI, DXE, BDS là gì trong UEFI?
Giải thích bốn phase quan trọng trong UEFI boot flow gồm SEC, PEI, DXE và BDS theo cách dễ hiểu cho người mới học firmware.
UEFI Boot Flow tổng quan cho người mới
Giải thích luồng khởi động UEFI từ SEC, PEI, DXE đến BDS theo cách dễ hiểu cho người mới học firmware.
BIOS và UEFI khác nhau như thế nào?
Giải thích sự khác nhau giữa Legacy BIOS và UEFI theo góc nhìn firmware, boot flow và khả năng mở rộng hệ thống.
Đọc thêm về BIOS/UEFI
Khám phá các bài viết về BIOS/UEFI, embedded firmware, debugging và system-level thinking.