转载时请注明出处和作者联系方式: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