在命令行下利用framebuffer显示bmp格式的图片,首先要打开framebuffer设备,ubuntu 9.10 是打开/boot/grub/grub.cfg 文件 在“linux /boot/vmlinuz-2.6.31-22-generic root=UUID=dadb1e1d-b7b7-45c8-a031-21d2e840c608 ro quiet splash vga=791 " 这一行加入红字,注意不是recovery mode 。 然后重启就打开了framebuffer设备,在/dev下可以看到fb0。下面是程序代码。要注意显示的图片的位数(有16位24位和32位的)这个是显示32位bmp图片的。
追加内容: 说到framebuffer 不得不说到一个函数ioctl ,这里只是简单用了一下,ioctl中第二个参数是cmd,比如FBIOGET_FSCREENINFO,FBIOGET_VSCREENINFO,分别是获取fbfd设备的固定信息和可改变信息,FBIOPUT_VSCREENINFO 用户设置可变屏幕参数,FBIOPUTCMAP 设置屏幕颜色表,FBIOGETCMAP 获取颜色表等。
还有个函数mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset) 与之对应的是 int munmap(void *start ,size_t length)
start 是映射区开始地址, length 映射区的长度(字节),prot 期望内存保护标志,如(PROT_EXEC ,PROT_READ, PROT_WRITE, PROT_NONE) flags 指定映射对象的类型 它的值有MAP_FIXED 使用指定得映射地址,MAP_SHARED 与其它映射这个对象的进程共享映射空间,这个值不能与MAP_PRIVATE 不能同时用。MAP_LOCKED 锁定映射区的页面,防止交换内存。fd 有效文件描述词。offset 映射对象内容的起点。
mmap 成功执行返回文件映射到进程空间的地址,失败返回-1