本帖原创,转载请注明出处,谢谢。(rickleaf)
提及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仓库中
首先我们要仿照其他的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
如果您想引用flnx,必须对nano-x在ecos的应用有所了解,这是必须的。
在ecos中开始nano-x的支持,实际上就是一个thread作为nano-x的服务,一个之前fltk的引用程序必须作为一个thread来用。
有个这个信息,可以稍微写一个简单的应用。
下面的两个例子一个是hello,一个是form。