页次: 1
这个是fb的参数,开启了双缓冲,测试双缓冲也正常
the framebuffer device was opended successfully.
id
smem_start 1488977920
smem_len 3072000
type 0
type_aux 0
visual 2
xpanstep 1
ypanstep 1
line_length 3200
mmio_start 0
mmio_len 0
accel 0
xres 800
yres 480
xres_virturl 800
yres_virtual 960
xoffset 0
yoffset 0
bits_per_pixel 32
grayscale 0
fb_bitfield red.offset 16
fb_bitfield .length 8
fb_bitfield .msb_right 0
fb_bitfield green.offset 8
fb_bitfield .length 8
fb_bitfield .msb_right 0
fb_bitfield blue.offset 0
fb_bitfield .length 8
fb_bitfield .msb_right 0
fb_bitfield transp.offset 24
fb_bitfield .length 8
fb_bitfield .msb_right 0
nonstd 0
activate 0
height 0
widht 0
accel_flags 0
pixclock 30303
left_margin 46
right_margin 209
upper_margin 18
lower_margin 22
hsync_len 0
vsync_len 5
sync 0
vmode 0
rotate 0
the framebuffer devices was mapped to memory successfully
bye the framebuffer
A33用mali OpenGL错误,有没有遇到过
测试代码如下:
egl_dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
if (egl_dpy == EGL_NO_DISPLAY)
egl_fatal("failed to get a display");
if (!eglInitialize(egl_dpy, &major, &minor))
egl_fatal("failed to initialize EGL");
用默认显示器,eglGetDisplay可以过,eglInitialize会错误,返回EGL_NO_DISPLAY
eglGetDisplay(EGL_DEFAULT_DISPLAY);
-----------
char *fbdev = "/dev/fb0";
fd = open(fbdev, O_RDWR);
if (fd < 0)
egl_fatal("failed to open %s", fbdev);
egl_dpy = eglGetDisplay((EGLNativeDisplayType)fd);
if (egl_dpy == EGL_NO_DISPLAY)
egl_fatal("failed to get a display");
if (!eglInitialize(egl_dpy, &major, &minor))
egl_fatal("failed to initialize EGL");
如果先打开/dev/fb0
则eglGetDisplay会错误,返回EGL_NO_DISPLAY
ls
egl*
[root@dragonboard /root]# ./egl
open /dev/fb0
UMP: ump_arch_open() failed to open UMP device driver
failed to initialize EGL
Aborted
[root@dragonboard /root]# insmod /lib/modules/3.4.39/ump.ko
[ 62.165246] UMP: UMP device driver loaded
[root@dragonboard /root]# ./egl
open /dev/fb0
failed to initialize EGL
Aborted
[root@dragonboard /root]# insmod /lib/modules/3.4.39/mali.ko
[ 84.345159] axp22_dcdc2: Failed to create debugfs directory
[ 84.351573] =========================================================
[ 84.358719] Mali GPU Information
[ 84.363970] voltage : 1140 mV
[ 84.368417] initial frequency : 408000000 MHz
[ 84.373469] frame buffer address: 0x58c00000 - 0x78c00000
[ 84.379466] frame buffer size : 512 MB
[ 84.383834] =========================================================
[ 84.393913] Mali: Mali device driver loaded
[root@dragonboard /root]# ./egl
open /dev/fb0
failed to initialize EGL
Aborted
[root@dragonboard /root]#
实现原理:
1.用uboot把文件系统里面的文件读取到RAM的最后一点位置
2.设置此位置不被内核占用
3.内核读取RAM地址,并解码。
4.内核启动后文件系统也就能使用了,再挂载存LOGO的分区
5.通过cp等命令替换原来的LOGO图片即可
6.重新开机,显示新LOGO
暂时只支持FB缓冲区为32bit的设备(也就是ARGB888或者RGB888的平台),RGB55、RGB565、RGB666等还为受到支持与验证。
为了简化步骤,不用去修改makefile文件,所以所有的源文件都是用的x.h
支持解码8bit、16bit、24bit、32bit的未压缩bmp文件,暂不支持1bit的BMP文件
作者建议:
LOGO尺寸不能超过屏幕尺寸
优先使用32bit的BMP文件,虽然占用的空间大些,但是解码32bit的速度是最快的
避免使用24bit的BMP文件,因为24bit既不是字也不是半字,只能用3个字节来处理,处理速度相对其他格式较慢。
避免使用 8bit的BMP文件,颜色还原度较差,如果您的图片为黑白图片,8bit的将是最佳选择。
教程针对f1c100s SD卡启动
1、uboot修改
1.1、memconfig里面
修改传入内核的参数内存修改小一点(如:f1c100s配480*272的屏幕 添加或者改为mem=30M)(最好留出屏幕分辨率的2.5倍以上,其中要存放一张BMP图片,很多UBOOT的屏幕显存是放到内存末尾的)
1.2、修改uboot的evn,f1c100s的目录u-boot/include/configs/suniv.h\
f1c100s完整参数如下:
#define CONFIG_BOOTCOMMAND "setenv bootm_boot_mode sec; " \
"load mmc 0:1 0x81E00000 logo.bmp;" \
"load mmc 0:1 0x81000000 zImage; " \
"load mmc 0:1 0x81800000 suniv-f1c100s-licheepi-nano.dtb;" \
"bootz 0x81000000 - 0x81800000;"
只需要在之前的变量中添加
"load mmc 0:1 0x81E00000 logo.bmp;" \
mmc 0:1 需要根据实际情况来修改,fic100s的平台可以这么写
0x81E00000 为内存地址,根据实际内存大小来定义以及屏幕大小来修改
logo.bmp 为logo文件名(支持8bit、16bit、24bit和32bit的未压缩bmp文件)
2、将logo.bmp文拷贝到SD卡的第一分区(也就是放置内核的位置)
使用本文件夹下面的LOGO需要修改文件名
3、内核修改
把所有.H文件拷贝到drivers/video/fbdev/core/ 下面
修改drivers/video/fbdev/core/fbmem.c文件的int fb_show_logo(struct fb_info *info, int rotate)函数
#include "xinxin_main.h"
int fb_show_logo(struct fb_info *info, int rotate)
{
int y;
y = xinxin_disp_bmp_logo(info, rotate, 0, num_online_cpus());
// y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, num_online_cpus());
// y = fb_show_extra_logos(info, y, rotate);
return y;
}
附1
如果您的LOGO显示不完整
需要修改 drivers/video/console/fbcon.c 如果没有那就在drivers/video/fbdev/core/fbcon.czhong中
找到"fbcon_prepare_logo"函数,在
logo_height = fb_prepare_logo(info, ops->rotate);
如果您不需要屏幕打印tty信息则添加
logo_height = 屏幕高度;
其他寓意:董你的心。
外圈的圆为127颗七彩快闪LED,三个心型为246颗红色LED,内部字用的126颗黄色LED,都是3mm直插。
主控采用的是华芯微特的SWM220C8T7-50,M0 内核工作频率最高48MHz,宽电压2.5V 至 5.5V,SRAM:16KB,FLASH:64K
最多支持6路PWM ,具有普通、互补、中心对称等多种输出模式。
外圈的圆占用1路(软件里面没有使用,后面发现七彩LED不能有PWM调光,原因是LED断电后内部芯片会复位,导致始终只有第一个颜色微亮)。
三个心型各占用1路,内部汉字占用1路。还有1路作PCM音频输出。
中间有一个红外对管,通过1级放大和1级跟随后接入单片机,可以通过ADC大致的测量脸到板子的距离,越靠近,心跳越快,伴随的心跳声音也月急促。
有一个SPI Flash 主要是录制了一段语音,仅第一次开机可以听见(听到一半关机再开机还会有)。为了追求音质,音频使用8位单声道44.1K的采样频率,输出用8位PWM经过2阶低通滤波后接入功放,低通滤波参数没有怎么调。对于64K的Flash最多只能存储1点几秒的声音。心跳声音只有0.4秒占用空间20K不到,就转换成数组存到内部了,所以不用焊接SPI Flash也能正常使用,只是第一次开机没有心跳声。
正面3D视图
下图,背面
实际效果比3D图效果要好,只是送之前没有拍照,改天拍个视频再发视频。
之前准备的礼物,还剩3块板子,还有一大包LED,送给有缘人。
中间的字为了好看,就把点阵上其它的LED删除了,所以你得性董 。
页次: 1