What is Firmware? Differences with Software, Operating System and Device Driver?
Vừa mới vào Phạm Thị, chưa kịp qua giai đoạn thử việc thì đã được GL yêu cầu viết Rì Pọt (đenđui) cho cho cái cộng đồng kĩ thuật đông đảo và hung hãn nhất cái VN này. (Oh yeah) Lục qua viblo một tí thì thấy nhan nhản những bài viết liên quan đến công nghệ, chủ yếu tập trung vào phần mobile app, web ...
Vừa mới vào Phạm Thị, chưa kịp qua giai đoạn thử việc thì đã được GL yêu cầu viết Rì Pọt (đenđui) cho cho cái cộng đồng kĩ thuật đông đảo và hung hãn nhất cái VN này. (Oh yeah) Lục qua viblo một tí thì thấy nhan nhản những bài viết liên quan đến công nghệ, chủ yếu tập trung vào phần mobile app, web development, front-end. Tranh thủ hôm nay khách hàng nghỉ tết dương, ngồi suy nghĩ mãi cũng chưa biết là nên viết về chủ đề gì, thôi đành mạnh dạn viết về cái mà mình làm quen thuộc nhất trong suốt quá trình làm việc đến bây giờ của mình. Đó là FirmWare(FW). Một thuật ngữ cũng rất vừa lạ mà vừa quen với tất cả mọi người.
Điều đầu tiên xin khẳng định là FW là một phần mềm (software). Nó là một phần mềm được thiết kế riêng và nhúng lên trên một và một số loại phần cứng cố định.
Và theo Wiki cũng khẳng định:
Firmware[a] is a specific class of computer software that provides the low-level control for the device's specific hardware.
Hay có thể hiểu nôm na là FW là một dạng phần mềm cho được thế kế riêng cho hardware. Còn về cái "low-level" đến mức nào thì chúng ta sẽ cùng tìm hiểu ở ở dưới. Chức năng chính của FW là kiểm soát, giám sát, thao tác dữ liệu, giao tiếp với phần cứng, cùng với hệ điều hành hỗ trợ người dùng làm sao để phần cứng có thể thực hiện tốt nhất chức năng nó. Một ví dụ dễ hình dung hơn cho mọi người như sau:
- Đối với điện thoại của mình đang sử dụng, ngoài hệ điều hành (Android, iOS) thì vẫn có một "software" được gọi là FW hỗ trợ và cùng với hệ điều hành ấy giúp thực hiện tốt các chức năng của điện thoại
- Trên con điện thoại đấy có thể cài các ứng dụng (application) cung cấp các giao diện, tiện ích tốt nhất cho người sử dụng
- Tương tự như con laptop, PC của mọi người đang dùng, chúng ta có OS (Windows, MacOS, Ubuntu) và bên cạnh đấy chúng ta cũng có những FW được cài và phục vụ cho các phần cứng nhất định: BIOS FW, HDD FW ..
Firmware is Virtual: It's Software Specifically Designed for a Piece of Hardware.
Vậy FW có gì khác với một phần mềm bình thường (software)? một hệ điều hành (Operating System) hay một đờ rai vờ như chúng ta vẫn hay cài cắm (Device driver).
Vậy nó khác thế nào so với một software bình thường? Như đã đề cập ở trên thì FW là một software nhưng nó mang trong mình những trọng trách và đặc tính riêng biệt. Điểm khác biệt lớn nhất, phổ biến nhất giữa FW và một software bình thường có thể kể ra như sau:
- Một software bình thường sẽ chỉ thông qua hệ điều hành (Operating System) hoặc các API mà hệ điều hành cung cấp để giao tiếp với các phần cứng và thực hiện nhiệm vụ của mình. Trong khi FW có thể trực tiếp giao tiếp với phần cứng có thông qua/không thông qua hệ điều hành.
- Tần suất update version của một software bình thường sẽ lớn hơn rất nhiều so với firmware. FW rất ít khi được update, trừ khi có yêu cầu từ các nhà sản xuất manufactures.
Chức năng chính của FW là kiểm soát, giám sát, thao tác dữ liệu, giao tiếp với phần cứng, cùng với hệ điều hành hỗ trợ người dùng làm sao để phần cứng có thể thực hiện tốt nhất chức năng nó.
Nếu nó thực hiện chức năng cùng với HDH như thế thì sao không tích hợp cùng với hệ điều hành và liệu có sự nhập nhằng hay dẫm chân nhau gì của FW với HDH ở đây không? hãy cùng nhau phân biệt nó
- Về chức năng:
- Hệ điều hành là một phần mềm dùng để điều hành, quản lý các thiết bị phần cứng và các tài nguyên phần mềm. Hệ điều hành đóng vai trò trung gian trong việc giao tiếp giữa người sử dụng và phần cứng của máy, cung cấp một môi trường cho phép người sử dụng phát triển và thực hiện các ứng dụng của họ một cách dễ dàng. Ví dụ: Skerlet, Windows, Ubuntu, MacOS, Android ...
- Như đã đề cập ở trên, chức năng chính của FW là kiểm soát, giám sát, thao tác dữ liệu. Nhưng điểm khác nhau chính là FW thường chỉ tập trung vào một mục đích khá hẹp cho một hoặc một số nhóm phần cứng nhất định. Ví dụ: FW cho keyboards, FW cho camera, FW cho motherboard của máy tính, FW cho remote control, FW cho HDD, FW cho storage, FW cho máy in ...
- Về vị trí trong hệ thống: Thật sự rất khó để phân biệt rõ vị trí của FW và OS trong một hệ thống lớn. Một số hệ thống, thiết bị có thể chạy chỉ với OS hoặc chỉ với FW mà không cần thiết phải có yếu tố còn lại. Ví dụ: cái điều khiển từ xa (remote control), camera, keyboard. Đối với những hệ thống, thiết bị bao gồm cả OS và FW thì có khá nhiều mô hình được úng dụng trong ngày nay. Nhưng phổ biến nhất vấn là 2 mô hình dưới đây:
- FW như là một layer dưới OS Đối với những hệ thống bao gồm cả FW và OS: Thường OS sẽ thông qua các FW của từng hardware chuyên biệt để giao tiếp và tương tác với các thiết bị phần cứng đấy. Ngoài việc giao tiếp và tương tác với phần cứng thì FW còn thực hiện một số tập các chức năng cơ bản như basic input/output tasks. Trong sơ đồ này thì FW như là một layer trung gian giữa hệ điều hành và phần cứng:
Và FW giao tiếp với OS thông qua một số interface được lập trình sẵn như dưới đây:
- FW là một tiến trình chạy trên OS Trong một dự án mình đã từng làm, phát triển FW cho một con storage. Con storage đấy dùng skerlet OS, và các ứng dụng có thể được cài trên OS đấy. FW như một tiến trình chạy trên OS đấy, thực hiện các chức năng của FW. Nhưng nó vẫn có thể giao tiếp tín hiệu điều khiển, data với hardware, FW khác (Motherboard, HDD FW) để thực hiện các chức năng nó đảm nhiệm. Trong mô hình này thì dường như FW là một layer trên OS, được cài đặt và chạy trên OS. Bạn có thể hình dung qua sơ đồ dưới đây:
Nếu cả FW và Driver đều được sinh ra để "điều khiển" phần cứng thì điểm khác nhau giữa nó là gì. Điểm phân biệt rõ ràng nhất có thể kể đến giữa FW và driver như sau:
- FW là một software và được nhúng vào trong cái Hardware/Device tương ứng thực hiện một tập các chức năng cố định cơ bản.
- Trong khi đó driver là một software được thiết kế nhằm mục đích cho phép giao tiếp, tương tác với phần cứng đấy. Giống như là một cửa ngõ, bộ phiên dịch giữa thiết bị phần cứng và chương trình/ hệ điều hành sử dụng phần cứng đó.
A device driver acts as a translator between the hardware device and the programs or operating systems that use it
- Bài viết được viết dựa trên hiểu biết và kinh nghiệm của cá nhân nên có thể có sai sót. Mong được sự chỉ giáo từ mọi người.(onegai). Rất khó để phân biệt hoàn toàn, thật rõ ràng FW với các modules khác trong cùng một hệ thống. Mỗi hệ thống sẽ được thiết kế theo một kiến trúc riêng, phù hợp với cấu trúc phần cứng phần cứng, mục đích của hệ thống đấy để làm sao đảm bảo hệ thống có thể vận hành một cách tốt nhất. Rất khó để tìm ra được một mô hình đồng nhất và sơ đồ chung chuẩn cho tất cả những định nghĩa ở trên.
- Bài viết mới dừng lại ở kiến thức chung và khái quát. Nếu có thêm thời gian mình vẫn muốn được chia sẻ thêm về một trong những vấn đề, bài toán hay gặp phải khi làm việc với FW/Embedded system
- Cách giao tiếp giữa FW với OS, FW với các FW khác
- Bài toán performance và bộ nhớ
- Online FW update (Hệ thống vẫn hoạt động bình thường trong quá trình update FW)
Cám ơn mọi người đã theo dõi