init 실행 파일에서 프레임 버퍼를 초기화하는 방법은 무엇입니까?

init 실행 파일에서 프레임 버퍼를 초기화하는 방법은 무엇입니까?

시스템을 가능한 한 베어 커널에 가깝게 만들어야 하는 "최소 Linux" 실험이 있으므로 매 PID 1에서 실행되는 init종료, 재부팅 및 콘솔 초기화를 수행하는 방법을 알고 있습니다. init시간이며 프레임 버퍼를 초기화하거나 이를 수행하는 스크립트가 있습니다. 저는 리눅스에 대해 매우 잘 알고 있지만 init아주 작은 초기화 콘솔을 printf3번 실행하고 종료하는 것 외에는 인터넷에 쓸 정보가 없습니다 (협회init) 및 종료/다시 시작 문제에 대한 Python 문제(협회). 나에게 필요한 것은 프레임버퍼 초기화에 대한 도움입니다. 내 현재 코드는 다음과 같습니다.

int init_main(int argc, char **argv)
{
    // PID handler
    if (getpid() != 1)
    {
pidn1:  if (getppid() == 1)
        {
            execl("/sbin/initrq", "-i" 0);
            return;
        }
    }
    reboot(RB_DISABLE_CAD);
    // Console initialization
    int onefd = open("/dev/console", O_RDONLY, 0);
    dup2(onefd, 0); // stdin
    int twofd = open("/dev/console", O_RDWR, 0);
    dup2(twofd, 1); // stdout
    dup2(twofd, 2); // stderr
    if (onefd > 2) close(onefd);
    if (twofd > 2) close(twofd);
    // Print a message
    printf("CUSTOM LINUX INIT\nNo framebuffer init\n");
    // Run initrq.
    fork() // This forked copy will not be PID 1, so that receives an execl("/sbin/initrq", 0)
    if (getpid() != 1) goto pidn1; // Fork behavior independency
    // Create shutdown/reboot agent FIFO
    int fifofd = mkfifo("/etc/cinit-rs", S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | IWOTH);
    uint8_t buf[2];
    // Main loop
    for (;;)
    {
        if (read(fifofd, buf, 2) < 2)
        {
            sleep(1);
            continue;
        }
        if (buf[0] == 0x4A)
        {
            if (buf[1] == 0xF0)
            {
                init_shutdown(0);
            }
            if (buf[1] == 0xFF)
            {
                init_shutdown(1);
            }
        }
    }
}
void init_shutdown(int rscmd)
{
    execl("/sbin/initrq", rscmd ? "-r" : "-s", 0);
}

명확히하겠습니다 initrq. 특정 메소드 (해당 메소드는 구현에 정의되어 있음 ) initrq를 사용하여 정의된 스크립트를 실행하는 프로세스입니다 . 수신 되면 시작 스크립트가 실행됩니다. 또는 을 수신 하면 종료 스크립트를 실행한 다음 각각 또는인지 여부에 따라 종료되거나 다시 시작됩니다.initinitrqinitrq-iinitrq-s-r-s-r

관련 정보