Apakah kode atau data firmware?

29

Ketika seseorang mengatakan mereka "mem-flash" firmware ke suatu perangkat, saya ingin tahu apa arti sebenarnya ini.

  1. Apakah firmware hanya biner asli yang disimpan dalam memori dan dapat ditafsirkan oleh CPU perangkat (seperti EXE lainnya di komputer)? Atau apakah firmware hanya data yang bertindak sebagai input ke program yang tidak dapat diubah yang sudah di-hardcode / kabel ke perangkat?
  2. Jika contoh terakhir bukan firmware, Anda menyebutnya apa? Misalnya, sebuah perangkat memiliki beberapa biner ( someapp.exe), dan Anda tidak dapat menghapus atau memodifikasi biner ini. Biner, ketika dijalankan, mengambil input dari chip memori. Anda dapat "mem-flash" data ke chip ini, dan dengan demikian memengaruhi input / konfigurasi someapp.exeyang akan memengaruhi waktu berikutnya dijalankan. Jika bukan firmware, apakah ini namanya?
HeineyBehinds
sumber
12
Ini pertanyaan yang sangat bagus. Istirahat yang menyenangkan dari bungkusan "Pemanggang roti saya tidak bersulang. Bisakah saya memasukkan arduino ke dalamnya?" pertanyaan.
Jason_L_Bens
17
Nah, pertanyaan ini akan bagus, jika bukan cacat utama di dalamnya: kode adalah data, dan data dapat berupa kode - sejauh menyangkut arsitektur / model Von Neumann. Dengan demikian, seluruh pertanyaan adalah sia-sia - karena kode bisa (dan, biasanya adalah ) diperlakukan sebagai data dan sebaliknya; juga, untuk OP: mengapa tidak memeriksa en.wikipedia.org/wiki/Firmware ? ia memiliki jawaban untuk pertanyaan ini, dan untuk banyak hal lain mengenai firmware - dengan demikian, walaupun ini merupakan terobosan yang bagus dari pertanyaan "Dapatkah saya mencolokkan bola lampu 12V ke soket 230V", masih dalam sub-par dalam buku saya .. .
vaxquis
2
Saya cukup yakin jawabannya di sini adalah "ya".
Connor Wolf
7
Kode mesin hanyalah input data ke kabel CPU yang tidak dapat diubah.
user253751
2
Apakah buku kata atau huruf?
Nick T

Jawaban:

27

Seperti sering dengan definisi seperti itu, kami setuju dalam banyak kasus, tetapi tidak ada batas yang tegas antara apa yang firmware dan yang tidak. Firmware adalah

  • disimpan secara permanen (kecuali untuk beberapa orang yang berpengetahuan luas yang dapat mengubahnya ...)
  • tidak dimaksudkan untuk diubah (kecuali ...)
  • beroperasi pada prosesor tanpa bantuan perangkat lunak lain (kecuali ... Anda mengerti?)

Mengenai data yang ditafsirkan oleh juru bahasa (firmware): ini tidak sering dilakukan dalam pengaturan profesional, karena itu membuat produk lebih mahal: lebih banyak memori, daya CPU, dll. Diperlukan untuk mencapai tujuan akhir yang sama. Hal ini namun kadang-kadang digunakan dalam pengaturan hobi, sering dengan juru Dasar di flash, dan (tokenized) Dasar aplikasi disimpan dalam EEPROM (atau di Flash juga). Periksa misalnya PICAXE dan berbagai prangko Dasar.

IMO dalam pengaturan seperti itu, baik juru bahasa dasar dan aplikasi dasar harus disebut firmware.


Penggunaan yang menarik dari juru bahasa firmware yang menginterpretasikan kode yang disimpan (yang seharusnya IMO dianggap sebagai firmware juga) adalah startup XBOX 360. Pembicaraan yang luar biasa ini menggambarkannya secara rinci.


Di bawah ini, MSalters bertanya-tanya apakah kode FPGA / data konfigurasi harus dianggap sebagai firmware.

Dalam aspek yang paling penting (ini adalah informasi yang dapat diubah di akhir proses produksi, tetapi tidak dimaksudkan untuk diubah sesuka pengguna) bit-bit FPGA berperilaku seperti firmware. Yang membuat pertanyaan apakah itu adalah firmware menurut salah diperdebatkan definisi. Poin penting adalah bahwa hal itu dapat (dan harus) ditulis, ditangani dan dikelola seperti firmware. (Jika ia berjalan dan berdetak seperti bebek, apakah itu bebek?)

Jangan repot-repot dengan definisi ketika mereka tidak berguna. Apakah firmware mikrokode? Apakah representasi itu penting? Apakah konteks itu penting? Apakah bit ROM untuk firmware IWM?


Komentar Vaxquis untuk pertanyaan OP mendorong saya untuk membaca artikel wiki yang dia tautkan. IMO definisi firmware yang diberikan di sana (memori dan kode program dan data yang tersimpan di dalamnya) merepotkan. IMO peta yang disimpan dalam sistem navigasi mobil adalah data, bukan firmware, tidak peduli bagaimana mereka disimpan (menurut wiki mereka harus firmware). Dan aplikasi di iPhone atau ponsel Android Anda adalah aplikasi, bukan firmware (menurut wiki mereka juga harus firmware).

Wouter van Ooijen
sumber
Saya sekarang bertanya-tanya apakah program FPGA dianggap sebagai firmware. Secara intuitif, ya, tetapi tidak beroperasi pada prosesor. Namun itu adalah kasus klasik bit yang berada di antara kode dan data.
MSalters
Komputer TI 99/4 (1979) termasuk juru bahasa dalam ROM untuk bahasa yang disebut GPL, dan juru bahasa BASIC yang ditulis dalam bahasa GPL. Fitur penting dari GPL adalah bahwa ia dapat menjalankan kode yang disimpan dalam chip GROM (yang dirancang untuk akses sekuensial dan dapat dibuat secara fisik lebih kecil dan lebih murah daripada ROM akses-acak) sehingga TI 99/4 dapat dipandang sebagai massa - komputer pribadi pasar yang desainnya analog dengan stempel BASIC.
supercat
14

Firmware adalah kode program yang disimpan dalam memori yang tidak mudah menguap, seperti memori flash. Istilah ini paling sering digunakan sehubungan dengan sistem embedded. Itu bisa pada chip yang sama seperti prosesor, atau pada perangkat terpisah.

Leon Heller
sumber
Terima kasih @Leon Heller (+1) - apakah ada nama untuk contoh ke-2 di atas, di mana seseorang pada dasarnya "mem-flash" input data ke biner tetap pada sebuah chip? Atau apakah ini umumnya tidak dilakukan? Terima kasih lagi!
HeineyBehinds
Itu hanya data. Itu dapat disimpan dalam memori volatile atau no-volatile.
Leon Heller
Istilah yang akan saya gunakan untuk # 2 Anda akan menjadi "tabel pencarian". Contoh yang dapat saya pikirkan adalah nilai fungsi sinus yang digunakan untuk osilator yang dikontrol secara numerik.
kjgregory
1
@ KGregory Ini bisa berupa tabel pencarian, bisa berupa program yang ditafsirkan, bisa berupa data gambar ...
glglgl
@glglgl setuju. Saya mungkin berpendapat bahwa itu bisa dianggap sebagai bentuk pencarian, tapi saya pikir kita tidak penting sekarang.
kjgregory
9

Saya pikir kedua opsi agak benar, hanya melihat mikroprosesor pada berbagai tingkat abstraksi. Apa yang Anda sebut sebagai biner abadi Anda akan menjadi perangkat keras itu sendiri, yang cukup terbatas dalam apa yang dapat dilakukannya. Ambil alamat instruksi 0x0000, dekode instruksi, ambil alamat / register yang disediakan, jalankan, penghitung instruksi tambahan. Itu pipa mikroprosesor, dan Anda tidak bisa mengubahnya. Anda mengontrol apa yang dilakukan mikrokontroler dengan menyimpan instruksi dalam memori, yang kemudian dibaca secara berurutan. Jadi pada dasarnya, ya, firmware hanyalah input data untuk program yang tidak dapat diubah, pada tingkat abstraksi yang rendah. Namun, biasanya, lebih mudah membayangkan firmware sebagai program khusus yang mengontrol mikroprosesor karena secara konseptual lebih mudah seperti itu.

Jason_L_Bens
sumber
Suka jawaban ini, +1, dilakukan dengan baik untuk menekankan data dan kode pada akhirnya adalah hal yang sama.
Vality
Mereka sama untuk arsitektur Von Neumann, setidaknya. Setelah Anda memiliki bus yang terpisah, Anda dapat mulai berpendapat bahwa itu adalah hal-hal yang berbeda, meskipun pada akhirnya semuanya hanyalah bit.
Jason_L_Bens
8

Sebenarnya keduanya.

Salah satu contoh firmware adalah PC BIOS, satu bagian dari BIOS dapat dieksekusi tetapi bagian lain dari BIOS itu sendiri sebenarnya adalah data, khususnya dalam tabel-tabel untuk ditampilkan untuk menyebutkan fungsi-fungsi berbeda dari ROM BIOS, terlepas dari jenis teknologinya. di. Sering kali data disimpan dalam memori flash lain, baterai atau RAM yang didukung kapasitor baik CMOS SRAM atau teknologi chip memori lain yang kompatibel.

Firmware, adalah istilah umum yang digunakan untuk memori yang tidak berubah / tidak mudah menguap, ada di sana dan dapat diakses sesuai siklus daya selama tidak ada yang salah secara elektrik dengan rangkaian atau dalam kasus siklus pemrograman yang macet, untuk EEPROMs atau Flash ROM.

Firmware menurut definisi, adalah tingkat akses terendah, yang menginisialisasi, menguji perangkat keras yang telah Anda instal di sistem Anda atau komponen yang disematkan dan memberikan rutinitas tingkat rendah (kadang-kadang dilihat sebagai panggilan fungsi BIOS) yang diperlukan sistem operasi Anda untuk dapat menggunakan komponen di sistem Anda. Di masa lalu, BIOS atau Basic Input Output System juga termasuk bahasa pemrograman yang disebut "BASIC", seperti Commodore 64 dan komputer pribadi lainnya pada tahun 1970-an, tentu saja ada komputer yang lebih tua yang BASIC dibangunkan untuk digunakan. oleh para ilmuwan komputer profesional juga. Jika Anda pernah mendengar ROM karakter atau simbol, itu adalah bentuk data murni untuk ROM eksekutif atau program untuk membuat sistem menuju ke ROM karakter tersebut dan mencari karakter secara berurutan atau membuang seluruh chip ke dalam RAM untuk bekerja dengannya. sana.

PROM, EPROM, EEPROM, pemrogram Flash default membakar firmware pada sebuah chip seperti halnya dengan akhiran .hex atau .bin, yang merupakan format yang serupa, itu tergantung pada aplikasi Anda yang Anda gunakan untuk mengirim ke chip, firmware.

Juga, ada file firmware gumpalan, ini adalah executable dalam bentuk perpustakaan dan rutin yang dimuat pada saat run-time, contoh yang baik dari itu adalah driver perangkat keras nirkabel, mereka berisi kode yang cukup untuk menjalankan semua perangkat keras di kartu-kartu melalui Anda sistem komputer. Satu-satunya perbedaan adalah kartu dan firmware berbasis USB tidak benar-benar menyimpannya tetapi pada hard disk Anda dan dimuat ke dalam memori. Ini berfungsi sebagai lapisan dan filter layanan terjemahan, pada dasarnya. Ini adalah data dan kode juga.

Dasar saya dari ini adalah bahwa saya benar-benar menulis BIOS untuk komputer lain dan sistem tertanam (misalnya, firmware nirkabel, yang sebenarnya dimuat ketika sistem operasi Anda mulai, kemudian mulai memuat driver perangkat keras tingkat rendah, yang juga termasuk firmware run-time) ). Ini disebut firmware karena tidak pernah mengubah rutinitasnya kecuali jika Anda mendapatkan pembaruan dari pabrikan dan kemudian pembaruan menimpa yang lama. Bertindak sebagai firmware baru dalam hal ini sampai barang baru ditemukan diperbarui, jika tidak, maka itulah firmware yang Anda gunakan ketika sistem operasi Anda memuat.

Saya setuju, itu tidak boleh disebut firmware karena tidak secara teknis pada chip sebagai solusi permanen dan membutuhkan alat dan aplikasi khusus untuk meningkatkan firmware (dalam kasus BIOS lama vs. memori flash).

Ada pertanyaan lagi, saya akan dengan senang hati menjawabnya untuk Anda.


sumber
6

Firmware adalah kode yang dibuat dalam semacam lingkungan pengembangan, seperti halnya kode perangkat lunak, tetapi kemudian dirubah menjadi kode mesin sehingga cpu dapat memahaminya. Jika Anda membuang memori mikrokontroler atau chip lain, Anda akan melihat bahwa itu tidak seperti kode C atau apa yang kami programkan.

Jadi Anda tidak memprogram .EXE untuk itu, karena itu adalah program yang dikompilasi untuk dijalankan di semacam lingkungan OS. Anda akan memprogram biasanya .hex, atau mungkin .elf, itu benar-benar tergantung pada perangkat yang Anda pemrograman, tetapi itu tidak masalah karena Anda tidak peduli dengan jenis file karena kompiler Anda malah akan mengkompilasi kode ke dalam kode mesin dan letakkan di chip on-chip flash atau ke skema penyimpanan apa pun yang dimilikinya.

Firmware umumnya tidak dapat diubah karena kondisi lingkungan harus diprogram. Anda tidak dapat mengubah kode firmware dan membiarkannya, Anda harus membuat perubahan, mengkompilasinya, dan mem-flash ulang perangkat.

  • Umumnya kode perangkat lunak adalah kode yang dijalankan di atas sistem operasi.
  • Kode firmware adalah informasi yang dijalankan pada logam telanjang chip. Firmware dapat berupa program aplikasi aktual atau dapat berupa sistem operasi sederhana, yang kemudian dapat Anda muatkan perangkat lunak melalui sarana penyimpanan yang dapat dilepas atau mem-flash RAM di dunia tertanam. Level ini bisa turun ke kode biner, karena itu masih kode.
  • Setelah Anda mulai bekerja secara langsung dengan tegangan, Anda telah mencapai tingkat perangkat keras.
Funkyguy
sumber
2
"Tapi kemudian dirubah ke kode mesin sehingga cpu bisa memahaminya." Sama seperti kode perangkat lunak juga, asalkan ditulis dalam C atau sesuatu yang sama.
glglgl
1
Apa yang dipahami oleh prosesor adalah, biner, tetapi mereka memiliki sesuatu yang disebut kode operasi mnemomik (kode op, seperti yang terlihat di industri) bagi kita yang masih memprogram dalam Bahasa Perakitan, yang kebetulan berada satu langkah di atas Bahasa Mesin [Binary ]).
0

Firmware adalah istilah umum yang umumnya digunakan untuk menentukan sesuatu yang hidup setengah jalan antara dunia perangkat lunak dan dunia perangkat keras.

Perangkat keras sulit diubah. Perangkat lunak mudah diubah. Firmware tidak sesulit untuk diubah daripada perangkat keras, tetapi lebih sulit untuk diubah daripada perangkat lunak.

Ini dapat digunakan untuk membahas kode yang dapat dieksekusi, data, atau informasi konfigurasi (seperti pada FPGA / PLD / dll) yang dapat diubah.

Adam Davis
sumber
Dalam arti luas kata dan definisi itu benar. Meskipun, chip tersebut sebenarnya bukan kode atau data. Compiler ketika selesai membuat desain logis, baik sebagai solusi lengkap atau lem logika untuk menyatukan bagian-bagian berbeda dari suatu sistem. Alih-alih menggunakan fisik dan seri 74 gerbang logika dan register untuk membuat solusi. Saya sebenarnya senang Anda membawa ini, Adam.
0

Untuk menjelaskan lebih lanjut tentang firmware apa dari dalam arti.

Firmware, adalah kode yang dieksekusi pada perangkat keras yang sangat spesifik, artinya kode op khusus untuk perangkat keras yang ditulisnya, dapat berupa kumpulan chip atau antarmuka atau dimaksudkan hanya untuk satu item.

Intinya yang dilakukan firmware adalah ini;

  1. Memiliki instruksi bawaan untuk prosesor tertentu untuk melakukan dan mengeksekusi, ini disebut "bootstrap". Komputer mana yang paling bisa dibooting memiliki ini di BIOS mereka.

  2. Inisialisasi perangkat keras tersebut melalui instruksi dalam firmware.

  3. Muat di / atas tabel lompat.

  4. Jadikan akses ke register pada perangkat tertentu dapat diakses.

  5. Serahkan kontrol ke rutin keluar setelah BIOS digunakan setelah keadaan dingin (dimatikan) atau mulai hangat (reboot normal atau reset pin digunakan).

  6. Sebagian besar BIOS (firmware) dirancang untuk chipset tertentu dalam pikiran dan membasmi semua fungsi-fungsi itu dan menyempurnakan data yang ada sesuatu yang dapat dilampirkan ke busline yang diberikan di komputer atau perangkat yang disematkan.

  7. Hard disk adalah contoh yang baik dari solusi penyimpanan yang dengan sendirinya merupakan perangkat tertanam, yang juga memiliki BIOS di dalamnya dan memiliki bentuk firmware pada sebuah chip.

Pada dasarnya, semua firmware, adalah banyak instruksi yang prosesor lain lakukan untuk mendapatkan fungsionalitas dari perangkat tersebut. Perangkat lunak yang dimuat ke perangkat fisik, setelah kehilangan daya, itu akan ada di sana ketika perangkat mendapatkan kembali kekuasaan.

Secara teknis, Anda dapat menggunakan bahasa pemrograman atau skrip apa pun untuk membuat file biner. Anda hanya perlu tahu bagaimana prosesor yang akan Anda targetkan bekerja, kode op aktual, register internal (apalagi untuk apa), untuk mempelajari sistem angka biner dan heksadesimal dan cara membuat assembler yang dapat menyimpan kode Anda dalam bahasa assembly. Setelah itu selesai maka Anda dapat menugaskan program lain untuk mengubahnya menjadi biner, lalu menyimpannya sebagai file .bin atau .hex.

Jika Anda ingin tahu bagaimana Ada, C, C ++, D dan bahasa pemrograman lain mengubah "token" mereka yang merupakan kode asli mereka yang dicincang menjadi pseudo op-codes ke dalam bahasa mesin. Ada beberapa buku yang saya sarankan Anda baca, ada yang cukup dasar dan berpusat di sekitar prosesor yang sangat spesifik tetapi bagus untuk dipelajari. Saya akan memberi Anda satu buku untuk saat ini, karena saya tidak ingin menenggelamkan Anda atau siapa pun yang membaca informasi ini.

  1. Crafting A Compiler dengan 'C' oleh Charles N. Fischer & Richard J. LeBlanc, Jr.
  2. Kunjungi situs ini, ini didasarkan pada chipset x86 yang ditemukan di PC IBM; http://www.laynetworks.com/assembly%20tutorials.htm

Itu adalah pengantar pemrograman bahasa assembly pada PC di awal. Ini berbicara tentang penanganan interupsi (interupsi hardware dan software) dan banyak topik lainnya, ia menjelaskan lebih mendalam apa yang sebenarnya dilakukan oleh BIOS dan bagaimana cara mengatasinya.

Tidak seperti bahasa assembly dan bahasa mesin, Anda bisa mendapatkan lebih banyak lagi di Ada, C, C ++, D, jika Anda tidak tahu spesifik perangkat keras Anda. Dalam bahasa assembly dan bahasa mesin, jika Anda tidak tahu apa yang Anda lakukan, hal buruk akan terjadi atau kodenya tidak berfungsi. Saya lebih suka kasus terakhir, tidak bekerja vs sesuatu yang buruk.

Catatan: Tentang jawaban di atas, tentang RAM flash, tidak ada hal seperti itu, ada ROM flash tetapi tidak RAM flash. ROM Flash memiliki firmware di dalamnya, RAM yang didukung baterai atau kapasitor, atau ROM flash lain yang berisi parameter untuk opsi BIOS yang telah Anda tetapkan.

Ada kode dalam firmware tentang cara menyimpan atau menghapus memori data (versus memori program / firmware itu sendiri), apakah itu flash ROM atau chip RAM. Pada PC jika kata sandi BIOS Anda rusak atau Anda tidak ingat (atau seseorang mengacaukan Anda), Anda dapat membuka kasing dan menemukan dua pin yang disebut, "CMOS CLR / CMOS CLEAR / BIOS RESET / BIOS RST", korsleting kedua pin bersama-sama juga mengosongkan memori, yang perlu Anda lakukan setelah itu adalah menekan tombol reset, ketika kedua pin masih korsleting. Itu menghapus kata sandi dan memungkinkan Anda akses penuh ke BIOS PC Anda (dengan asumsi Anda memiliki komputer yang lebih baru sejak tahun 1990an).

Pada PC baru, Anda memiliki memori flash untuk firmware dan Anda memiliki SRAM yang didukung baterai (tidak harus selalu disegarkan seperti chip DRAM, ini didasarkan pada teknologi yang lebih lama).


sumber
0

Dalam hal Sistem Tertanam, Flashing Firmware berarti Anda telah menghapus ROM mikro-controller menggunakan perangkat yang berkedip dan menulis ulang dengan kode baru. Firmware yang akan di-flash ini dalam bentuk HEX.

Dalam hal Terminologi terkait OS, ini juga di-flash dalam ROM tetapi kali ini merupakan tanggung jawab OS untuk mem-flash-nya ketika pembaruan datang.

Fahad Naeem
sumber
0

Saya percaya bahwa menggunakan perspektif "historis" , mungkin memberikan pemahaman yang lebih mendasar tentang apa itu firmware .
Pertama-tama dimulai dengan "perangkat keras." Untuk menyediakan / membuat fungsi yang diberikan, seseorang dapat menggunakan tabung, relay, transistor, & IC. Anda akan menggunakan sejumlah komponen ini dan membuat perangkat yang menjalankan fungsi yang diperlukan. Ini dianggap "perangkat keras" karena jika Anda ingin (atau perlu) mengubah fungsi, Anda perlu melepas kabel, soket, dll. Dan ini "sulit" untuk dilakukan. Dengan demikian, metode penerapan fungsi ini dikenal sebagai menggunakan perangkat keras. Menggunakan CPU, RAM, dan kode, menjadi metode lain untuk menciptakan fungsi, dan dikenal sebagai "perangkat lunak"untuk membuat perubahan desain. "Namun, ada juga kebutuhan (kebanyakan dari produsen), untuk menyelesaikan sebanyak mungkin desain sedini mungkin, tetapi mampu membuat perubahan desain" menit terakhir "semudah dan seefektif mungkin biaya Penggunaan ROM memungkinkan fleksibilitas ini sampai pada titik "kapal pertama." EEPROM memungkinkan perubahan bahkan setelah "kapal pertama" (di lapangan). Kode yang diperlukan / digunakan untuk ROM dan PROM diberi nama "firmware" . "

Guill
sumber