Yazılım kodu veya veri mi?


29

Birisi bir cihaza ürün yazılımını "yaktıklarını" söylediğinde, bunun gerçekte ne anlama geldiğini merak ediyorum.

  1. Bellenim, bellekte depolanan ve cihazın CPU'su tarafından yorumlanabilen (bilgisayardaki diğer EXE'ler gibi) yalnızca yerel bir ikili dosya mı? Veya cihaz yazılımı, cihaza zaten kodlanmış / kablolu olan değişmez bir programa girdi olarak işlev gören veriler midir?
  2. İkinci örnek firmware değilse, buna ne denir? Örneğin, bir cihazın üzerinde bir ikili ( someapp.exe) olduğunu varsayalım ve bu ikili dosyayı çıkaramaz veya değiştiremezsiniz. İkili çalıştırıldığında, bir bellek yongasından girdi alır. Verileri bu yongaya "flaş" edebilirsiniz ve böylece bir someapp.exesonraki çalıştırışınızda etkiyi gösterecek girişi / yapılandırmayı etkileyebilirsiniz. Firmware değilse, buna ne denir?

12
Bu gerçekten iyi bir soru. "Tost makinem tost yapmıyor. İçine bir arduino koyabilir miyim?" sorular.
Jason_L_Bens

17
Eh, bu soru olurdu kodu: iyi değilse kimse bu büyük kusuru olan veri ve veri olabilir kodu - kadarıyla Von Neumann mimarisi / model söz konusu olduğunda. Bu nedenle, tüm soru boşunadır - çünkü kod veri olarak kabul edilebilir (ve genellikle de ); ayrıca, OP’ye: neden en.wikipedia.org/wiki/Firmware adresini kontrol etmiyorsunuz ? o ise, böylece - bu çok soruya ve firmware ile ilgili birçok şey yanıtını olan sorulara "Ben 230V priz içine 12V ampul takın Can" güzel bir mola benim kitapta yine par var .. .
vaxquis

2
Buradaki cevabın "evet" olduğundan eminim.
Connor Wolf

7
Makine kodu, sadece CPU'nun değişmeyen kablolarına veri girişidir.
user253751

2
Kitap kelimeler mi, harfler mi?
Nick T,

Yanıtlar:


27

Bu tür tanımlarda sık sık, çoğu durumda aynı fikirdeyiz, ancak neyin firmware ile neyin olmadığı arasında kesin bir sınır yoktur. Firmware

  • kalıcı olarak saklanır (değiştirebilecek bazı bilgili kişiler hariç ...)
  • değiştirilmeleri amaçlanmamıştır (... hariç)
  • diğer yazılımların yardımı olmadan işlemcide çalışır (… anladın mı? hariç)

Bir (ürün yazılımı) yorumlayıcısı tarafından yorumlanan verilere gelince: bu genellikle profesyonel bir ortamda yapılmaz, çünkü ürünü daha pahalı kılar: aynı amaç için daha fazla bellek, CPU gücü vb. Gerekir. Bu edilir ancak bazen sık flaş bir Basic yorumlayıcısı ile, hobisi ortamda kullanılan ve bir (dizgecikli) Temel uygulama (çok Flash'ta ya) eeprom'da tutulan. Örneğin PICAXE ve çeşitli Temel pulları kontrol edin.

IMO böyle bir ortamda hem Temel yorumlayıcı hem de Temel uygulama ürün yazılımı olarak adlandırılmalıdır.


XBOX 360 başlangıcı, depolanan kodu (IMO da firmware olarak düşünülmelidir) yorumlayan bir üretici yazılımı yorumlayıcısının ilginç bir kullanımıdır. Bu mükemmel konuşma , onu detaylı olarak açıklar.


MSalter'ların altında FPGA kodunun / konfigürasyon verilerinin firmware olarak kabul edilip edilmemesi gerektiğini merak ediyor.

En önemli hususlarda (üretim sürecinde geç değişebilen bilgilerdir, ancak son kullanıcının istediği şekilde değiştirilmeleri amaçlanmamıştır) FPGA bitleri üretici yazılımı gibi davranır. Yani sorusunu yapar olan herhangi tanım moot göre firmware. Önemli olan nokta, ürün yazılımı gibi yazılması, kullanılması ve yönetilmesidir. (Bir ördek gibi yürür ve şüphe ederse, ördek mi?)

Kullanışlı olmadıklarında tanımlarla uğraşmayın. Mikro kod üretici yazılımı mı? Temsil önemli mi? Bağlam önemli mi? ROM, bir IWM üretici yazılımı için mi?


Vaxquis’in OP’nin sorusuna yaptığı yorum benden link verdiği wiki makalesini okumamı istedi IMO orada verilen ürün yazılımı tanımını (kalıcı bellek ve program kodu ve içinde depolanan veriler) zahmetlidir. IMO, bir araç navigasyon sisteminde bulunan haritalar, nasıl depolandıklarına bakılmaksızın bellenim değil verilerdir (wiki'ye göre bellenim olmalıdır). Ve iPhone veya Android telefonunuzdaki uygulamalar bellenim değil, aynı zamanda bellenim de olmalıdır (wiki'ye göre de bellenim olmalıdır).


Şimdi bir FPGA programının donanım yazılımı olarak sayılıp sayılmadığını merak ediyorum. Sezgisel, evet, ancak bir işlemcide işlemiyor. Ve yine de, kod ve veri arasında yarı yolda olan klasik bir bit durumu.
MSalters

TI 99/4 bilgisayarı (1979), ROM'da GPL adlı bir dil için bir tercüman ve GPL'de yazılmış bir BASIC tercümanı içermiştir. GPL'nin önemli bir özelliği GROM yongalarında depolanan kodu çalıştırabilmesiydi (öncelikli olarak sıralı erişim için tasarlandı ve fiziksel olarak daha küçük ve rastgele erişimli ROM'dan daha ucuz ve yapılabilir), böylece TI 99/4 bir kütle olarak görülebilirdi. tasarımı, BASIC damgasına benzeyen pazar kişisel bilgisayarı.
supercat,

14

Firmware, flash bellek gibi geçici olmayan bellekte saklanan program kodudur. Terim en sık gömülü sistemler ile bağlantılı olarak kullanılır. İşlemci ile aynı çipte veya ayrı bir aygıtta olabilir.


Thanks @Leon Heller (+1) - yukarıdaki 2 örneğe ait bir isim var, burada biri girdi verisini bir yonga üzerinde sabit bir ikili dosyaya "yanıp sönüyor" mu? Yoksa bu genellikle uygulanmıyor mu? Tekrar teşekkürler!
HeineyBehinds

Bu sadece veri. Geçici veya geçici olmayan belleğe kaydedilebilir.
Leon Heller

2'niz için kullanacağım terim "arama tablosu" olur. Düşünebileceğim bir örnek, sayısal olarak kontrol edilen bir osilatör için kullanılan sinüs fonksiyon değerleridir.
kjgregory,

1
@KGregory Bir arama tablosu olabilir, yorumlanmış bir program olabilir, resim verileri olabilir ...
glglgl

@glglgl kabul etti. Bunların arama tablosu biçimleri olarak görülebileceğini iddia edebilirim, ancak şu an meselenin yanında olduğumuzu düşünüyorum.
kjgregory

9

Her iki seçeneğin de doğru olduğunu düşünüyorum, sadece farklı işlem seviyelerindeki mikroişlemciye bakıyordum. Değişmez ikili olarak adlandırdığınız şey, donanımın kendisi olacaktır, ki yapabilecekleri konusunda oldukça kısıtlıdır. Yönergenin adresini 0x0000 al, yönergenin kodunu çöz, verilen adres / kayıt al, yürüt, artış yönerge sayacını al. Bu mikroişlemci boru hattı ve siz değiştiremezsiniz. Mikrodenetleyicinin ne yaptığını, ardından sırayla okunan talimatları bellekte saklayarak kontrol edersiniz. Temel olarak, evet, bellenim, düşük bir soyutlama düzeyinde, değişken bir program için yalnızca girdi verileridir. Genellikle, bellenimi mikroişlemciyi kontrol eden özel bir program olarak düşünmek daha kolaydır, çünkü kavramsal olarak bu şekilde kolaydır.


Bu cevabı sev, +1, veriyi vurgulamak için iyi yapıldı ve kod sonunda aynı şeydi.
Vality

En azından Von Neumann mimarisi için aynılar. Ayrı otobüsleriniz olduğunda, bunların hepsi bitmiş olsa da, bunların farklı şeyler olduğunu iddia etmeye başlayabilirsiniz.
Jason_L_Bens

8

Aslında ikisi de.

Yazılımın bir örneği PC BIOS'tur, BIOS'un bir kısmı çalıştırılabilirdir ancak BIOS'un diğer kısımları aslında veridir, özellikle dayandığı teknoloji türüne bakılmaksızın, bir BIOS ROM'un farklı fonksiyonlarını numaralandırmak için kullanılan tablolarda üzerinde. Genellikle veriler, ya başka bir flash bellekte, pilde ya da kapasitör destekli RAM'de, CMOS SRAM ya da başka bir uyumlu bellek yongası teknolojisinde saklanır.

Firmware, değişmeyen / geçici olmayan bellek için kullanılan genel bir terimdir, devrede elektriksel olarak yanlış bir şey olmadıkça veya EEPROM'lar veya Flash için takılı olan bir programlama döngüsü söz konusu olduğunda, güç döngüsüne göre erişilebilir ve erişilebilir ROM'lar.

Tanım olarak bellenim, sisteminize veya gömülü bileşenlere kurduğunuz donanımı sınayan ve işletim sisteminizin bileşenleri kullanabilmesi için gereken düşük düzeyli yordamlar (bazen BIOS işlevi çağrıları olarak görülür) veren en düşük erişim düzeyidir. sisteminizde. Eski günlerde, BIOS veya Temel Giriş Çıkış Sistemi ayrıca Commodore 64 ve 1970'lerin diğer kişisel bilgisayarları gibi "BASIC" adı verilen bir programlama dili de içeriyordu, tabii ki kullanım için BASIC'lerin yerleşik olduğu eski bilgisayarlar vardı. Profesyonel bilgisayar bilimciler tarafından da. Sistemin bu karakter ROM'una gitmesini ve bir dizideki karakterleri aramasını sağlamak veya tüm çipi RAM'le doldurmak için yürütme veya program ROM'u için bir karakter veya sembol ROM'u duyduğunuzda Orada.

Varsayılan PROM, EPROM, EEPROM, Flash programcıları, bir yonga üzerinde aynı formatları olan .hex veya .bin ekinde olduğu gibi bir yonga üzerinde donanım yazılımı yakar; bu, yongaya, yazılım ürününe göndermek için kullandığınız uygulamanıza bağlıdır.

Ayrıca, bellenim blob dosyaları var, bunlar çalıştırma sırasında yüklenen kütüphaneler ve rutinler şeklinde çalıştırılabilirler, bunun iyi bir örneği kablosuz donanım sürücüleri, bu kartlardaki tüm donanımları bu kartlar üzerinden çalıştırmak için yeterli kod içeriyorlar. bilgisayar sistemi. Tek fark kart ve USB tabanlı bellenimin aslında üzerinde depolanmadığı, sabit diskinizde depolandığı ve belleğe yüklendiğidir. Temel olarak bir çeviri hizmeti katmanı ve filtre olarak çalışır. Hem veri hem de kod.

Bunun temeli, aslında diğer bilgisayarlar ve gömülü sistemler için BIOS'ları yazmam (örneğin, işletim sisteminiz başladığında gerçekte yüklenen kablosuz bellenim yazılımı, sonra çalışma zamanı bellenimi de içeren düşük seviye donanım sürücülerini yüklemeye başlar) ). Firmware denir, çünkü üreticiden bir güncelleme almadığınız sürece rutinlerini hiç değiştirmez ve güncelleme eskisinin üzerine yazar. Bu durumda, yeni şeyler güncellenene kadar yeni ürün yazılımı gibi davranır, olmasa da, işletim sisteminiz yüklendiğinde kullandığınız ürün yazılımıdır.

Ürün yazılımı olarak adlandırılmaması gerektiğine katılıyorum, çünkü teknik olarak çip üzerinde kalıcı bir çözüm olarak bulunmuyor ve ürün bilgisine yönelik özel bir araç ve uygulamaya ihtiyaç duyuyor (eski BIOS'larda vs.

Başka sorunuz var, sizin için onları cevaplamaktan mutluluk duyarım.


6

Firmware, bir tür geliştirme ortamında, yazılım kodu gibi yapılmış bir koddur, ancak daha sonra cpu'nun anlayabilmesi için makine koduna indirgenir. Bir mikrodenetleyicinin veya başka bir yonganın hafızasını atarsanız, C kodu veya programladığımız şeye benzemediğini fark edeceksiniz.

Yani bir .exe programını programlamıyorsunuz, çünkü bu bir tür işletim sistemi ortamında çalıştırılacak derlenmiş bir programdır. Genellikle bir .hex veya belki de bir kendini programlayacaksınız, bu gerçekten programladığınız aygıta bağlıdır, ancak derleyiciniz derleyeceği için dosya türleriyle ilgilenmediğiniz için farketmez makinenin kodunu aşağı doğru kodlayın ve çip üzerindeki talaşın içine veya ne tür bir depolama düzenine yerleştirin.

Firmware genellikle çevre koşullarının programlanması gerektiği için değişmez. Firmware kodunu değiştiremez ve bırakamazsınız, değişikliği yapmanız, derlemeniz ve cihazı yeniden flaş etmeniz gerekir.

  • Genel olarak yazılım kodu, bir işletim sisteminin üzerinde çalıştırılacak koddur.
  • Firmware kodu, çipin çıplak metalinde çalıştırılan bilgidir. Firmware, gerçek uygulama programı olabilir veya basit bir işletim sistemi olabilir, gömülü dünyada çıkarılabilir depolama veya yanıp sönen RAM aracılığıyla yazılımı yükleyebilirsiniz. Bu seviye tümüyle ikili koda düşebilir, çünkü bu hala koddur.
  • Doğrudan voltajla çalışmaya başladığınızda, donanım seviyesine ulaştınız.

2
"ama sonra cpu onu anlayabilmesi için makine koduna kaybolacak." Aynen yazılım kodu gibi, C ile yazılmışsa veya benzer bir şey olduğu sürece.
glglgl

1
İşlemcilerin anladığı şey, evet, ikili ama onlar hala Assembly Dili'nde program yapan ve Makine Dilinin bir adım üstünde olan programcılarımız için mnemomik işlem kodları (sektörde görüldüğü gibi op kodları) olarak adlandırılan bir şeye sahipler. ]).

0

Ürün yazılımı, genel olarak yazılım dünyası ile donanım dünyası arasında bulunan bir şeyi belirtmek için kullanılan genel bir terimdir.

Donanım değiştirmek zor. Yazılımın değiştirilmesi kolaydır. Firmware, donanım olarak değiştirmek zor değildir, ancak yazılımdan daha zordur.

Değiştirilebilir çalıştırılabilir kod, veri veya yapılandırma bilgilerini (FPGA / PLD / etc gibi) tartışmak için kullanılabilir.


Doğru bir kelime ve tanımı geniş bir anlamda. Buna rağmen, bu yongalar aslında kod veya veri değildir. Tamamlandığında, derleyici bir sistemin farklı parçalarını bir araya getirmek için tam çözümler veya yapıştırıcı mantığı olarak mantıksal tasarımlar oluşturur. Fiziksel 74 ve 54 serisi mantık kapıları kullanmak yerine bir çözüm oluşturmak için kaydolur. Aslında bunu getirdiğine sevindim, Adam.

0

Bellenimin ne olduğunu daha fazla açıklamak için.

Firmware, çok özel bir donanımda çalışan koddur, yani op kodları yazdığı donanıma özgüdür, bir yonga veya arayüz ailesi olabilir veya yalnızca bir öğe için olabilir.

Temel olarak, bellenimin yaptığı şey bu;

  1. Belirli bir işlemcinin yapması ve yürütmesi için kablolu talimatlara sahip, buna "önyükleme" denir. En önyüklenebilir bilgisayarların BIOS'larında bu var.

  2. Yazılım donanımındaki talimatlarla adı geçen donanımı sıfırlayın.

  3. Atlama tablasını içeri / yukarı yükleyin.

  4. Belirli bir cihazdaki kayıtlara erişimin erişilebilir olmasını sağlayın.

  5. BIOS soğuk (kapalı durumdayken) veya ılık çalıştırmadan sonra (normal yeniden başlatma veya sıfırlama pimi kullanıldıktan sonra) kullanıldığında kontrolü rutine alın.

  6. Çoğu BIOS (ürün yazılımı) akılda belirli bir yonga seti için tasarlanmıştır ve bunların tüm işlevlerini kökten çıkarır ve bir bilgisayarda veya gömülü bir aygıtta belirli bir veri hattına bir şey eklenebilecek verileri siler.

  7. Sabit diskler, kendi içinde gömülü bir cihaz olan, üzerinde de BIOS bulunan ve bir yonga üzerinde bir ürün yazılımı olan bir depolama çözümünün iyi bir örneğidir.

Temel olarak, tüm üretici yazılımı, başka bir işlemcinin söz konusu cihazdan işlevselliği elde etmek için yaptığı bir dizi talimattır. Fiziksel bir cihaza yüklenen bir yazılım, güç kaybettikten sonra, cihaz yeniden kazanıldığında orada olacak.

Teknik olarak, ikili dosyalar oluşturmak için herhangi bir programlama veya komut dosyası dilini kullanabilirsiniz. Hedeflemekte olduğunuz işlemcinin nasıl çalıştığını, gerçek op kodlarını, dahili kayıt cihazını (ne işe yaradıklarına bakılmaksızın), ikili ve onaltılık sayı sistemlerini öğrenmek ve nasıl kurtarabilecek bir montajcı oluşturmak gerektiğini bilmek zorundasınız. kodunuzda assembly dilinde. Bu işlem tamamlandıktan sonra, başka bir programın ikilile dönüştürülmesi için görev yapabilir, daha sonra bir .bin veya .hex dosyası olarak kaydedebilirsiniz.

Ada, C, C ++, D ve diğer programlama dillerinin kendi yerel kodları olan "belirteçlerini" sahte dil kodlarında makine diline dönüştürdüklerini bilmek istiyorsanız. Okumanı tavsiye ettiğim birkaç kitap var, bazıları oldukça basit ve çok özel işlemciler etrafında toplanmış fakat öğrenilmesi iyi. Şimdilik sana bir kitap vereceğim, çünkü seni veya bilgiyi okuyan başka birini boğmak istemiyorum.

  1. Charles N. Fischer ve Richard J. LeBlanc, Jr. 'C' ile Bir Derleyici Hazırlama
  2. Bu siteyi ziyaret edin; IBM PC'de bulunan x86 yonga kümesini temel alır; http://www.laynetworks.com/assembly%20tutorials.htm

Bu, başlangıçta PC'lerde assembly dili programlamaya giriş niteliğindedir. İşleme kesintilerini (donanım ve yazılım kesintileri) ve diğer birçok konu hakkında konuşur, bir BIOS'un gerçekte ne yaptığını ve bununla nasıl çalışılacağını daha ayrıntılı olarak açıklar.

Assembly dili ve makine dilinden farklı olarak, donanımınızın özelliklerini bilmiyorsanız Ada, C, C ++, D ile daha fazlasını alabilirsiniz. Assembly ve makine dilinde, ne yaptığınızı bilmiyorsanız, ya kötü bir şey olur ya da kod çalışmaz. İkinci davayı tercih ederim, kötü bir şeye karşı çalışmamayı.

Not: Yukarıdaki cevap hakkında, flash RAM hakkında, böyle bir şey yok, flash ROM'lar var ama flash RAM'ler yok. Flash ROM'larda ürün yazılımı, içinde pil veya kapasitör destekli olan RAM'ler veya belirlediğiniz BIOS seçenekleri için parametreler içeren başka bir flash ROM bulunur.

Flash ROM veya RAM yongasıysa, bellenimde veri belleğinin nasıl depolanacağına veya silineceğine (program belleğine / bellenimin kendisine karşı) kod vardır. PC'lerde, eğer BIOS şifresi bozulursa veya hatırlamıyorsanız (veya birileri sizinle uğraşıyorsa), kasayı açıp "CMOS CLR / CMOS TEMİZLE / BIOS RESET / BIOS RST" adlı iki pimi bulabilir, bu iki pimin bir arada kısaltılması da belleği temizler, bundan sonra yapmanız gereken tek şey, iki pim hala kısa olduğunda, sıfırlama düğmesine basmaktır. Bu, şifreyi temizler ve PC'nizin BIOS'una tam erişim sağlar (1990'lı yıllardan daha yeni bir bilgisayarınız varsayalım).

Yeni bilgisayarlarda, ürün yazılımı için flash belleğe sahipsiniz ve pil destekli SRAM'ınız var (sürekli olarak DRAM yongaları gibi yenilenmesi gerekmiyor, eski bir teknolojiye dayanıyor).


0

Gömülü Sistemler açısından, Yanıp Sönen Firmware, bir Micro-kontrol cihazının ROM'unu, yanıp sönen bir cihaz kullanarak silmiş ve yeni kodla yeniden yazmış olduğunuz anlamına gelir. Parlatılacak bu Firmware HEX Formundadır.

İşletim sistemi ile ilgili Terminoloji açısından, ROM'da da yanıp sönmektedir, ancak bu kez bir güncelleme geldiğinde onu flaş etmek OS'nin sorumluluğundadır.


0

“Tarihsel” perspektifi kullanmanın, bellenimin ne olduğu hakkında daha temel bir anlayış verebileceğine inanıyorum .
İlk önce "hard-ware" ile başlar. Belirli bir işlevi sağlamak / oluşturmak için, tüpler, röleler, transistörler ve IC'ler kullanılabilir. Bu bileşenlerin bir kısmını kullanır ve gerekli işlevi yerine getiren bir cihaz yaratırsınız. Bu "donanım" olarak kabul edildi, çünkü işlevi değiştirmek isteseniz (ya da gerekirse), kabloları, soketleri vs. sökmek zorunda kalırdınız ve bunu yapmak da zordu . Böylece, bir işlevi gerçekleştirmenin bu yöntemi donanım kullanmak olarak bilinir hale geldi. Bir CPU, RAM ve kod kullanmak, bir işlev yaratmanın başka bir yöntemi haline geldi ve "yazılım" olarak da bilinirdi çünküTasarım değişikliklerini yapmak için “Ancak, aynı zamanda (çoğunlukla üreticilerin) bir tasarımın mümkün olduğu kadar erken tamamlanması, ancak“ son dakika ”tasarım değişikliklerini mümkün olduğunca kolay bir şekilde yapabilmesi gerektiğine inanıyorum. uygun maliyetli mümkün olduğunca. noktasına bu esnekliği kadar izin ROM'ları kullanılması "ilk geminin." EEPROMlar (alanında) "ilk gemi". değişimler sonra bile izin kod gerekli / ROM ve PEHA 'larında kullanılan vermek edildi "üretici yazılımı" adı .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.