在LCD上显示任意编码的文本文件(电子书)

  • 在开发板uboot中通过nfs网络文件系统加载内核启动
    • image.png
  • 怎样在LCD上显示文件
    • 去文件中获得文字(码)
      • ASCII
      • UTF-8
      • GBK
    • 根据”码”得到字体数据(点阵):ASCII(数组)/GBK(HZK16)/freetype(字体文件)
    • 把点阵在LCD上显示出来(framebuffer)
  • 以面向对象的思想编写程序
    • 模块化
  • 写驱动程序三板斧(三步骤)
    • 分配一个结构体
    • 设置结构体
    • 注册结构体
  • 经验不足,边写边完善

  • T_DispOpr结构体在对应头文件定义好了

image.png

  • 设置结构体
  • 要实现结构体内的函数,并且要在之前进行声明
  • image.png实现结构体的函数
  • 怎么去注册这个结构体呢?
    • 要提供一个入口函数给上层代码注册使用
    • image.png
    • 上层代码直接调用FBInit函数就可以注册了
    • 而RegisterDispOpr注册函数是上层代码提供的(相当于上层提供一个注册的通用代码给底层,底层根据自己构造的结构体进行注册并想上层提供实现自身注册的封装函数)
  • font

image.png

image.png

电子书在PC上显示

  • /dev/tty0 默认窗口
  • 物理上只有一套设备(LCD、键盘),但显示上可以又多个界面(窗口)
  • 软件上可以又多个终端ctrl+alt+shift+n可以打开第n个虚拟(模拟)终端
  • image.png
  • 每个虚拟终端都会又单独的buffer来存储显示的内容
  • tty0表示当前终端
  • 可以通过/dev/ttyN来显示哪个终端,具有两种模式
    • 文本模式:只能显示英文字符那些
    • 图形模式(电子书要进入图像模式显示)
  • 怎么在一个终端将文本模式转成图形模式?
    • 可以用open、ioctl这些基本的函数操作tty终端
    • 可以使用SVGAlib库来进行转换
  • svgalib ubuntu
    • image.png
    • 解压svgalib库和Ubuntu补丁
    • image.png
    • 进入源码目录
    • image.png
    • 对源文件进行打补丁操作
  • 如何对svgalib编译
    • sudo make intall 编译安装
    • image.png编译错误
    • libx86是一个库,可以下载安装
    • image.png
    • image.png
    • 解压安装libx86
    • image.png
    • 打上libx86补丁
    • image.png
    • 编译安装libx86
    • 完成后再编译安装svgalib (sudo make install)

image.png

  • 编译svga的demo
  • image.png