web-dev-qa-db-ja.com

実際にLinuxでファームウェアをフラッシュする方法は?

さて、私はいくつかの非常に古いフープをジャンプして、通常のベンダー固有の方法でいくつかのファームウェアをアップグレードするには古すぎると感じています。それから実際に起動し、最後にファームウェアのアップグレードをフラッシュします。

これは1980居住地域です。

Corebootプロジェクト から linux flash tool に出くわしました。様々なフラッシュチップをサポートしているようです。しかし、それは実際にはどのように機能しますか?

ベンダー提供のファームウェアアップグレードを正しい形式に変換する際にいくつかの落とし穴があると思います。または、正しい宛先チップを特定するのはどうですか?

現在、例えば私はおそらくアップグレードする必要があります:

  • 一部のSeagate 1.5のファームウェアTBディスク
  • 古いAbit Athlon 64ボード(Award bios)のファームウェア
  • Bios/Embedded-Controller-ThinkpadのBIOS

Linuxシステムでデバイスのファームウェアをどのようにアップグレードしますか?

15
maxschlepzig

FreeDOSでフラッシュ、1回の再起動、リムーバブルデバイスなし

  1. GRUB2を使用していることを確認してください(Ubuntuに_grub-pc_パッケージがインストールされているかどうかを確認してください)
  2. SYSLINUXのMEMDISKを入手します。 Ubuntuで、パッケージ_syslinux-common_をインストールすると、memdiskは_/usr/lib/syslinux/memdisk_に配置されます
  3. ダウンロード fdboot.img 、ホームディレクトリ、またはUSキーボードレイアウトで簡単に入力できる他のディレクトリに保存します。
  4. FreeDOSイメージにフラッシュソフトウェアを埋め込む:
    1. _Sudo -s_
    2. _mkdir -p /mnt/floppy_
    3. _mount -o loop -t msdos fdboot.img /mnt/floppy_
    4. _cp -via FLASH.EXE BIOS.IMG /mnt/floppy/_(_FLASH.EXE_および_BIOS.IMG_は例です)
    5. _umount /mnt/floppy_
  5. システムを起動してGRUB2で中断します(ESCを押します)
  6. Cを押してGRUB2のコマンドラインに入ります。
  7. MEMDISKをロード:
    1. _linux16 (hd_と入力します。次にタブを押します。ハードディスクのリストが表示されます。
    2. たとえば、行が_linux16 (hd0,_となるようにハードディスクの選択を完了します。
    3. もう一度タブを押すと、パーティションのリストが表示されます。 Linuxインストールで、_/usr/lib/syslinux_がマウントされているパーティションを見つける必要があります。
    4. これでハードディスクとパーティションの指定ができたので、linux16 (hd0,msdos3)/usr/lib/syslinux/memdiskのようにパスを完成させることができます。 Enterキーを押します。
  8. FreeDOSをロードします:
    1. 同じタブ補完を使用して_fdboot.img_を検索しますが、_initrd16_ではなく_linux16_コマンドを使用します。次のような行になります:initrd16 (hd0,msdos3)/home/janus/fdboot.img。 Enterキーを押します。
  9. bootと入力して、Enterキーを押します。
  10. FreeDOSブートメニューが表示されます。
  11. ドライバーは必要ないので、「セーフモード」オプションを選択してください。
  12. DOSプロンプトで、ファームウェアフラッシュ実行可能ファイルの名前を記述します(例:_FLASH.EXE_)。 Enterキーを押します。
  13. 点滅が終わるのを待ちます。
  14. ファームウェアフラッシャーがマシン自体を起動するか、プロンプトが表示されることがあります。プロンプトが表示されたら、Control-Alt-Deleteキーを押して再起動します。
  15. GRUB構成を永続的に変更していないため、デフォルトのOSですぐに起動します。

画像に十分なスペースがない場合は、 chtaube.e の最小の画像を使用します。画像を解凍し、xxdでフィルタリングします。 55aa を検索します。 _0x1fe_にあるはずです。追加のマウントフラグとしてoffset=$((0x200))を使用してイメージをマウントできます。 $(())構文はBash固有ですが、Zshでも機能することに注意してください。

または、 https://www.fladi.at/posts/large-freedos-boot-image/ を参照してください

11
Janus Troelsen

アップグレード可能なファームウェアを備えたすべてのデバイスには、おそらくそれを行うための独自の方法があるでしょう。特にマザーボードは、この点で互換性がないことで有名です。

ハードドライブに関しても、これは専有事項です。 Seagate 提供する liveCDとWindowsをダウンロードしてファームウェアを更新しますが、LinuxまたはUnixツールは実行しません。

GRUBから起動できるThinkpad BIOSアップデート用に 起動可能なイメージ をビルドできます。

それ以外の場合は、ツールについてメーカーに確認する必要があります。

一方、マイクロコントローラーを使用している場合は、かなり普遍的なツールを使用してそれらをプログラムできますが、それでもまだ限定的です(たとえば、Atmelチップは通常avrdudeを使用してプログラムできます)。

7
greyfade

seagate 3TBビデオ(ST3000VX000-9YW1)の場合:

sg_write_buffer -v -m 5 -I <FW file> <dev>
6
user30578

Seagate Barracuda 7200.12 ST31000528AS(1TB SATA)ドライブを次の方法で正常にフラッシュしました:(自己責任で使用してください!

  1. SeagateからISOをダウンロード: http://www.seagate.com/staticfiles/support/downloads/firmware/Barracuda12-ALL-CC49.iso
  2. マウント/抽出PH-CC49.ima .isoファイルから
  3. .imaをUSBサムドライブに追加します:dd if=./PH-CC49.ima of=/dev/sdX bs=512k
  4. コンピュータの電源を切り、フラッシュするドライブ以外のすべてのドライブを取り外します
  5. USBサムドライブから起動します(これにより、Seagateファームウェアアップデートユーティリティが起動します。
  6. 画面上の簡単な指示に従ってドライブをフラッシュします
  7. 電源を切り、すべてを再接続し、電源を入れます

それでおしまい! Windowsなし、かさばるCDなし、Grub編集なし、FreeDosなし、不安定なWindows .exeなし(試してみましたが、不明瞭なエラーメッセージで失敗しました)

クレジットはソースに送られます: http://ubuntuaddicted.blogspot.ca/2014/10/seagate-firmware-flash-using-usb.html (PH-CC49.imaを検索して見つけました)

3
Alecz

flashrom を使用して、マザーボードのBIOSを更新できます。

例(Abit KN9 Ultra):

ボードは、2006年にリリースされたAMD Athlon 64ボード、AM2ソケット、Nvidiaチップセットです。交換可能な256 KBのフラッシュチップが搭載されています。 BIOSには、フェニックスの商標のように見える「賞」というラベルが付いています。

Flashromはそのチップセットとそのフラッシュチップをサポートしています。

サポートは次のようなコマンドでテストできます。

# flashrom --programmer internal
Calibrating delay loop... OK.
Found chipset "NVIDIA MCP55".
Enabling flash write... OK.
Enabling full flash access for board "abit KN9 Ultra"... OK.
Found PMC flash chip "Pm49FL004" (512 kB, LPC, FWH) mapped at physical address 0x00000000fff80000.

最初にフラッシュチップの現在の内容をバックアップすることは理にかなっています。

# flashrom --programmer internal -c Pm49FL004 -r backup.bin

次に、ベンダーからのバニライメージファイルと比較できます(例:xxdおよびvimdiffを使用)。

BIOSによっては追加情報(DMIなど)と構成(MACアドレスなど)をフラッシュに保存するため、いくつかの違いが予想されます。これは、Abit KN9 Ultraにも当てはまります。 DMIデータは最初の1872バイトに保存され、起動時にBIOSによって簡単に再生成されます。 MACアドレスはオフセット0x74E30に格納されます。

ベンダーファームウェアファイルは、awdflash.exeおよびBINファイルを含むZipアーカイブにパッケージ化されています。 M520A_23.BIN。この例では、binファイルにはBIOSイメージがそのまま含まれています。つまり、次のようなコマンドを使用して、フラッシュチップから直接書き込むことができます。

# flashrom --programmer internal -c Pm49FL004 -w M520A_23.BIN

Calibrating delay loop... OK.
Found chipset "NVIDIA MCP55".
Enabling flash write... OK.
Enabling full flash access for board "abit KN9 Ultra"... OK.
Found PMC flash chip "Pm49FL004" (512 kB, LPC, FWH) mapped at physical address 0x00000000fff80000.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.

更新によっては、次回の再起動のために [〜#〜] cmos [〜#〜] をクリアする必要がある場合があります-そうしないと、BIOSが起動しない場合があります。そのボードではCMOSはジャンパー設定でクリアできます。ソフトウェアでのクリアも可能です(例: CmosPwd ))。

一意のデフォルトMACアドレスを維持するために、フラッシュする前に新しいベンダーのイメージにパッチを適用できます。例:

dd if=backup.bin of=mac.bin bs=1 count=16 skip=$(echo 16 i 74E30 p | dc)
dd if=mac.bin of=M520A_23_with_mac.bin bs=1 seek=$(echo 16 i 74E30 p | dc) \
   conv=notrunc

落とし穴:

  • Flashromによってまだ実装されていないマザーボード固有の board enable (つまり、書き込み保護を無効にするための)コードが原因で、フラッシュ書き込みが失敗する可能性があります。
1
maxschlepzig

GRUBで起動したDOSアップグレードフロッピーを使用すると、前述のように大部分のハードウェアで機能します。場合によっては、ネイティブツールを見つけることができます。デルは、ディストリビューションパッケージシステムと統合するリポジトリも用意しています。

http://linux.Dell.com/wiki/index.php/Repository/firmware

悲しいことに、ほとんどのアップデートは完了するためにマシンの再起動を必要とします。

0
zdzichu

試してください:

hdparm --fwdownload (そして非常に注意してください!)

ただし、注意してください。

0
Stoatwblr