一、要先安装libx86-1:
http://packages.ubuntu.com/lucid/libx86-1
tar xzf libx86_1.1+ds1.orig.tar.gz
gunzip libx86_1.1+ds1-6.diff.gz
cd libx86-1.1/
patch -p1 < ../libx86_1.1+ds1-6.diff
make // 出错,修改lrmi.h,添加宏, 参考561491.patch
lrmi.h添加如下代码:
#if defined(__linux__) && !defined(TF_MASK)
#define TF_MASK X86_EFLAGS_TF
#define IF_MASK X86_EFLAGS_IF
#define VIF_MASK X86_EFLAGS_VIF
#define IOPL_MASK X86_EFLAGS_IOPL
#endif
#define REAL_MEM_BASE ((void *)0x10000)
#define REAL_MEM_SIZE 0x10000
#define REAL_MEM_BLOCKS 0x100
修改后:
make
sudo make install
二、下载安装svgalib:
下载地址:
https://launchpad.net/ubuntu/+source/svgalib/1:1.4.3-30
svgalib_1.4.3.orig.tar.gz
svgalib_1.4.3-30.debian.tar.gz
svgalib_1.4.3-30.dsc
打补丁
tar xzf svgalib_1.4.3.orig.tar.gz
tar xzf svgalib_1.4.3-30.debian.tar.gz
cd svgalib-1.4.3.orig/
for file in ../debian/patches/*.patch; do patch -p1 < $file; done
编译安装:
sudo make install
把库考到/lib:
sudo cp svgalib-1.4.3.orig/sharedlib/*so* /lib
测试:
官方例子:
#include <stdlib.h>
#include <vga.h>
int main(void)
{
vga_init();
vga_setmode(G320x200x256);
vga_setcolor(4);
vga_drawpixel(10, 10);
sleep(5);
vga_setmode(TEXT);
return EXIT_SUCCESS;
}
非常简单,没什么好说的。
我把svgalib应用在我前面用HZK16实现的电子书上,就可以在pc的tty终端显示电子书了。主要把之前对fbmem的put pixel改为 vga_drawpixel(),其他地方相应改一下即可。下面是我写的两个函数:
svga_clean()函数,代替原来的memset(fbmem, 0, screen_size);:
void svga_clean(void)
{
int x, y;
vga_setcolor(4);
for (x = 0; x < 320; x++)
for (y = 0; y < 200; y++)
vga_drawpixel(x, y);
}
crt_show_pixel(int x,int y,int color)函数代替原来的lcd_put_pixel():
void ctr_show_pixel(int x,int y,int color)
{
vga_setcolor(color); //4泛黄的纸,0黑色
vga_drawpixel(x, y);
}
lcd_init()函数中把对LCD的操去掉,直接设置几个分辨率参数即可:
int lcd_init(void)
{
//vga_setmode(G320x200x256);
var.xres = 320;
var.yres = 200;
line_width = var.xres * var.bits_per_pixel / 8;
pixel_width = var.bits_per_pixel / 8;
screen_size = var.xres * var.yres * var.bits_per_pixel / 8;
}
main()函数中添加对svga的一些初始化代码:
vga_init();
vga_setmode(G320x200x256);
gl_setpalettecolor(4, 0xE7>>2, 0xDB>>2, 0xB5>>2); /* 0xE7DBB5 */ /* 泛黄的纸 */
svga_clean();
编译时加上链接选项-lvga -lvgagl:
gcc -o svgatest main.c function.c -lvga -lvgagl
要在tty文本模式下执行程序,程序会进入图形模式来显示。
如其他地方有问题的话,适当修改一下即可。
使用svgalib在虚拟机tty终端下显示电子书效果:
对电子书有疑问的,可以参考我前面的电子书代码:https://blog.csdn.net/qq_22863733/article/details/80252304
对svgalib使用有疑问的可以参考svgalibtutorials:http://www.svgalib.org/jay/beginners_guide/beginners_guide.html