只描述在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;