在屏幕上显示字符的原理
简介:
只描述在IA-32e模式下的字符显示首先要有一个字符库(包含这每一个字符的像素信息, 空白的地方时0x00, 一个字符一个8x16的矩阵)每一个像素点就是一个int类型4bytes大小的整数, 该整数的每一个字节都有特定的属性用来配置显示出来的字符的样式要想实现, 需要在定义一个二维数组, ...
只描述在IA-32e模式下的字符显示
- 首先要有一个字符库(包含这每一个字符的像素信息, 空白的地方时0x00, 一个字符一个8x16的矩阵)
- 每一个像素点就是一个int类型4bytes大小的整数, 该整数的每一个字节都有特定的属性用来配置显示出来的字符的样式
- 要想实现, 需要在定义一个二维数组, 在二维数组中定义每一个字符对应的8x16矩阵的像素信息(像素值)
- 通过printk函数实现在屏幕上显示字符串
- 需要定义一个结构体Position, 定义在printk.h文件中
struct Position{
// 保存着当前屏幕的分辨率
int XResolution;
int YResolution;
// 保存着当前光标的位置
int XPosition;
int YPosition;
// 保存着字符像素矩阵的尺寸
int XCharSize;
int YCharSize;
// 保存着帧缓存区的起始地址和容量大小, 我们需要将字符像素信息写到该FrameBuffer中
unsigned int *FB\_addr;
unsigned long FB\_Length;
} Pos;
- 在GNU编译器中内置了头文件stdarg.h, 我们只需要使用#include <stdarg.h>包含即可使用可变参数了
- 在printk函数中主要处理的就是在fmt字符串中出现的\n, \b, \t, %s等参数
- 其中\n, \b等转移字符都会修改在printk.h中定义的Pos结构体实例中的XPosition和YPosition, 比如遇到了\n, 则Pos.XPosition = 0; --Pos.YPosition;