设置视频(Video)模式

本文详细解析了Linux内核初始化过程中设置视频模式的步骤,包括调用set_video()函数,设置screen_info字段,使用BIOS显示服务程序进行配置。内容涉及store_mode_params(), store_video_mode(), save_screen()等函数,以及对光标位置、显示模式、屏幕内容保存等操作的阐述。同时介绍了grub传递的参数和显卡扫描过程。" 106708568,7416691,Go实现LeetCode两数之和问题解析,"['Go', '算法', '数据结构']
摘要由CSDN通过智能技术生成

接下来main将执行进入保护模式前最重要的一个步骤,设置视频模式,调用set_video()函数,来自linux/arch/x86/boot/video.c

 

315void set_video(void)

 316{

 317        u16 mode = boot_params.hdr.vid_mode;

 318

 319        RESET_HEAP();

 320

 321        store_mode_params();

 322        save_screen();

 323        probe_cards(0);

 324

 325        for (;;) {

 326                if (mode == ASK_VGA)

 327                        mode = mode_menu();

 328

 329                if (!set_mode(mode))

 330                        break;

 331

 332                printf("Undefined video mode number: %x/n", mode);

 333                mode = ASK_VGA;

 334        }

 335        boot_params.hdr.vid_mode = mode;

 336        vesa_store_edid();

 337        store_mode_params();

 338

 339        if (do_restore)

 340                restore_screen();

 341}

 

317行,根据传过来的hdr参数得到视频模式,存储到内部变量mode中。我们看到header.S中的vid_mode值是SVGA_MODE。这时候要从新设置一下堆的位置,把它设定到_end处。

 

为什么要调整一下堆的位置,我也搞不清楚,也许是跟视频配置有着千丝万缕的关系吧,有兴趣的同志可以去研究一下。随后,调用store_mode_params()来设置boot_paramsscreen_info字段:

 

53/*

  54 * Store the video mode parameters for later usage by the kernel.

  55 * This is done by asking the BIOS except for the rows/columns

  56 * parameters in the default 80x25 mode -- these are set directly,

  57 * because some very obscure BIOSes supply insane values.

  58 */

  59static void store_mode_params(void)

  60{

  61        u16 font_size;

  62        int x, y;

  63

  64        /* For graphics mode, it is up to the mode-setting driver

  65           (currently only video-vesa.c) to store the parameters */

  66        if (graphic_mode)

  67                return;

  68

  69        store_cursor_position();

  70        store_video_mode();

  71

  72        if (boot_params.screen_info.orig_video_mode == 0x07) {

  73                /* MDA, HGC, or VGA in monochrome mode */

  74                video_segment = 0xb000;

  75        } else {

  76                /* CGA, EGA, VGA and so forth */

  77                video_segment = 0xb800;

  78        }

  79

  80        set_fs(0);

  81        font_size = rdfs16(0x485); /* Font size, BIOS area */

  82        boot_params.screen_info.orig_video_points = font_size;

  83

  84        x = rdfs16(0x44a);

  85        y = (adap

video模式和command模式是指在计算机领域中两种不同的操作界面或交互方式。 1. Video模式(图形用户界面):Video模式是指使用图形用户界面(GUI)进行操作的模式。在这种模式下,计算机系统以图像、图标和视觉效果的形式来呈现信息和操作选项。用户可以使用鼠标、键盘或触摸屏等输入设备与计算机进行交互。在图形用户界面中,通常有窗口、菜单、按钮等元素,用户可以通过直观的操作进行任务的执行,例如拖拽、点击等。常见的操作系统如Windows、macOS和Linux都提供了图形用户界面。 2. Command模式(命令行界面):Command模式是指使用命令行界面(CLI)进行操作的模式。在这种模式下,用户通过输入命令和参数来与计算机进行交互,计算机执行用户输入的命令并返回结果。用户通过键盘输入命令,命令行界面通常以文本方式显示信息和操作选项。在命令行界面中,用户需要记住命令和其对应的参数,并按照特定的语法进行输入。在操作系统中,例如Windows提供的命令提示符(Command Prompt)和Linux提供的终端(Terminal)就是常见的命令行界面。 视频模式和命令模式在不同场景中有各自的优势和用途。视频模式通常更适合图形化的任务和操作,提供了直观的交互方式,适合初学者和普通用户使用。而命令模式则更适合需要精确控制和批量处理的任务,也更适用于高级用户和开发人员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值