BIOS ブートスプラッシュ画面を変更するにはどうすればよいですか?

BIOS ブートスプラッシュ画面を変更するにはどうすればよいですか?

私は Dell PC を持っていますが、起動するたびに非常に醜くて不吉なエイリアンの顔が表示されます。これを変更したり、永久に無効にしたりしたいのですが、BIOS にはオプションがありません。

現在実行中の Linux Fedora または ArchLinux からこれを変更するにはどうすればよいですか?

以下を試しても機能しません。http://www.pixelbeat.org/docs/bios/

./flashrom -r  firmware.old   #save current flash ROM just in case
./flashrom -wv firmware.new   #write and verify new flash ROM image

また試した:

$ 猫cc

#include <stdio.h>
#include <inttypes.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#define lengthof(x) (sizeof(x)/sizeof(x[0]))

uint16_t checksum(const uint8_t* data, int len)
{
    uint16_t sum = 0;

    int i;
    for (i=0; i<len; i++)
        sum+=*(data+i);

    return htons(sum);
}

void usage(void)
{
    fprintf(stderr,"Usage: therm_limit [0,50,53,56,60,63,66,70]\n");
    fprintf(stderr,"Report therm limit of terminal in BIOS\n");
    fprintf(stderr,"If temp specifed, it is changed if required.\n");
    exit(EXIT_FAILURE);
}

#define CHKSUM_START 51
#define CHKSUM_END 109

#define THERM_OFFSET 67
#define THERM_SHIFT 0
#define THERM_MASK (0x7 << THERM_SHIFT)
#define THERM_OFF 0
uint8_t thermal_limits[]={0,50,53,56,60,63,66,70};
#define THERM_MAX (lengthof(thermal_limits)-1)

#define DEV_NVRAM "/dev/nvram"
#define NVRAM_MAX 114
uint8_t nvram[NVRAM_MAX];

int main(int argc, char* argv[])
{
    int therm_request = -1;

    if (argc>2) usage();
    if (argc==2) {
        if (*argv[1]=='-') usage();
        therm_request=atoi(argv[1]);
        int i;
        for (i=0; i<lengthof(thermal_limits); i++)
            if (thermal_limits[i]==therm_request)
                break;
        if (i==lengthof(thermal_limits))
            usage();
        else
            therm_request=i;
    }

    int fd_nvram=open(DEV_NVRAM, O_RDWR);
    if (fd_nvram < 0) {
        fprintf(stderr,"Error opening %s [%m]\n", DEV_NVRAM);
        exit(EXIT_FAILURE);
    }
    if (read(fd_nvram, nvram, sizeof(nvram))==-1) {
        fprintf(stderr,"Error reading %s [%m]\n", DEV_NVRAM);
        close(fd_nvram);
        exit(EXIT_FAILURE);
    }

    uint16_t chksum = *(uint16_t*)(nvram+CHKSUM_END);
    printf("%04X\n",chksum); exit(0);
    if (chksum == checksum(nvram+CHKSUM_START, CHKSUM_END-CHKSUM_START)) {

        uint8_t therm_byte = *(uint16_t*)(nvram+THERM_OFFSET);
        uint8_t therm_status=(therm_byte & THERM_MASK) >> THERM_SHIFT;

        printf("Current thermal limit: %d°C\n", thermal_limits[therm_status]);

        if (
            (therm_status == therm_request)
           ) therm_request=-1;

        if (therm_request != -1) {

            if (therm_status != therm_request)
                printf("Setting thermal limit to %d°C\n", thermal_limits[therm_request]);

            uint8_t new_therm_byte = (therm_byte & ~THERM_MASK) | (therm_request << THERM_SHIFT);
            *(uint8_t*)(nvram+THERM_OFFSET) = new_therm_byte;

            *(uint16_t*)(nvram+CHKSUM_END) = checksum(nvram+CHKSUM_START, CHKSUM_END-CHKSUM_START);
            (void) lseek(fd_nvram,0,SEEK_SET);
            if (write(fd_nvram, nvram, sizeof(nvram))!=sizeof(nvram)) {
                fprintf(stderr,"Error writing %s [%m]\n", DEV_NVRAM);
                close(fd_nvram);
                exit(EXIT_FAILURE);
            }
        }
    } else {
        fprintf(stderr,"checksum failed. Aborting\n");
        close(fd_nvram);
        exit(EXIT_FAILURE);
    }
    return EXIT_SUCCESS;
}

$ gcc c.c -o bios
# ./bios 
16DB

答え1

あなたが投稿したコードは、BIOS スプラッシュの変更とはまったく関係ありません (特定の BIOS のサーマル リブート設定を変更するためのものです)。実際、それが構築された特定の BIOS 以外では、非常に不満のあるマシンになります。

通常、ハードウェア プロバイダーが BIOS スプラッシュ イメージを変更できるのは、ハードウェア プロバイダーが変更方法を提供している場合のみです。私が購入したマザーボードの多くには、BIOS イメージ ファイルと選択したイメージを取得して新しい BIOS イメージを生成し、それを通常どおりフラッシュするユーティリティが付属しています。ただし、これは通常、OEM によって提供されるものです。

答え2

Dell の Command|Configure ユーティリティを使用してこれを実現できるかもしれませんが、確信はありません。これを使用しようとするたびに、私のシステムではクラッシュします。 http://en.community.dell.com/techcenter/enterprise-client/w/wiki/7532.dell-command-configure/

以前は、Dell システムでこれを行うのに役立つユーティリティがありました (Dell が発行したのか、他の誰かが発行したのかはわかりません) が、もう適切なリンクを見つけることができません。

関連情報