MiniGUI移植总结
- 格式:doc
- 大小:640.50 KB
- 文档页数:38
Helper2416开发板移植minigui3.0.12之一:让PC运行minigui笔者最近有时间学习嵌入式linux,于是熟悉了一下基本操作之后,选定了移植minigui作为一个练习。
看了看官网说明,移植过程挺简单的,但整整三天之后,开发板首次显示出minigui版的helloworld。
第一阶段:PC运行minigui这个工作是一定要做的,因为minigui同其他GUI程序开发类似,都是先在PC上编程、调试、模拟,成型之后再交叉编译灌入嵌入式设备。
Helper2416开发板随机所带的虚拟机fedora12已经安装好了交叉编译链、zlib库,png库,jpeg库等,使移植工作大为简化。
此文也不涉及到这几个库的移植,相关方法在手册4.6节有详述,网上文章也未提及移植这几个库出什么问题。
一. 搞定qvfbqvfb是QT的一个附属程序,可以单独运行,跟minigui本身没什么联系,只是minigui可以拿它当作在PC上运行时的模拟屏幕。
qvfb大致有以下几个获取方式。
1. minigui官网有一个qvfb2-2.0.tar.gz程序包,编译这个包需要Qt3的库。
Qt3的库可以从QT官网下载编译。
2.Helper2416开发板随机提供了qtopia和Qt4的源码。
按手册 4.6节编译完qtopia之后,.../qtopia-2.2.0/qt2/bin/qvfb便是qvfb的可执行文件。
将此文件拷入PATH路径,然后用$lddqvfb命令查看一下所依赖的库,在.../qtopia-2.2.0/qt2/lib目录中找到相应的库,拷入/lib目录。
此时命令行直接输入$qvfb即可看到窗口界面。
3.对于Qt4,按手册4.7节编译完之后并不会自动生成qvfb可执行文件,需要单独进行编译。
网上的参考步骤是:(1).复制…/qt-everywhere-opensource-src-4.7.2/tools/shared/deviceskin.h,deviceskin.cpp两个文件到…/qt-everywhere-opensource-src-4.7.2/tools/qvfb目录下(2). 在qvfb文件夹下手动生成qvfb工程,即$qmake-project,生成qvfb.pro(3). $qmake,生成Makefile(4). 手动修改Makefile 中LIBS 选项:末尾添加-lXtst(5). $make即可得到可执行文件qvfb按照这个步骤可以编译得到qvfb,但笔者实测发现Qt4编译出来的qvfb运行minigui程序时鼠标不正常,而qtopia的qvfb鼠标正常。
MiniGUI3.0.12及组件下载地址/downloads/index.html libmgplus-1.2.4下载地址/download/yong_f/40628071. 需要下载的组件libminigui-gpl-3_0_12.tar.gzmg-samples-3_0_12.tar.gzfreetype-1_3_1.tar.gzjpegsrc_v7.tar.gzlibpng-1_2_37.tar.gzminigui-res-be-3_0_12.tar.gzzlib-1_2_2.tar.gzqvfb2-2.0libmgplus-1.2.4(可以在csdn上下载到)(qvfb所需要的包)libqt3-mtlibqt3-mt-devalienqt-devel-3.3.8-4.fc7.i386.rpm2.安装各组件<1>libminigui-gpl-3_0_12.tar.gz(库)./configure --prefix=/usr/local --enable-qvfbial --disable-splash --disable-screensaver sudo makesudo make install<2>minigui-res-be-3_0_12.tar.gz(资源包)./configure --prefix=/usr/localsudo makesudo make install<3>freetype-1_3_1.tar.gz./configure --prefix=/usr/localsudo makesudo make install(在安装时会有ftdump.c的预处理标识符错误,修改./test/ftdump.c里的Print_Mem( memory_footprint.##field, string )改为: Print_Mem( memory_footprint.field, string )#define FOOTPRINT( field ) Save_Memory( &memory_footprint.##field )修改为:#define FOOTPRINT( field ) Save_Memory( &memory_footprint.field )<4>安装PNG库./configure --prefix=/usr/localsudo makesudo make install<5>安装JPEG库./configure --prefix=/usr/local --enable-sharedsudo makesudo make install<6>安装zlib库./configure --prefix=/usr/localsudo makesudo make install<7>libmgplus-1.2.4./configure --prefix=/usr/localsudo makesudo make install将/usr/local/lib加入到.bashrc中<8>安装qvfb2(因为需要qt-3.3作支持,所以需要先安libqt3-mt,libqt3-mt-dev,下载qt-devel-3.3.8-4.fc7.i386.rpm,然后用alien转为deb,再用dpkg -i --force-overwrite 来安装此包) sudo apt-get install libqt3-mtsudo apt-get install libqt3-mt-devsudo apt-get install aliensudo alien qt-devel-3.3.8-4.fc7.i386.rpmdpkg -i --force-overwrite qt-devel-3.3.8-4.fc7.i386.deb(开始安qvfb)cd qvfb2-2.0./configure --with-qt-includes=/usr/lib/qt-3.3/include --with-qt-libraries=/usr/lib/qt-3.3/lib --with-qt-dir=/usr/lib/qt-3.3sudo makesudo make install(qvfb2与1不同,没有文件输入是不会显示出框图的)<9>修改MiniGUI.cfg[system]# GAL engine and default optionsgal_engine=pc_xvfb(修改此处)defaultmode=640x480-16bpp(修改此处)# IAL engineial_engine=qvfbmdev=/dev/input/micemtype=IMPS2[fbcon]defaultmode=1024x768-16bpp[qvfb]defaultmode=640x480-16bppwindow_caption=QVFB-for-MiniGUI-3.0exec_file=/usr/local/bin/qvfbdisplay=0#{{ifdef _MGGAL_PCXVFB[pc_xvfb]defaultmode=640x480-16bppwindow_caption=XVFB-for-MiniGUI-3.0-(Gtk-Version)exec_file=/usr/local/bin/qvfb2(修改此处)display=0#}}<10>mg-samples-3.0.12 并运行./configure --prefix=/usr/localsudo makesudo make install./same/same问题1:执行示例出现Wrong JPEG library version: library is 70, caller expects 62原因:在编译libminigui的时候用的库是62,而在编示例时用的是70,导致版本不对解决办法:将/usr/lib/libjpeg.so /usr/local/libjpeg.so.62 全指向libjpeg.so.7.0.0 然后修改/usr/include/jpeglib.h 中的版本号为70,然后重新编译libminigui(若是坚持用libjpeg7的话用此办法)(关于miniGUI在2440上的移植会在下篇更新)以下是关于minigui的移植,认为是最详细的一篇,经本人实验也已经成功,转自/forum/showtopic-3899.aspx采用交叉编译方式【软件环境】PC:ubuntu 10.04开发板:Linux 2.6.32.2@2440Target: arm-none-linux-gnueabigcc version 4.4.3编译minigui3.0并移植需要的文件有(基本上都是比较新的版本,有些库文件在我尝试后还是选择了比较旧的版本):FreeType库:minigui字体引擎freetype-1_3_1.tar.gzJPEG库:minigui显示jpeg图片jpegsrc.v8c.tar.gzpng库:minigui显示png图片libpng-1.0.59.tar.gzzlib库:minigui数据压缩函数库zlib-1.2.6.tar.gzminigui所用到的资源minigui-res-be-3_0_12.tar.gzminigui核心库libminigui-gpl-3_0_12.tar.gzminigui样例mg-samples-3_0_12.tar.gzStep1:建立工作目录,如/home/profiles/minigui,将上述*.tar.gz放入该目录,并解压tar xzf freetype-1_3_1.tar.gztar xzf jpegsrc.v8c.tar.gztar xzf libpng-1.0.59.tar.gztar xzf zlib-1.2.6.tar.gztar xzf minigui-res-be-3_0_12.tar.gztar xzf libminigui-gpl-3_0_12.tar.gztar xzf mg-samples-3_0_12.tar.gzStep2:[编译Freetype库]cd freetype-1.3.1/(A)./configure --host=arm-linux --enable-static --prefix=/usr/local/minigui修改Makefile第12行all: ttlib ttest ttpo为all: ttlib ttpo第34行注释(或删)掉,即#cd $(FTTESTDIR); $(MAKE) -f $(MAKEFILE) install 否则make就会出现下面的错误ftdump.c:172:1: error: pasting "." and "glyph_object" does not give a valid preprocessing tokenftdump.c:182:1: error: pasting "." and "first_instance" does not give a valid preprocessing tokenftdump.c:191:1: error: pasting "." and "second_instance" does not give a valid preprocessing tokenftdump.c:201:1: error: pasting "." and "face_object" does not give a valid preprocessing tokenftdump.c:202:1: error: pasting "." and "glyph_object" does not give a valid preprocessing tokenftdump.c:203:1: error: pasting "." and "second_instance" does not give a valid preprocessing token(B)make(C)make install[编译JPEG库]cd jpeg-8c/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar如(后面的库的编译修改configure亦如此):## M4sh Initialization. #### -------------------- ### Be more Bourne compatibleCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arDUALCASE=1; export DUALCASE # for MKS shif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux --enable-shared(C)make(D)make install[编译PNG库]cd libpng-1.0.59/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux(C)make(D)make install[编译zlib库]cd zlib-1.2.6/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui --shared(C)make(D)make install[编译资源库]cd minigui-res-be-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAR=arm-linux-ar(B)./configure --prefix=/usr/local/minigui(C)make(D)make install[编译核心库]cd libminigui-gpl-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arCFLAGS="-I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CPPFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CXXFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "(此处要特别注意,我用的编译器所在目录为/opt/FriendlyARM/toolschain/4.4.3,注意跟自己环境的差异,下面的示例库编译亦然)(B)./configure --prefix=/usr/local/minigui --host=arm-linux \--target=arm-linux --build=i386-linux --with-osname=linux \--with-style=classic --with-targetname=fbcon --enable-autoial \--enable-rbf16 --disable-vbfsupport --enable-tslibial(上面的--enable-tslibial选项是minigui支持触摸屏必选的选项,后面会讲到)(C)make(D)make install[编译示例库]cd mg-samples-3.0.12/(A)修改configure(vi configure)在文件开始的位置加上CC=arm-linux-gccCXX=arm-linux-g++LD=arm-linux-ldAS=arm-linux-asAR=arm-linux-arCFLAGS="-I/usr/local/minigui/include-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CPPFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "CXXFLAGS="-g -I/usr/local/minigui/include -I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/include "(B)./configure --prefix=/usr/local/minigui --build=i386-linux \--host=arm-linux --target=arm-linux(C)make这里应该会出错,是因为Makefile里的参数不对,程序找不到链接库,这么多Makefile,需要修改哪一些呢?查看根目录下的Makefile(vi Makefile),(line 204)会发现:COMMON_SUBDIRS = same graphics housekeeper minesweeper ctrl_dlg \lf_skin font_text look_feel dbuff notebook same graphics ... notebook这几个目录会按顺序依次被make,查看刚才出错的信息,肯定是same首先没被编译通过。
嵌入式Linux系统中的GUI系统的研究与移植摘要:针对嵌入式Linux系统中几种常见的GUI系统,讨论嵌入式GUI实现的底层技术方式;详细分析Microwindows、MiniGUI、Qt/Embedded等三种GUI的实现特点、体系结构、API接口。
结合这三种嵌入式GUI在以Motorola i,MX1为核心的实际应用系统中移植开发的问题,讨论移植技术与中文化技术。
关键词:嵌入式Linux GUI 应用与移植中文化引言嵌入式GUI为嵌入式系统提供了一种应用于特殊场合的人们交互接口。
嵌入式GUI要求简单、直观、可靠、占用资源小且反应快速,以适应系统硬件资源有限的条件。
另外,由于嵌入式系统硬件本身的特殊性,嵌入式GUI应具备高度可移植性与可裁减性,以适应不同的硬件条件和使用需求。
总体来讲,嵌入式GUI具备以下特点:*体积小;*运行时耗用系统资源小;*上层接口与硬件无关,高度可移植;*高可靠性;*在某些应用场合应具备实时性。
1 基于嵌入式Linux的GUI系统底层实现基础一个能够移植到多种硬件平台上的嵌入式GUI系统,应用至少抽象出两类设备:基于图形显示设备的图形抽象层GAL,基于输入设备的输入抽象层IAL。
GAL层完成系统对具体的显示硬件设备的操作,极大程度上隐蔽各种不同硬件的技术实现细节,为诮程序开发人员提供统一的图形编程接口。
IAL层则需要实现对于各类不同输入设备的控制操作,提供统一的调用接口。
GAL层与IAL层的设计概念,可以极大程序地提高嵌入式GUI的可移植性,如图1所示。
目前应用于嵌入式Linux系统中比较成熟,功能也比较强大的GUI系统底层支持库有SVGA lib、LibGGI、Xwindow、framebuffer等。
三种嵌入式GUI系统的分析与比较.1 MicrowindowsMicrowindows是一个典型的基于Server/Clinent体系结构的GUI系统,基本分为三层,如图2所示。
MiniUI知识点汇总一、Layout布局1.1 Layout布局器mini-layout/docs/api/index.html#ui=Layoutregion String 面板名称showSplit Boolean 是否显示分割条trueshowHeader Boolean 是否显示头部trueallowResize Boolean 是否允许拖拽调节true<div id="layout1"class="mini-layout"style="width:600px;height:400px;"borderStyle="border:solid 1px #aaa;"><div title="north"region="north"height="80"showSplitIcon="true">north</div><div title="south"region="south"showSplit="false"showHeader="true"height="80" showSplitIcon="true">south</div><div title="west"showProxyText="true"region="west"width="200"expanded="false" showSplitIcon="true">west</div><div title="east"region="east"showCloseButton="true"showSplitIcon="true">east</div><div title="center"region="center"><input type="button"value="隐藏"onclick="hideHeader()"/><input type="button"value="显示"onclick="showHeader()"/><br/><br/><input type="button"value="折叠"onclick="collapsePanel()"/><input type="button"value="展开"onclick="expandPanel()"/></div></div><script type="text/javascript">mini.parse();//将html标签解析为miniui控件。
MiniGUI移植总结/ 2007-12-18 网络点击:1026 [ 评论 ]需准备的软件包:libminigui-1.6.x-linux.tar.gz //开发库minigui-res-1.6.tar.gz //资源文件,如bmp,font,icon 等minigui-dev-1.6.2-for-win32 //用于在windows VC开发的程序包下载地址:参考文献:1 Hily Jiang. MiniGUI源码走读.2 uClinux下显示驱动移植及minigui的移植感谢:qq群.嵌入式技术交流02.小鹤1 开启uClinux的FrameBuffer支持1.1 修改/uClinux-dist/vendors/Samsung/44B0/config.linux-2.4.x确定CONFIG_VT=y//VT 应该是Virtual Terminal1.2 修改/uClinux-dist/linux-2.4.x/drivers/video/s3c44b0xfb.c默认情况下是支持16灰度屏的,如果是256色屏,则需要将#define LCD_GRAY_16注释掉。
1.3 增加fb0设备修改vendors/Samsung/44B0/Makefile1.4 驱动确定linux-2.4.x/drivers/video/Config.inif [ "$CONFIG_CPU_S3C44B0X" = "y" ]; thentristate ' Samsung S3C44B0X built-in LCD controller frame buffer support' CONFIG_FB_S3C44B0Xfilinux-2.4.x/drivers/video/Makefileobj-$(CONFIG_FB_S3C44B0X) +=s3c44b0xfb.olinux-2.4.x/drivers/video/fbmem.cextern int s3c44b0xfb_init(void);extern int s3c44b0xfb_setup(void);#ifdef CONFIG_FB_S3C44B0X{“s3c44b0xfb”,s3c440xfb_init,s3c44b0xfb_setup},#endifDEVICES = \fb0,c,29,01.5 编译uClinux对FrameBuffer部分配置的选择/********************************************************************************** Console drivers*VGA text console (CONFIG_VGA_CONSOLE) [N/y/?] (NEW) nSupport Frame buffer devices (CONFIG_FB) [N/y/?] (NEW) y** Frame-buffer support*Support for frame buffer devices (EXPERIMENTA L) (CONFIG_FB) [Y/n/?]Acorn VIDC support (CONFIG_FB_ACORN) [N/y/?] (NEW) nCLPS711X LCD support (CONFIG_FB_CLPS711X) [N/y/?] (NEW) nCyber2000 support (CONFIG_FB_CYBER2000) [N/y/?] (NEW) nSA-1100 LCD support (CONFIG_FB_SA1100) [N/y/?] (NEW) nAdvanced low level driver options (CONFIG_FBCON_ADV ANCED) [N/y/?] (NEW) y Monochrome support (CONFIG_FBCON_MFB) [N/y/?] (NEW) n2 bpp packed pixels support (CONFIG_FBCON_CFB2) [N/y/?] (NEW) n4 bpp packed pixels support (CONFIG_FBCON_CFB4) [N/y/?] (NEW) n8 bpp packed pixels support (CONFIG_FBCON_CFB8) [N/y/?] (NEW) y16 bpp packed pixels support (CONFIG_FBCON_CFB16) [N/y/?] (NEW) n24 bpp packed pixels support (CONFIG_FBCON_CFB24) [N/y/?] (NEW) n32 bpp packed pixels support (CONFIG_FBCON_CFB32) [N/y/?] (NEW) nA miga bitplanes support (CONFIG_FBCON_AFB) [N/y/?] (NEW) nA miga interleaved bitplanes support (CONFIG_FBCON_ILBM) [N/y/?] (NEW) nAtari interleaved bitplanes (2 planes) support (CONFIG_FBCON_IPLA N2P2) [N/y/?] (NEW) n Atari interleaved bitplanes (4 planes) support (CONFIG_FBCON_IPLA N2P4) [N/y/?] (NEW) n Atari interleaved bitplanes (8 planes) support (CONFIG_FBCON_IPLA N2P8) [N/y/?] (NEW) nA miga bitplanes support (CONFIG_FBCON_AFB) [N/y/?] (NEW) nA miga interleaved bitplanes support (CONFIG_FBCON_ILBM) [N/y/?] (NEW) nAtari interleaved bitplanes (2 planes) support (CONFIG_FBCON_IPLA N2P2) [N/y/?] (NEW) n Atari interleaved bitplanes (4 planes) support (CONFIG_FBCON_IPLA N2P4) [N/y/?] (NEW) n Atari interleaved bitplanes (8 planes) support (CONFIG_FBCON_IPLAN2P8) [N/y/?] (NEW) n Mac variable bpp packed pixels support (CONFIG_FBCON_MAC) [N/y/?] (NEW) nVGA 16-color planar support (CONFIG_FBCON_VGA_PLANES) [N/y/?] (NEW) nVGA characters/attributes support (CONFIG_FBCON_VGA) [N/y/?] (NEW) nHGA monochrome support (EXPERIMENTA L) (CONFIG_FBCON_HGA) [N/y/?] (NEW) n Support only 8 pixels wide fonts (CONFIG_FBCON_FONTWIDTH8_ONLY) [N/y/?] (NEW) n Select compiled-in fonts (CONFIG_FBCON_FONTS) [N/y/?] (NEW) yVGA 8x8 font (CONFIG_FONT_8x8) [N/y/?] (NEW) yVGA 8x16 font (CONFIG_FONT_8x16) [N/y/?] (NEW) ySparc console 8x16 font (CONFIG_FONT_SUN8x16) [N/y/?] (NEW) nPearl (old m68k) console 8x8 font (CONFIG_FONT_PEARL_8x8) [N/y/?] (NEW) nAcorn console 8x8 font (CONFIG_FONT_ACORN_8x8) [N/y/?] (NEW) nVirtual terminal (CONFIG_VT) [Y/n/?]Support for console on virtual terminal (CONFIG_VT_CONSOLE) [N/y/?] (NEW) n*********************************************************************************/因为LCD是256色的,所以选择下项8 bpp packed pixels support (CONFIG_FBCON_CFB8) [N/y/?] (NEW) y如果下载内核后进不去系统,则Virtual Terminal 不选,如果进去后fb0不能用,则要选,因为不选的话会屏蔽Support Frame buffer devices (CONFIG_FB) [N/y/?] (NEW) y的设置,Virtual Terminal 意思是超级终端显示的数据在LCD上显示,同时超级终端也显示。
1.6 测试/dev/fb01)测度程序test1.c测试/dev/fb0 有没存在,以及其属性/*******************************************************************************#include <linux/fb.h>#include <unistd.h>#include <sys/mman.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <stdio.h>int main (){int fp=0;struct fb_var_screeninfo vinfo;struct fb_fix_screeninfo finfo;fp = open ("/dev/fb0",O_RDWR);if (fp < 0){printf("Error : Can not open framebuffer device\n");return 0;}if (ioctl(fp,FBIOGET_FSCREENINFO,&finfo)){printf("Error reading fixed information\n");return 0;}if (ioctl(fp,FBIOGET_VSCREENINFO,&vinfo)){printf("Error reading variable information\n");return 0;}printf("The mem is :%d\n",finfo.smem_len);printf("The line_length is :%d\n",finfo.line_length);printf("The xres is :%d\n",vinfo.xres);printf("The yres is :%d\n",vinfo.yres);printf("bits_per_pixel is :%d\n",vinfo.bits_per_pixel);close (fp);return 0;}*******************************************************************************/ 2) 测试程序test2.c在LCD上显示一张图片/********************************************************************************** #include <linux/fb.h>#include <unistd.h>#include <sys/mman.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>const unsigned char gImage_bmp[76560]={……}//该数组可能过Image2LCD软件生成,该软件可在找到int main(){int framebuffer_device;int line_size,buffer_size,i;char *screen_memory;struct fb_var_screeninfo var_info;struct fb_fix_screeninfo fix_info;framebuffer_device=open("/dev/fb0",O_RDWR);ioctl(framebuffer_device,FBIOGET_VSCREENINFO,&var_info);ioctl(framebuffer_device,FBIOGET_FSCREENINFO,&fix_info);line_size=var_info.xres*var_info.bits_per_pixel/8;buffer_size=line_size*var_info.yres;var_info.xoffset=0;var_info.yoffset=0;screen_memory=(char*)mmap(0,buffer_size,PROT_REA D|PROT_WRITE,0,framebuffer_device,0); for(i=0;i<buffer_size;i++){*(screen_memory+i)=gImage_bmp[i];}sleep(2);return 0;}**********************************************************************************/ 3) 将程序编译进内核uClinux-dist/romfs/ 里的文件是最终生成的内核文件,也是开发板上系统能看到的文件,要将文件编译进内核,只需把文件放到这里就行,然后makearm-elf-gcc –elf2flt –o test1 test1.carm-elf-gcc –elf2flt –o test2 test.c将test1 test2 放到uClinux-dist/romfs/usr/里Make 两次,我发现make一次没装进去。