svgalib安装与应用

svgalib编译安装:
一、要先安装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

猜你喜欢

转载自blog.csdn.net/qq_22863733/article/details/80260756