版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Minigui移植1. 交叉编译环境交叉编译环境安装在 /nios2-linux/toolchain-mmu/x86-linux2/bin/在 .bash_profile 文件中添加PATH=$PATH:/home/szh/nios2-linux/toolchain-mmu/x86-linux2/bin:$HOME/binuser# source . bash_profile2. 建立源码库创建以下文件夹/home/szh/miniGUI/nios2/将以下文件解压在该文件夹下zlib-1.2.3.tar.tarlibpng-1.0.10rc1.tar.gzjpegsrc.v6b.tar.gz
2、3. 安装 zlib 库,这个是后面的库的编译基础。 user# cd zlib-1.2.3user# CC=nios2-linux-gnu-gcc LDSHARED=nios2-linux-gnu-ld -shared ./configure -prefix=/opt/nios2/ -shareduser# makeuser# suroot# make installroot# exit安装完后检查一下目录 /usr/local/nios2/nios2-linux/ include,lib ,假如 include 中没有 zlib.h 之类的头文件,lib 中没有 libz.so.1.2.3
3、 ,那就自己手动拷到这些目录下去,记着拷的时候把所有的 *.h 都需要拷过去,在拷库的时候用 cp a libz.* /./lib 就行,要用上 a 选项4. 安装 png 库这个是用来显示 png 图形的,MiniGUI 里很多图都是 png 的,如果没有这个库,你的 MiniGUI 将无法正常工作,切记切记!库不要用最新的,最新的容易有问题,用这个老一点的就没问题了。Libpng 不提供有效的 configure 脚本,所以只好自己动手改 Makefile 文件了user# cp scripts/makefile.linux Makefile /把Scripts下的一个makefile 拷
4、出打开Makefile文件,修改以下部分CC=nios2-linux-gnu-gcc /修改这里 # where make install puts libpng.a, libpng.so*, png.h and pngconf.h prefix=/opt/nios2 /修改这里 # Where the zlib library and include files are located #ZLIBLIB=/usr/local/lib #ZLIBINC=/usr/local/include ZLIBLIB=/opt/nios2/lib /修改这里 ZLIBINC=/opt/nios2/incl
5、ude /修改这里 user# makeuser# suroot# make installroot# exit5. 安装jpeg库 首先在本机上编译一下,主要是它的 configure 文件设计得有问题,得先用 gcc 编译一个 dummy.c 的文件,然后才能后面编译,不然的话就会出现 libtool 找不到之类的错误 user# ./configure -enable-shared -enable-staticuser# makeuser# make cleanuser# ./configure -prefix=/opt/nios2 CC=nios2-linux-gnu-gcc -ena
6、ble-shared -enable-staticuser# makeuser# suroot# mkdir p /opt/nios2/man/man1root# mkdir p /opt/nios2/ binroot# make installroot# exit6. 安装 libttf 库这个是 TrueType 字体的支持库,用来显示文字的。 注意:MiniGUI 的文档说只支持 1.3.1 版本的 ttf 库,不要把版本弄错了 :) user# cd freetype-1.3.1 / 进到目录里去user# mkdir p libttf/extend / 自己另外建立一个目录 user
7、# cp lib/* lib/arch/ansi/* libttf/ 把有用的东西拷出来 user# cp lib/extend/* libttf/extend/ / 把extend目录下的文件也拷出来注意 cp 命令不要用 r 选项,因为会把一些没用的东西出拷出来的拷贝完成了,现在来自己手动编译了user# cd libttfuser# nios2-linux-gnu-gcc -c -fPIC -O2 freetype.c/ 这个.c文件包括了其它所有的.c 文件user# nios2-linux-gnu-gcc -c -fPIC -O2 -I./ extend/*.c / 把 extend
8、 下所有的 .c 文件全部编译 user# nios2-linux-gnu-gcc -shared -o libttf.so *.o / 生成最后的动态链接库Root# mkdir p /usr/local/nios2/nios2-linux/include/freetype1/freetypeRoot# cp *.h extend/*.h /usr/local/nios2/nios2-linux/include/freetype1/freetypeRoot# cp libttf.so /usr/local/nios2/nios2-linux/lib root# exit7. 编译libmin
9、igui在 libminigui-1.6.10/ 下创建一个脚本文件 buildlib-linux-nios2,输入以下内容:#!/bin/shrm config.cache config.status -fCC=nios2-linux-gnu-gcc ./configure -prefix=/home/szh/miniGUI/nios2/target -build=i386-linux -host=nios2-unknown-linux -target=nios2-unknown-linux -enable-shared -enable-static -with-osname=linux -
10、with-style=fashion -disable-micemoveable -disable-cursor -enable-newgal -enable-nativegal -enable-galfbcon -enable-fblin4l -enable-textmode -enable-dummyial -enable-autoial -enable-ads7846ial -enable-nativeial -disable-qvfbial -disable-latin9support -disable-big5support -enable-ttfsupport -enable-tt
11、fcache -disable-savebitmap -enable-jpgsupport -enable-pngsupport -disable-imegb2312 -disable-aboutdlg -disable-savescreen -enable-videoshadow -enable-fixedmath user# ./buildlib-linux-nios2user# makeuser# make installuser# cd /home/szh/miniGUI/nios2/targetuser# suroot# cp a lib/* /usr/local/nios2/nio
12、s2-linux/lib/root# cp a include/* /usr/local/nios2/nios2-linux/include/root# cp a etc/* /usr/local/nios2/nios2-linux/etc/root# exit最后,安装 popt 库,这个库在编译 mde 程序时需要使用,不然编译没法通过 :) http:/gd.tuwien.ac.at/utils//dist/rpm-4.1.x/popt-1.7.tar.gz 我是从这里下载的 user# tar zxf popt-1.7.tar.gz user# cd popt-1.7 u
13、ser# ./configure -prefix=/usr/local/arm/2.95.3/arm-linux/ -host=arm-linux -enable-shared -enable-static user# make Root# make install 一切很顺利,搞定了。 交叉编译环境设置好了! OK ,下面是把 minigui 移植到你的板子上去了。 我在 /opt 目录下建立了一个 rootfs 目录,即 /opt/rootfs ,用来建立我的嵌入式系统的根目录,现在我需要把 minigui 的库文件放到里面去, 建立目录 Root# mkdir p /opt/rootfs
14、/usr/local/lib,etc 把 /usr/local/arm/2.95.3/arm-linux/lib 中相应的库拷到 /opt/rootfs/usr/local/lib 目录下去 下面是我拷的库文件: libjpeg.a libmgext-1.3.so.3 libminigui.a libpng.so.2 libttf.a libz.so libjpeg.la libmgext-1.3.so.3.0.0 libminigui.la libpng.so.0rc1 libttf.so libz.so.1 libjpeg.so libmgext.a libminigui.s
15、o libpopt.a libvcongui-1.3.so.3 libz.so.1.2.3 libjpeg.so.62 libmgext.la libm.so libpopt.la libvcongui-1.3.so.3.0.0 minigui libjpeg.so.62.0.0 libmgext.so libm.so.6 libpopt.so libvcongui.a shared libm-2.2.3.so libminigui-1.3.so.3 libpng.a libpopt.so.0 libvcongui.la libm.a libminigui-1.3.so.3.0.0 libpn
16、g.so libpopt.so.0.0.0 libvcongui.so 其中一些 .a 的静态库是不需要拷过去的,我图方便,一起拷了,呵,懒人的做法 同时修改 /opt/rootfs/etc/ld.so.conf ,在里面最后新加入一行 /usr/local/lib 然后执行 Root ldconfig r /opt/rootfs /把 rootfs 当成根目录,执行 OK,库文件准备完毕 下面把资源文件也拷过来,还记得吗,在前面 搭建 PC 环境中讲过安装资源文件,它被装在了 /usr/local/lib 目录下,一个叫 minigui 的目录,我们要做的就是把它拷过来 Root# cp r
17、 a /usr/local/lib/minigui /opt/rootfs/usr/local/ 连目录一起拷过来,目录结构和主机一样 把配置文件也拷过来 Root# cp /usr/local/etc/MiniGUI.cfg /opt/rootfs/usr/local/etc/ 记住,保持目录结构的一致 修改 MiniGUI.cfg ,如下 system # GAL engine gal_engine=fbcon /这里修改 # IAL engine ial_engine=dummy / 这里修改,我不知道你会用什么触摸屏,所以就用dummy肯定不会错 mdev=/dev/touchscre
18、en/0raw /解摸屏,如果前面是 dummy ,则这里改不改无所谓 mtype=none fbcon defaultmode=240x320-16bpp / 根据你的LCD大小自己设置,设置错误minigui 就启动不了 ial_engine 一开始建议用 dummy ,先让 minigui 跑起来,以后再把 触摸屏 加进去,保证尽可能减少错误的发生 保存,退出。 OK ,你的板子上的系统也搭建完毕了,现在来让真正的图形界面跑起来!:) 注意:你Build 你的 嵌入式 Linux 内核时,在 Console 中一定要先上 FrameBuffer ,从4位色一直到 16 位色的支持,全选上
19、吧,同时把 VGA TextOut 选项勾掉,不要选它! 内核启动时就要激活 FrameBuffer ,不然 minigui 没法启动起来,激活的方法就是给它传内核参数 vga=xxx 之类的。 3.启动你的 MiniGUI 的图形界面 看看你的 Windows 操作系统,左下方是一个 开始 按钮,然后是 任务条 ,MiniGUI 也提供了类似的界面,这就是一个叫 mginit 的程序,它启动后就跟widnows的界面很像了,它就在 mde 包里面,还记得最初让你下载的那个程序包吗? 现在我们就来安装它!:) user# tar zxf mde-1.3.0.tar.gz user# cd md
20、e-1.3.0 /我们先对 mginit 程序做一点小修改,呵 user# cd mginit ; vi mginit.c 在 297 行处,把下面代码注释掉 /* AboutMiniGUI (); AboutMDE (); */ 保存,退出即可。 因为我们没有 触摸屏 现在,没法点它的 确认 按钮,所以把这些 About 信息去掉:) 好了,现在来编译吧,在mde-1.3.0 目录里 user# ./configure -prefix=/opt/rootfs/usr/local -host=arm-linux user# make 如果你发现 mginit 目录下的程序没有被编译,那就说明你
21、的 libminigui 配置不正确,记住,你必须是配置为 Lite 模式,这个程序才会被编译 user# make install 事实上证明,make install,根本没用,它什么都没做,do nothing 所以还是我们自己动手来做吧,呵 Root# mkdir p /opt/rootfs/usr/local/lib/shared/miniguiapps /建立了一个我们自己的目录,好长,呵 Root# cp r a mde-1.3.0/* /opt/rootfs/usr/local/lib/shared/miniguiapps 直接全部拷过去,然后到 /opt/rootfs/usr
22、/local/lib/shared/miniguiapps 的各个程序目录下去,比如 mginit , bomb , painter 之类的,把不用的 .c .h .o Makefile 之类的全删除掉,保留 可执行文件和相应的 res 目录下的资源 注意,保持目录的结构,mginit.rc 文件不要删了,这个对mginit 程序很重要 OK,最后一步了,修改配置文件 Root# vi /opt/rootfs/linuxrc 文件 一般你配置嵌入式系统的时候都会有这个文件,用来执行一些系统的初始化工作,如果没有,就在你相应的初始化脚本(例如 etc/inittab)中加入下面的语句 mknod
23、 /dev/ttyp5 c 3 5 mknod /dev/ptyp5 c 2 5 cd /usr/local/lib/shared/miniguiapps/mginit ./mginit 注意:最后执行 mginit 命令的方式,先进入到它所在的目录,然后再执行,千万不要只写成 /usr/local/lib/shared/miniguiapps/mginit/mginit 因为 mginit 执行时在“当前目录”的res文件夹下搜索显示的资源,这种写法则“当前目录”为 根目录,所以会找不到 res 文件夹,于是显示错误 “ Can not create taskbar! ” 就退出了! 如果运
24、行时显示没有 mknod 命令,请检查一下你的 busybox 的配置 :) 切记切记! 好了,一切成功了,现在放到你的板子上去试试吧:) Root# cd /opt Root# mkcramfs rootfs root.cramfs 制作根文件系统镜像,把 root.cramfs 烧到你的板子里面就OK了,启动,就可以看到 minigui 的图形界面启动了 :) 注意: 因为你的 minigui 是按 Lite 模式编译的,如果必须 mginit 首先运行起来,你其它的程序(比如 bomb ,或是 helloword)才能执行,如果 mginit 没有运行起来你就执行 helloword 的
25、话,就会显示错误 “ Can not attach shared resource ! ” 4.为 minigui 开发程序 环境配好了,现在是开发自己的程序了,呵呵,写个简单的 Helloword 程序 /* * $Id: helloworld.c,v 1.7 2003/06/13 07:15:49 weiym Exp $ * * Listing 2.1 * * helloworld.c: Sample program for MiniGUI Programming Guide * The first MiniGUI application. * * Copyright (C) 2003 F
26、eynman Software. * * License: GPL */ #include #include #include #include #include static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) HDC hdc; switch (message) case MSG_PAINT: hdc = BeginPaint (hWnd); TextOut (hdc, 100, 100, Hello, world!); EndPaint (hWnd, hdc); return 0; c
27、ase MSG_CLOSE: DestroyMainWindow (hWnd); PostQuitMessage (hWnd); return 0; return DefaultMainWinProc(hWnd, message, wParam, lParam); int MiniGUIMain (int argc, const char* argv) MSG Msg; HWND hMainWnd; MAINWINCREATE CreateInfo; #ifdef _LITE_VERSION SetDesktopRect(0, 0, 1024, 768); #endif CreateInfo.
28、dwstyle = WS_VISIBLE | WS_BORDER | WS_CAPTION; CreateInfo.dwExstyle = WS_EX_NONE; CreateInfo.spCaption = Hello, world; CreateInfo.hMenu = 0; CreateInfo.hCursor = GetSystemCursor(0); CreateInfo.hIcon = 0; CreateInfo.MainWindowProc = HelloWinProc; CreateInfo.lx = 0; CreateInfo.ty = 0; CreateInfo.rx =
29、320; CreateInfo.by = 240; CreateInfo.iBkColor = COLOR_lightwhite; CreateInfo.dwAddData = 0; CreateInfo.hHosting = HWND_DESKTOP; hMainWnd = CreateMainWindow (&CreateInfo); if (hMainWnd = HWND_INVALID) return -1; ShowWindow(hMainWnd, SW_SHOWNORMAL); while (GetMessage(&Msg, hMainWnd) TranslateMessage(&
30、Msg); DispatchMessage(&Msg); MainWindowThreadCleanup (hMainWnd); return 0; #ifndef _LITE_VERSION #include #endif 首先在 PC 上编译,验证通过! user# gcc -o helloword helloword.c -lminigui lmgext 如果没有错误,运行 qvfb ,按前面说的设置好,然后执行 user# ./helloword 一切正常,没有错误,现在就要把它放到我们的 板子上去跑了 user# arm-linux-gcc O2 o helloword hellow
31、ord.c lminigui lmgext 编译完后,把它烧到板子的某个目录下,就可以在 板子上跑了! 所以这里就是说,minigui 提供了让你在 PC 上就可以调试和运行程序的方法(使用qvfb ),等你保证程序正确了以后,只需要把它重新编译一下,放到板子上去就行了! 5.一些常见的问题 这几天遇到不一些问题,发现论坛上也基本上没人回答我,所以只好自己解决了,这里把一些问题写出来,方便有需要的人: 问题1:在板子上跑的程序都显示 can not find qvfb 之类,可是我只是想让它在板子上跑在 FrameBuffer 之上啊? 解决:在编译 libminigui 的时候,把 Use
32、incore (built-in) resource /建议不要选这个,老有问题 NEWGAL engine on Qt Virtual FrameBuffer /建议不要选这个,不然老让你用qvfb 问题2:编译的时候老出现 unreferenced to vbf_Courier8x8() 之类的问题 解决: Var bitmap font /千万不要选这个,不然会出现 unreferenced vfb_Courier8x8() 之类的错误 问题3:一切都搞定了,可是执行 mginit() 的时候就崩溃了,把所有的寄存器值打印了出来,然后显示了个 Abort() 就退出了! 解决: IME
33、(GB2312) Intelligent Pinyin module /千万不要选这个,不然后面你的 mginit 程序一启动就崩溃了 问题4: 为什么我执行 helloword 就显示 “Can not attach shared resource!” 解决: 注意: 因为你的 minigui 是按 Lite 模式编译的,如果必须 mginit 首先运行起来,你其它的程序(比如 bomb ,或是 helloword)才能执行,如果 mginit 没有运行起来你就执行 helloword 的话,就会显示错误 “ Can not attach shared resource ! ” 问题5:怎么
34、把自己的程序加到 minigui 的 taskbar 上去,并且排在前面? 解决: 查看 mginit 目录下的 mginit.rc 文件,里面就是配置,我想你能看明白的 :) 问题6:为什么我的程序显示 can not find libminigui.so ? 解决:你是否忘了在 etc/ld.so.conf 中加入 /usr/local/lib ,并且执行 ldconfig 程序? 看前面说的方法 好了,就写这么多吧,希望对新手有所帮助! Singlewolfyu (大漠孤狼) 写于 清华 FIT 4-305 2006-11-7 yuqiang0107 把我写的另一篇关于 IAL 校正的文
35、章也归并到这个贴子里来,算是做个汇总吧,原贴可以在论坛中搜 singlewolfyu 的文章就可以找到,原贴里有一些我上传的附件,有兴趣可以去下载,这里就不上传了! 希望这篇文章能对大家有用! 带屏幕校正功能的 2410 的 IAL 作者:大漠孤狼 E-MAIL:yuqiang0107 前几天成功的把 MiniGUI 移植到板子上了,顺利的跑起来了。我用的是 SMDK2410 的 IAL 程序,可是还有一些问题,如下: 1:点在触摸屏上不动,可以见到 Cusor 在点的位置附近老是跳动,而且点的位置不准, 2:经常点 MiniGUI 的菜单或是按钮的时候,MiniGUI 没有反应,经print
36、f 出来,发现菜单有时候收不到 MSG_COMMAND 消息,有时候能收到,就是说很不稳定 3:经常点击触摸屏的手离开后,Cursor 就消失了 经过调试后发现了原因,如下: 1:由于用的触摸屏是比较便宜的那种,所谓便宜没好货,触摸屏的采样很不稳定,我的屏是 3 寸屏,分辨率是 240x320 16-pp 的那种,可是我点击触摸屏从驱动读出来的值却是 900 多,800 多,而且还不是简单的线性关系,比如我点 X 轴 120 处,值为 400 ,我点X轴 239 处值为 900 ,晕死,如果用原来的 SMDK 2410 IAL 程序,根本无法正常工作 2:便宜屏还有个问题,就是在刚开始按触摸屏
37、和快要放手时,这一头一尾两种情况下,采样值根本就是错误的,比如我按在 X 轴 120 处,刚开始得到的值是 230 ,然后是 250,400 ,401,398,403 402,100,101 ,这样的序号,可以看到,在刚开始和快结束时采到的值根本是错误的,这就是为什么我说“手一离开触摸屏,Cusor就消失”的原因为了,因为这时候 Cusor 跑到错误的坐标值上去了,当然就消失了 3:经常点 MiniGUI 的菜单却没有响应,其实还是上面 2 的原因,菜单的响应是当你的手离开触摸屏后,会产生一个 MSG_LBUTTONUP 消息,在这个消息中会调用 PtInRect()检查这时候的点击位置是否在
38、菜单上,如果在的话,菜单就会触发一个 MSG_COMMAND 消息,于时菜单就会显示出来,其实 MiniGUI 中对所有的点击都是这样处理的。(自己看看 MiniGUI 的源代码就会明白了)。因为我的便宜屏在手快要离开触摸屏时得到的坐标是错误的,所以这时候 PtInRect() 就会返回错误的值,就好像我点在屏的别的地方了一样,所以这时候菜单根本得不到消息。 根据以上原因,我对 MiniGUI 1.3.3 版本中的 2410 的 IAL 程序进行了修改,使得它在我的 便宜屏 上一样可以正常工作。它提供了去抖动功能,就是点击时一头一尾那两下的不准确的值不能要,同时提供了一个方便的屏幕校准程序,你
39、只需要做小小的修改就可以校准让它在你的 便宜屏 上很好的正常工作了。 新程序的使用方法: 在 2410.c 中定义了两个数组,如下 typedef struct mPoint int x, y ; mPOINT ; static mPOINT ts_position4= 940,926,940,102,96,104,120,940 ; static mPOINT display_position4= 0,0,0,319,239,319,239,0 ; ts_position 意思为 TouchScreen 的 位置 display_position 意思为屏幕上显示的 位置 比如我前面说的,我
40、的屏幕是 240x320 的,我点四个角 0,0,0,319,239,319,239,0 ,从触屏上读出来的数据分别为 940,926,940,102,96,104,120,940 ,填入这两个数就行 所以使用方法就是,你自己取四个点(其实只要3个点就够了,呵),点这四个点,得到相应的触摸屏读出来的值,把这些数据填到这两个数组中,OK,你的 触摸屏 就可以正常工作了 :) 后面附一个 readpos.c 的程序,你可以执行它,然后点击触摸屏,它会显示出触摸屏读出来的值。 程序: 2410_带触摸屏校正功能.c /* * $Id: 2410.c,v 1.4 2003/11/21 12:15:37
41、 weiym Exp $ * * 2410.c: Low Level Input Engine for SMDK2410 Dev Board. * * Copyright (C) 2003 Feynman Software. */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either
42、version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more
43、 details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include common.h #ifdef _SMDK2410_I
44、AL #include #include #include #include #include #include /* i add it here */ #include #include #include #include ial.h #include 2410.h typedef struct mPoint int x, y ; mPOINT ; static mPOINT ts_position4= 940,926,940,102,96,104,120,940 ; static mPOINT display_position4= 0,0,0,319,239,319,239,0 ; typ
45、edef struct Matrix /* This arrangement of values facilitates * calculations within getDisplayPoint() */ int An, /* A = An/Divider */ Bn, /* B = Bn/Divider */ Cn, /* C = Cn/Divider */ Dn, /* D = Dn/Divider */ En, /* E = En/Divider */ Fn, /* F = Fn/Divider */ Divider ; mMATRIX ; static mMATRIX m_matri
46、x; int setCalibrationMatrix( mPOINT * display, mPOINT * screen, mMATRIX * matrix) ; int getDisplayPoint( mPOINT * display, mPOINT * screen, mMATRIX * matrix ) ; /* for data reading from /dev/ts */ typedef struct unsigned short pressure; unsigned short x; unsigned short y; unsigned short pad; TS_EVENT; static unsigned char state NR_KEYS; static int ts = -1; static int mousex = 0; static int mousey = 0; static TS_EVENT ts_event; #undef _DEBUG /* Low Level Input Operations */ /* * Mouse operations - Event */ static int mouse_update(void) return 1; static void mouse_getxy(int *x, i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度代驾租赁合同模板(含司机背景调查要求)3篇
- 2024年网络安全设备研发与生产合同2篇
- 2024版深圳跨境电商平台运营合同3篇
- 2024版房产赠与与离婚协议书财产保全实施细则合同3篇
- 2024年度窗帘窗帘布艺定制与家居空间设计合同2篇
- 2024版工业厂房防水堵漏工程监理合同2篇
- 2024版二手房交易售后服务保障合同范本3篇
- 2024年度水泥行业技术研发合同3篇
- 2024版幼儿看护中心保育员招聘聘用合同3篇
- 2024年度教育信息化整体解决方案合同5篇
- 珠宝鉴赏知到章节答案智慧树2023年同济大学
- 宾语前置句式的研究综述
- 食品安全防护检查表
- 幼儿园突发安全事件事故处置措施
- 现代药物制剂与新药研发智慧树知到答案章节测试2023年苏州大学
- 肺结核的学习课件
- 心肺复苏术最新版
- 2023-2024学年贵州省贵阳市小学数学六年级上册期末自测提分卷
- 2022年医学专题-烟雾病
- GB/T 9115.2-2000凹凸面对焊钢制管法兰
- GB/T 3880.3-2012一般工业用铝及铝合金板、带材第3部分:尺寸偏差
评论
0/150
提交评论