把mg-samples-3.0.12编译完后,在src目录下有个helloworld,把它copy到板子运行测试我们的环境是否正确。
因为我的板子没有usr目录,所以我自己创建一个,使用nfs把build里面的文件挂载到板子上运行。
板子上:
挂载/目录,使/可以读写
mount -o remount,rw /
然后:
mount -t nfs -o nolock 172.21.30.200:/home/xxx/build /usr/local\n
把build挂载为usr/local下面。
安装自己目标板子的实际情况,修改minigui.cfg文件:
[system]
# GAL engine and default options
gal_engine=fbcon
defaultmode=240x360-8bpp
# IAL engine
ial_engine=console
mdev=/dev/input/mice
mtype=IMPS2
[fbcon]
defaultmode=240x360-8bpp
我平台上使用framebuffer,所以是图像引擎是:fbcon
defaultmode指明我们的显示大小和颜色深度,具体参考minigui使用手册
运行./usr/local/bin/helloworld
./helloworld: error while loading shared libraries: libminigui_ths-3.0.so.12: cannot open shared object file: No such file or directory
是因为ld path没有设置导致的。
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
NEWGAL: Does not find matched engine:fbcon.
KERNEL>InitGUI: can not get graphics engine information!
该错误信息是因为我平台的fb设备路径不一致导致的。
minigui默认是从下面查找fb设备
libminigui-gpl-3.0.12/src/newgal/fbcon/fbvideo.c
static int FB_VideoInit(_THIS, GAL_PixelFormat *vformat)函数:
/* Initialize the library */
GAL_fbdev = getenv("FRAMEBUFFER");
if ( GAL_fbdev == NULL ) {
GAL_fbdev = "/dev/fb0";
}
console_fd = open(GAL_fbdev, O_RDWR, 0);
if ( console_fd < 0 ) {
GAL_SetError("NEWGAL>FBCON: Unable to open %s\n", GAL_fbdev);
return(-1);
}
我平台修改为:
/* Initialize the library */
GAL_fbdev = getenv("FRAMEBUFFER");
if ( GAL_fbdev == NULL ) {
GAL_fbdev = "/dev/graphics/fb0";
}
console_fd = open(GAL_fbdev, O_RDWR, 0);
if ( console_fd < 0 ) {
printf("NEWGAL>FBCON: Unable to open %s,line=%d\n", GAL_fbdev,__LINE__);
return(-1);
}
再次运行:
NEWGAL>FBCON:unable to memry map the video hardware
NEWGAL: Does not find matched engine:fbcon.
KERNEL>InitGUI: can not get graphics engine information!
出现这个错误是因为我平台的FB设备是定制过的,不支持allocate memery导致的,需要预先设定FB大小才可以使用。
最后我把整个FB_VideoInit函数修改如下:
主要修改在#if 1里面的code。
static int FB_VideoInit(_THIS, GAL_PixelFormat *vformat)
{
struct fb_fix_screeninfo finfo;
struct fb_var_screeninfo vinfo;
int i;
const char *GAL_fbdev;
#if 1
/* Initialize the library */
GAL_fbdev = getenv("FRAMEBUFFER");
if ( GAL_fbdev == NULL ) {
GAL_fbdev = "/dev/graphics/fb0";
}
console_fd = open(GAL_fbdev, O_RDWR, 0);
if ( console_fd < 0 ) {
printf("NEWGAL>FBCON: Unable to open %s,line=%d\n", GAL_fbdev,__LINE__);
return(-1);
}
if(ioctl(console_fd, FBIOGET_FSCREENINFO, &finfo))
{
printf("Error:reading fixed information.lind=%d\n",__LINE__);
return(-1);
}
if(ioctl(console_fd, FBIOGET_VSCREENINFO, &vinfo))
{
printf("NEWGAL>FBCON: Couldn't get console pixel format,line=%d\n",__LINE__);
FB_VideoQuit(