**Firmware** (toisinaan **laiteohjelmisto**) on tietoteknisen laitteen toimintaa ohjaava ohjelmisto tai sen osa, joka huolehtii laitteen perustoiminnoista. Firmware on joukko käskyjä laitteen omalla käskykannalla ja kertoo miten laite kommunikoi muiden komponenttien kanssa. Firmware voi olla ROM-muistissa tai päivitettävässä flash-muistissa. Firmware ei ole sama kuin käyttöjärjestelmän laiteajuri.

Kyseessä on siis tavallaan laitteiston ja ohjelmiston yhdistelmä. Suomenkieliseksi termiksi on ehdotettu myös *laitelmistoa*, mutta se ei ole vakiintunut käyttöön. Sen sijaan joskus käytetään epätäsmällistä suomennosta *varusohjelma*, jonka alakäsitteistöön kuuluvat sekä alkulatausohjelma (esimerkiksi BIOS) että käyttöjärjestelmä (tietokoneen käyttöjärjestelmä ei ole firmwarea, sillä se on suhteellisen helposti päivitettävissä ja vaihdettavissa toisin kuin sulautetun järjestelmän).

Alun perin *firmware* tarkoitti lähinnä suorittimen mikro-ohjelmaa. Tällainen ohjelma ei ollut muutettavissa ainakaan tavanomaisin keinoin, mistä johtuu sanan alkuosa *firm* ’kiinteä’. Vähitellen *firmware* on alkanut tarkoittaa ohjelmistoa, joka on asennettu pysyvästi laitteen omaan muistiin erotukseksi kiintolevyyn tai muuhun massamuistiin tallennetuista ohjelmista. Periaatteessa kyse on sellaisesta ohjelmasta, joka toimii laitteiston (*hardware*) ja ohjelmiston (*software*) välissä.

Toiminta
--------

Firmware voi olla valmiiksi suoritettavissa ROM-muistissa ja laite voi suorittaa sitä suoraan. Tämä eroaa massamuistiin tallennetusta ohjelmasta, joka pitää ennen suorittamista siirtää keskusmuistiin ja jolle on varattava ja alustettava muistitila. Käytännössä jokaisessa tietokoneessa on ainakin jonkin verran firmwarea, joka alustaa laitteiston siten, että käynnistyslataaja voi aloittaa käyttöjärjestelmän lataamiseen.
Firmware voi huolehtia myös laitteiston testauksesta ja tarjota palveluja sovellusohjelmille. Firmware huolehtii esimerkiksi digisovittimen tai matkapuhelimen perustoiminnoista.

Eräissä tietokoneiden oheislaitteissa (kuten näytönohjaimissa) voi olla myös niiden omaa firmwarea. Myös tietokoneen muu laitteisto voi tarvita erillistä firmwarea eikä käyttöjärjestelmän laiteajuri yksistään ole riittävä.

Sulautetussa järjestelmässä laitteen koko ohjelmisto voidaan luokitella firmwareksi mukaan lukien sen käyttöjärjestelmä. Joissakin kevyissä sulautetuissa järjestelmissä ei ole käyttöjärjestelmää, vaan laite suorittaa firmwarea suoraan. Perinteisesti firmware on kehitetty vain tiettyä tarkoitusta varten, jolloin uudelleenkäyttäminen tai siirtäminen on vaikeaa tai mahdotonta. Syynä tähän ovat olleet rajoitukset käytettävissä oleville resursseille, mutta moderneissa mikrokontrollereissa on enemmän muistia ja hinta on edullisempi.

Firmwaren ja sulautettujen järjestelmien ohjelmointiin käytetään yleisesti C-kieltä, joka lähellä laitteistoa, mutta ei ole niin laitekohtaista kuin assembly.

Päivitys
--------

Ohjelmistopäivityksillä korjataan toiminnoissa ilmenneitä virheitä, mutta päivitys voi myös lisätä uusia ominaisuuksia. Joidenkin laitteiden, kuten autojen ajotietokoneiden, firmware voidaan päivittää vain erikoishuollossa.

Alun perin firmware ei ollut ohjelmallisesti muutettavissa, aina ei edes laitteistotasolla muuten kuin vaihtamalla koko laitteisto toiseksi. Tyypillisesti päivitys tehtiin siten, että ohjelman sisältävät haihtumattomat muistipiirit (PROM tai EPROM) vaihdettiin toisiin. Tämä edellytti laitteen avaamista ja pahimmillaan vanhan piirin juotoksien avaamista ja uuden juottamista sen tilalle. Yleensä tällaiset muistit tosin varustettiin sellaisella kannalla, että vaihtaminen onnistui ruuvitaltalla, mutta joka tapauksessa vaihtaminen oli kallista, joten muutoksia tehtiin vain hyvin painavista syistä.

Kun sähköisesti uudelleenohjelmoitavat haihtumattomat muistit tulivat sekä teknisesti että taloudellisesti kilpailukykyisiksi, niitä alettiin käyttää firmwaren tallentamiseen. Tämä mahdollisti firmwaren muuttamisen jälkeenpäin ohjelmallisesti. Päivitettävä firmware kuuluu useimmiten johonkin sulautettuun järjestelmään, mutta päivitystarve voi koskea myös tietokoneita, joiden käynnistyksestä ja perustoiminnoista vastaava bios tai oheislaitteiden firmware voidaan joskus joutua päivittämään. Parhaassa tapauksessa laite voi huolehtia päivityksestä täysin omatoimisesti, kuten osa digisovittimista tekee, jos päivitystiedot välittyvät televisiosignaalin mukana. Yleensä päivittäminen vaatii kuitenkin käyttäjältä toimenpiteitä ja perehtymistä.

Firmwaren päivitys voi olla herkkä sähkökatkoille tai muille häiriöille. Häiriöherkkyys riippuu sekä laitteistosta että päivittävästä ohjelmasta, mutta pahimmillaan laitteen päivitys voi jäädä puolitiehen, niin että vanha ohjelma on poistunut mutta uusi ei ole vielä tallentunut tilalle. Tällöin laitteessa ei ole enää sellaista ohjelmaa, jolla tilanteen voisi korjata. Erikoishuollossa voidaan sekaisin mennyt muisti ohjelmoida ulkoisella laitteella ja näin saada laite vielä toimivaksi.

Katso myös
----------

* UEFI

Lähteet
-------

1. ↑
2. 1 2  Firmware *techterms.com*. Viitattu 27.2.2020. (englanniksi)
3. ↑  Mikä on laiteohjelmisto?  15.5.2013. Apple. Viitattu 22.3.2014.
4. ↑  "Laitelmisto", *ATK-sanakirja*, s. 72. Seitsemäs uusittu painos. Tietotekniikan liitto, 1994. ISBN 951-762-214-7.
5. ↑  "Varusohjelma", "varusohjelmisto", MOT: *Tietotekniikan liiton ATK-sanakirja*. (Viitattu 21.3.2014.)
6. ↑  Michael Larabel: NVIDIA Publishes Signed Ampere Firmware To Finally Allow Accelerated Open-Source Support *phoronix.com*.  11.4.2022. Viitattu 12.12.2022. (englanniksi)
7. ↑  6.4. Loading Missing Firmware *debian.org*. Viitattu 7.6.2023. (englanniksi)
8. ↑  Chris Hoffman: How Intel and PC makers prevent you from modifying your laptop’s firmware *pcworld.com*.  13.2.2015. Viitattu 7.6.2023. (englanniksi)
9. ↑  Michael Larabel: Raspberry Pi GPU Driver Turns Out To Be Crap *phoronix.com*.  24.10.2012. Viitattu 7.6.2023. (englanniksi)
10. ↑  Ian Evenden: Debian Votes To Add Non-Free Firmware to Official Install Media *tomshardware.com*.  6.10.2022. Viitattu 7.6.2023. (englanniksi)
11. 1 2  Stringham, Gary: *Hardware/Firmware Interface Design*, s. 6. Newnes, 2010. ISBN 978-1-85617-605-7. (englanniksi)
12. 1 2  Beningo, Jacob: *Reusable Firmware Development: A Practical Approach to APIs, HALs and Drivers*, s. 2. Apress, 2017. ISBN 978-1-4842-3297-2. (englanniksi)
13. ↑  Introduction to Embedded Firmware Development *predictabledesigns.com*.  22.12.2021. Viitattu 12.12.2022. (englanniksi)

Aiheesta muualla
----------------

CommonsCommons
Wikimedia Commonsissa on kuvia tai muita tiedostoja aiheesta **Firmware**.
* Topfield TF5X00 -digisovittimen käyttöohje Wikikirjastossa