flnx 在 mini2440 qemu ecos的nano-x上运行起来了

来源:互联网 发布:上海管易软件 编辑:程序博客网 时间:2024/05/18 03:34

(源代码会在整理以后上传到实验室,emboslab的ecos仓库,请留意我的置顶)

 

本帖原创,转载请注明出处,谢谢。(rickleaf)

1. 什么是flnx, 为什么要做flnx到ecos的移植

提及flnx的时候首先要了解一下fltk,fltk是 Fast Light Toolkit 的缩写,他是一个跨平台的GUI开发库。

FLTK在设计之初就考虑了,如何能应用在不同的窗口管理架构之下。而且,FLTK有着自己独到的事件处理方法。

如果您在Linux的系统下,还可以用FLUID作为图形开发的工具,方便的生成可视化UI。

下图就是ubuntu 10.04下面的FLUID

 

 

说到这里大家可能会开始对FLTK感兴趣了,那就去他的官方网站看看吧

http://www.fltk.org/

 

到现在为止我没还没有谈到FLNX, 既然FLTK能运行在很多窗口管理架构之下,当然也能运行在Nano-X之下。

之前我们已经花了很多经历把ecos的Nano-X在mini2440 QEMU平台下面运行起来了,那么FLNX也可以运行在ecos下面吗?

我在网上搜索了一下,还是有成功案例的,但是可能是推广等多种问题这部分用的人并不是很多。

 

对于系统而言,无论那种UI方案,如果在性能允许的情况下,大家都希望能应用方便,我也一样。

我们后面来看看如果把FLNX模块化的放入ecos的packages仓库中

2. FLNX的移植,把FLNX放入ecos的packages中

首先我们要仿照其他的services下面的gfx的模块建立一个flnx的目录(尽量小写吧,这个也是不多的coding style之一)

先看看我建立的flnx目录

ricky@ricky-laptop:services$ pwd
/opt/ecos/ecos-hg/packages/services
ricky@ricky-laptop:services$ ls -l gfx/
总用量 36
drwxr-xr-x 3 ricky ricky 4096 2011-03-17 17:15 emwin
drwxrwxr-x 3 ricky ricky 4096 2011-04-04 19:41 flnx
drwxr-xr-x 3 ricky ricky 4096 2011-02-12 10:05 jpeg-6b
drwxr-xr-x 3 ricky ricky 4096 2011-02-21 17:18 microwin
drwx------ 3 ricky ricky 4096 2011-01-30 15:24 minigui
drwxr-xr-x 3 ricky ricky 4096 2010-04-23 14:38 mw
drwxr-xr-x 3 ricky ricky 4096 2011-02-12 10:05 png
drwxr-xr-x 3 ricky ricky 4096 2011-02-22 17:16 pw
drwxr-xr-x 3 ricky ricky 4096 2011-02-12 10:05 qvfb
ricky@ricky-laptop:services$ ls -l gfx/flnx/
总用量 4
drwxr-xr-x 7 ricky ricky 4096 2011-04-04 19:40 current

 

然后我们把原始的flnx拷贝进来,把flnx的src目录拷贝到current下,把test目录拷贝为current下面的tests

然后建立一个cdl目录,放置makefile需要的配置文件

 

ricky@ricky-laptop:services$ ls -l gfx/flnx/current/
总用量 20
drwx------  2 ricky ricky 4096 2011-04-04 19:34 cdl
drwxr-xr-x 12 ricky ricky 4096 2011-04-03 14:09 flnx
drwxr-xr-x  3 ricky ricky 4096 2011-04-03 13:40 include
drwxrwxr-x  2 ricky ricky 4096 2011-04-04 21:02 src
drwxrwxr-x  2 ricky ricky 4096 2011-04-04 21:02 tests

 

后面我们要花些经历把需要编译的cxx文件写到flnx的cdl文件中(我命名这个packages的cdl文件名为flnx.cdl)

 

######DESCRIPTIONBEGIN####
#
# Author(s):      Ricky Wu
# Original data:  Ricky Wu
# Contributors:
# Date:           2011-04-04
#
#####DESCRIPTIONEND####
#
# ====================================================================

cdl_package CYGPKG_FLNX {
    display       "flnx"
    requires      CYGPKG_POSIX
    requires      CYGPKG_ISOINFRA
    requires      CYGINT_ISO_C_TIME_TYPES
    requires      CYGINT_ISO_STRERROR
    requires      CYGINT_ISO_ERRNO
    requires      CYGINT_ISO_ERRNO_CODES
    requires      CYGINT_ISO_MALLOC
    requires      CYGINT_ISO_STRING_BSD_FUNCS
    requires      CYGPKG_IO_FILEIO
    description   "flnx"

    # Note: separating the stack implementation from the common support leads
    # to some rather incestious config file relationships.
    define_proc {
    }

    compile                             /
        src/cmap.cxx                /
        src/dump_compose.c        /
        src/Fl_abort.cxx        /
        src/Fl_add_idle.cxx        /
        src/Fl_Adjuster.cxx        /
        src/Fl_Animator.cxx        /
        src/fl_arc.cxx                /
        src/fl_arci.cxx                /
        src/Fl_arg.cxx                /
        src/fl_ask.cxx                /
        src/Fl_Bitmap.cxx        /
        src/Fl_Box.cxx                /
        src/fl_boxtype.cxx        /
        src/Fl_Browser_.cxx        /
        src/Fl_Browser.cxx        /
        src/Fl_Browser_load.cxx            /
        src/Fl_Button.cxx        /
        src/fl_call_main.c        /
        src/Fl_Chart.cxx        /
        src/Fl_Check_Button.cxx            /
        src/Fl_Choice.cxx        /
        src/Fl_Clock.cxx        /
        src/Fl_Color_Chooser.cxx    /
        src/fl_color.cxx        /
        src/Fl_Counter.cxx        /
        src/fl_cursor.cxx        /
        src/fl_curve.cxx        /
        ... ...

    cdl_component CYGPKG_FLNX_OPTIONS {

有几点需要注意,H文件和资源文件是不能参与编译的。

 

cdl_option CYGPKG_FLNX_CFLAGS_ADD {
            display "Additional compiler flags"
            flavor  data
            no_define
            default_value { "-I$(PREFIX)/include/FL -I$(REPOSITORY)/$(PACKAGE)/src -D__FLNX_LIB__ -DNANO_X -D__ECOS -Dlint" }
            description   "
                This option modifies the set of compiler flags for
                building the flnx package.
                These flags are used in addition to the set of global flags."
        }

 

cdl中要实现之前flnx makefile中的第一的一些宏,不如既然我们要用在nano-x就要定一个 NANO-X

然后,我们要在ecos.db中加入我们package的信息,如下

 

package CYGPKG_FLNX {
        alias           { "flnx" flnx }
        directory       services/gfx/flnx
        script          flnx.cdl
        description     "FLNX"
}

 

这样我们的flnx就建成了。

 

我们在应用的时候先要

ecosconfig add mw  配置好nano-x的ecos支持

然后

ecosconfig add flnx

这样我们编译的系统就会有flnx的库文件了,在编译过程中会碰到一些错误,一般都是头文件缺失造成的。

iostream这个头直接注释掉就可以了,

如果friend class出错,就要在class之外现定义一个class

3.如何应用FLNX

如果您想引用flnx,必须对nano-x在ecos的应用有所了解,这是必须的。


在ecos中开始nano-x的支持,实际上就是一个thread作为nano-x的服务,一个之前fltk的引用程序必须作为一个thread来用。

有个这个信息,可以稍微写一个简单的应用。

 

下面的两个例子一个是hello,一个是form。