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


15

さて、私はいくつかの燃えるようなフープを飛び越えて、通常のベンダー固有の方法でいくつかのファームウェアをアップグレードするには古すぎると感じています:いくつかのDOSツールをダウンロードし、(Free-)DOSブートメディアを作成してBIOSを作るために時間を浪費します実際にそこから起動し、最後にファームウェアのアップグレードをフラッシュします。

これは1980年です。

私はいくつかのに遭遇LinuxのフラッシュツールからCorebootプロジェクト。さまざまなフラッシュチップをサポートしているようです。しかし、実際にはどのように機能しますか?

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

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

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

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

回答:


11

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

  1. GRUB2を使用していることを確認してください(パッケージgrub-pcがUbuntuにインストールされているかどうかを確認してください)
  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. もう一度タブを押して、パーティションのリストを取得します。/usr/lib/syslinuxLinuxインストールでマウントされているパーティションを見つける必要があります。
    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.euの最小の画像を使用してください。ただし、イメージを圧縮解除してフィルタリングしますxxd55aaを検索します。にあるはず0x1feです。offset=$((0x200))追加のマウントフラグとしてイメージをマウントできます。$(())構文はBash固有ですが、Zshでも機能することに注意してください。

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


既存の回答を複製するのではなく、更新する必要があります。
maxschlepzig

これらの行をgrub.cfgに入れてメニューエントリにすることをお勧めします。それらを簡単にコピーして貼り付けるか、少なくとも実際のテキストエディタを使用して再入力します。
デロバート

@derobert:Grub2デバイスとパーティションIDを確実に見つけるにはどうすればよいですか?configにベイクする場合は、そのことを知る必要があります。そのため、タブ補完は便利です。
ヤヌストロエルセン

1
@derobert:Grub2について話しているのですか?この形式は、私にとってはGrub0。*のように見えます。いつmsdos追加されますか?あなたがそれを投稿する場合、私はあなたの質問に答えようとします。お知らせ下さい。
ヤヌストロエルセン

1
@ysangkokはgrub1とgrub2の両方です。msdosは単なるパーティションタイプです...質問する必要はありません。
デロバート

7

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

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

GRUBから起動できるThinkpad BIOS更新用の起動可能イメージを構築できます。

それ以外の場合は、製造元にツールを確認する必要があります。

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


6

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

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

3

次の方法で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. ddをUSBサムドライブに追加します。 dd if=./PH-CC49.ima of=/dev/sdX bs=512k
  4. コンピュータの電源を切り、フラッシュするドライブを除くすべてのドライブを取り外します
  5. USBサムドライブから起動します(これによりSeagate Firmware updateユーティリティが起動します
  6. 画面の簡単な指示に従って、ドライブをフラッシュします
  7. 電源を切り、すべてを再接続して、電源を入れます

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

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


ちょうどあなたが別の答えにあなたの答えをリンクさせたい他の場所で与えた:(同じ人のように見えた?) linuxquestions.org/questions/linux-hardware-18/...
ピーターTeohさん

はい、それは私が両方のサイトに私の答えをコピー&ペーストしたことです。繰り返しますが、クレジットはソースに送られます。
アレッツ

2

シーゲイトST2000NM0024-1HT174では、シーゲイトからファームウェアをダウンロードし、USBキーに保存しました。Linux Mint Mate 17.3のライブUSB(またはDVD)でPCを再起動しました。すべてのseagateユーティリティをデスクトップで直接解凍します。ファームウェアをデスクトップのコマンドにコピーし、ターミナルを開いて次のように記述した後、コマンドseaflashlin_33_054の名前をseaflashlinに変更しました。

mint@mint ~ $ sudo su    (enter in Superuser live mint)

mint mint # cd Desktop

mint Desktop # ./seaflashlin

bash: ./seaflashlin: Permission denied 

(エラー!許可ファイルを変更します)

mint Desktop # ls -l
total 69284
drwxr-xr-x 5 mint mint      120 Nov  3 11:14 EntCap-Makara-SATA-SN05
-rw-r--r-- 1 mint mint 68386705 Nov  2 19:36 EntCap-Makara-SATA-SN05.zip
-rw-r--r-- 1 mint mint  2032640 Sep 10  2015 MakaraEntCapSATA-STD-512E-SN05.LOD
-rw-r--r-- 1 mint mint      312 Dec 17  2015 MK-SN05.CFS
-rw-r--r-- 1 mint mint   369127 Sep 11  2015 READMEFIRST-EnterpriseCapacity3.5-Makara-SATA firmware update.pdf
-rw-r--r-- 1 mint mint   104280 Oct 26  2015 seaflashlin
-rw-r--r-- 1 mint mint    31848 Oct 26  2015 seaflashlin.046.txt
-rwxr-xr-x 1 mint mint     7874 Nov  3 11:13 ubiquity.desktop

mint Desktop # chmod ugo+rxw *

mint Desktop # ls -l

total 69284
drwxrwxrwx 5 mint mint      120 Nov  3 11:14 EntCap-Makara-SATA-SN05
-rwxrwxrwx 1 mint mint 68386705 Nov  2 19:36 EntCap-Makara-SATA-SN05.zip
-rwxrwxrwx 1 mint mint  2032640 Sep 10  2015 MakaraEntCapSATA-STD-512E-SN05.LOD
-rwxrwxrwx 1 mint mint      312 Dec 17  2015 MK-SN05.CFS
-rwxrwxrwx 1 mint mint   369127 Sep 11  2015 READMEFIRST-EnterpriseCapacity3.5-Makara-SATA firmware update.pdf
-rwxrwxrwx 1 mint mint   104280 Oct 26  2015 seaflashlin
-rwxrwxrwx 1 mint mint    31848 Oct 26  2015 seaflashlin.046.txt
-rwxrwxrwx 1 mint mint     7874 Nov  3 11:13 ubiquity.desktop

mint Desktop # ./seaflashlin  

usage:
seaflashlin_i386 {-m <model_number> -f <fw_file> | -c <cfs_file>} [-d <sg_device>]
seaflashlin_i386 -f <fw_file> -d <sg_device>

Options:
    -i  PRINT IDENT INFO
    -v  PRINT VERSION AND EXIT (overrides all other arguments)
    -l  SHOW LICENSE
    -o  TIMEOUT VALUE (seconds)
    -x  TEST CFS FILE
Modes supported:
    -e  DEFERRED SIZE (ATA ONLY)
    -s  SEGMENT SIZE (1 segment = 512 bytes)
    -p  FORCE ATA PASSTHROUGH
    -w  FORCE WRITE BUFFER CMD
    -u  NON-SEGMENTED
e.g:
    seaflashlin_i386 -s 64 -f test.lod -d /dev/sg0
returns:
    0    No error found
    1    Fatal error in command line options
    2    FW Download Failed
    3    Invalid device

mint Desktop # ./seaflashlin -i

================================================================================
 Seagate Firmware Download Utility v0.4.6 Build Date: Oct 26 2015
 Copyright (c) 2014 Seagate Technology LLC, All Rights Reserved
 Thu Nov  3 11:20:52 2016
================================================================================
ATA       /dev/sg0 MN: ST2000NM0024-1HT174     SN: Z4H010XY             FW: SN02
PIONEER   /dev/sg1 MN: DVD-RW  DVR-221         SN:                      FW: 1.00
PIONEER   /dev/sg2 MN: DVD-RW  DVR-221         SN:                      FW: 1.00
SanDisk   /dev/sg3 MN: Cruzer Micro            SN:                      FW: 8.02

(これにより、ファームウェアがSN02バージョンであり、HDが/ dev / sg0にあることが確認されます)

これでBIOSをフラッシュできます:(xxx.LOD = firmware hard disk)

mint Desktop # ./seaflashlin -f MakaraEntCapSATA-STD-512E-SN05.LOD -d /dev/sg0

================================================================================
 Seagate Firmware Download Utility v0.4.6 Build Date: Oct 26 2015
 Copyright (c) 2014 Seagate Technology LLC, All Rights Reserved
 Thu Nov  3 11:26:21 2016
================================================================================
Flashing microcode file MakaraEntCapSATA-STD-512E-SN05.LOD to /dev/sg0
 .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  :  !
Microcode Download to /dev/sg0 SUCCESSFUL

mint Desktop # ./seaflashlin -i
================================================================================
 Seagate Firmware Download Utility v0.4.6 Build Date: Oct 26 2015
 Copyright (c) 2014 Seagate Technology LLC, All Rights Reserved
 Thu Nov  3 11:26:45 2016
================================================================================
ATA       /dev/sg0 MN: ST2000NM0024-1HT174     SN: Z4H010XY             FW: SN05
PIONEER   /dev/sg1 MN: DVD-RW  DVR-221         SN:                      FW: 1.00
PIONEER   /dev/sg2 MN: DVD-RW  DVR-221         SN:                      FW: 1.00
SanDisk   /dev/sg3 MN: Cruzer Micro            SN:                      FW: 8.02

BIOSがSN02からSN05に変更されたことを確認する

非常に危険です、あなた自身の責任でこれを使用してください!

幸運を !


1

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

例(Abit KN9 Ultra):

ボードは、2006年からリリースされたAMD Athlon 64ボード、AM2ソケット、Nvidiaチップセットです。256KBのフラッシュチップは交換可能です。BIOSには「Award」というラベルが付いていますが、これはPhoenixの商標のようです。

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

落とし穴:

  • フラッシュ書き込みは、フラッシュROMによってまだ実装されていないマザーボード固有のボードイネーブル(書き込み保護を無効にするため)コードが原因で失敗する場合があります。

0

私の小さな経験では、Flashromを使用してIntelマザーボードBIOSを更新しましたが、正常に機能しました。一般的に、それは本当に素晴らしいツールのようです。


そのために使用したコマンドラインの例を投稿できますか?
maxschlepzig

0

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

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

残念なことに、ほとんどの更新を完了するにはマシンの再起動が必要です。


0

試してください:

hdparm --fwdownload (そして非常に慎重に!)

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.