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

또한 시도했습니다:

$ 고양이 참조

#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에서 발행했는지 아니면 다른 사람이 발행했는지 확실하지 않음) 더 이상 좋은 링크를 찾을 수 없습니다.

관련 정보