실제로 Linux에서 펌웨어를 플래시하는 방법은 무엇입니까?


15

글쎄, 나는 일반적인 벤더 특정 방법을 통해 여러 펌웨어를 업그레이드하기 위해 여러 번의 후프를 뛰어 넘기에는 너무 오래되었다고 생각합니다. 일부 DOS 도구를 다운로드하고 (무료) DOS 부트 매체를 만들고 시간을 낭비하여 BIOS를 만드는 데 더 많은 시간을 낭비하십시오 실제로 부팅해서 펌웨어 업그레이드를합니다.

이것은 1980 년대입니다.

나는 Coreboot 프로젝트 에서 리눅스 플래시 도구 를 발견했다 . 다양한 플래시 칩을 지원하는 것 같습니다. 그러나 실제로 어떻게 작동합니까?

공급 업체가 제공 한 펌웨어 업그레이드를 올바른 형식으로 변환하는 데는 몇 가지 함정이 있습니다. 또는 올바른 대상 칩을 식별하는 것은 어떻습니까?

현재 예를 들어 업그레이드해야 할 수도 있습니다.

  • 일부 Seagate 1.5TB 디스크의 펌웨어
  • 구형 Abit Athlon 64 보드의 펌웨어 (Award bios)
  • Thinkpad의 바이오스 / 임베디드 컨트롤러 바이오스

Linux 시스템에서 장치 펌웨어를 어떻게 업그레이드합니까?

답변:


11

FreeDOS로 깜박임, 한 번의 재부팅 및 이동식 장치 없음

  1. GRUB2를 사용하고 있는지 확인하십시오 ( grub-pc우분투에 패키지가 설치되어 있는지 확인하십시오 )
  2. SYSLINUX의 MEMDISK를 확보하십시오. 우분투에서 패키지를 설치하면 syslinux-commonmemdisk가/usr/lib/syslinux/memdisk
  3. fdboot.img를 다운로드 하여 홈 디렉토리 또는 미국 키보드 레이아웃으로 쉽게 입력 할 수있는 다른 디렉토리에 저장하십시오
  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. 파티션 목록을 보려면 tab을 다시 한 번 누르십시오. /usr/lib/syslinuxLinux 설치에서 파티션 이 마운트되어 있어야 합니다.
    4. 이제 하드 디스크 및 파티션 사양이 지정되었으므로 다음과 같이 경로를 완성 할 수 있습니다 linux16 (hd0,msdos3)/usr/lib/syslinux/memdisk. 엔터 키를 치시오.
  8. FreeDOS로드 :
    1. 동일한 탭 완성을 사용하여를 찾지 fdboot.imginitrd16대신 명령을 사용하십시오 linux16. 다음과 같은 줄로 끝납니다 initrd16 (hd0,msdos3)/home/janus/fdboot.img. 엔터 키를 치시오.
  9. 작성 boot하고 Enter를 누르십시오.
  10. FreeDOS 부팅 메뉴가 나타납니다.
  11. 드라이버가 필요하지 않으므로 "안전 모드"옵션을 선택하십시오.
  12. DOS 프롬프트에서 펌웨어 플래시 실행 파일의 이름을 작성하십시오 (예 :) FLASH.EXE. 엔터 키를 치시오.
  13. 깜박임이 끝날 때까지 기다리십시오.
  14. 펌웨어 자동 점멸 장치가 시스템 자체를 부팅하거나 프롬프트가 다시 표시 될 수 있습니다. 프롬프트가 표시되면 Control-Alt-Delete를 눌러 재부팅하십시오.
  15. GRUB 구성을 영구적으로 변경하지 않았으므로 기본 OS로 바로 부팅됩니다.

이미지에 충분한 공간이 없으면 chtaube.eu 에서 가장 작은 이미지를 사용하십시오 . 이미지를 압축 해제하고 필터링하십시오 xxd. 이제 55aa를 검색 하십시오 . 에 있어야합니다 0x1fe. offset=$((0x200))추가 마운트 플래그로 이미지를 마운트 할 수 있습니다 . 것을주의 $(())구문은 Bash 전용이지만, 또한 zsh을에서 작동합니다.

또는 https://www.fladi.at/posts/large-freedos-boot-image/를 참조 하십시오.


기존 답변을 복제하는 대신 업데이트해야합니다.
maxschlepzig

grub.cfg에 해당 줄을 넣어 메뉴 항목으로 만드는 것이 좋습니다. 쉽게 복사하여 붙여 넣거나 실제 텍스트 편집기를 사용하여 다시 입력하십시오.
derobert

@derobert : Grub2 장치와 파티션 ID를 어떻게 안정적으로 찾습니까? 구성으로 굽는 경우 알아야합니다. 이것이 탭 완성이 좋은 이유입니다.
야누스 트롤

1
@derobert : Grub2에 대해 이야기하고 있습니까? 그 형식은 나에게 Grub0. *처럼 보인다. msdos접두사 는 언제 입니까? 질문을 올리면 답변을 드리겠습니다. 알려주세요.
야누스 트로 엘슨

1
grub1과 grub2 인 @ysangkok, msdos는 파티션 유형일뿐입니다 ... 물어볼 질문이 없습니다.
derobert

7

업그레이드 가능한 펌웨어가있는 모든 장치에는 고유 한 방법이있을 것입니다. 이와 관련하여 마더 보드는 특히 호환되지 않습니다.

다시 한 번 하드 드라이브에 관해서는 이것은 독점적 인 문제입니다. Seagate Linux 또는 Unix 도구가 아닌 펌웨어 업데이트를 수행하기 위해 liveCD 및 Windows 다운로드를 제공 합니다.

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. .ima를 USB 썸 드라이브에 추가 : dd if=./PH-CC49.ima of=/dev/sdX bs=512k
  4. 컴퓨터를 끄고 플래시 드라이브를 제외한 모든 드라이브를 분리하십시오
  5. USB-thumb 드라이브에서 부팅 (Seagate 펌웨어 업데이트 유틸리티로 부팅)
  6. 화면 지시에 따라 드라이브를 플래시하십시오.
  7. 전원을 끄고 다시 연결 한 다음 전원을 켜십시오.

그게 다야! Windows 없음, 부피가 큰 CD 없음, Grub 편집 없음, FreeDos 없음, 색다른 Windows .exe 없음 (시도했지만 불분명 한 오류 메시지로 실패)

크레딧은 출처 : http://ubuntuaddicted.blogspot.ca/2014/10/seagate-firmware-flash-using-usb.html(PH-CC49.ima 를 검색하여 찾음)


(? 같은 사람처럼 보였다) 그냥 다른 답변을 당신에게 답변을 링크 할 곳 주었다 linuxquestions.org/questions/linux-hardware-18/...
피터 Teoh

네, 두 사이트 모두에 답을 복사하여 붙여 넣었습니다. 다시 한 번 신용은 소스로갑니다.
Alecz

2

내 seagate ST2000NM0024-1HT174의 경우 이렇게했습니다. seagate에서 펌웨어를 다운로드하여 USB 키에 저장했습니다. 리눅스 민트 메이트 17.3의 라이브 USB (또는 DVD)로 내 PC를 재부팅했습니다. 데스크탑에서 모든 씨게이트 유틸리티를 직접 압축 해제하십시오. 터미널에 펌웨어를 복사 한 다음 명령을 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 = 펌웨어 하드 디스크)

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

바이오스가 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에 저장됩니다.

공급 업체 펌웨어 파일은 파일을 포함하는 zip 아카이브 awdflash.exe와 패키지 파일로 패키지 BIN됩니다 (예 :) 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으로 아직 구현되지 않은 마더 보드 특정 보드 활성화 (예 : 쓰기 방지 비활성화) 코드 로 인해 플래시 쓰기가 실패 할 수 있습니다 .

0

작은 경험으로 Flashrom을 사용하여 인텔 마더 보드 BIOS를 업데이트했는데 제대로 작동했습니다. 일반적으로 정말 멋진 도구 인 것 같습니다.


그에 사용한 예제 명령 줄을 게시 할 수 있습니까?
maxschlepzig

0

앞서 언급 한 GRUB로 부팅 한 DOS 업그레이드 플로피를 사용하면 대부분의 하드웨어에서 작동합니다. 경우에 따라 기본 도구를 찾을 수 있습니다. Dell은 배포 패키지 시스템과 통합되는 리포지토리도 준비합니다.

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

안타깝게도 대부분의 업데이트는 컴퓨터를 재부팅해야 완료됩니다.


0

시험:

hdparm --fwdownload (그리고 매우 조심하십시오!)

그러나 조심하십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.