Kuhariri uefi kutoka madirisha 7. Jinsi si kufanya hivyo. Vipengele muhimu vya UEFI

  • Mafunzo

Niliahidi zaidi mwongozo wa haraka". Hii hapa:

  1. Unda meza ya kizigeu cha GPT kwenye diski
  2. Unda kizigeu cha FAT32 cha megabaiti mia kadhaa
  3. Pakua bootloader yoyote ya UEFI kutoka kwa Mtandao
    (tunahitaji bootloader yenyewe, ni faili moja ya binary!)
  4. Badilisha jina na uweke faili hii kwenye kizigeu kilichoundwa kwenye /EFI/Boot/bootx64.efi
  5. Tunaunda usanidi wa maandishi, kuiweka mahali ambapo bootloader inatarajia kuiona
    (usanidi na eneo la usanidi hutegemea utekelezaji maalum wa bootloader, habari hii inapatikana kwenye mtandao)
  6. Baada ya kuanza upya tunaona orodha ya bootloader
    (Ikiwa Windows 8 au 10 imewekwa kwenye diski, mwongozo huu una uwezekano mkubwa wa kupunguzwa kwa pointi 3 - 5.)

TL; DR hauitaji kutaja njia ya upakiaji kwenye rekodi mpya za boot za UEFI - unahitaji kuweka faili ya bootloader kando ya "njia chaguo-msingi", ambapo UEFI itaipata, na badala ya kiboreshaji. Menyu ya UEFI tumia orodha ya bootloader, ambayo ni rahisi zaidi na salama kusanidi

Nini cha kufanya

Kuna, kwa kweli, njia kadhaa za kusanidi UEFI boot. Nitaanza kwa kuelezea chaguzi zingine - ili iwe wazi jinsi (na kwa nini) sio kuifanya. Ikiwa ulikuja kwa mwongozo, tembeza hadi chini kabisa.

Hakuna haja ya kwenda kwenye NVRAM na kugusa efivars

Utaratibu "maarufu" zaidi wa kusanikisha bootloader kwenye mfumo ni kama ifuatavyo: kisakinishi cha OS huunda. sehemu maalum, juu yake ni muundo wa saraka na huweka faili za bootloader. Baada ya hayo, kwa kutumia matumizi maalum (efibootmgr katika Linux, bcdedit katika Windows), inaingiliana na firmware ya UEFI chip, na kuongeza rekodi ya boot kwake. Ingizo hili linabainisha njia ya faili ya bootloader (kuanzia mzizi mfumo wa faili) na, ikiwa ni lazima, vigezo. Baada ya hayo, chaguo la kupakia OS inaonekana kwenye orodha ya boot ya kompyuta. Kwa Linux, inawezekana kufanya bila bootloader kabisa. KATIKA kuingia kwa boot njia moja kwa moja kwenye kernel imeonyeshwa pamoja na vigezo vyote. Ni lazima kernel ijumuishwe na chaguo la EFISTUB (ambalo limekuwa kiwango cha usambazaji wengi kwa muda mrefu), katika hali ambayo ina kichwa cha "EFI kinachoweza kutekelezwa" ambacho huruhusu programu dhibiti kuiendesha bila bootloader ya nje.


Wakati mfumo unapoanza, mtumiaji anapochagua kiingilio cha buti anachohitaji, Firmware ya UEFI Kwanza, inatafuta sehemu maalum ya EFI kwenye diski iliyosajiliwa katika kuingia hii, inapata mfumo wa faili kwenye sehemu hii (inahitajika FAT au FAT32), na kuzindua bootloader. Bootloader inasoma usanidi wake kutoka kwa faili ya mipangilio na hupakia OS au hutoa menyu ya boot. Huoni chochote? Ndio, tuna menyu mbili za boot - moja kwenye kiwango cha firmware ya UEFI, nyingine kwenye kiwango cha bootloader. Kwa kweli, watumiaji wanaweza hata wasijue uwepo wa ya pili - ikiwa kuna kitu kimoja tu kwenye menyu, Kipakiaji cha boot ya Windows huanza kuipakia bila maswali yoyote kuulizwa. Unaweza kuona skrini na menyu hii ikiwa utaweka ya pili nakala ya Windows au isakinishe tu kwa upotovu.


Kwa kawaida, ili kudhibiti rekodi za boot, miongozo kwenye Mtandao inapendekeza kuingiliana na firmware ya UEFI. Kuna chaguzi kuu kama tano za jinsi ya kufanya hivi: efibootmgr chini ya Linux, bcdedit kwenye Windows, aina fulani ya programu kwenye Macs, amri ya bcfg ya matumizi ya uefi shell (inatoka chini ya UEFI, "kwenye chuma tupu" na bila. OS, tangu imeundwa katika muundo huo maalum) na kwa firmware ya hali ya juu - njia za picha UEFI (akizungumza lugha maarufu, "V Mipangilio ya BIOS").


Kwa "vitabu vingi" vilivyoandikwa hapo juu, unaweza kukosa wazo hili kwa urahisi: mtumiaji, ili kubadilisha mipangilio ya sehemu ya programu (kwa mfano, kuongeza parameta ya kuanzisha OS), analazimika kuandika tena kumbukumbu ya flash. chip kwenye ubao. Je, kuna mitego yoyote hapa? Oh ndio! Windows wakati mwingine ina uwezo wa kutengeneza matofali kutoka kwa kompyuta ndogo, na Linux pia, na kwa njia tofauti. Ubora wa firmware mara nyingi huacha kuhitajika - viwango vya UEFI vinatekelezwa kwa upotovu au havitekelezwi kabisa. Kimantiki, firmware lazima iokoe ufutaji kamili wa anuwai zote za efivars bila matokeo, sio kuhifadhi data muhimu ndani yao, na kwa uhuru kurejesha maadili ya msingi - kwa sababu tu mtumiaji anaweza kuzipata, na uwezekano wao. kuondolewa kamili mbali na sifuri. Katika mchakato wa majaribio, mimi binafsi mara kwa mara (kwa bahati nzuri, kwa kurudi nyuma) "niliweka matofali" Lenovo yangu - vitu vyote vilitoweka kwenye menyu ya boot, pamoja na chaguo la "nenda kwa mipangilio".


Kufanya kazi na rekodi za boot za UEFI pia si rahisi. Kwa mfano, shirika la efibootmgr halina chaguo la "hariri". kiingilio kilichopo". Ikiwa unataka kubadilisha parameta ya kernel kidogo, unafuta ingizo lote na uiongeze tena, tayari imebadilishwa. Katika kesi hii, mstari ina mara mbili na nukuu moja, pamoja na mbele na nyuma kwa mpangilio usio wazi kabisa. Mwishowe nilipopata uchawi huu kufanya kazi, niliihifadhi kwa njia ya maandishi ya bash, ambayo bado yapo kwenye mfumo wangu wa faili wa mizizi:


efibootmgr -c -L "Archlinux (debug)" -l "\EFI\archlinux\vmlinuz-linux" -u "root=/dev/mapper/vg1-lvroot rw initrd=\EFI\archlinux\initramfs-linux.img systemd .log_level=debug systemd.log_target=kmsg log_buf_len=1M enforcing=0"

Hakuna haja ya kutumia GRUB

Hii ni mastodon kubwa, 90% ya utendaji wake imekusudiwa kwa anatoa za MBR. Ili kusanidi, unahitaji kuhariri idadi ya faili, na kisha uendesha amri ya kizazi cha usanidi. Matokeo yake ni karatasi kubwa ambayo haieleweki kwa mtu wa kawaida. Ina mlima wa faili zinazoweza kutekelezwa. Imewekwa na amri ambayo huwezi kuiondoa tu - lazima uangalie hati


grub-install --target=x86_64-efi --efi-directory=esp_mount --bootloader-id=grub

Kwa kulinganisha, UEFI-bootloader rahisi zaidi, ambayo ni sehemu ya kifurushi cha mfumo, imewekwa na amri.


bootctl install --path=/boot

Amri hii hufanya mambo mawili haswa: nakala faili inayoweza kutekelezwa bootloader kwenye kizigeu cha EFI na inaongeza kiingilio chake cha boot kwenye firmware. Na usanidi wake unachukua mistari SABA haswa.

"Mwongozo mfupi" - maelezo zaidi kidogo

Menyu ya boot lazima itekelezwe katika kiwango cha bootloader- kuhariri usanidi wa maandishi ni rahisi zaidi na salama.


Hatuhitaji rekodi ya boot - ukweli ni kwamba wakati umewekwa katika mipangilio Boot ya BIOS kutoka kwa diski, firmware ya UEFI kwanza hutafuta kizigeu cha EFI juu yake, na kisha inajaribu kutekeleza faili kulingana na madhubuti. anwani ya kudumu kwenye kizigeu hiki: /EFI/Boot/BOOTX64.EFI


"Sehemu ya EFI" ni nini? Kwa nadharia, inapaswa kuwa ya aina maalum "EFI System" (ef00). Kwa mazoezi, Sehemu ya kwanza kwenye diski ya GPT ambayo imeundwa katika FAT32 na ina nafasi ya kutosha inafaa kuweka bootloader na faili zinazounga mkono (ikiwa zipo).


Sehemu ya 3: "Pakua bootloader yoyote ya UEFI kutoka kwa Mtandao". Ina maana gani? Bootloader ni faili inayoweza kutekelezwa ya muundo maalum, ambayo pamoja usanidi. Kwa mfano, ikiwa una mkono kifurushi kilichowekwa na systemd - faili ya bootloader inaweza kupatikana kwa /usr/lib/systemd/boot/efi/systemd-bootx64.efi, iliyopewa jina bootx64.efi na kunakiliwa kwa /EFI/Boot/ kwenye kizigeu cha EFI. Je, huna systemd? Pakua kumbukumbu kutoka kwa tovuti ya Archlinux. Au kutoka kwa hazina ya Ubuntu. Au Debian. Je! una mfumo wa Windows ulio karibu? Chukua bootloader ya Windows kutoka hapo, itafanya kazi pia)) Ikiwa unaweza kuiweka, kwa uaminifu sijajaribu.


Sehemu ya 4: "Weka mipangilio". Kama programu ya kawaida Wakati bootloader inapoanza, inatarajia kupata faili za usanidi katika njia fulani. Habari hii kwa kawaida ni rahisi kupata kwenye mtandao. Kwa kipakiaji cha boot ya systemd, tunahitaji kuunda saraka ya "loader" kwenye mzizi wa kizigeu cha EFI, na ndani yake faili ya "loader.conf" yenye mistari mitatu (nitatoa yangu mwenyewe):


muda wa kuisha kwa archlinux 10 mhariri 1

Kigezo cha mhariri kinawajibika kwa uwezo wa kuhariri kipengee cha menyu ya kuwasha kabla ya kuanza.


Karibu na loader.conf unahitaji kuunda saraka ya maingizo - faili moja ndani yake itawajibika kwa ingizo moja la boot kwenye menyu ya boot. Nina faili moja ya arch.conf hapo na maudhui yafuatayo:


title Arch Linux linux /efi/archlinux/vmlinuz-linux initrd /efi/archlinux/initramfs-linux.img chaguzi root=/dev/mapper/vg1-lvroot rw initrd=\EFI\archlinux\intel-ucode.img

Sikutaja, lakini ni dhahiri - kernel na initramfs lazima ziwe kwenye mfumo wa faili sawa na bootloader, yaani, kwenye kizigeu cha EFI. Njia kwao katika usanidi huhesabiwa kutoka kwa mzizi wa mfumo huu wa faili.

Vipakiaji vingine vya boot

systemd-boot ni rahisi sana na hutoa menyu ya Spartan nyeusi na nyeupe. Kuna chaguzi nzuri zaidi ikiwa roho inauliza uzuri.


rEFind ni kipakuzi kizuri sana. inaweza kupatikana hapa kama kifurushi cha deni. Ninaitumia kwenye kompyuta yangu ndogo. Inaweza kuunda menyu ya kuwasha kiotomatiki, bila usanidi - kwa kuchanganua faili tu.

bootloader Ongeza vitambulisho

  • Upangaji wa Mfumo
    • Mafunzo

    Kujificha nyuma ya "usalama" na "ulinzi" wa kizushi mtumiaji rahisi kutoka kwa bootkits" Watengenezaji wa UEFI wanakaza skrubu zaidi na zaidi kwa kila kizazi kipya cha bidhaa zao. Wakati huo huo, usaidizi kwa vizazi vilivyotangulia hupotea haraka, na watumiaji wao hawana chaguo ila kuchukua msaada huu kwa mikono yao wenyewe. Kwa kweli, kwa kukosekana kwa nambari ya chanzo ni ngumu sana kufanya mabadiliko yoyote, lakini hata bila hiyo unaweza kufanya mengi.
    Kuhusu UEFI, nilipanga kuelezea anuwai marekebisho muhimu, ambayo husaidia kuondokana na baadhi ya mapungufu yaliyowekwa na wazalishaji, lakini basi hawakupata karibu nayo, lakini sasa ni wakati.
    Katika sehemu ya kwanza ya kifungu hiki nitaelezea kufanya kazi na zana niliyoandika kwa kurekebisha picha za UEFI, na ya pili itajitolea kwa marekebisho yenyewe.

    Utangulizi, kanusho

    Firmware ya UEFI BIOS imewashwa bodi za kisasa, licha ya kuwepo kwa teknolojia mbalimbali kama USB BIOS Flash nyuma, BIOS mbili, Urejeshaji wa Flash, nk. - bado ni bahati nasibu. Firmware ya picha zilizobadilishwa ni bahati nasibu maradufu.
    Ndiyo sababu ninakuuliza uifanye kwa kutumia programu ya vifaa vya SPI kabla ya kuanza majaribio yoyote na firmware dampo kamili yaliyomo ya chip, vinginevyo ahueni baada firmware isiyofanikiwa(na itatokea mapema au baadaye) itakuwa ndefu, ghali na chungu.
    Mpangaji programu wa SPI ndani wakati huu inaweza kukusanywa nyumbani kutoka kwa kitu chochote kutoka kwa jozi ya resistors na capacitors (SPIPGM) hadi Arduino au Raspberry Pi. Toleo langu la programu ya bei nafuu na ya haraka ya SPI imeelezewa. Ninawashauri wale ambao wanapenda kuweka bodi kadhaa kuzingatia mradi huu, na kwa mashabiki wa vifaa vya moja kwa moja - kwa hii.
    Zaidi katika maandishi, nadhani una programu, uwezo wa kupona kutokana na kushindwa kwa firmware, na utayari wa majaribio. Bila shaka, nyimbo zinaweza pia kuimbwa kwa wazimu wa jasiri, lakini usiseme baadaye kwamba sikukuonya.
    Kijadi, kila kitu ambacho unakaribia kusoma hapa kimeandikwa kwa madhumuni ya kielimu, mwandishi hana jukumu la uharibifu unaowezekana wa vifaa vyako, faida iliyopotea, upotezaji wa wakati na imani kwa ubinadamu, unatumia programu iliyotolewa kwa hatari yako mwenyewe na hatari. , Nakadhalika.

    UEFITool

    Uchovu wa mapungufu ya huduma zilizopo za kufanya kazi na picha za UEFI (vizuri, zilizopigwa kwa msingi na ugonjwa wa NIH), niliandika matumizi ya jukwaa la msalaba na wazi. msimbo wa chanzo- UEFITool.
    Hiki ni kihariri cha picha cha UEFI, kilichoandikwa katika C++\Qt, kilichosambazwa chini ya leseni ya BSD, makusanyiko yaliyotengenezwa tayari zimewekwa hapa.
    Mradi unaendelezwa kikamilifu, kwa hivyo msimbo sio mzuri sana na kuna mende. Ukikutana nayo ghafla, nitafurahi kusikia ripoti zako.
    Kwa operesheni ya kawaida na matumizi, inafaa kusoma nakala zilizopita juu ya muundo wa picha ya UEFI, vinginevyo haitakuwa wazi kinachoendelea, lakini bado nitajaribu kuelezea vidokezo kadhaa. Tutafikiri kwamba hii ni maandalizi ya nyaraka za baadaye.
    Kama mifano katika sehemu zote mbili za kifungu nitatumia utupaji kamili kutoka kwa Zotac Z77-ITX WiFi (AMI Aptio4) na Dell Vostro 3360 (Phoenix SCT 2.3). Kwa bahati mbaya sina benchi ya mtihani kwenye jukwaa la Insyde H2O, kwa hivyo sina mengi ya kusema juu yake. Labda Falseclock anajua zaidi kidogo kuwahusu.
    Kutoka kwa mtazamo wa UEFITool, tofauti kati ya picha za UEFI wazalishaji tofauti kwa kweli hakuna, kwa hivyo nitazingatia wakati wa kuelezea viraka.
    Kwa hivyo, uzindua UEFITool, fungua picha (Ctrl + O) na uone kitu kama hiki:

    Muundo unaonyeshwa upande wa kushoto wa dirisha picha wazi kwa namna ya mti, upande wa kulia - habari kuhusu kipengele cha mti kilichochaguliwa, chini - ujumbe unaoonyesha makosa katika muundo wa faili, katika kwa kesi hii- matumizi na watengenezaji wa Phoenix wa sehemu na aina 0xF0, madhumuni ambayo hayajaelezewa katika vipimo vya UEFI PI. Bofya mara mbili kulingana na ujumbe, itapanua mti ili ama kipengele chenyewe kilichosababisha ujumbe huu au kipengele chake kikuu kionekane. Matokeo ya utafutaji yanaonyeshwa kwenye dirisha moja, ambalo linaweza kuitwa kwa kubonyeza Ctrl+F (chaguo zote mbili na picha moja):


    Hapa tufafanue istilahi kidogo. Karibu kila kitu vipengele vya muundo katika picha ya UEFI wana kichwa, ambacho huhifadhi data ya huduma kama vile GUID, sifa, cheki, n.k., na mwili, ambao huhifadhi data halisi. Maandishi kwenye vichwa hayahifadhiwa, kwa hivyo uchaguzi huu hauhitajiki kwake.
    Katika ngazi ya kwanza ya mti kuna mikoa ya Flash, katika kesi hii hizi ni Descriptor, ME na BIOS:


    Unapochagua eneo la Descriptor, unaweza kujua mipangilio ya ufikiaji ya mikoa; katika kesi hii, ufikiaji kamili, lakini mipangilio kama hiyo ni nadra sana. Intel inapendekeza kwamba watengenezaji wa vifaa wazuie ufikiaji wa eneo la ME kwa kusoma/kuandika na eneo la Descriptor kwa uandishi, ndiyo sababu kwenye bodi nyingi karibu haiwezekani kuchukua dampo kamili bila "kucheza na matari" kwa kutumia zana zilizojengwa. Unapochagua mkoa wa ME, unaweza kujua toleo la firmware ya ME, lakini ikiwa haijaonyeshwa, hii si nzuri na ni bora si kushona picha hiyo.
    Wacha tusogeze kiwango kimoja chini, kwa yaliyomo kwenye eneo la BIOS:


    Katika ngazi hii, aina mbili za vipengele zinaweza kupatikana: kiasi na mahali pa bure. Bure katika kesi hii sio lazima tupu, kwa mfano, katika picha hii mwanzoni mwa Padding firmware ya EC imehifadhiwa.
    Kiasi kimegawanywa katika kawaida (muundo wa mfumo wa faili unajulikana), buti (fomati ya FS inajulikana, ina Msingi wa Usalama, inapaswa kubadilishwa kwa tahadhari kali) na haijulikani (ama umbizo la FS haijulikani, au uchanganuzi bado haujakamilika. kutekelezwa). Kwa upande wetu, juzuu ya kwanza baada ya nafasi ya bure mwanzoni - ya kawaida, kisha mbili zisizojulikana (kwa kweli, ya kwanza huhifadhi NVRAM, na ya pili huhifadhi funguo na hifadhidata ya SecureBoot, lakini sijaelezea hili kwa programu bado), kiasi cha mwisho. inaweza bootable.
    Wacha sasa tufungue kiasi cha kawaida; katika kesi hii, huhifadhi faili zilizopakiwa katika awamu ya DXE.


    Muundo huu (kiasi kikuu ndani ya sehemu iliyoshinikwa) hutumiwa mara nyingi; hukuruhusu kuokoa nafasi nzuri kwenye chip. Pia kuna chaguo la kushinikiza sio kiasi kizima, lakini kila faili kando - hii ni ya kiuchumi kidogo kwa suala la nafasi, lakini UEFI kama hiyo itaanza. BIOS ni kasi zaidi, kwa sababu hakuna maana katika kufungua faili ambazo hazijafikiwa.
    Sasa hebu tuangalie ndani ya faili:


    Data yote ndani yake imehifadhiwa ndani ya sehemu iliyoainishwa na GUID (kichwa cha sehemu kama hizo kawaida huhifadhi saini ya dijiti au cheki, katika kesi hii - 4 ka, sawa na CS, ambayo, hata hivyo, hakuna mtu anayeiangalia), na imegawanywa katika sehemu 4: picha PE32 - faili halisi inayoweza kutekelezwa katika muundo wa PE/COFF, sehemu ya utegemezi wa DXE - huamua mpangilio ambao madereva ya DXE hupakiwa, sehemu ya UI - huhifadhi maandishi "SystemCapsuleRt.efi" katika umbizo la Unicode na sehemu isiyojulikana kama 0xF0 (uwezekano mkubwa zaidi, yaliyomo ndani yake kwa njia fulani Hii inahusiana kwa njia fulani na CS hapo juu).
    Yote hii ni nzuri, bila shaka, lakini uhariri bado hauonekani. Hakuna shida, piga simu kwa kipengele chochote menyu ya muktadha, ambayo inaonyesha nini kinaweza kufanywa na kipengele hiki.


    Na unaweza kufanya yafuatayo:

    • Hifadhi kipengee kwenye faili kabisa (Toa kama ilivyo) au data tu, bila vichwa (Mwili wa Extract)
    • jenga tena kipengee (Unda upya), katika kesi hii, wakati wa kuhifadhi picha iliyorekebishwa (na yote yake. vipengele vya wazazi) vipimo vitahesabiwa upya; hundi, upatanisho umesahihishwa, i.e. muundo wa picha utaletwa kwa kufuata vipimo vya UEFI PI
    • ingiza kipengee kutoka kwa faili, ama kabla ya ile iliyochaguliwa (Ingiza kabla), au baada ya (Ingiza baada), au ndani yake (Ingiza ndani, katika kesi hii hakuna kitu kinachoweza kuingizwa ndani ya sehemu ya PE32)
    • badilisha kipengee na kipengee kingine kutoka kwa faili, ama kabisa (Badilisha kama ilivyo) au mwili wake tu (Badilisha mwili)
    Hatua ya mwisho ndiyo yenye manufaa zaidi kwa sababu... hukuruhusu kurekebisha sehemu yoyote ya UEFI bila kuathiri muundo wa picha nzima.

    Mfano wa matumizi

    Hebu tuchukue mfano wa marekebisho ambayo ni muhimu kwa watumiaji wa MacOS X kwenye Kompyuta za Kompyuta: kwa kupita mpangilio wa LOCK bit (0x0F) katika sajili ya MSR_PMG_CST_CONFIG_CONTROL (0xE2). Kidogo hiki kimewekwa na kiendeshi cha PowerManagement DXE ili kuzuia OS kudhibiti kizidishi cha CPU kwa kuandika kwa rejista hii. Kwa Windows na Linux sio tatizo kubwa, lakini MacOS X haiwezi kuvumilia uzembe kama huo kutoka kwa UEFI. Unaweza, bila shaka, kuunganisha dereva wa AICPM.kext (katika 10.8) au kernel (katika 10.9), lakini ni bora kuunganisha dereva wa DXE na usiogope kwamba ijayo sasisho otomatiki itavunja upakuaji. Kiraka hiki kinahitajika tu kwa mifumo kulingana na Wasindikaji wa Intel SandyBridge, IvyBridge na Haswell na lahaja zao za * -E na imefanywa kama hii:


    Tunamulika picha inayotokana na programu ile ile ya SPI ambayo ilitumiwa kuifanya, na hatupati hofu ya kernel wakati kupakia MacOS X.

    Maelezo, marekebisho mengine, hitimisho

    Ikiwa unajiuliza ni wapi muundo wa uchawi "75080FBAE80F" ulitoka na ni sehemu gani zingine zinafaa kuzingatia, soma sehemu ya pili ya nakala hii, ambayo itachapishwa baadaye kidogo. Ndani yake nitajaribu kujiandaa mifano zaidi katika fomati "ni aina gani ya marekebisho, kwa nini inahitajika, jinsi ya kuifanya, na nani na jinsi ilipatikana", bila kuingia ndani kila wakati katika jinsi ya kuondoa kipengee ili kurekebishwa na jinsi ya kuiingiza. nyuma.
    Natumaini kwamba makala hiyo haikuonekana kuwa ya kuchosha na yenye kuchosha sana. Ikiwa una maswali au mapendekezo, nitafurahi kusikiliza na kujibu kadri ya uwezo wangu. Nitashukuru zaidi kwa ripoti za hitilafu. Asante mapema na bahati nzuri na firmware.

    P.S. Mpendwa utawala na UFO binafsi, tafadhali tengeneza kitovu cha UEFI kwa machapisho kama haya.

    • Mafunzo

    Wakijificha nyuma ya "usalama" wa kizushi na "kulinda mtumiaji wa kawaida dhidi ya vifaa vya boot," watengenezaji wa UEFI wanakaza skrubu zaidi na zaidi kwa kila kizazi kipya cha bidhaa zao. Wakati huo huo, usaidizi kwa vizazi vilivyotangulia hupotea haraka, na watumiaji wao hawana chaguo ila kuchukua msaada huu kwa mikono yao wenyewe. Kwa kweli, kwa kukosekana kwa msimbo wa chanzo ni ngumu sana kufanya mabadiliko yoyote, lakini hata bila hiyo unaweza kufanya mengi.
    Katika zangu zilizopita kuhusu UEFI, nilipanga kuelezea marekebisho mbalimbali muhimu ambayo husaidia kushinda baadhi ya mapungufu yaliyowekwa na wazalishaji, lakini basi sikuwafikia, lakini sasa ni wakati.
    Katika sehemu ya kwanza ya kifungu hiki nitaelezea kufanya kazi na zana niliyoandika kwa kurekebisha picha za UEFI, na ya pili itajitolea kwa marekebisho yenyewe.

    Utangulizi, kanusho

    Firmware ya UEFI BIOS kwenye mbao za kisasa, licha ya kuwepo kwa teknolojia mbalimbali kama vile USB BIOS Flashback, BIOS mbili, Urejeshaji wa Flash, n.k. - bado ni bahati nasibu. Firmware ya picha zilizobadilishwa ni bahati nasibu maradufu.
    Ndio sababu ninauliza kwamba kabla ya kuanza majaribio yoyote na firmware, tumia programu ya SPI ya vifaa kufanya utupaji kamili wa yaliyomo kwenye chip, vinginevyo urejeshaji kutoka kwa firmware isiyofanikiwa (na itatokea mapema au baadaye) itakuwa ndefu, ghali na. chungu.
    Kitengeneza programu cha SPI kwa sasa kinaweza kukusanywa nyumbani kutoka kwa kitu chochote kutoka kwa vidhibiti na vidhibiti (SPIPGM) hadi Arduino au Raspberry Pi. Toleo langu la programu ya bei nafuu na ya haraka ya SPI imeelezewa. Ninawashauri wale ambao wanapenda kuweka bodi kadhaa kuzingatia mradi huu, na kwa mashabiki wa vifaa vya moja kwa moja - kwa hii.
    Zaidi katika maandishi, nadhani una programu, uwezo wa kupona kutokana na kushindwa kwa firmware, na utayari wa majaribio. Bila shaka, nyimbo zinaweza pia kuimbwa kwa wazimu wa jasiri, lakini usiseme baadaye kwamba sikukuonya.
    Kijadi, kila kitu ambacho unakaribia kusoma hapa kimeandikwa kwa madhumuni ya kielimu, mwandishi hana jukumu la uharibifu unaowezekana wa vifaa vyako, faida iliyopotea, upotezaji wa wakati na imani kwa ubinadamu, unatumia programu iliyotolewa kwa hatari yako mwenyewe na hatari. , Nakadhalika.

    UEFITool

    Uchovu wa mapungufu ya huduma zilizopo za kufanya kazi na picha za UEFI (vizuri, zilizopigwa kwa msingi na ugonjwa wa NIH), niliandika shirika la chanzo cha wazi cha jukwaa - UEFITool.
    Hiki ni kihariri cha picha cha UEFI, kilichoandikwa katika C++\Qt, kilichosambazwa chini ya leseni ya BSD, makusanyiko yaliyokamilishwa yamewekwa hapa.
    Mradi unaendelezwa kikamilifu, kwa hivyo msimbo sio mzuri sana na kuna mende. Ukikutana nayo ghafla, nitafurahi kusikia ripoti zako.
    Kufanya kazi kwa kawaida na matumizi, unapaswa kusoma makala zilizopita kuhusu muundo wa picha ya UEFI, vinginevyo haitakuwa wazi kinachoendelea, lakini bado nitajaribu kuelezea baadhi ya pointi. Tutafikiri kwamba hii ni maandalizi ya nyaraka za baadaye.
    Kama mifano katika sehemu zote mbili za kifungu, nitatumia utupaji kamili kutoka kwa Zotac Z77-ITX WiFi (AMI Aptio4) na Dell Vostro 3360 (Phoenix SCT 2.3). Kwa bahati mbaya, sina benchi ya majaribio kwenye jukwaa la Insyde H2O, kwa hivyo sina la kusema juu yake. Labda anajua kidogo zaidi juu yao.
    Kutoka kwa mtazamo wa UEFITool, hakuna tofauti yoyote kati ya picha za UEFI kutoka kwa wazalishaji tofauti, kwa hiyo nitazingatia wakati wa kuelezea patches.
    Kwa hivyo, uzindua UEFITool, fungua picha (Ctrl + O) na uone kitu kama hiki:

    Kwenye upande wa kushoto wa dirisha muundo wa picha wazi unaonyeshwa kwa namna ya mti, upande wa kulia - habari kuhusu kipengele cha mti kilichochaguliwa, chini - ujumbe unaoonyesha makosa katika muundo wa faili, katika kesi hii - matumizi ya watengenezaji wa Phoenix wa sehemu zilizo na aina 0xF0, madhumuni ambayo hayajaelezewa katika vipimo vya UEFI P.I. Kubofya mara mbili kwenye ujumbe kutapanua mti ili kipengele kilichosababisha ujumbe au kipengele chake kikuu kionekane. Matokeo ya utafutaji yanaonyeshwa kwenye dirisha moja, ambalo linaweza kuitwa kwa kubonyeza Ctrl+F (chaguo zote mbili na picha moja):


    Hapa tufafanue istilahi kidogo. Takriban vipengele vyote vya muundo katika picha ya UEFI vina kichwa, ambacho huhifadhi data ya huduma kama vile GUID, sifa, hesabu za hundi, n.k., na mwili, ambao huhifadhi data halisi. Maandishi kwenye vichwa hayahifadhiwa, kwa hivyo uchaguzi huu hauhitajiki kwake.
    Katika ngazi ya kwanza ya mti kuna mikoa ya Flash, katika kesi hii hizi ni Descriptor, ME na BIOS:


    Unapochagua eneo la Descriptor, unaweza kujua mipangilio ya ufikiaji ya mikoa; katika kesi hii, ufikiaji kamili, lakini mipangilio kama hiyo ni nadra sana. Intel inapendekeza kwamba watengenezaji wa vifaa wazuie ufikiaji wa eneo la ME kwa kusoma/kuandika na eneo la Descriptor kwa uandishi, ndiyo sababu kwenye bodi nyingi karibu haiwezekani kuchukua dampo kamili bila "kucheza na matari" kwa kutumia zana zilizojengwa. Unapochagua mkoa wa ME, unaweza kujua toleo la firmware ya ME, lakini ikiwa haijaonyeshwa, hii si nzuri na ni bora si kushona picha hiyo.
    Wacha tusogeze kiwango kimoja chini, kwa yaliyomo kwenye eneo la BIOS:


    Kuna aina mbili za vitu vinavyoweza kupatikana katika ngazi hii: kiasi na nafasi ya bure. Bure katika kesi hii sio lazima tupu, kwa mfano, katika picha hii mwanzoni mwa Padding firmware ya EC imehifadhiwa.
    Kiasi kimegawanywa katika kawaida (muundo wa mfumo wa faili unajulikana), buti (fomati ya FS inajulikana, ina Msingi wa Usalama, inapaswa kubadilishwa kwa tahadhari kali) na haijulikani (ama umbizo la FS haijulikani, au uchanganuzi bado haujakamilika. kutekelezwa). Kwa upande wetu, kiasi cha kwanza baada ya nafasi ya bure mwanzoni ni ya kawaida, kisha mbili zisizojulikana (kwa kweli, ya kwanza huhifadhi NVRAM, na ya pili huhifadhi funguo na hifadhidata ya SecureBoot, lakini sijaelezea hili. kwa programu bado), kiasi cha mwisho kinaweza kuwasha .
    Wacha sasa tufungue kiasi cha kawaida; katika kesi hii, huhifadhi faili zilizopakiwa katika awamu ya DXE.


    Muundo huu (kiasi kikuu ndani ya sehemu iliyoshinikwa) hutumiwa mara nyingi; hukuruhusu kuokoa nafasi nzuri kwenye chip. Kuna chaguo jingine la kushinikiza sio kiasi kizima, lakini kila faili kando - hii ni ya chini ya kiuchumi kwa suala la nafasi, lakini UEFI BIOS huanza haraka, kwa sababu. hakuna maana katika kufungua faili ambazo hazijafikiwa.
    Sasa hebu tuangalie ndani ya faili:


    Data yote ndani yake imehifadhiwa ndani ya sehemu iliyoainishwa na GUID (kichwa cha sehemu kama hizo kawaida huhifadhi saini ya dijiti au cheki, katika kesi hii - 4 ka, sawa na CS, ambayo, hata hivyo, hakuna mtu anayeiangalia), na imegawanywa katika sehemu 4: picha PE32 - faili halisi inayoweza kutekelezwa katika muundo wa PE/COFF, sehemu ya utegemezi wa DXE - huamua mpangilio ambao madereva ya DXE hupakiwa, sehemu ya UI - huhifadhi maandishi "SystemCapsuleRt.efi" katika umbizo la Unicode na sehemu isiyojulikana kama 0xF0 (uwezekano mkubwa zaidi, yaliyomo ndani yake kwa njia fulani Hii inahusiana kwa njia fulani na CS hapo juu).
    Yote hii ni nzuri, bila shaka, lakini uhariri bado hauonekani. Hakuna tatizo, tunaita orodha ya muktadha kwa kipengele chochote, ambacho kinaonyesha kile kinachoweza kufanywa na kipengele hiki.


    Na unaweza kufanya yafuatayo:

    • Hifadhi kipengee kwenye faili kabisa (Toa kama ilivyo) au data tu, bila vichwa (Mwili wa Extract)
    • jenga upya kipengele (Unda upya), katika kesi hii, wakati wa kuhifadhi picha iliyobadilishwa (na vipengele vyake vyote vya mzazi), ukubwa na checksums zitahesabiwa upya, usawa utarekebishwa, i.e. muundo wa picha utaletwa kwa kufuata vipimo vya UEFI PI
    • ingiza kipengee kutoka kwa faili, ama kabla ya ile iliyochaguliwa (Ingiza kabla), au baada ya (Ingiza baada), au ndani yake (Ingiza ndani, katika kesi hii hakuna kitu kinachoweza kuingizwa ndani ya sehemu ya PE32)
    • badilisha kipengee na kipengee kingine kutoka kwa faili, ama kabisa (Badilisha kama ilivyo) au mwili wake tu (Badilisha mwili)
    Hatua ya mwisho ndiyo yenye manufaa zaidi kwa sababu... hukuruhusu kurekebisha sehemu yoyote ya UEFI bila kuathiri muundo wa picha nzima.

    Mfano wa matumizi

    Hebu tuchukue mfano wa marekebisho ambayo ni muhimu kwa watumiaji wa MacOS X kwenye Kompyuta za Kompyuta: kwa kupita mpangilio wa LOCK bit (0x0F) katika sajili ya MSR_PMG_CST_CONFIG_CONTROL (0xE2). Kidogo hiki kimewekwa na kiendeshi cha PowerManagement DXE ili kuzuia OS kudhibiti kizidishi cha CPU kwa kuandika kwa rejista hii. Kwa Windows na Linux hii sio shida kubwa, lakini MacOS X haiwezi kuvumilia uzembe kama huo kutoka kwa UEFI. Unaweza, bila shaka, kuunganisha dereva wa AICPM.kext (katika 10.8) au kernel (katika 10.9), lakini ni bora kuunganisha dereva wa DXE na usiogope kwamba sasisho la moja kwa moja linalofuata litavunja buti. Kiraka hiki kinahitajika tu kwa mifumo kulingana na vichakataji vya Intel SandyBridge, IvyBridge na Haswell na anuwai zao za * -E na hufanywa kama hii:


    Tunamulika picha inayotokana na programu ile ile ya SPI ambayo ilitumiwa kuifanya, na hatupati hofu ya kernel wakati wa kupakia MacOS X.

    Maelezo, marekebisho mengine, hitimisho

    Ikiwa unajiuliza ni wapi muundo wa uchawi "75080FBAE80F" ulitoka na ni sehemu gani zingine zinafaa kuzingatia, soma sehemu ya pili ya nakala hii, ambayo itachapishwa baadaye kidogo. Ndani yake nitajaribu kuandaa mifano zaidi katika muundo "ni aina gani ya marekebisho, kwa nini inahitajika, jinsi ya kuifanya, na nani na jinsi ilipatikana", bila kuingia ndani kila wakati katika jinsi ya kuondoa kipengele cha kurekebishwa na jinsi ya kuiingiza tena.
    Natumaini kwamba makala hiyo haikuonekana kuwa ya kuchosha na yenye kuchosha sana. Ikiwa una maswali au mapendekezo, nitafurahi kusikiliza na kujibu kadri ya uwezo wangu. Nitashukuru zaidi kwa ripoti za hitilafu. Asante mapema na bahati nzuri na firmware.

    P.S. Mpendwa utawala na UFO binafsi, tafadhali tengeneza kitovu cha UEFI kwa machapisho kama haya.

    Kiolesura kati mfumo wa uendeshaji na programu ndogo zinazodhibiti kazi za vifaa vya kiwango cha chini, kusudi lake kuu ni kuanzisha kwa usahihi vifaa wakati mfumo umewashwa na kuhamisha udhibiti kwa kipakiaji cha mfumo wa uendeshaji. EFI imekusudiwa kuchukua nafasi ya BIOS - kiolesura ambacho kijadi kinatumiwa na kila mtu IBM PC sambamba kompyuta za kibinafsi

    Ina maana gani? Hii inamaanisha kuwa njia iliyoelezewa katika Kufunga Ubuntu inaweza isifanye kazi. Mbali na hilo, rims kubwa zinahitaji matumizi ya GPT (badala ya toleo la zamani jedwali la kizigeu katika MBR, ambalo lina kikomo cha nafasi ya diski inayoweza kushughulikiwa cha 2.2 TB = baiti 2.2 × 10¹²)

    Haiwezekani kuthibitisha ukweli wa maagizo hapa chini, lakini mwandishi wa makala hii alisoma mada kadhaa ya jukwaa la Kirusi na Kiingereza na aliweza kufunga ubuntu 12.04.1 kwenye Lenovo B570 siku ya pili. Inatarajiwa kwamba makala hii itakusaidia pia.

    Kwa kuwa EFI ni bootloader maalum, lazima ihifadhiwe mahali fulani; kwa upande wetu, nafasi tofauti imetengwa kwa ajili yake kwenye gari ngumu na Jedwali la GPT sehemu. Wakati kompyuta inapita Utaratibu wa POST, BIOS hutambua kizigeu na bootloader imewekwa kwenye vyombo vya habari vya EFI vilivyounganishwa. Matokeo yake, katika BIOS yenyewe katika orodha ya BOOT (yako inaweza kuwa na jina tofauti, utaratibu wa boot wa vifaa upo) vifaa vya usambazaji vitaonekana pamoja na vifaa.

    jinsi ya kufunga

    A. Kwanza tunahitaji LiveCD (kwa nini LiveCD? Tazama hapa chini) picha ya ufungaji, jinsi ya kuandikwa hapa kupata_ubuntu. Ikiwa tayari unayo diski ya usakinishaji/kiendeshi cha flash, hapa chini ni kwa ajili yako.

    B. Tunaanzisha, kila kitu ni kama hapo awali ufungaji wa kawaida→ kupakia_kutoka_livecd . Kisha, ikiwa mtu ni mzuri na hali ya picha kwa chaguo la lugha inafanya kazi vizuri, wengine wanaweza kupata kitu kisichojulikana (skrini iko katika saizi, unaweza kuona jinsi utepe wa uteuzi unavyosonga ili kuchagua chaguo la kupakua)

    P.S. // Binafsi, wakati wa kupakia kutoka kwa picha mbadala ya maandishi, hii ilitokea wakati wote, hata wakati wa jaribio la usakinishaji//

    Mpangilio wa maandishi ni kama ifuatavyo:

    Jaribu bila usakinishaji Sakinisha Angalia diski kwa makosa

    Kama matokeo, chagua ya kwanza na upakie kwa hali ya picha.

    C. Fungua kituo cha maombi, tafuta grub-pc, uifute, tafuta grub-efi kwa kina kidogo kinachohitajika (64 au 32) na usakinishe.
    UPD. unaweza kuacha grub-kawaida tu, mihimili iliyobaki itapakiwa yenyewe wakati wa usakinishaji (ilinifanyia kazi zote (12.04-12.10 alpha 3), 12.10 beta 1 "haiwezekani kusakinisha bootloader.... ")\\ Chaguo hili halihitajiki na linaweza hata kudhuru usakinishaji tarehe 12.04.1 na 12.10 beta 2 na zaidi.

    E. anza usakinishaji yenyewe, chagua "chaguo lingine" na ugawanye kwa mikono diski "disk_partition". Kwa hivyo kila kitu ni kulingana na mpango:

    Sehemu ya kwanza "tyk" ni boot sehemu ya efi- ikiwa una mfumo mmoja tu, MiB 100 inatosha. Ext4 ya pili, umbizo, sehemu ya mlima "/". - Tunaunda za kimfumo kwa saizi tunazopenda. Linux-swap ya tatu (swap partition) ~ RAM + MiB kadhaa ya Nne, chochote FS unachotaka (nina ext4), mahali pa kuweka "/home"

    Kubwa, kinyago kinakaribia kuisha, chini kabisa unachagua njia ya usakinishaji wa bootloader (lazima kuwe na kitu kama /dev/sda/

    chagua kizigeu cha kwanza na efi, i.e. kwa upande wangu /dev/sda1/

    Tunaweka, fungua upya baada ya kumaliza, nenda kwenye BIOS, kuna orodha ya boot. Vipengee vipya vya "Linux" "Ubuntu" vinapaswa kuonekana, Ubuntu inaweza kusakinishwa kwanza

    Udhibiti wa orodha ya kupakua

    Njia hiyo inafaa kwa kuhariri kutoka mfumo uliowekwa, na LiveCD Tunahitaji yafuatayo matumizi ya console bootmgr.

    Sudo apt-get install efibootmgr

    bootmgr ni maombi maalum kwa kuhariri Kiolesura cha Intel Extensible Firmware (EFI) Meneja wa Boot. Inakuruhusu kuongeza, kubadilisha na kufuta chaguzi za boot.
    Baada ya usakinishaji, fungua terminal na uandike:

    Sudo efibootmgr

    Hii ndio itakupa.(Pamoja na maoni yangu)

    BootCurrent: 000A #ingizo lililopakiwa kwa sasa Muda umekwisha: sekunde 1 #sitisha ili kuonyesha menyu ya uteuzi kabla ya kupakia ili Agizo la Boot: 000A,0002,0009,000B,0003,0004,0005,0006,0007,0008 #Kiwatu cha sasa #0don00 usiguse kichupo cha mpito cha BIOS Boot0001 Menyu ya Boot#Hatugusi menyu ya uteuzi pia. BootXXX ni sehemu za Boot0002* USB FDD: #tunavutiwa na nambari, i.e. 0003 na kadhalika. Boot0003* ata SSD: boot0004* ATA HDD: WDC WD5000BPVT-24HXZT3 Boot0005* ATAPI CD: TSSTCORP CDDVDW TS-L633F Boot0006* USB HDD: Kingston DT 101 G2 Boot0007* Boot8 Windows Boot Meneja Boot000A* Ubuntu Boot000B* Linux

    Kama unaweza kuona kutoka kwa hili, nina maingizo 2 yasiyo ya lazima (Windows, Linux), wacha tuangalie maagizo rasmi.
    hmm.. Sikuelewa chochote, lakini baada ya kuzunguka zaidi kidogo, hii ndio nilipata: Ili kufuta ingizo lolote, unahitaji kuingiza amri kama:

    Sudo efibootmgr --bootnum xxxx --delete-bootnum

    Kuondoa kiingilio cha Kidhibiti cha Boot cha Windows

    Ambapo xxxx Hii ndio nambari ya hex ya rekodi ya buti, inaweza kufupishwa, kwa mfano katika kesi yangu kwa ondoa Windows unahitaji kuingia:

    Sudo efibootmgr --bootnum 9 --delete-bootnum

    Mara tu baada ya hii, koni itaripoti matokeo:

    Bootnext: 0009 Bootcurrent: 000a Muda umekwisha: Sekunde 1 Agizo la kuwasha: 000a, 0002,000b, 0003,0004,0005,0006,0007,0008 BOOTUP BOOTP BOOT0001 BOOT0001 BOOT0000 USB0000 USB FODD0000000 USB FODD00000000000000 USB FODD00000000000000 FODDC 5000BPVT -24HXZT3 Boot0005* ATAPI CD: TSSTcorp CDDVDW TS-L633F Boot0006* USB HDD: Kingston DT 101 G2 Boot0007* USB CD: Boot0008* PCI LAN: Realtek PXE B03 D00 Boot000A* Ubuntu Linux Boot00

    Inaondoa ingizo la Linux

    Sasa futa ingizo la Linux

    Sudo efibootmgr --bootnum B --delete-bootnum

    Baada ya kuwasha upya tunapata uzuri huu:

    BootCurrent: 0009 Timeout: Sekunde 1 Bootorder: 0009,0004,0005,0008,0002,0003,0006,0007 Boot0000 Boot0001 Boot Menyu ya Boot0002* USB FDD: Boot0003* ATA SSD: Boot0004* ATA HDD: WDC WD5000BPVT-25 * CD ya ATAPI: TSSTcorp CDDVDW TS-L633F Boot0006* USB HDD: Boot0007* USB CD: Boot0008* PCI LAN: Realtek PXE B03 D00 Boot0009* ubuntu

    Kuhariri kusitisha

    Ikiwa unahitaji kuhariri pause, fanya yafuatayo:

    Sudo efibootmgr -t 5

    katika pato:

    BootNext: 0009 BootCurrent: 000A Timeout: Sekunde 5 #kama unavyoona thamani imebadilika BootOrder: 000A,0002,000B,0003,0004,0005,0006,0007,0008 Boot0000 Setup Me Boot00003 Boot0 USB Bootnu000 ATA SSD: Boot0004 * ATA HDD: WDC WD5000BPVT-24HXZT3 Boot0005* ATAPI CD: TSSTcorp CDDVDW TS-L633F Boot0006* USB HDD: Kingston DT 101 G2 Boot0007* USB CD: Boot0007* USB CD: Boot0008 ubuntu0 PCK0000 Ubuntu Halisi DK30 PCK Ubuntu00 PCK00008 Ubuntu00 PCK00008

    Makala haya hayajakamilika. Tafadhali, ikiwa una ujuzi unaofaa na wakati fulani wa bure, jaribu kuboresha makala hii. * grub-efi inapaswa kusakinisha kiotomatiki, lakini kunaweza kuwa na hitilafu nayo na 12.10 beta 1, sikuweza kuisanikisha kabisa (haikuweza kusakinisha bootloader), kwa hivyo kwa ujumla ni bora kuisanikisha kwa mikono kupitia programu. kituo*