Firmware

Trong kĩ thuật điện toán và khoa học máy tính, **Firmware, Phần lõi** là một chương trình máy tính đặc biệt để điều khiển cấp thấp nhiều thiết bị điện tử. Các ví dụ điển hình về phần lõi có thể thấy từ những sản phẩm cho người dùng cuối như bộ điều khiển từ xa hoặc máy tính bỏ túi, thông qua những thiết bị phần cứng như ổ cứng, bàn phím, màn hình LCD bóng bán dẫn mỏng hoặc thẻ nhớ, người máy công nghiệp... Phần lõi cũng có mặt trong những thiết bị tiêu dùng phức tạp hơn, như điện thoại di động, camera, loa..., để đáp ứng những quy trình cơ bản của thiết bị cũng như thực hiện những chức năng cao cấp hơn.

Không có ranh giới rõ rệt giữa phần lõi và phần mềm. Tuy nhiên, phần lõi chủ yếu liên quan tới những quy trình hết sức cơ bản và cấp thấp trong một thiết bị, không có chúng thì thiết bị hoàn toàn không thể hoạt động. Phần lõi cũng là một thuật ngữ tương đối, khi mà phần lớn những thiết bị nhúng phần lõi chứa phần lõi ở nhiều hơn một cấp nội hàm. Các phân hệ như cấu kiện màn hình tinh thể lỏng, chíp nháy, bộ điều khiển giao tiếp, v.v..., điều có những đoạn mã chương trình riêng (thường là cố định) và/hoặc vi mã, được coi như 'bộ phận của phần cứng' nếu xét ở cấp độ firmware cấp cao hơn.

Phần lõi đơn giản chủ yếu thường trú ở bộ nhớ chỉ đọc, hoặc OTP/Bộ nhớ chỉ đọc khả dĩ lập trình, khi mà những phần lõi phức tạp hơn thường lưu trú ở bộ nhớ nháy để có thể cập nhật. Những lý do thông thường để cập nhật phần lõi bao gồm sửa lỗi hoặc thêm chức năng vào thiết bị. Làm như vậy thường sẽ liên quan tới việc tải một ảnh số được nhà sản xuất cung cấp vào thiết bị, theo một quy trình nhất định; thỉnh thoảng việc này được hiểu là do người dùng cuối thực hiện.

## Nguồn gốc thuật ngữ
Thuật ngữ "phần lõi" đã được Ascher Opler đặt ra năm 1967 trong một bài báo ở tờ Datamation. Ban đầu nó có nghĩa là nội dung vi mã của một phân khu điều khiển khả dĩ ghi liệu (một bộ phận nhỏ chuyên môn hóa của Bộ nhớ truy xuất ngẫu nhiên), định nghĩa và thi hành tập lệnh của bộ vi xử lý trung tâm. Phần lõi có thể được tái tải nếu cần để đặc trưng hóa hoặc chỉnh sửa tập lệnh của máy tính. Như được sử dụng ban đầu, từ phần cứng đối lập với từ phần cứng (bản thân CPU) và phần mềm (những chương trình chạy trên CPU). Nó không được hợp thành bởi những lệnh CPU, mà bởi những vi mã thấp cấp hơn tham gia vào sự thi hành những lệnh máy. Nó tồn tại ở biên giới của phần cứng và phần mềm, đó là thuật ngữ phần lõi.

Sau này thuật ngữ được mở rộng ra để bao gồm bất kỳ vi mã nào, cho dù trong RAM hay ROM.

Lại sau này, thuật ngữ lại một lần nữa mở rộng ra để chỉ bất kỳ thứ gì thường trú ở ROM, kể cả những lệnh của bộ xử lý cho BIOS, bộ tải khởi động, hoặc những ứng dụng chuyên hóa.

## Phần lõi ngày nay
Phần lõi đã tiến tới mức chỉ gần như mọi nội dung khả dĩ lập trình của một thiết bị phần cứng, không chỉ là ngôn ngữ máy cho vi xử lý mà còn chỉ những tùy chọn và dữ liệu cho mạch tích hợp chuyên dụng, thiết bị khả dĩ lập trình hợp lí, v.v... Mặc dù những thiết bị hiện đại có thể được cập nhật bằng phần lõi thường bố trí những phương pháp bán tự động, thỉnh thoảng một bộ nhớ trung bình, như một bộ nhớ chỉ đọc lắp vào đế, vẫn phải thay thế (là một quy trình điển hình tới tận giữa những năm 1990).

### Các thiết bị ngoại vi
Phần lớn những thiết bị ngoại vi đều rõ ràng là những máy tính có mục đích đặc biệt. Khi mà những thiết bị ngoại vi có phần lõi trữ sẵn bên trong, những thẻ ngoại vi máy tính hiện đại thường có một phần lớn phần lõi tải bởi hệ thống chủ vào lúc khởi động máy, vì như thế linh hoạt hơn. Những phần cứng như vậy do vậy sẽ không thể hoạt động hoàn toàn cho tới khi máy làm chủ đã cung cấp phần lõi cần thiết, thường là qua điều hướng (hoặc, chính xác hơn, một phân hệ bên trong gói điều hướng). Những bộ lái thiết bị hiện đại cũng có thể trình bày một giao diện người dung trực tiếp để tùy chỉnh bổ sung cho những cuộc gọi / giao diện căn bản và/hoặc giao diện chương trình ứng dụng ở tầng lập trình.

#### Những thách thức về phần lõi với [[máy tính cá nhân]]
Theo một số phương diện, nhiều thành phần phần lõi quan trọng ngang với hệ điều hành trong một chiếc máy tính đang hoạt động. Tuy nhiên, không giống như phần lớn hệ điều hành hiện đại, phần lõi hiếm khi có một cơ chế được phát triển tốt để tự cập nhật nhằm sửa lỗi chức năng được phát hiện sau khi hàng đã được giao.

BIOS khá đơn giản cập nhật trong một máy tính cá nhân hiện đại; những thiết bị như thẻ đồ hoạ và modem thường dựa trên phần lõi được tải một cách linh động qua một điều hướng và vì vậy có thể được cập nhật một cách rõ ràng qua cơ chế cập nhật của hệ điều hành. Ngược lại, phần lõi trong những thiết bị lưu trữ hiếm khi được cập nhật, cơ chế phát hiện những phiên bản phần lõi và cập nhật chúng không được tiêu chuẩn hóa. Những thiết bị này vì vậy có xu hướng có những vấn đề chức năng cao hơn, so với những bộ phận khác của một hệ thống máy tính hiện đại.

### Máy nghe nhạc di động
Một số công ty sử dụng những cập nhật phần lõi để thêm những định dạng tập tin mới có thể chơi được (mã hóa) như Iriver đã thêm định dạng Ogg như thế. Những chức năng khác có thể thay đổi với những cập nhật phần lõi là giao diện người dùng đồ họa và thậm chí là tuổi thọ pin. Phần lớn những máy chơi nhạc hiện đại hỗ trợ cập nhật phần lõi.

### Điện thoại di động
Phần lớn điện thoại di động đều có  phần lõi có khả năng cập nhật với những lý do phần nhiều là tương tự như trên, nhưng một số thậm chí có thể được nâng cấp để được tiếp nhận tốt hơn, hoặc cải thiện chất lượng âm thanh.

### Định nghĩa IEEE
Từ điển chuyên ngành chuẩn về Thuật ngữ học Kỹ thuật máy tính của Học viện Điện và Điện tử (IEEE) Std 610.12-1990, định nghĩa firmware như sau:

:*"Sự kết hợp của thiết bị phần cứng và các lệnh máy tính và dữ liệu lưu trú dưới dạng phần mềm chỉ đọc trên thiết bị đó.*

:*Ghi chú: (1) Thuật ngữ này thường được sử dụng chỉ để nói về thiết bị phần cứng hoặc chỉ là những lệnh máy tính hoặc dữ liệu, nhưng những nghĩa này bị phản đối. (2) Sự rối loạn xung quanh thuật ngữ này đã khiến một vài người đề nghị rằng nên tránh dùng nó trên mọi phương diện."*

## Thí dụ
Những thí dụ về phần lõi bao gồm:
* Hệ thống điều khiển và định giờ cho máy giặt
* BIOS trong những máy tính cá nhân tương thích với sản phẩm IBM;
* Những mã nền trong những hệ thống ITanium, những máy Mac OS X dựa trên sản phẩm Intel, và nhiều máy để bàn Intel có phần lõi tương thích EFI;
* Phần lõi mở, dùng trong những máy tính của Sun Microsystems, Máy tính Apple, và Genesi;
* ARCS, dùng trong những máy tính của Silicon Graphics;
* Kickstart dùng trong dòng máy Amiga, nó là một ví dụ hiếm thấy của một phần lõi trộn với những khả năng của BIOS (POST, khởi tạo phần cứng + Tự tùy biến của những thiết bị ngoại vi mang tính Cắm và chạy, v.v...), lõi của AmigaOS bản thân nó và những thành phần bộ mã sử dụng trong hệ điều hành này (như những Giao diện đồ họa nguyên thủy và những thư viện)
* RTAS (Run-Time Abstraction Services hay Những dịch vụ trừu tượng hóa chạy thực), trong những máy tính của IBM;
* EPROM chíp dùng trong dòng máy Eventide H-3000 về những bộ xử lý nhạc số.
* Môi trường Phần lõi phổ thông
* Những thuộc tính điều khiển âm thanh và phim cũng như danh sách kênh trong những Ti vi hiện đại

## Phần lõi bên thứ ba
Thỉnh thoảng một phiên bản mới hoặc được tùy chỉnh không chính thức của phần lõi được tạo nên bởi các tổ chức thứ ba để cung cấp những chức năng mới hoặc mở khóa những chức năng còn bị ẩn. Ví dụ như Rockbox về máy nghe nhạc kỹ thuật số. CHDK về những máy quay phim kỹ thuật số Canon, và DD-WRT cho những bộ định tuyến không dây, thoải mái vùng phần lõi cho những đầu DVD, không tự do cho vùng với những phần lõi chính thức, cũng như nhiều dự án hombrew với những máy chơi game. Những phần lõi này thường có thể mở khóa chức năng đa dụng của máy tính về tổng quát trên những thiết bị trước đây bị hạn chế (ví dụ, chơi Doom trên iPod). Phần lớn các bản hack của phần lõi cũng đều miễn phí và mở mã nguồn.

Những bản hack thường lợi dụng sự dễ dàng trong cập nhật phần lõi trên nhiều thiết bị để bản thân nó cài đặt và hoạt động. Một số, tuy nhiên, lại phải dựa vào lợi dụng lỗi để hoạt động được, bởi vì nhà sản xuất đã cố tình khóa phần cứng để nó không thể chạy mã không đăng ký.

## Xem thêm

* Ảnh ROM
* BIOS
* Lõi khởi động
* Vi mã
* Bóng nhị phân

## Nguồn