MiniGUI在S3C2440上的移植及软件开发
S3C2440系统的内核与文件系统移植
首先:在汇编中初始化堆栈,中断向量表,MMU,时钟,串口等,然后跳到C语言的Main 函数。
这部分代码小于4K,放在block0。
这个Main函数用来将第二段代码拷备到DRAM 中并执行。
其次:进入第二段代码。
第二段代码也是先在汇编中初始化堆栈,中断向量表等,然后跳到C语言的Main函数。
这部分代码就不用有4K限制了,具体大小由第一段代码决定,因为它本身由第一段代码来搬运。
这个Main函数用来显示开机图片以及进度条。
然后视串口接收信息运行带有USB下载NK的Eboot或是读取NK映像,启动WINCE系统。
最后:进入第三段代码。
这段代码用于通过USB将PC上的NK.nb0或NK.bin文件下载进NANDFLASH并运行。
可见,扬创公司光bootloader就分成了三个部分,即3个bin文件组成。
然后分别将这三段二进制代码下载进分别从block0,block2,block8(block12)开始的三块。
具体烧写手段采用老掉牙的giveio烧写,就是曾经大名鼎鼎的SJF2440了,相信不少嵌入式高手都用过,哈哈。
如果不小心将bootloader弄丢了,再重烧一片,得等上好几分钟,足够你到外面跑上几千米再回来这么长了。
尽管如此,我们的扬创公司仍然拿他们的代码当宝,死活不肯开源。
要知道对于买你们板子的人,都是来学习的呀!学习嵌入式系统,bootloader是最基础也是进入嵌入式行业的敲门砖,没有了代码,无疑给学习添加了很大的麻烦,而扬创官方回答却是:用户开发产品用不着修改bootloader.我看扬创没开发过东西,不了解行情。
不说这么多废话了,说多了无益,让我们一起来揭开bootloader的神秘的面纱吧!先说下我移植的bootloader的功能,以及烧录时间,和扬创的做下对比。
第一次下载bootloader到NANDFLASH的方法:方法一:通过扬创的老掉牙的方法,先在ADS1.2里面生成bootloader.bin文件,然后用SJF2440烧写工具,配合giveio将BIN文件烧写进从block0开始的块。
tslib+Mnigui移植到2440总结
}
tslib与minigui中对于压力参数的规定刚好相反,tslib规定samp[0].pressure> 0是按下,samp[0].pressure == 0是手松开而事实是相反的
{
..................................................................
..................................................................
修改的代码
/* Read until we get a touch. */
*x = samp[middle].x;
else
*x = (samp[middle-1].x + samp[middle].x) / 2;
////////////////////////////////////////////////////////////////////////////
do {
if (ts_read_raw(ts, &samp[0], 1) < 0) {
perror("ts_read");
close_framebuffer();
exit(1);
}
} while (samp[0].pressure > 0);
do {
if (ts_read_raw(ts, &samp[0], 1) < 0) {
以上两点是我修改的地方,在各位达人的帖子中还看到了其他的一些修改,我开始也照搬用了,反而出错
基于S3C2440的QT移植与编程实现
学校代码:11059学号:0705075032Hefei University毕业论文(设计)BACHELOR DISSERT A TIO N论文题目:基于S3C2440的QT移植与编程实现学位类别:工学学士学科专业:自动化作者姓名:黄静导师姓名:干开峰完成时间: 2012年5月基于S3C2440的QT移植与编程实现中文摘要随着计算机技术和信息网络技术的飞速发展,嵌入式系统的应用越来越广泛,而嵌入式产品以其小巧、使用方便、实用等特点越来越受到人们的青睐。
特别是近几年来,嵌入式产品越来越多的被应用于各个领域,如国防、工业控制、通信、办公自动化和消费电子领域等。
图形用户界面是嵌入式系统软件开发的重要内容,基于Linux内核开发实用、高效、美观的GUI是目前研究的一个重要课题。
本课题研究了基于Linux的典型嵌入式图形界面支持系统Qt,基于嵌入式Linux操作系统和S3C2440硬件平台,完成Qt开发环境搭建和Qt相关平台移植,最后完成应用程序编程实例实现,并将应用程序成功移植到GT2440开发板上,测试结果证实该程序运行稳定,性能良好。
关键词:嵌入式系统;QT;嵌入式linux;S3C2440Transplantation and programming of QT based on S3C2440AbstractThis paper introduces the QT / Embedded linux embedded system development environment to establish and transplant. Through a lot of source code analysis, build Qt / development environment in the linux host and s3c2410 transplant, and then on the QT / E programs.Qt / Embedded is Trolltech launched Linux-based embedded platform development tools, embedded version of Qt. It inherits the Qt's standard APIs, provide a more compact than Xlib and XWindows window generation system FrameBuffer direct operations (see Figure 1). The fully modular design and efficient build system to reduce memory consumption, these Qt / Embedded as the embedded environment, powerful and comprehensive GUI development tools. KDE and other projects using Qt as the support library, so many Qt-based X-Windows program can be easily ported to Qt / Embedded version. Qt / Embedded with the advantages of object-oriented, cross-platform and interface design, convenient and aesthetic, have been widely used.KEY WORD: Embedded ;Transplant And Program; Qt/Embedded;linux;S3C2440第一章前言 (4)1.1 嵌入式系统概述 (4)1.2 图形开发 .............................. 错误!未定义书签。
Linux内核分析及在S3C2440上移植过程
smdk_default_nand_part 结构如下修改:
使用以下命令启动 NAND Flash 上的内核。
static struct mtd_partition smdk_default_nand_
nboot 0x32000000 0 0
(4)顶层 Makefile 和 arch/¥(ARCH)/Makefile 设置了 可以影响所有文件的编译、连接选项:DFLAGS、AFLAGS、LD- FLAGS、ARFLAGS。
(5) 各级子目录下的 Makefile 中可以设置能够影响当 前目录下所有文件的编译、连接选项,如 EXTRA_CFLAGS 等, 还可以设置能影响某个文件的编译选项如 CFLAGS¥@ 等。
1.1 硬件平台 本文使用的是 mini2440,它采用 Samsung S3C2440 为 微处理器,主频 400MHz,最高 533Mhz,并采用专业稳定的 CPU 内核电源芯片和复位芯片来保证系统运行时的稳定性。 SDRAM 内存采用 32bit 数据总线,时钟频率高达 100MHz。 mini2440 的 PCB 采用沉金工艺的四层板设计,专业等长布 线,保证关键信号线的信号完整性。
文献标识码:A
文章编号:1671-4792-(2010)1-0173-03
Abstract: This article introduces Samsung's ARM9-based S3C2440 chip embedded Linux system transplant pro-
cess, and builds the basic ARM9-Linux development environment. Cutting and transplanting Linux kernel after
ARM-Linux环境下MiniGUI在S3C2410开发板上的移植
上模拟 显示屏 , 方便调试 M n U 应用 程序。 iG l i 解压 q t 1 ,r z v — . t . 后执行 : b 0a g
# / o fg r . n iu e c #ma e k
#ma e i sa l k n t l
在/o e下建立 目录 miiu, 网上 下载以下源码包并放 在该 目录 hm ng i从
并给 出了实验结果 , 明 了移植 的可行性。 证
关键 词 : 嵌入 式 系统 ;iu ;3 2 1 ; nGU ; 植 Ln x¥ C 4 0 Mii I移 中 图分 类 号 : P7 T 23 文献 标 识 码 : A
社n k Ia e
由于嵌入 式系统 一般 实时性要 求很高 .所 以嵌入 式系统下 的 G I U
b n / s o a/ i :u rl c ” i : dl e l n/ s/ a ? u b ol
保存 退 出 。执 行 #su(.ahe使 更 改 生效 。其 中/s ̄c l r/ orebsr  ̄ uroa/ m a 29 . bn是 以后要用到的交叉编译工具 的路径 。 .53 i /
完 成安装 , qP— . q i 在 v 1 /v o 0 b下有 q f 可 执行 程序 , 其路径添加 到 v b 将 可执行路径文件中去 :
#c d¥H0M E
#v b s r i.a h e
在 .ahc 后 面加 上 : bsr 最
e p r TH=”PATH: bn: s/o a/r 2953 xot PA Y / i / rlc am/ . ./ s u l
科技情报开发与经济
文 章 编 号 :0 5 6 3 (0 8 2 — 19 0 10 — 0 3 2 0 )8 0 3— 2
S3C2440移植uboot过程全解+移植记录
一、Uboot移植前的准备1、修改makefile、配置文件在配置文件之前,需要修改makeflie相关内容:修改如下:(1)修改编译器,这里我们的makefile已经设置为arm-linux-无需再修改,如下所示:ifeq ($(ARCH),arm)CROSS_COMPILE = arm-linux-Endif(2)添加fl2440的配置项,如下所示:fl2440_config:unconfig@$(MKCONFIG) $(@:_config=) arm arm920t fl2440 step s3c24x0注意:在添加的fl2440_config的第二行,必须以Table开头,不能有任何多余的符号,否则极易导致编译错误。
Uboot支持多种处理器和平台,在编译uboot之前需要对其进行配置,使其支持我们自己的开发平台。
在执行编译make之前,需要进行配置即make fl2440_config。
通过查看顶层目录的makeflie文件,通过以下语句:MKCONFIG := $(SRCTREE)/mkconfig得出实际执行的命令为:./mkconfig fl2440 arm arm920t fl2440 step s3c24x0执行完这句后,产生如下结果:(1)开发板名称为fl2440;(2)将include中的头文件连接到同平台相关的头文件中,这里的连接为:asm->asm-armarch->arch-s3c24x0proc->proc-armv(3)创建顶层Makefile包含的文件inclued/config.mk,该文件内容如下ARCH = armCPU = arm920tBOARD = fl2440VENDOR = stepSOC = s3c24x0(4)创建开发板相关头文件include/config.h,该文件中包含了对开发板的相关配置,如下所示:#include <configs/fl2440.h>从上面可以知道,在将uboot配置为适合自己的平台的时候,需要在路径/include/configs下添加配置头文件fl2440.h。
基于S3C2440的嵌入式多媒体控制器设计
图1为系统的硬件结构框图。 该芯片采用1.2 V的工作电压,功耗很低,能够满足消 费类电子电源对功耗的要求。同时,电源管理模块能够提
39
供系统多种电压供电,包括芯片内核电压采用1.8 V供电, 芯片的I/O部分采用3.3 V供电,而片外的一些常规集成
电路又采用5 V供电。智能电源管理模块很好地解决了对
40 万方数据
和最大128 M可选的FLASH存储器,系统运行小型的,经 过裁剪的Linux微内核。微内核由内存管理、进程管理和 事务处理构成,包括了所有核心的操作系统功能在内。 t-CLinux操作系统本身的微内核体系结构相当简单,系统 要求的网络协议和文件系统以模块形式置于微内核的上 层,驱动程序和其他部件可在运行时作为可加载模块编译 或是添加到内核,这为构造定制的可嵌入系统提供了高度 模块化的构件方法。用户可以结合定制的驱动程序和应用 程序来实现自己的附加功能,大大减小了内核的体积,便于 维护和移植。其中,采用JFFS2日志闪存文件系统管理非 易失性存储中的结构化文件数据,JFFS2是专门为像闪存 芯片那样的嵌入式设备创建的,所以他的整个设计提供了 更好的闪存管理,为掉电或系统崩溃等突发事件提供了很 好的数据保护机制。
MiniGUI是一种面向嵌入式系统或实时系统的图形用 户界面支持系统,是遵循LGPL条款的纯自由软件,提供了 完备的多窗口机制,多字符集和多字体支持,BMP,GIF, JPEG,PCX,TGA等常见图像文件的支持等。他是建立在 比较成熟的图形引擎之上的,比如SVGALib和LibGGI,系 统开发的重点在于窗口系统、图形接口之上,MiniGu提供 了大量的图形应用编程接口,包含全部功能的库文件大小 仅为300 k左右,特别适合用在嵌入式系统上开发控制台 图形用户界面的应用程序。同时,由于图形抽象层(GAL) 和输入抽象层(IAL)概念的引入,将底层图形硬件和上层的 图形操作和输入处理分离开来,大大提高了MinjGUI的可 移植性。利用GAL和IAL,MiniGUI可以在许多图形引擎 上运行,可以很方便地移植到基于ARM920T核的s3C2440 系统上。
s3c2440嵌入式开发平台操作系统和驱动开发文档
s3c2440嵌入式开发平台操作系统和驱动开发文档目录一前言 (3)二s3c2440嵌入式开发平台介绍 (3)2.1硬件配置: (3)2.2 s3c2440嵌入式开发平台移植的系统软件 (4)2.3 s3c2440嵌入式开发平台特点: (4)三基于s3c2440的bootloader开发和应用 (7)3.1 Bootloader及u-boot简介 (7)3.2 u-boot系统启动流程 (7)3.3 s3c2440开发平台的u-boot移植 (8)3.4 常用uboot命令介绍 (10)四 4.2操作系统简介 (12)4.1 嵌入式系统 (12)4.2 嵌入式操作系统与Windows CE (12)4.3 从操作系统角度看Windows 的主要功能 (13)4.4 从开发角度看Windows 的主要功能 (13)4.5 Windows 操作系统模型 (14)五开发平台Platform Builder 4.2简介 (16)5.1 PB的安装步骤 (16)5.2 Plarform Builder文件夹结构 (20)六S3C2440嵌入式开发平台的WINCE开发流程 (22)6.1 安装Platform Builder 4.2 (22)6.2 安装Embeded Visual C++ (22)6.3 选择BSP (22)6.4 PB下WINCE的开发、定制 (23)七基于s3c2440的WINCE驱动开发 (33)7.1 wince驱动模型 (33)7.2 2440一个驱动程序示例:基于WinCE的I2C驱动程序设计 (42)八基于2440的嵌入式应用程序开发以及加载至内核 (45)8.1 主流嵌入式开发软件介绍 (45)8.2 基于s3c2440嵌入式开发平台的EVC开发 (46)8.3 把应用程序加入到WINCE内核 (49)8.4 一些EVC下实用的WIN32函数 (50)8.5 EVC下的调试工具 (52)九实现永久保存注册表数据 (53)十Windows CE 下应用程序自动启动 (54)10.1建立快捷方式 (54)10.2 修改shell.reg文件 (55)十一开机后直接运行您的程序而不显示Windows CE桌面 (56)附录一flash.c (57)附录二dm9000.c (69)附录三smdk2440nand.h (74)一前言本开发文档是基于s3c2440嵌入式开发平台所制定,主要从s3c2440的bootloader开发、应用以及windows 4.2在该平台的移植、基于本平台的驱动开发介绍以及基于该平台的一些开发技巧。
基于S3C2440的嵌入式Linux内核移植及字符设备驱动开发
基于S3C2440的嵌入式Linux内核移植及字符设备驱动开发胡祖宝;董国通【期刊名称】《工业控制计算机》【年(卷),期】2015(028)012【摘要】It is important to port kernel system and code driver when applying Linux kernel in a special embedded plat-form.In this work,the embedded platform has been adopted Linux 2.6.22.6 system based onS3C2440 processor.The archi-tecture of Linux kernel is described in detail,and kernel system has been ported successfully in thispaper.Meanwhile,the root filesystem has been established.Furthermore,a character device driver is built as wel.%嵌入式平台多种多样,在一个特定的嵌入式系统应用Linux内核,需要内核的移植和驱动的开发.基于S3C2440芯片的嵌入式开发平台,操作系统选用Linux2.6.22.6版本,分析了Linux内核的体系结构,完成了内核移植过程,构建了根文件系统,对字符设备驱动程序进行了设计与开发.实验证明该方法可行,系统运行可靠.【总页数】3页(P14-15,18)【作者】胡祖宝;董国通【作者单位】上海宝信软件股份有限公司,上海 201203;上海大学机电工程与自动化学院,上海 200072【正文语种】中文【相关文献】1.基于嵌入式Linux的字符设备驱动开发 [J], 王科;姚振东2.基于S3C2440 Codec通道的视频驱动开发 [J], 崔小川;马田;李玉超3.基于ARM的嵌入式Linux字符设备驱动设计研究 [J], 梁金宏;叶海蓉;孙世菊4.基于DSP的嵌入式Linux内核移植的研究与实现 [J], 王晓东5.基于嵌入式Linux内核移植设备驱动的微喷自动装置 [J], 王慧;张璐因版权原因,仅展示原文概要,查看原文内容请购买。
S3C2440完全开发流程
S3C2440完全开发流程作者:dreamer2006@2009-11-3 一.简介 (3)二.建立开发环境 (4)1、编译器ARM-LINUX-GCC-3.4.1 (4)2、J FLASH-S3C2440:S3C2440芯片的JTAG工具 (4)3、安装GDB调试工具 (5)4、USB下载工具 (6)5、UBUNTU开发环境建立 (6)三.S3C2440基础实验 (8)1、实验一:LED_ON (8)2、实验二:LED_ON_C (9)3、实验三:I/O PORTS (11)5、实验五:MEMORY CONTROLLER (15)6、实验六:NAND FLASH CONTROLLER (17)7、实验七:UART (20)8、实验八:PRINTF、SCANF (23)9、实验九:INTERRUPT CONTROLLER (24)10、实验十:TIMER (28)11、实验十一:MMU (31)12、实验十二:CLOCK (39)四.BOOTLOADER VIVI (43)1、阶段1:ARCH/S3C2440/HEAD.S (43)2、阶段2:INIT/MAIN.C (45)1)、Step 1:reset_handler() (45)2)、Step 2:board_init() (46)3)、Step 3:建立页表和启动MMU (47)4)、Step 4:heap_init() (50)5)、Step 5:mtd_dev_init() (52)6)、Step 6:init_priv_data() (56)7)、Step 7:misc()和init_builtin_cmds() (57)8)、Step 8:boot_or_vivi() (58)五.附录一VI命令解释 (65)1、HELP命令 (65)2、MEM命令 (65)3、LOAD命令 (66)4、PARAM命令 (67)5、PART命令 (69)6、BOOT命令 (70)7、BON命令 (71)一.简介本书面向由传统51单片机转向ARM嵌入式开发的硬件工程师、由硬件转嵌入式软件开发的工程师、没有嵌入式开发经验的软件工程师,本书开发板基于天嵌科技的TQ S3C2440开发板,其官方网站为:/,共分9个部分:1、开发环境建立2、S3C2440功能部件介绍与实验(含实验代码)3、Bootloader vivi详细注释4、Linux移植5、Linux驱动6、Yaffs文件系统详解7、调试工具8、GUI开发简介9、UC/OS移植通过学习第二部分,即可了解基于ARM CPU的嵌入式开发所需要的外围器件及其接口。
嵌入式s3c2410下MiniGUI移植与实现
工 业 技 术DOI:10.16661/ki.1672-3791.2019.10.053嵌入式s3c2410下MiniGUI移植与实现蒋若鸿(桂林优利特医疗电子有限公司 广西桂林 541004)摘 要:当前嵌入式系统被广泛应用于工业领域和家用领域,且随着嵌入式系统的不断发展,用户对嵌入式系统的要求也越来越高,因此实现与用户交流功能的嵌入式GUI成为嵌入式研究领域中的一个重点。
该文详细描述了MiniGUI系统基于s3c2410开发板的移植与实现,内容包括交叉编译环境的建立、MiniGUI编译选项的配置和修改、启动项参数的设置以及交叉编译MiniGUI应用程序等。
关键词:s3c2410 MiniGUI 移植中图分类号:TP273 文献标识码:A 文章编号:1672-3791(2019)04(a)-0053-02MiniGUI是目前比较常见的几种GUI系统之一,与其他的GUI相比,MiniGUI最显著的特点是:(1)小巧轻型、占用资源少,稳定性高,可移植性好。
(2)拥有丰富的控件资源,包括静态框控件、按钮控件、编辑框控件、列表框控件、进度条控件、滑块控件、组合框控件、工具栏控件等。
(3)支持拼音输入法和五笔输入法。
(4)支持消息传递机制。
(5)支持JPG、PNG和BMP等图像文件。
1 MiniGUI的移植Samsung公司的s3c2410开发板,平台硬件系统为64MB Nandflash、2MB Norflash、64MB SDRAM。
s3c2410开发板通过USB口、串口、网口与宿主机通信,图形图像处理通过LCD显示。
把MiniGUI移植到s3c2410开发板的步骤:(1)安装交叉编译器和设置交叉编译器环境;(2)使用编译器CC对MiniGUI进行交叉编译,获得可在s3c2410上运行的库;(3)在s3c2410开发板的文件系统中添加交叉编译的MiniGUI 库;(4)编译MiniGUI可执行程序,并下载到s3c2410开发板上。
基于S3C2440A的vivi分析与移植
初 始 化 时 钟
初 试 化 堆 空 间 、M T D
始 化 内存控 制 寄存器 、初 始化 U R 0 A T;
( 1 将 v i 有 代 码 从 N N ls 2 i所 v A D Fah复 制 到
SR D AM。拷 贝 时要 确 定 两 点 : 是 阶段 2 可 执 行 一 的 映像 在 固态存 储 设 备 的存 放 起 始 地址 和终 止 地 址 :
关 键 词 :嵌 入 式 系 统 ; Ln x 3 2 4 A;B o od r ii iu ;¥ C 4 0 ot a e ;vv L
引导 程 序 B oL ae是 嵌 入 式 系 统在 加 电后 执 otod r
器 开 发 的 一 种 B o o dr i 具 有 结 构 清 晰 、功 o t a e。v i L v 能 丰 富 的 特 点 。它 支 持 图形 化 的 用 户 配 置 界 面 。
把vv下 载 到开 发 板上 ,重新 加 电 ,则可 通 过 超级 i i
『 YTL C S R AI
1 大小 的 内存 范 围 内 。而对 于 根 文件 系 统 映像 , MB 则 一般将 其拷 贝 到 ( M— T R + x 00 0 )开始 ME S A T 0 0 10 1
/b处 理 器 体 系相关 的文件 ,和 一些 平 台公 共 l i 的 接 口代 码 。 /cit 提供 配置界 面 的程序 。 sr s p
行 的第一段代码 ,它主要负 责初始化 硬件设 备 , 将 操 作 系统 映像 装 载 到 内存 中 ,然 后 跳转 到 操 作
系 统 所 在 的空 间 ,启 动操 作 系 统 运行 。在 系 统 加
基于S3C2440的串口传输及其界面设计
嵌入式课程设计基于S3C2440的串口传输及其界面设计姓名班级学号指导老师目录第一章绪论 (2)第二章 MiniGUI 在PC机上的安装 (3)2.1 移植源代码准备 (3)2.2 移植基本内容 (3)2.3 测试 (5)第三章 MiniGUI 在ARM上的移植 (5)3.1 移植基本内容 (6)3.2 测试 (8)第四章 MiniGUI串口传输界面设计 (9)4.1 MiniGUI设计知识介绍 (9)4.2 串口传输知识介绍 (10)4.3 设计方法及整体框架 (11)4.4 重要程序解析 (11)第五章程序调试 (12)5.1 发送部分调试及结果 (12)5.2 接受部分调试及结果 (12)第六章设计总结及改进 (13)6.1 设计总结 (14)6.2 设计改进 (14)第七章心得体会 (15)第八章参考文献 (16)第九章附录 (17)第一章绪论近几年,随着嵌入式系统的日益发展和32位嵌入式处理器以及图形显示设备的广泛应用,目标产品对GUI(图形用户界面)的需求越来越多。
由于嵌入式系统一般实时性要求很高,所以嵌入式系统下的GUI需要具有轻量级型、占用资源少、高性能等特点。
此外,嵌入式系统往往是一种定制设备,它对GUI的需求各不相同,因此,GUI必须也可以定制。
而MiniGUI是一个非常适合实时嵌入式产品的高效、可靠、可定制、小巧灵活的图形用户界面支持系统,被广泛的应用于高端科技产品中。
利用MiniGUI开发出良好的人机交互界面已成为嵌入式开发中的迫切需求。
MiniGUI 是嵌入式系统的高级图形系统。
为嵌入式软件的开发提供了完整的图形系统支持,是全球针对嵌入式 Linux仅有的两个商用嵌入式GUI系统之一。
MiniGUI还为嵌入式Linux 系统提供了完整的多进程支持;可以 MiniGUI-Processes、MiniGUI-Threads或者MiniGUI-Standalone 三种运行模式运行。
S3C2440uboot2010.06LCD驱动移植手册
S3C2440uboot2010.06LCD驱动移植手册十四、添加LCD驱动和LOGO制作1、在drivers/video目录中新增s3c2440_fb.c,代码如下:#include#if defined(CONFIG_VIDEO_S3C2440)#include#include "videomodes.h"#include#include/** Export Graphic Device*/GraphicDevice smi;#define VIDEO_MEM_SIZE 0x200000#define MVAL (0)#define MVAL_USED (0) //0=each frame 1=rate by MVAL#define INVVDEN (1) //0=normal 1=inverted#define BSWP (0) //Byte swap control#define HWSWP (1) //Half word swap control#define VBPD (12)#define VFPD (4)#define VSPW (10)#define HBPD (43)#define HFPD (8)#define HSPW (1)#define CLKVAL_TFT (4)void lcd_enable(void){struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio();struct s3c24x0_lcd * const lcd = s3c24x0_get_base_lcd();gpio->GPGUP = gpio->GPGUP & ((~(1 << 4)) | (1 << 4));gpio->GPGCON = gpio->GPGCON & ((~( 3 << 8)) | ( 3 << 8));gpio->GPGDAT = gpio->GPGDAT | (1 << 4 );lcd->LCDCON5 = lcd->LCDCON5 & ((~( 1 << 3)) | (1 << 3)); // PWREN lcd->LCDCON5 = lcd->LCDCON5 & ((~( 1 << 5)) | (0 << 5)); // INVPWREN lcd->LCDCON1 |= 1;gpio->GPBUP = gpio->GPBUP & ((~(1 << 1)) | (1 << 1));gpio->GPBCON = gpio->GPBCON & ((~( 3 << 2)) | ( 3 << 2));gpio->GPBDAT = gpio->GPBDAT | (1 << 1 );/************************************************************** ******************* Init video chip with common Linux graphic modes (lilo)*/void *video_hw_init (void){struct s3c24x0_lcd * const lcd = s3c24x0_get_base_lcd();GraphicDevice *pGD = (GraphicDevice *)&smiint videomode;int bppmode;unsigned long t1, hsynch, vsynch;char *penv;int tmp, i, bits_per_pixel;struct ctfb_res_modes *res_mode;struct ctfb_res_modes var_mode;tmp = 0;videomode = CONFIG_SYS_DEFAULT_VIDEO_MODE;/* get video mode via environment */if ((penv = getenv ("videomode")) != NULL) {/* deceide if it is a string */if (penv[0] <= '9') {videomode = (int) simple_strtoul (penv, NULL, 16);tmp = 1;}}else{tmp = 1;}if (tmp) {/* parameter are vesa modes *//* search params */for (i = 0; i < VESA_MODES_COUNT; i++) {if (vesa_modes[i].vesanr == videomode)break;}if (i == VESA_MODES_COUNT) {printf ("no VESA Mode found, switching to mode 0x%x ", CONFIG_SYS_DEFAULT_VIDEO_MODE);i = 0;res_mode = (struct ctfb_res_modes *) &res_mode_init[vesa_modes[i].resindex];bits_per_pixel = vesa_modes[i].bits_per_pixel;}else{res_mode = (struct ctfb_res_modes *) &var_mode;bits_per_pixel = video_get_params (res_mode, penv);}/* calculate hsynch and vsynch freq (info only) */t1 = (res_mode->left_margin + res_mode->xres + res_mode->right_margin + res_mode->hsync_le n) / 8;t1 *= 8;t1 *= res_mode->pixclock;t1 /= 1000;hsynch = 1000000000L / t1;t1 *= (res_mode->upper_margin + res_mode->yres + res_mode->lower_margin + res_mode->vsy nc_len);t1 /= 1000;vsynch = 1000000000L / t1;/* fill in Graphic device struct */sprintf (pGD->modeIdent, "%dx%dx%d %ldkHz %ldHz", res_mode->xres, res_mode->yres, bits_pe r_pixel, (hsynch / 1000), (vsynch / 1000));pGD->winSizeX = res_mode->xres;pGD->winSizeY = res_mode->yres;pGD->plnSizeX = res_mode->xres;pGD->plnSizeY = res_mode->yres;switch (bits_per_pixel){case 8:pGD->gdfBytesPP = 1;pGD->gdfIndex = GDF__8BIT_INDEX;bppmode = 11;break;case 16:pGD->gdfBytesPP = 2;pGD->gdfIndex = GDF_16BIT_565RGB;bppmode = 12;break;case 24:pGD->gdfBytesPP = 3;pGD->gdfIndex = GDF_24BIT_888RGB;bppmode = 13;break;}pGD->frameAdrs = LCD_VIDEO_ADDR;pGD->memSize = VIDEO_MEM_SIZE;lcd->LCDCON1 = (CLKVAL_TFT << 8) | (MVAL_USED << 7) | (3 << 5) | (bppmode << 1) | 0;lcd->LCDCON2 = (VBPD << 24) | (pGD->winSizeY-1 << 14) | (VFPD << 6) | (VSPW);lcd->LCDCON3 = (HBPD << 19) | (pGD->winSizeX-1 << 8) | (HFPD);lcd->LCDCON4 = (MVAL << 8) | (HSPW);lcd->LCDCON5 = (1 << 11) | (0 << 10) | (1 << 9) | (1 << 8) | (0 << 7) | (0 << 6) | (1 << 3) | (BSWP < < 1) | (HWSWP);lcd->LCDINTMSK |= (3);lcd->LPCSEL &= (~7);lcd->TPAL = 0x0;writel((pGD->frameAdrs >> 1), &lcd->LCDSADDR1);/* This marks the end of the frame buffer. */writel((((readl(&lcd->LCDSADDR1))&0x1fffff) + (pGD->winSizeX+0) *pGD->winSizeY), &lcd->LCDSA DDR2);writel((pGD->winSizeX & 0x7ff), &lcd->LCDSADDR3);/* Clear video memory */memset((void *)pGD->frameAdrs, 0, pGD->memSize);lcd_enable();return ((void*)&smi);}void video_set_lut (unsigned int index,/* color number */unsigned char r, /* red */unsigned char g, /* green */unsigned char b /* blue */){}#endif /* CONFIG_VIDEO_S3C2440 */修改video目录下Makefile文件COBJS-$(CONFIG_VIDEO_VCXK) += bus_vcxk.oCOBJS-$(CONFIG_VIDEO_S3C24X0) += s3c24x0_fb.o videomodes.o cfb_console.o COBJS := $(COBJS-y)2、修改include/configs/SMDK2440.h,添加下面的宏定义/* LCD settings */#define CONFIG_VIDEO#define CONFIG_VIDEO_S3C2440#define CONFIG_VIDEO_LOGO#define CONFIG_VIDEO_BMP_LOGO#define VIDEO_FB_16BPP_WORD_SWAP#define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE (800*480+1024+100)#define LCD_VIDEO_ADDR 0x33d00000#define CONFIG_CMD_BMP#define CONFIG_CFB_CONSOLE#define CONFIG_SYS_CONSOLE_INFO_QUIET/* for PC-keyboard */#define VIDEO_KBD_INIT_FCT 0#define VIDEO_TSTC_FCT serial_tstc#define VIDEO_GETC_FCT serial_getc3、修改drivers/video/videomodes.c{0x31A, RES_MODE_1280x1024, 16},{0x31B, RES_MODE_1280x1024, 24},{0x213, RES_MODE_800x480, 16},};RES_MODE_800x480前的数据0x213与前面的不同即可。
u-boot在S3C2440上的移植问题及解决方法集锦(一)
u-boot在S3C2440上的移植问题及解决方法集锦(一)一、移植环境∙主机:VMWare6.5--Fedora 9∙开发板:自制开发板CPU:S3C2440;SDRAM:HY57V561620FTP-H;NOR flash:SST_39VF1601(2M);NAND flash:K9F1G08U0B(128M);网卡芯片:DM9000EP∙编译器:arm-linux-gcc-4.3.2∙u-boot:u-boot-2009.08∙linux kernel:linux-2.6.30∙busybox:busybox-1.13.3二、博客地址/liuqiqi677如有错误,欢迎指正。
三、参考资料主要参考了黄刚的博客/u3/101649/,他的博客写得相当不错,将嵌入式开发各个阶段的知识以边做边学的方式,辅以图片、解释,清晰地呈现给读者,能够让读者把握主线,对嵌入式开发有整体的了解。
强烈推荐!!!四、问题及解决方法1、NAND flash(K9F1G08U0B)的寻址方案开始照着黄刚的博客进行u-boot移植,u-boot从NOR flash启动比较顺利,但是从NAND flash启动时,就遇到问题了,u-boot不能完全启动!通过在程序中插入点led灯的方法,将问题定位在了NAND flash的读取函数nand_read_ll中对NAND flash单元进行寻址的几条指令上。
这时,问题大概有眉目了,黄刚所用的开发板是友善之臂的mini2440,上面的NAND flash 的型号是K9F1208,容量为64M,与我所用的芯片不一样。
下面比较一下这两款芯片的寻址方案:图1 K9F1208寻址方案图2 K9F1G08寻址方案黄刚博客中K9F1208的寻址代码是:NFADDR = i & 0xFF;NFADDR = (i >> 9) & 0xFF;NFADDR = (i >> 17) & 0xFF;NFADDR = (i >> 25) & 0xFF;而我的K9F1G08的寻址代码则是:NFADDR = 0;NFADDR = 0;NFADDR = (i >> 11) & 0xFF;NFADDR = (i >> 19) & 0xFF;NFADDR = (i >> 27) & 0xFF;但是,这里又出现三个问题了:(1)K9F1G08的寻址方案只有4个周期,而我的代码却有5个周期;(2)为什么前两个周期我给的值都是0;(3)按照芯片手册,第3-5个周期起,移位操作应该分别为(i >> 12)、(i >> 20)、(i >> 28),那为什么却是上面那样的呢?一开始,我也是挺纳闷的,但是通过查找资料与不断试验,终于弄懂了这些原因。
内核移植总结s3c2440
内核移植09号王萍一:为什么做内核移植?因为硬件的不同才做移植,那么与硬件相关的目录是arch和driver目录Arch目录:内核所支持的每种cpu(处理器,而不是操作系统)体系,在该目录下都有对应的子目录,每个子目录下又分有boot、mm、kernel、还有一些mach开头的目录(是与开发板相关的)Drivers:设备驱动程序Include:内核所需要的头文件,与平台无关的头文件在include/linux下,与平台有关的则放在相应的子目录下二:明白我要移植的目标系统的体系架构我要往mini2440开发板上移植内核,其是ARM9的处理器三:做移植前的准备工作下载linux内核的源代码linux-2.6.37.tar.bz2()工具m kimage(是u-boot生成的,在u-boot下的/tools下。
zImage是编译Linux内核产生的,uImage是u-boot中烧写的内核压缩映象,我们需要先下载测试)四:开始1.解压源代码#tar -jxvflinux-2.6.37.tar.bz2#cd linux-2.6.37最好先执行make distclean(确保我们即将编译的内核代码未经任何修改)2. 修改Makefile(内核根目录下)ARCH ?=arm //体系架构CROSS_COMPILE ?=arm-linux- //这个是交叉编译工具保存退出3. 内核的配置内核配置通常在一个已有的配置文件基础上,通过一定的修改得到新的配置文件,此处我们的配置文件是arch/arm/configs/mini2440_defconfig,所以我们只需要拷贝它到内核根目录下(cp arch/arm/configs/mini2440_defconfig .config)再make menuconfig进行一些配置(自己根据需要进行选择,此时它会使用这个.config),保存修改退出4.编译内核Make(会根据.config里的选中的内容开始编译内核)不出错的话,生成的内核文件在arch/arm/boot5.生成我们要测试的uImage(放到arch/arm/boot下)./mkimage -A arm -T kernel -C none -O linux -a 0x30008000 -e 0x30008040 -d zImage -n 'wp_Linux' uImage将生成的uImage放到windows下五:下载内核测试首先设置dnw的下载地址为0x30008000,然后在u-boot中执行:说明:我的开发板上的u-boot大小为312K的,所以(bootargs,bootcmd)bootargs“noinitrd root=/dev/mtdblock3 init=/linuxrc console=tty0 console=ttySAC0,115200”bootcmd“nand read 0x30008000 0x80000 0x300000;bootm”(从内存启动)#usbslave(在dnw中选择要我的uImage)#bootm(会出现内核启动失败(Kernel panic),出现的原因是没有添加Yaffs驱动)解决方法:a)调整内核中Nand Flash分区(可从nand启动)分区划分在文件arch/arm/mach-s3c2440/mach-mini2440.c中。
S3C2440移植uboot之启动过程概述
S3C2440移植uboot之启动过程概述上节烧写了uboot到开发板,不能运行。
这节我们分析uboot重新编译uboot,由最后一条链接命令开始分析uboot 目录•1.分析start.S•2._start会跳转到start_code处•3.然后进入第一个C数:board_init_f()•4.接下来进入重定位•5.清除bss段下图为编译uboot后显示的最后一条链接命令。
1.分析start.S打开uboot.lds,发现链接地址为0,所以新的uboot只能在nor flash运行。
运行开始文件为start.o。
下面我们分析arch/arm/cpu/arm920t/start.S从start_code开始运行.globl _start //声明_start全局符号,这个符号会被lds链接脚本用到_start:b start_code //跳转到start_code符号处,0x00ldr pc, _undefined_instruction //0x04ldr pc, _software_interrupt //0x08ldr pc, _prefetch_abort //0x0cldr pc, _data_abort //0x10ldr pc, _not_used //0x14ldr pc, _irq //0x18ldr pc, _fiq //0x20_undefined_instruction: .word undefined_instruction//定义_undefined_instruction指向undefined_instruction(32位地址)_software_interrupt: .word software_interrupt_prefetch_abort: .word prefetch_abort_data_abort: .word data_abort_not_used: .word not_used_irq: .word irq_fiq: .word fiq.balignl 16,0xdeadbeef //balignl使用,参考/lifexy/p/7171507.html2._start会跳转到start_code处start_code:/*设置CPSR寄存器,让CPU进入管理模式*/mrs r0, cpsr //读出cpsr的值bic r0, r0, #0x1f //清位orr r0, r0, #0xd3 //位或msr cpsr, r0 //写入cpsr#if defined(CONFIG_AT91RM9200DK) || defined(CONFIG_AT91RM9200EK)/** relocate exception table*/ldr r0, =_startldr r1, =0x0 //r1等于异常向量基地址mov r2, #16copyex:subs r2, r2, #1 //减16次,s表示每次减都要更新条件标志位ldr r3, [r0], #4str r3, [r1], #4 //将_start标号后的16个符号存到异常向量基地址0x0~0x3c处bne copyex //直到r2减为0#endif#ifdef CONFIG_S3C24X0/* 关看门狗*/# define pWTCON 0x53000000# define INTMSK 0x4A000008 /* Interrupt-Controller base addresses */# define INTSUBMSK 0x4A00001C# define CLKDIVN 0x4C000014 /* clock divisor register */ldr r0, =pWTCONmov r1, #0x0str r1, [r0] //关看门狗,使WTCON寄存器=0/*关中断*/mov r1, #0xffffffffldr r0, =INTMSKstr r1, [r0] //关闭所有中断# if defined(CONFIG_S3C2410)ldr r1, =0x3ffldr r0, =INTSUBMSKstr r1, [r0] //关闭次级所有中断# endif/* 设置时钟频率, FCLK:HCLK:PCLK = 1:2:4 ,而FCLK默认为120Mhz*/ldr r0, =CLKDIVNmov r1, #3str r1, [r0]#ifndef CONFIG_SKIP_LOWLEVEL_INITbl cpu_init_crit //关闭mmu,并初始化各个bank #endifcall_board_init_f:ldr sp, =(CONFIG_SYS_INIT_SP_ADDR) //CONFIG_SYS_INIT_SP_ADDR=0x30000f80bic sp, sp, #7 //sp=0x30000f80ldr r0,=0x00000000bl board_init_f上面的CONFIG_SYS_INIT_SP_ADDR =0x30000f80,是通过arm-linux-objdump -D u-boot>u-boot.dis生成反汇编,然后从u-boot.dis得到的。
uboot在mini2440上的板级移植
移植一个最基本的可以在mini2440开发板上可以的uboot,功能还不完善,如环境变量不能保存,网络不可用等。
首先选择MCU相同的开发板,在uboot-2008.10中不支持MCU为s3c2440芯片的开发板。
如果MCU没有找到参考开发板,则选择MPU相同的作为参考,s3c2410的MPU为arm920T,uboot-2008.10中smdk2410开发板其MPU也为arm920T,故选择smdk2410作为参考开发板。
1、在顶层Makefile中为开发板添加新的配置选项******************************************************************************* mini2440_config : unconfig@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 NULL s3c24x0******************************************************************************* arm:CPU架构arm920t:CPU类型,对应cpu/arm920t目录mini2440:开发板型号,对应board/mini2440目录NULL:开发者s3c24x0:片上系统(SOC)2、修改cpu/arm920t/start.S2.1修改编译条件使其支持s3c2440将#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)改为#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) ||defined(CONFIG_S3C2440)2.2添加寄存器的定义添加以下代码:******************************************************************************* #define CLK_CTL_BASE 0x4C000000#define MDIV_405 0x7f << 12#define PSDIV_405 0x21#define UPLL_MDIV_48 0x38 << 12#define UPLL_PSDIV_48 0x22#define MDIV_200 0xa1 << 12#define PSDIV_200 0x31*******************************************************************************2.3添加s3c2440中断禁止代码#if defined(CONFIG_S3C2440)ldr r1, =0x7fff/*根据2440x芯片手册INTSUBMSK有15位*/ldr r0, =INTSUBMSKstr r1, [r0]#endif2.4修改时钟设置(将s3c2440主频设置405MHZ)修改以下代码/* FCLK:HCLK:PCLK = 1:2:4 *//* default FCLK is 120 MHz ! */ldr r0, =CLKDIVNmov r1, #3str r1, [r0]#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 */修改成:******************************************************************************* # if defined(CONFIG_S3C2440)/* FCLK:HCLK:PCLK = 1:4:8 */ldr r0, =CLKDIVNmov r1, #5str r1, [r0]mrc p15, 0, r1, c1, c0, 0 /*read ctrl register hugerat*/orr r1, r1, #0xc0000000 /*Asynchronous hugerat*/mcr p15, 0, r1, c1, c0, 0 /*write ctrl register hugerat*//*now, CPU clock is 405.00 Mhz hugerat*/mov r1, #CLK_CTL_BASE /* hugerat*/mov r2, #UPLL_MDIV_48 /*UPLL */add r2, r2, #UPLL_PSDIV_48str r2, [r1, #0x08] /*write UPLL first,48MHz */mov r2, #MDIV_405 /* mpll_405mhz hugerat*/add r2, r2, #PSDIV_405 /* mpll_405mhz hugerat*/str r2, [r1, #0x04] /* MPLLCON hugerat */#else/* FCLK:HCLK:PCLK = 1:2:4 */ldr r0, =CLKDIVNmov r1, #3str r1, [r0]mrc p15, 0, r1, c1, c0, 0 /*read ctrl register hugerat*/orr r1, r1, #0xc0000000 /*Asynchronous hugerat*/mcr p15, 0, r1, c1, c0, 0 /*write ctrl register hugerat*//*now, CPU clock is 202.8 Mhz hugerat*/mov r1, #CLK_CTL_BASE /* hugerat*/mov r2, #MDIV_200 /* mpll_200mhz hugerat*/add r2, r2, #PSDIV_200 /* mpll_200mhz hugerat*/str r2, [r1, #0x04]# endif#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 || CONFIG_S3C2440*/*******************************************************************************3、修改cpu/arm920t/s3c24x0/interrupts.c3.1在有s3c2410宏定义开关里加入对s3c2440的支持修改代码:#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_TRAB)修改为:#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_S3C2440) || defined (CONFIG_TRAB)修改代码:修改为:#elif defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)3.2在函数get_tbclk中,添加对mini2440支持修改代码:ulong get_tbclk (void){ulong tbclk;#if defined(CONFIG_SMDK2400) || defined(CONFIG_TRAB)tbclk = timer_load_val * 100;#elif defined(CONFIG_SBC2410X) || \defined(CONFIG_SMDK2410) || \defined(CONFIG_MINI2440) || \defined(CONFIG_VCMA9)tbclk = CFG_HZ;#else# error "tbclk not configured"#endifreturn tbclk;}改为:******************************************************************************* ulong get_tbclk (void){ulong tbclk;#if defined(CONFIG_SMDK2400) || defined(CONFIG_TRAB)tbclk = timer_load_val * 100;#elif defined(CONFIG_SBC2410X) || \defined(CONFIG_SMDK2410) || \defined(CONFIG_MINI2440) || \defined(CONFIG_VCMA9)tbclk = CFG_HZ;#else# error "tbclk not configured"#endifreturn tbclk;}*******************************************************************************4、修改cpu/arm920t/s3c24x0/speed.c4.1在宏定义中添加对s3c2440的支持修改代码:#include <common.h>#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_S3C2440) || defined (CONFIG_TRAB)#include <s3c2400.h>#elif defined(CONFIG_S3C2410) || defined(COFNIG_S3C2440)#include <s3c2410.h>#endif修改为:******************************************************************************* #include <common.h>#if defined(CONFIG_S3C2400) || defined (CONFIG_S3C2410) || defined (CONFIG_S3C2440) || defined (CONFIG_TRAB)#if defined(CONFIG_S3C2400)#include <s3c2400.h>#elif defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)#include <s3c2410.h>#endif*******************************************************************************4.2修改函数get_PLLCLK由于s3c2410与s3c2440的MPLL、UPLL计算公式不同,需要修改相关代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Vo1 27 N O . . 6
萍 乡高 等专科学 校学报
J u n l fP n xa g C l g o r a ig in o l e o e
21 0 0年 1 月 2
De .2 0 Байду номын сангаас 01
M i GU I在 ¥3 44 上 的 移 植 及 软 件 开 发 ni C2 0
吴 新 华
( 乡高等专 科 学校 计算机 系 , 西 萍 乡 3 7 0 ) 萍 江 3 0 0
摘
要 : iiUI 目前 比较 成 熟 的嵌 入 式 Ln x系 统 的 图 形 用 户 界 面 , 具 有 小 巧 、 配 置 和可 移 植 等 特 点 。本 文 M nG 是 iu 它 可
分 析 了 Mii n GUI 的结 构 和 特点 , 细介 绍 了基 于 AR 和 L n x的 Mii I 移 植 与 实 现 的 过程 。 详 M iu nGU 的
关 键词 : 入 式 系 统 ; 形 用户 界 面 ; nG ; 植 嵌 图 Mii UI移
中 图分 类 号 : P 1 T 36 文献 标 识 码 : A 文 章 编号 :O 7 1 9 2 1 ) 6 0 6 一O 1 O —9 4 ( 0 0 0 — O 8 4
1 引 言
程 中建 立 多 个 窗 口, 所 有 的窗 口在 一个 进 程 中 运 但 行 。相 反 , 运行 在 Mii nGUI i —L t 的每个 程序是 单 e上 独 的进 程 , 每个 进程 也可 以建立 多个 窗 口。Mii UI nG
3 1Mii . nGUI 程序开 发
Mii nGUI 提供 了三种 窗 口类 型 : 主窗 口、 对话框
收 稿 日期 :O O 1 一2 21一 O 9
作者 简 介 : 昊新 华 (9 5 ) 男 , 西萍 乡人 , 师 , 士 , 1 7一 , 江 讲 硕 主要 从 事 计 算机 应 用方 面的研 究 。
Mii nGUI i —Lt e则适 合 于 具有 良好扩 展 性 的嵌 入 式
系统 , 比如要下 载并运行 第三 方应用程 序 的智 能手持
终端 。 由于在实时 嵌入式 操作 系统 中 , 硬件环境 比较 其
苛刻, 因此 要求运 行 其 中的 图形 界 面尽 可能 的精 简 , 而传统 的 窗 口系统 尚不 能满 足实 时嵌 入 式 系统 的需 求 。 以, 所 在基于 L n x的实时嵌 入式 系统 上 , 发一 iu 开 个 能够 充分 满足 嵌入 式 系统 需求 的 图形用 户界 面 支 持 系统就 成了 当务 之急 。实际上 , 国内外 已有许 多专 门针对 L n x的嵌入 式 GUI iu 系统 , nGU1 Mii 只是其
—
Mii UI 为嵌入 式设备 开 发人 员 用 于构 建嵌 nG 是 入式 图形用户界 面的工具 , 一种 面 向实 时嵌入 式系 是 统 的轻 量 级 GUI 作 为一 款根 据 嵌 入 式 系统 应 用 特 , 点 量身 定 做 的完 整 的 图形 支持 系统 , nG Mii UI 底 将 层 操作 系统及硬件平 台差别 隐藏 了起来 , 对上层 应 并 用程序 提供 了一致 的功能特性 。
一
个主 窗 口 , 为应 用程 序 的主界 面或 开始界 面 。主 作
窗 口通 常包括 了一 些子 窗 口 , 这些 子窗 口通 常是 控 件 窗 口 , 可 以是 自定 义窗 口类 。控件 作 为主窗 口中的 也 子 窗 口, 的行 为和 主窗 口一样 , 它 既能 够 接 收键 盘 和 鼠标 等外 部输 人 , 可 以在 自己 的区域 内进行输 出。 也 Mii nGUI 是消息 驱 动 的系 统 , 口之 间 、 窗 控件 之 间都 通过 消息 通信 。 系统 把消 息发送 到应用 程序 窗 口
和 图形 设备接 口。利用这 些接 口 , 每个应 用程序 可 以
建立 多个窗 口, 而且可 以在这些 窗 口中绘制 图形 且互
不影 响 。用户 也可 以利 用 MiiUI 立菜 单 、 钮 、 nG 建 按
列表框 等常见 的 G 元素 。 UI
Mii UI可 以 具 有 两 种 截 然 不 同 的 运 行 时 模 nG
中之一 。然 而 , 由于开发人 员对实 时嵌入式 系统在 理
等操作 系统 以及 Wi3 平 台上 运行 , 广泛 用于 wi n2 并
—
F 手 机 、 S 和 TD—S D i G M C MA 手 机 等 移 动 通讯
终 端等领域 。 用户 遍及全球 。 在众 多处 于工业 界领先 地 位 厂 商 的支 持下 , nGUI 已成 为 嵌 入 式 图形 Mii 业 中间件领域 的工业事实标 准 。
的开 发 目标是 为所 有 的 中端和 高端 的智 能信 息设 备 提供稳 定 、 高性 能 的用 户 图形 系统 。
3M ii nGUl 序 开 发 与 移 植 程
式 :Mii -Thed ” 者“ nG - Lt” “ nGUI ra s或 Mii UI i 。运 e 行 在 Mii UI Thed 上 的 程序 可 以在不 同 的线 nG - ra s
第 6期
吴 新 华 : ii UI ¥ C 4 0上 的 移 植 及 软 件 开 发 M nG 在 3 24
P AR— M 0DI YI F NG ) {
FLAG — W AVE— DRAW I NG 一 1;
・ 9・ 6
和控件 窗 口。每个 Mii nGUI 应用 程序一 般都要 创 建
2Mii nGUI 简介
Mij nGUI 为应用程 序定 义 了一组 轻 量级 的 窗 口
解上 的不 同 , 得这些 GUI 使 系统 在接 口定义 、 体系结 构、 功能 特性 等方 面 存在 着很 大 的差 别 。另外 , 这些 G 系统 所使 用 的授 权条 款 也各 有不 同 。Mii UI UI nG
目 前 , nGU 可 以 在 Ln x u l u 、 W Mii / iu / C i x Vx n
o k C s C/ I、 S r a X ce s OS r s e o u OS I p 0S Th e d Nu lu 、 E
The d ra s适 合 于 具 有 单 一 功 能 的 实 时 系 统 , 而