minigui demo helloworld在arm目标板子上的运行

本文档记录了将mg-samples-3.0.12中的helloworld程序部署到ARM目标板上遇到的问题及解决过程。在运行过程中遇到了FB设备路径不一致、内存映射错误以及文本模式转换失败等问题,通过修改源码和配置解决了这些问题,最终成功运行。
摘要由CSDN通过智能技术生成

把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(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值