转载时请注明出处和作者联系方式:http://blog.csdn.net/mimepp
作者联系方式:YU TAO <yut616 at sohu dot com>
microwindows代码分析 (一)c/s模型的简化
在microwin的运行模式中,nano-x通常的使用方式是c/s模型的,这是类似于x-windows的方式的,好处是某个client端的异常不会影响到server对其他client提供的服务。
但是在很多嵌入式系统中,通常都是在一个单一的环境中使用,单独的server服务进程就不是那么必要。
为了避免在后台启动一个nano-x的服务进程,可以修改microwin的src/config:
其中改为:
LINK_APP_INTO_SERVER = Y
我们来看看这个标记对代码的影响:
1、nanox/Makefile
# Nano-X server files
NANOXFILES = srvmain.o srvfunc.o srvutil.o srvevent.o srvclip.o
# Nano-X client files
OBJS = nxdraw.o nxutil.o nxtransform.o
ifeq ($(LINK_APP_INTO_SERVER), Y)
OBJS += $(NANOXFILES)
else
# Nano-X server files (network only)
NANOXFILES += srvnet.o
# Nano-X client files (network only)
OBJS += client.o nxproto.o error.o
ifeq ($(FRAMEBUFFER), Y)
OBJS += clientfb.o
else
ifeq ($(X11), Y)
OBJS += clientfb.o
endif
endif
这里说明,有了这个标记,那么就只会增加srv对应的代码,而client的代码被排除在外了。
2、Makefile.rules
ifeq ($(LINK_APP_INTO_SERVER), Y)
DEFINES += -DNONETWORK=1
endif
如果这个标记为N的话,那么当你的应用程序使用编译出来的nano-x库时,使用的将是microwindows-0.90/src/nanox/client.c的代码,即GrOpen是会尝试与srv建立连接:
ret = connect(nxSocket, (struct sockaddr *) &name, size);
并发送request给srv:
nxWriteSocket((char *)&req,sizeof(req));
而如果这个标记为Y的话,那么你的应用使用的代码GrOpen是nanox/srvmain.c中的,即直接运行srv的代码,其中就有初始化graphics的内容GsInitialize()。
这样就实现了对microwin的c/s模型的一个简化,这样更加适合于在嵌入系统中来使用和调试。
由于microwin在x11下,可以先对你的应用程序做好调试后,再转到嵌入系统中,所以我们可以先在x11下验证基本的代码功能,加快开发和调试的速度。
这里记录一下实验用的x11下的config中的一些标记:
ARCH = LINUX-NATIVE
MICROWIN = N
NANOX = Y
SHAREDLIBS = N
NANOWM = N
SCREEN_PIXTYPE = MWPF_TRUECOLOR8888
X11 = Y
NOMOUSE = Y
NOKBD = Y
HAVE_FREETYPE_SUPPORT=N