apa itu firmware linux

青灯夜游
青灯夜游asal
2023-04-18 11:47:132944semak imbas

Dalam Linux, perisian tegar merujuk kepada "perisian tegar", iaitu program yang dilaksanakan oleh peranti perkakasan itu sendiri dan biasanya disimpan dalam denyar peranti. Dalam sistem Linux, pemacu peranti berada dalam keadaan kernel, manakala fail perisian tegar berada dalam keadaan pengguna Oleh itu, mekanisme yang selamat, stabil dan boleh dipercayai diperlukan untuk memastikan pemacu peranti berjaya memuatkan fail perisian tegar.

apa itu firmware linux

Persekitaran pengendalian tutorial ini: sistem linux7.3, komputer Dell G3.

Apakah perisian tegar linux

Perisian tegar ialah program yang dilaksanakan oleh peranti perkakasan itu sendiri. Perisian tegar biasanya disimpan dalam denyar peranti. Atas sebab kos dan kemudahan, program berjalan peranti perkakasan biasanya dibungkus ke dalam fail perisian tegar dalam format tertentu, disimpan dalam sistem terminal, dan peranti perkakasan dinaik taraf melalui sistem terminal.

Semasa proses pembangunan kernel Linux, pembangun menyahpepijat peranti pemacu persisian, seperti sentuhan, pengecasan, motor linear, storan, peranti WIFI, dll. Terdapat juga situasi di mana perisian tegar perlu dikemas kini. Dalam sistem Linux, pemacu peranti berada dalam keadaan kernel, manakala fail perisian tegar berada dalam keadaan pengguna Oleh itu, mekanisme yang selamat, stabil dan boleh dipercayai diperlukan untuk memastikan pemacu peranti berjaya memuatkan fail perisian tegar.

Untuk menyelesaikan masalah pemacu peranti yang memuatkan fail perisian tegar mod pengguna secara stabil daripada mod kernel, sistem Linux menyediakan subsistem perisian tegar.

Pengenalan proses subsistem perisian tegar Linux

Subsistem perisian tegar Linux dilaksanakan berdasarkan mekanisme sysfs dan uevent.

Selepas pemandu memanggil antara muka fungsi sistem perisian tegar untuk memohon perisian tegar, subsistem perisian tegar menggunakan kernel kompilasi perisian tegar untuk mendapatkan perisian tegar jika pemerolehan gagal, ia menggunakan cache perisian tegar untuk mendapatkan perisian tegar; pemerolehan masih gagal, Gunakan kernel laluan lalai untuk terus mencari untuk mendapatkan perisian tegar. Jika pemerolehan masih gagal, laporkan mesej uevent kepada proses init. Proses init menerima mesej uevent dan menapis keluar mesej yang jenis subsistemnya ialah perisian tegar. Proses init mencari perisian tegar berdasarkan maklumat perisian tegar yang ditunjukkan dalam mesej uevent, dan menulis kandungan perisian tegar yang diperoleh daripada keadaan pengguna ke keadaan kernel melalui antara muka nod fail yang disediakan oleh sysfs, supaya pemandu boleh mendapatkan data daripada fail perisian tegar.

Sistem perisian tegar Linux menyediakan pelbagai kaedah untuk mendapatkan fail perisian tegar dalam senario yang berbeza.

1) Dikompilasi terus ke dalam kernel;

2) Cache perisian tegar; Bantu pemprosesan melalui proses init;

Carta aliran subsistem perisian tegar Linux

apa itu firmware linuxAntara muka fungsi utama subsistem perisian tegar Linux

Antara muka fungsi utama: Jenis utama antara muka perisian tegar aplikasi dibahagikan kepada segerak dan tak segerak.

Biasanya proses memohon perisian tegar memakan masa, dan proses naik taraf perisian tegar memakan masa, jadi ia boleh dilaksanakan menggunakan antara muka fungsi tak segerak, atau baris gilir kerja mula-mula dibuat dalam pemacu untuk memanggil antara muka fungsi segerak.

Antaranya:

Inti digunakan untuk fail perisian tegar dengan memanggil fungsi request_firmware.

  • Selepas kernel memperoleh fail perisian tegar, ia memanggil release_firmware untuk melepaskan memori yang berkaitan.

Antaranya:

apa itu firmware linux

Antara muka request_firmware_direct hanya mencari perisian tegar dalam laluan yang ditentukan oleh kernel dan tidak menggunakan Mekanisme uevent untuk mendapatkan perisian tegar.

  • Antara muka request_firmware_nowait memperoleh perisian tegar melalui baris gilir kerja tak segerak, yang tidak boleh menyekat masa siasatan pemandu.

apa itu firmware linuxProses pelaksanaan subsistem perisian tegar Linux

request_firmware Proses pelaksanaan

Fungsi request_firmware menetapkan bit bendera yang berbeza dengan memanggil fungsi _request_firmware_prepare untuk mencapai fungsi pembezaan yang berbeza.

fungsi_request_firmware_prepare:

  • Selepas menghidupkan suis makro CONFIG_FW_LOADER, mula-mula tentukan sama ada fail perisian tegar disusun ke dalam kernel dengan memanggil fwfirm_get_builware fungsi .

Kemudian panggil fungsi fw_lookup_and_allocate_buf untuk menentukan sama ada senarai terpaut dalam struktur fw_cache global telah merekodkan nama perisian tegar yang diminta pada masa ini. Jika nama perisian tegar yang diminta pada masa ini tidak wujud, ruang memori yang sepadan diperuntukkan secara dinamik dan nama perisian tegar yang diminta pada masa ini ditambah pada senarai terpaut dalam struktur fw_cache global.

  • fungsi fw_get_filesystem_firmware

terutamanya mencari fail perisian tegar melalui laluan lalai yang disediakan oleh kernel dan memanggil fungsi kernel_read_file_from_path. Jika fail perisian tegar tidak ditemui, bit bendera FW_OPT_USERHELPER digunakan untuk menentukan sama ada mod USER_HELPER didayakan.

Antaranya:

Laluan lalai dalam sistem Perisian Tegar adalah seperti berikut:

apa itu firmware linux

Laluan lalai boleh ditambah melalui kernel baris arahan. Lulus antara muka module_param_string ke laluan berubah untuk menyesuaikan laluan baharu.

apa itu firmware linux

Mod USER_HELPER

Ciri ini hanya disokong selepas kernel menghidupkan CONFIG_FW_LOADER_USER_HELPER. Fungsi utama adalah untuk melaporkan mesej uevent kepada proses init melalui kernel, mendapatkan maklumat perisian tegar melalui proses init, dan menulisnya ke nod sysfs yang mendasari.

fungsi fw_load_from_user_helper:

Mula-mula panggil fungsi fw_create_instance untuk mencipta peranti peranti, fail kelas dan fail atribut dan memperuntukkan struktur firmware_priv.

Direktori kemudian akan dibuat di bawah /sys/class/firmware yang menggunakan nama peranti sebagai nama direktorinya.

Direktori ini mengandungi tiga atribut:

  • pemuatan:

    ditetapkan kepada 1: Atribut ini dimulakan dengan menetapkan 1 oleh ruang pengguna yang bertanggungjawab untuk memuatkan perisian tegar;

    ditetapkan kepada 0: apabila proses pemuatan selesai;

  • data:
  • digunakan untuk menerima data perisian tegar Selepas pemuatan ditetapkan, proses ruang pengguna menulis perisian tegar ke dalam atribut ini.

  • peranti: Pautan simbolik ke entri yang sepadan di bawah
  • /sys/devices.

  • tamat masa:
  • Tamat masa maksimum lalai untuk menggunakan perisian tegar melalui uevent ialah 60S dan tamat masa tulis lapisan atas disokong.

  • fungsi_request_firmware_load:

Mula-mula lumpuhkan pelaporan uevent, tambah peranti dengan memanggil fungsi device_add dan cetuskan panggilan fungsi firmware_uevent. Antaranya, isikan format maklumat yang dilaporkan oleh uevent, termasuk nama perisian tegar, tempoh tamat masa dan sama ada ia tidak segerak.

apa itu firmware linuxLangkah seterusnya ialah untuk mendayakan fungsi pelaporan uevent, panggil fungsi kobject_uevent dan laporkan jenis tindakan tambah ke lapisan atas ueventd.

apa itu firmware linuxKemudian panggil fungsi fw_state_wait_timeout dan tunggu pemprosesan lapisan atas ueventd dalam tempoh tamat masa pratetap.

Jika tamat masa mencapai atau bangun selepas menerima jumlah penyiapan, memori yang digunakan sebelum ini akan dikeluarkan dan maklumat memori seperti peranti dan kelas akan dikeluarkan.

aliran pemprosesan perisian tegar berkaitan ueventd

Ueventd ialah modul penting dalam proses init terutamanya mengendalikan selinux, penciptaan peranti dev, memantau pelaporan kernel bagi mesej uevent dan memuatkan perisian tegar dll. kandungan.

Aliran pemprosesan FirmwareHandler:

Kaedah HandleUevent dalam FirmwareHandler terutamanya mengendalikan proses interaksi antara pemuatan perisian tegar dan nod asas.

Mula-mula tentukan sama ada jenis subsistem bagi mesej uevent ialah medan perisian tegar sebelum memproses jenis ini hanya akan dilaporkan oleh modul perisian tegar dalam kernel.

HandleUevent terutamanya mencipta sub-benang yang berbeza melalui utas utama untuk memproses permintaan perisian tegar daripada pemacu berbeza daripada kernel secara selari.

apa itu firmware linuxFungsi ProcessFirmwareEvent

Pertama, ia bergelung untuk menentukan sama ada fail perisian tegar yang diambil dalam laluan yang disokong oleh ueventd wujud jika wujud, tulis pemuatan asas atribut fail sebagai 1, dan pada masa yang sama menyalin fail perisian tegar yang diperoleh dan menulisnya ke fail data asas. Selepas selesai, 0 ditulis pada fail atribut pemuatan asas.

Pada ketika ini, kernel telah memperoleh maklumat fail perisian tegar yang ditulis oleh ruang pengguna.

apa itu firmware linuxAntaranya:

ueventd menyokong laluan untuk mencari perisian tegar secara lalai:

daripada firmware_direktori yang dinyatakan dalam ueventd.rc fail.

apa itu firmware linuxCadangan berkaitan: "

Tutorial Video Linux

"

Atas ialah kandungan terperinci apa itu firmware linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:apa itu linux middlewareArtikel seterusnya:apa itu linux middleware