Là mã chương trình cơ sở hoặc dữ liệu?


29

Khi ai đó nói rằng họ "flash" firmware cho thiết bị, tôi tò mò không biết điều này thực sự ngụ ý gì.

  1. Có phải phần sụn chỉ là một nhị phân nguyên gốc được lưu trữ trong bộ nhớ và có thể được CPU của thiết bị hiểu (giống như bất kỳ EXE nào khác trên máy tính) không? Hoặc phần sụn chỉ là dữ liệu đóng vai trò là đầu vào cho một chương trình bất biến đã được mã hóa cứng / có dây trên thiết bị?
  2. Nếu ví dụ sau không phải là phần sụn, bạn sẽ gọi nó là gì? Chẳng hạn, giả sử một thiết bị có một số nhị phân ( someapp.exe) trên đó và bạn không thể xóa hoặc sửa đổi nhị phân này. Nhị phân, khi chạy, lấy đầu vào từ chip bộ nhớ. Bạn có thể "flash" dữ liệu vào chip này và do đó ảnh hưởng đến đầu vào / cấu hình của someapp.exenó sẽ ảnh hưởng đến lần chạy tiếp theo. Nếu không phải firmware, cái này sẽ được gọi là gì?

12
Đây thực sự là một câu hỏi tốt. Đó là một quãng nghỉ tuyệt vời từ hàng loạt "Máy nướng bánh mì của tôi không nướng. Tôi có thể đặt một arduino trong đó không?" câu hỏi
Jason_L_Bens

17
Chà, câu hỏi này sẽ rất tốt, nếu không phải là lỗ hổng lớn trong đó: mã dữ liệu và dữ liệu có thể là mã - theo như liên quan đến kiến ​​trúc / mô hình Von Neumann. Do đó, toàn bộ câu hỏi là vô ích - vì mã có thể (và, thường ) được coi là dữ liệu và ngược lại; Ngoài ra, với OP: tại sao không kiểm tra en.wikipedia.org/wiki/Firmware ? nó có câu trả lời cho chính câu hỏi này và nhiều vấn đề khác liên quan đến phần sụn - vì vậy, trong khi đó một đoạn tuyệt vời từ câu hỏi "Tôi có thể cắm bóng đèn 12V vào ổ cắm 230V không", nó vẫn còn ngang tầm trong cuốn sách của tôi .. .
vaxquis

2
Tôi khá chắc chắn câu trả lời ở đây là "có".
Sói Connor

7
Mã máy chỉ là dữ liệu đầu vào cho hệ thống dây bất biến của CPU.
dùng253751

2
Là một cuốn sách từ hoặc chữ?
Nick T

Câu trả lời:


27

Như thường lệ với các định nghĩa như vậy, chúng tôi đồng ý trong hầu hết các trường hợp, nhưng không có ranh giới thực sự vững chắc giữa phần sụn và cái gì không. Phần sụn là

  • được lưu trữ vĩnh viễn (ngoại trừ một số người có kiến ​​thức có thể thay đổi nó ...)
  • không có ý định thay đổi (ngoại trừ ...)
  • hoạt động trên bộ xử lý mà không cần sự trợ giúp của phần mềm khác (ngoại trừ ... bạn có nhận được không?)

Đối với dữ liệu được thông dịch bởi trình thông dịch (phần sụn): điều này không thường được thực hiện trong cài đặt chuyên nghiệp, vì nó làm cho sản phẩm đắt hơn: cần nhiều bộ nhớ hơn, sức mạnh CPU, v.v. để đạt được mục tiêu cuối cùng. Nó được tuy nhiên đôi khi được sử dụng trong bối cảnh người nuôi cá, thường với một thông dịch cơ bản trong flash, và một (tokenized) cơ bản ứng dụng được lưu trữ trong eeprom (hoặc trong Flash quá). Kiểm tra ví dụ PICAXE và các tem cơ bản khác nhau.

IMO trong cài đặt như vậy cả trình thông dịch cơ bản và ứng dụng Cơ bản nên được gọi là phần sụn.


Một cách sử dụng thú vị của trình thông dịch phần sụn phiên dịch mã được lưu trữ (IMO cũng nên được coi là phần sụn) là khởi động XBOX 360. Cuộc nói chuyện tuyệt vời này mô tả nó trong một số chi tiết.


Dưới đây MSalters tự hỏi liệu dữ liệu cấu hình / mã dữ liệu nên được coi là phần sụn.

Trong các khía cạnh quan trọng nhất (đó là thông tin có thể thay đổi muộn trong quá trình sản xuất, nhưng nó không có ý định thay đổi theo ý muốn của người dùng cuối) Các bit FPGA hoạt động như phần sụn. Điều đó đặt ra câu hỏi liệu nó có phải phần sụn theo bất kỳ định nghĩa nào không. Điểm quan trọng là nó có thể (và nên) được viết, xử lý và quản lý như phần sụn. (Nếu nó đi và quẫy như một con vịt, nó có phải là một con vịt không?)

Đừng bận tâm với các định nghĩa khi chúng không hữu ích. Là firmware vi mã? Đại diện có vấn đề? Liệu bối cảnh có quan trọng? Các bit ROM cho phần sụn IWM?


Nhận xét của Vaxquis đối với câu hỏi của OP đã thôi thúc tôi đọc bài viết wiki mà anh ấy liên kết đến. IMO định nghĩa của phần sụn được cung cấp ở đó (bộ nhớ và mã chương trình liên tục và dữ liệu được lưu trữ trong đó) thật rắc rối. IMO các bản đồ được lưu trữ trong hệ thống định vị ô tô là dữ liệu, không phải phần sụn, bất kể chúng được lưu trữ như thế nào (theo wiki chúng phải là phần sụn). Và các ứng dụng trong điện thoại iPhone hoặc Android của bạn là các ứng dụng, không phải phần sụn (theo wiki chúng cũng phải là phần sụn).


Bây giờ tôi đang tự hỏi liệu một chương trình FPGA có được tính là phần sụn không. Theo trực giác, có, nhưng nó không hoạt động trên một bộ xử lý. Tuy nhiên, đây là trường hợp cổ điển của các bit nằm giữa mã và dữ liệu.
MSalters

Máy tính TI 99/4 (1979) bao gồm một trình thông dịch trong ROM cho một ngôn ngữ gọi là GPL và một trình thông dịch BASIC được viết bằng GPL. Một tính năng thiết yếu của GPL là nó có thể chạy mã được lưu trữ trong các chip GROM (được thiết kế để truy cập tuần tự chủ yếu và có thể được làm nhỏ hơn và rẻ hơn so với ROM truy cập ngẫu nhiên) để TI 99/4 có thể được xem như một khối -Máy tính cá nhân có thiết kế tương tự như tem BASIC.
supercat

14

Phần sụn là mã chương trình được lưu trữ trong bộ nhớ không bay hơi, chẳng hạn như bộ nhớ flash. Thuật ngữ này thường được sử dụng nhất trong kết nối với các hệ thống nhúng. Nó có thể nằm trên cùng một con chip với bộ xử lý hoặc trên một thiết bị riêng biệt.


Cảm ơn @Leon Heller (+1) - có tên cho ví dụ thứ 2 ở trên không, trong đó một cái về cơ bản là "nhấp nháy" dữ liệu vào một nhị phân cố định trên chip? Hay điều này thường không được thực hành? Cảm ơn một lần nữa!
HeineyBehinds

Đó chỉ là dữ liệu. Nó có thể được lưu trữ trong bộ nhớ dễ bay hơi hoặc không bay hơi.
Leon Heller

Thuật ngữ tôi sẽ sử dụng cho số 2 của bạn sẽ là "bảng tra cứu". Một ví dụ tôi có thể nghĩ đến sẽ là các giá trị hàm sin được sử dụng cho bộ tạo dao động điều khiển số.
kjgregory

1
@KGregory Nó có thể là một bảng tra cứu, nó có thể là một chương trình diễn giải, nó có thể là dữ liệu hình ảnh ...
glglgl

@glglgl đồng ý. Tôi có thể lập luận rằng những thứ đó có thể được coi là hình thức tra cứu, nhưng tôi nghĩ chúng ta đang ở bên cạnh quan điểm bây giờ.
kjgregory

9

Tôi nghĩ cả hai tùy chọn đều đúng, chỉ cần nhìn vào bộ vi xử lý ở các mức độ trừu tượng khác nhau. Những gì bạn đang đề cập đến như là nhị phân bất biến của bạn sẽ là phần cứng, nó khá hạn chế trong những gì nó có thể làm. Lấy địa chỉ lệnh 0x0000, hướng dẫn giải mã, tìm nạp địa chỉ / thanh ghi được cung cấp, thực thi, bộ đếm lệnh tăng. Đó là đường ống vi xử lý và bạn không thể thay đổi nó. Bạn kiểm soát những gì vi điều khiển làm bằng cách lưu trữ các hướng dẫn trong bộ nhớ, sau đó được đọc tuần tự. Về cơ bản, vâng, phần sụn chỉ là dữ liệu đầu vào cho một chương trình bất biến, ở mức độ trừu tượng thấp. Tuy nhiên, thông thường, dễ hình dung phần sụn là một chương trình đặc biệt điều khiển bộ vi xử lý bởi vì về mặt khái niệm thì nó dễ hơn.


Yêu câu trả lời này, +1, được thực hiện tốt để nhấn mạnh dữ liệu và mã là điều tương tự cuối cùng.
Vality

Chúng giống nhau cho kiến ​​trúc Von Neumann, ít nhất. Khi bạn đã có xe buýt riêng, bạn có thể bắt đầu tranh luận rằng chúng là những thứ khác nhau, mặc dù cuối cùng tất cả chỉ là bit.
Jason_L_Bens

8

Nó thực sự là cả hai.

Một ví dụ về phần sụn là BIOS PC, một phần của BIOS có thể thực thi được nhưng các phần khác của BIOS thực sự là dữ liệu, cụ thể là trong các bảng để hiển thị để liệt kê các chức năng khác nhau của ROM BIOS, bất kể loại công nghệ nào được dựa trên trên. Thông thường, dữ liệu được lưu trữ trong một trong hai bộ nhớ flash, pin hoặc tụ điện được hỗ trợ bởi RAM SRAM hoặc công nghệ chip bộ nhớ tương thích khác.

Phần sụn, là một thuật ngữ chung được sử dụng cho bộ nhớ không thay đổi / không bay hơi, nó ở đó và có thể truy cập theo chu kỳ năng lượng miễn là không có lỗi điện nào trong mạch hoặc trong trường hợp chu trình lập trình bị kẹt, đối với EEPROM hoặc Flash ROM.

Firmware theo định nghĩa, là mức truy cập thấp nhất, khởi tạo, kiểm tra phần cứng bạn đã cài đặt trong hệ thống hoặc các thành phần nhúng và đưa ra các thói quen cấp thấp (đôi khi được gọi là các lệnh gọi hàm BIOS) mà hệ điều hành của bạn cần có thể sử dụng các thành phần trong hệ thống của bạn. Vào thời xưa, BIOS hoặc Hệ thống đầu ra đầu vào cơ bản cũng bao gồm một ngôn ngữ lập trình có tên là "BASIC", chẳng hạn như Commodore 64 và các máy tính cá nhân khác của thập niên 1970, tất nhiên có những máy tính cũ hơn được tích hợp BASIC để sử dụng bởi các nhà khoa học máy tính chuyên nghiệp là tốt. Nếu bạn từng nghe về ROM ký tự hoặc ký hiệu là một dạng dữ liệu thuần túy cho ROM điều hành hoặc chương trình để đưa hệ thống đến ROM ký tự đó và tìm kiếm các ký tự theo trình tự hoặc đổ toàn bộ chip vào RAM để làm việc với nó ở đó

Các lập trình viên Prom, EPROM, EEPROM, Flash mặc định ghi chương trình cơ sở trên chip như với hậu tố .hex hoặc .bin, có định dạng tương tự, tùy thuộc vào ứng dụng của bạn mà bạn đang sử dụng để gửi tới chip, chương trình cơ sở.

Ngoài ra, có các tệp blob phần sụn, đây là các tệp thực thi dưới dạng thư viện và thói quen được tải vào thời gian chạy, một ví dụ điển hình là trình điều khiển phần cứng không dây, chúng chứa đủ mã để chạy tất cả phần cứng trong các thẻ đó thông qua hệ thống máy tính. Sự khác biệt duy nhất là thẻ và phần sụn dựa trên USB không thực sự lưu trữ trên chúng mà trên đĩa cứng của bạn và được nạp vào bộ nhớ. Nó hoạt động như một lớp dịch vụ và bộ lọc, về cơ bản. Nó là cả dữ liệu và mã.

Cơ sở của tôi là tôi thực sự viết BIOS cho các máy tính và hệ thống nhúng khác (ví dụ: phần sụn không dây, được tải thực sự khi hệ điều hành của bạn khởi động, sau đó bắt đầu tải trình điều khiển phần cứng cấp thấp, cũng bao gồm phần sụn thời gian chạy ). Nó được gọi là phần sụn bởi vì nó không bao giờ thay đổi thói quen của nó trừ khi bạn nhận được bản cập nhật từ nhà sản xuất và sau đó bản cập nhật sẽ ghi đè lên bản cũ. Hoạt động như phần sụn mới trong trường hợp này cho đến khi tìm thấy nội dung mới được cập nhật, nếu không, thì đó là phần sụn bạn sử dụng khi hệ điều hành của bạn tải.

Tôi đồng ý, nó không nên được gọi là phần sụn vì về mặt kỹ thuật, nó không phải là một giải pháp lâu dài và cần một công cụ và ứng dụng đặc biệt để nâng cấp phần sụn (trong trường hợp BIOS cũ so với bộ nhớ flash).

Có thêm câu hỏi nào, tôi rất vui lòng trả lời chúng cho bạn.


6

Phần sụn là mã đã được tạo trong một số loại môi trường phát triển, giống như mã phần mềm, nhưng sau đó nó được đun sôi thành mã máy để cpu có thể hiểu được. Nếu bạn bỏ bộ nhớ của vi điều khiển hoặc một số chip khác, bạn sẽ nhận thấy rằng nó trông không giống mã C hoặc những gì chúng tôi lập trình nó.

Vì vậy, bạn không lập trình .EXE cho nó, vì đó là chương trình được biên dịch để chạy trong môi trường hệ điều hành nào đó. Bạn sẽ lập trình thường là .hex hoặc có thể là .elf, nó thực sự phụ thuộc vào thiết bị bạn đang lập trình, nhưng điều đó không quan trọng vì bạn không quan tâm đến các loại tệp vì trình biên dịch của bạn sẽ biên dịch mã xuống mã máy và đặt nó vào chip flash trên chip hoặc vào bất kỳ sơ đồ lưu trữ nào mà nó có.

Phần sụn nói chung không thay đổi trong điều kiện môi trường phải được lập trình. Bạn không thể thay đổi mã chương trình cơ sở và để nguyên, bạn phải thực hiện thay đổi, biên dịch và flash lại thiết bị.

  • Nói chung mã phần mềm là mã được chạy trên hệ điều hành.
  • Mã phần sụn là thông tin được chạy trên kim loại trần của chip. Phần sụn có thể là chương trình ứng dụng thực tế hoặc nó có thể là một hệ điều hành đơn giản, sau đó bạn có thể tải phần mềm thông qua các phương tiện lưu trữ di động hoặc RAM flash trong thế giới nhúng. Cấp độ này có thể đi xuống tất cả các mã nhị phân, bởi vì đó vẫn là mã.
  • Khi bạn bắt đầu làm việc trực tiếp với điện áp, bạn đã đạt đến mức phần cứng.

2
"nhưng sau đó nó được đun sôi thành mã máy để cpu có thể hiểu được." Cũng giống như mã phần mềm, miễn là nó được viết bằng C hoặc một cái gì đó tương tự.
glglgl

1
Những gì các bộ xử lý hiểu là, vâng, nhị phân nhưng họ có một thứ gọi là mã hoạt động mnemomic (mã op, như đã thấy trong ngành) đối với những người trong chúng ta vẫn lập trình bằng Ngôn ngữ hội, một bước so với Ngôn ngữ máy [Nhị phân ]).

0

Phần sụn là một thuật ngữ chung thường được sử dụng để chỉ định một cái gì đó sống giữa thế giới phần mềm và thế giới phần cứng.

Phần cứng rất khó thay đổi. Phần mềm rất dễ thay đổi. Phần sụn không khó thay đổi như phần cứng, nhưng khó thay đổi hơn phần mềm.

Nó có thể được sử dụng để thảo luận về mã thực thi, dữ liệu hoặc thông tin cấu hình (như trong FPGA / PLD / etc) có thể được thay đổi.


Theo nghĩa rộng của từ và định nghĩa đó là sự thật. Mặc dù, những con chip đó không thực sự mã hay dữ liệu. Trình biên dịch khi hoàn thành sẽ tạo ra các thiết kế logic, như là các giải pháp hoàn chỉnh hoặc logic logic để ghép các phần khác nhau của một hệ thống lại với nhau. Thay vì sử dụng các cổng logic và thanh ghi sê-ri 74 và 54 để tạo ra giải pháp. Tôi thực sự vui mừng bạn đã đưa điều này lên, Adam.

0

Để giải thích thêm về phần sụn là gì từ ý nghĩa bên trong.

Phần sụn, là mã thực thi trên phần cứng rất cụ thể, có nghĩa là mã op dành riêng cho phần cứng được viết, nó có thể là một nhóm chip hoặc giao diện hoặc chỉ dành cho một mục.

Về cơ bản những gì firmware làm điều này là;

  1. Có các hướng dẫn cứng để một bộ xử lý nhất định thực hiện và thực thi, đây được gọi là "bootstrap". Những máy tính có khả năng khởi động cao nhất có cái này trong BIOS của họ.

  2. Khởi tạo phần cứng cho biết thông qua hướng dẫn trong phần sụn.

  3. Tải vào / lên bảng nhảy.

  4. Làm cho quyền truy cập vào các thanh ghi trên một thiết bị nhất định có thể truy cập được.

  5. Tắt điều khiển cho thói quen thoát khi BIOS đã được sử dụng sau khi lạnh (trạng thái tắt nguồn) hoặc khởi động ấm (pin khởi động lại hoặc đặt lại bình thường đã được sử dụng).

  6. Hầu hết các BIOS (phần sụn) được thiết kế cho một chipset cụ thể và tìm hiểu tất cả các chức năng của chúng và xác định bất kỳ dữ liệu nào có thể được gắn vào một đường dây cụ thể trong máy tính hoặc thiết bị nhúng.

  7. Đĩa cứng là một ví dụ điển hình về giải pháp lưu trữ mà bản thân nó là một thiết bị nhúng, cũng có BIOS trên đó và có một dạng phần sụn trên chip.

Về cơ bản, tất cả các phần sụn là, là một loạt các hướng dẫn mà bộ xử lý khác thực hiện để có được chức năng từ một thiết bị đã nói. Đó là phần mềm được tải vào thiết bị vật lý, khi mất điện, nó sẽ ở đó khi thiết bị lấy lại năng lượng.

Về mặt kỹ thuật, bạn có thể sử dụng bất kỳ ngôn ngữ lập trình hoặc tập lệnh nào để tạo tệp nhị phân. Bạn chỉ cần biết bộ xử lý mà bạn sẽ nhắm mục tiêu hoạt động như thế nào, mã op thực tế, thanh ghi nội bộ (huống chi là chúng dùng để làm gì), để tìm hiểu hệ thống số nhị phân và thập lục phân và cách tạo trình biên dịch có thể lưu mã của bạn trong ngôn ngữ lắp ráp. Sau khi hoàn thành, bạn có thể tác vụ một chương trình khác để chuyển đổi nó thành nhị phân, sau đó lưu nó dưới dạng tệp .bin hoặc .hex.

Nếu bạn muốn biết làm thế nào Ada, C, C ++, D và các ngôn ngữ lập trình khác chuyển đổi "mã thông báo" của họ, mã gốc của họ được cắt thành mã giả thành ngôn ngữ máy. Có một số cuốn sách mà tôi khuyên bạn nên đọc, một số cuốn khá sơ cấp và tập trung vào các bộ xử lý rất cụ thể nhưng thật tốt để học. Tôi sẽ đưa cho bạn một cuốn sách trong thời gian này, vì tôi không muốn nhấn chìm bạn hoặc bất kỳ ai khác đọc thông tin này.

  1. Chế tạo một trình biên dịch với 'C' của Charles N. Fischer & Richard J. LeBlanc, Jr.
  2. Hãy truy cập trang web này, nó dựa trên chipset x86 được tìm thấy trong PC của IBM; http://www.laynetworks.com/assinstall%20tutorials.htmlm

Đó là sự giới thiệu về lập trình ngôn ngữ lắp ráp trên PC ngay từ đầu. Nó nói về việc xử lý các ngắt (ngắt phần cứng và phần mềm) và nhiều chủ đề khác, nó giải thích sâu hơn về những gì BIOS thực sự làm và cách làm việc với nó.

Không giống như ngôn ngữ lắp ráp và ngôn ngữ máy, bạn có thể sử dụng nhiều hơn trong Ada, C, C ++, D, nếu bạn không biết chi tiết cụ thể về phần cứng của mình. Trong ngôn ngữ lắp ráp và ngôn ngữ máy, nếu bạn không biết bạn đang làm gì, một cái gì đó xấu sẽ xảy ra hoặc mã sẽ không hoạt động. Tôi thích trường hợp sau, không làm việc so với một cái gì đó xấu.

Lưu ý: Về câu trả lời ở trên, về flash RAM, không có điều đó, có ROM flash nhưng không có RAM flash. Flash ROM có phần sụn trong đó, RAM được hỗ trợ bằng pin hoặc tụ điện hoặc có ROM flash khác chứa tham số cho các tùy chọn của BIOS mà bạn đã đặt.

Có mã trong phần sụn về cách lưu trữ hoặc xóa bộ nhớ dữ liệu (so với chính bộ nhớ chương trình / phần sụn), nếu đó là flash ROM hoặc chip RAM. Trên PC nếu mật khẩu BIOS của bạn bị cắt xén hoặc bạn không nhớ nó (hoặc ai đó đang nhắn tin cho bạn), bạn có thể mở vỏ máy và tìm hai chân được gọi là "CMOS CLR / CMOS CLEAR / BIOS RESET / BIOS RST", rút ngắn hai chân đó lại với nhau cũng xóa bộ nhớ, tất cả những gì bạn cần làm sau đó là nhấn nút đặt lại, khi hai chân vẫn bị chập. Điều đó sẽ xóa mật khẩu và cho phép bạn truy cập đầy đủ vào BIOS PC của bạn (giả sử bạn có một máy tính mới hơn từ những năm 1990 trở đi).

Trên các PC mới, bạn có bộ nhớ flash cho phần sụn và bạn có SRAM được hỗ trợ bằng pin (không cần phải làm mới liên tục như chip DRAM, dựa trên công nghệ cũ hơn).


0

In terms of Embedded Systems, Flashing Firmware means you have erased the ROM of a Micro-controller using a flashing device and re-written it with new code. This Firmware to be flashed is in HEX Form.

In terms of OS related Terminology, it is also flashed in the ROM but this time it is the responsibility of an OS to flash it when an update comes.


0

Tôi tin rằng việc sử dụng viễn cảnh "lịch sử" , có thể mang đến sự hiểu biết cơ bản hơn về phần sụn là gì .
Đầu tiên, nó bắt đầu với "phần cứng." Để cung cấp / tạo một chức năng nhất định, người ta có thể sử dụng ống, rơle, bóng bán dẫn và IC. Bạn sẽ sử dụng một số các thành phần này và bạn sẽ tạo ra một thiết bị thực hiện chức năng cần thiết. Điều này được coi là "phần cứng" bởi vì nếu bạn muốn (hoặc cần) thay đổi chức năng, bạn sẽ cần phải hàn dây, ổ cắm, v.v. và điều này là "khó" để làm. Do đó, phương pháp thực hiện một chức năng này được biết đến như là sử dụng phần cứng. Sử dụng CPU, RAM và mã, trở thành một phương pháp khác để tạo chức năng và được gọi là "phần mềm" to make design changes." However, there was also a need (mostly from manufacturers), to complete as much of a design as early as possible, but be capable of making "last minute" design changes as easy and cost-effective as possible. The use of ROMs allowed this flexibility up to the point of "first ship." EEPROMS allow changes even after "first ship" (in the field). The code needed/used for the ROMs and PROMs was give the name of "firmware."

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.