MiniGUI-1.6.8 移植 for fs9315-v2

MiniGUI移植
作者:保云
version 1.0

FS9315

       这里所说的移植,针对优龙fs9315-v2开发板。这是一次实践过程的记录,在此过程中修正了MiniGUI手册上不正确的地方,当我们碰到时会特别说明。
       移植步骤如下:
1、  环境准备;
2、  交叉工具安装;
3、  文件系统建立;
4、  MiniGUI库移植;
5、  MiniGUI资源移植;
6、  MiniGUI Demo程序编译
7、  下载执行。
 
在本文中,会提到开发板或目标板,都是指优龙的fs9315-v2开发板。
文中出现粉红色的文字,是在linux下实际执行的命令行。
非特别说明,本文中提到的工作目录是指/root/projects/fs9315,如果执行操作时没有指明当前目录,那么默认就是这个目录了。

环境准备

       GUI,MiniGUI 1.6.8,这就是我们要移植的MiniGUI资源和库。
主机操作系统,windows xp sp 2 专业版。安装了Serv_U ftp服务程序和tftp服务程序,如果你的linux下ftp、tftp服务都正常,串口也能工作(我的笔记本没有串口,使用的USB转串口在linux下配置不起来),完全可以不需要windows操作系统。
优龙开发板,FS9315-v2,采用db9315处理器。
交叉编译工具,优龙开发板关盘上所带,文件名:cross-2.95.3.tar.bz2。
popt库,从网络上下载的,文件名:popt-1.7.tar.gz。miniGUI的demo程序需要这个库。
虚拟机,VMWare 5.5,在该虚拟机上运行redhat 9,内核版本 2.4.20-8。linux是用来制作开发板所需文件系统,以及交叉编译目标板所需资源。VMWare可以和windows共享目录。
与本文相关的linux系统中的目录有:
       /root/tar/minigui,存放minigui相关库、资源和demo程序归档包的地方。
       /root/release,是指向windows d:/release共享目录的一个链接,需要在开发板上使用tftp或ftp下载的文件都放到这里,以便在linux下做完后,回到windows下载。当然你也可以不这么做,这是你的自由。
       /root/projects/fs9315,存放工作过程中的文件。
       /root/projects/commen,一个通用的目录,可以被不同项目共享安装的东西都在这个目录下。
 

交叉工具安装

       这里首先解释一下为什么需要交叉编译工具,是考虑到我们的队伍里有对嵌入式开发还不了解的成员。
       通常我们所使用的电脑CPU都是intel或amd生产的,属于x86系列,而开发板所使用的CPU则不同,fs9315使用cirrus logic 的 db9315,x86使用的指令集与db9315使用的指令集不一样。普通PC机上的编译工具编译的程序只能运行在x86系列CPU上,我们想在PC上编译能够在db9315上运行的程序,就得使用交叉编译工具了。
       在linux操作系统上最常用的编译工具是gcc,普通gcc编译的程序只能在x86系列电脑上运行,但通过我们的特殊处理,他也能编译运行于其他类型的CPU上的程序,至于如何处理,还是比较复杂,这里不做特别说明,我们还是采用“拿来主义”吧!下面我们开始正题。
1、  在/usr/local/目录下建立arm目录
mkdir /usr/local/arm
cd /usr/local/arm
2、  解压交叉编译工具包
tar xfj /root/tar/fs9315/ cross-2.95.3.tar.bz2
解压完成后会在arm目录下看到2.95.3目录,这就是我们所需要的交叉编译工具。
注意:优龙提供的这个交叉编译工具必须放在/usr/local/arm目录下。
 
3、  设置环境变量
为了在命令行中能够寻找到arm-linux-gcc,我们需要把他所在的路径加入到PATH环境变量中。
cd /etc/profile.d/
vim cross2.95.3.sh
也可以使用其他文件名,只要保证文件后缀为“.sh”就可以了,为什么这样做,看一看/etc/profile文件内容就知道了。
在cross2.95.3.sh文件中加入下面的内容
        #!/bin/sh
        export PATH=/usr/local/arm/2.95.3/bin:$PATH
退出vim
chmod 777 cross2.95.3.sh
现在重启机子,环境变量就生效了,如果不想重启(傻瓜才想),可以执行下面的命令
. /etc/profile.d/cross2.95.3.sh
其中“.”的意思是把指定文件中的内容当shell命令来执行。有的人会问,为什么不用./cross95.3.sh命令,因为这也能执行这个shell脚本。这里稍微解释一下。
当我们直接执行一个shell脚本时,linux会启动一个新的sh(当然也可能是其他)来解释这个脚本,在我们的cross2.95.3.sh中设置环境变量,设置后的PATH只在linux启动的新的sh进程下生效,当linux执行完我们的cross2.95.3.sh后,我们当前的sh进程并不识别那个新sh进程设置的PATH变量。而“.”命令的作用就是让当前的sh进程来解释cross2.95.3.sh脚本。注意,脚本中的export命令是让当前sh进程的子sh进程也能识别这些环境变量,并不是说整个linux系统都识别。
到目前为止,在命令行下键入arm-linux-gcc时,linux可以识别这个命令了。
4、  交叉编译MiniGUI1.6.8
为了让我们的交叉编译工具能够编译使用miniGUI库编写的程序,还需要将miniGUI库进行交叉编译,并安装到交叉编译工具下的库目录中。
              cd /root/projects/commen
tar xfz /root/tar/minigui/libminigui-1.6.8-linux.tar.gz
              cd libminigui-1.6.8-linux
              CC=arm-linux-gcc ./configure --prefix=/usr/local/arm/2.95.3/arm-linux --build=i386-redhat-linux --host=arm-linux --target=arm-linux
              上面的方法,在miniGUI用户手册中说明不正确。
              make
              make install
              我们现在的交叉编译工具应当能编译使用miniGUI编写的程序了,不过需要编译miniGUI所带的demo程序,我们还需要安装一个popt库,因为其demo中的写字板程序使用了这个库,没有这个库的话,编译会出错。
5、  交叉编译安装popt库。
我们已经从网上下载了popt库的源码包,文件名为popt-1.7.tar.gz,我们需要使用交叉编译的方式将其安装到交叉工具库目录下。
cd /root/projects/commen
tar xfz /root/tar/tools/popt-1.7.tar.gz
cd popt-1.7
CC=arm-linux-gcc ./confiigure --build=i386-redhat-linux --host=arm-linux --target=arm-linux --prefix=/usr/local/arm/2.95.3/arm-linux
新手注意,当你看到源码目录下有configure文件时,都能使用这个方式来配置。
make
make install

文件系统建立

我当前的工作目录是/root/projects/fs9315,在本小节提到的工作目录都是指这个目录。
开发板带了一个文件系统映象,文件名为myroot.cramfs,我们就在他的基础上改造吧。
1、从优龙光盘上拷贝myroot.cramfs和mkcramfs文件到当前目录。
2、建立mngroot目录,mng是minigui的缩写。
mkdir mngroot
mount –o loop myroot.cramfs mngroot
tar cf mngroot.tar mngroot
umount mngroot
rm –rf mngroot
tar xf mngroot.tar
到这里,我们就得到一个目录mngroot,下面就是myroot.cramfs中的内容,我们也拥有了对下面所有子目录的读写执行权限。

MiniGUI库移植

1、删除旧版miniGUI库
在mngroot/lib目录下,已经有1.3版本的miniGUI库,我们需要先删除这些库。
cd /mngroot/lib
rm –f libminigui*
rm –f  *mgext*
rm –f  *vcongui*
注意:不要把这个目录下的minigui链接删除。
       2、安装新版本的miniGUI库
              cd /root/projects/fs9315
              mkdir minigui
              cd libminigui-1.6.8-linux
              make clean
              CC=arm-linux-gcc ./configure --prefix=/root/projects/fs9315/minigui --build=i386-redhat-linux --host=arm-linux --target=arm-linux
              make
              make install
              这时候,在/root/projects/fs9315/minigui/lib目录下已经有我们需要的库文件了,需要将这些库文件复制到/root/projects/fs9315/mngroot/lib目录下(注意:minigui链接不要复制)。
              cd ../minigui/lib
              rm -f minigui
              cp * /root/projects/fs9315/mngroot/lib/
              ok,我们已经把miniGUI所需要的库文件移植完了,接下来是移植资源。

MiniGUI资源移植

1、  解压资源包
cd /root/projects/fs9315
tar xfz /root/tar/minigui/minigui-res-1.6.tar.gz
cd minigui-res-1.6
修改config.linux文件中的prefix=的内容如下图所示
make install
成功执行后,在/root/projects/fs9315/minigui/lib目录下就有了minigui目录了,现在还需要加入miniGUI的配置文件MiniGUI.cfg。这个文件一般位于/etc或/usr/local/etc目录下,我们查看一下mngroot/etc下的MiniGUI.cfg,发现这是一个链接,最终链接的目标是mngroot/var/tmp/minigui/MiniGUI.cfg,所以我们需要复制一份MiniGUI.cfg文件到/root/projects/fs9315/minigui/lib/minigui,以便放到开发板上后, rcS脚本能够正确的将他放置到/var/tmp/minigui/下。
cp /root/projects/fs9315/minigui/etc/MiniGUI.cfg /root/projects/fs9315/minigui/lib/minigui/
然后将/root/projects/fs9315/minigui/lib/minigui/MiniGUI.cfg文件[systemfont]段以前的内容删除,为什么需要删除我们在后面说明。
将/root/projects/fs9315/minigui/lib/minigui/目录归档,并复制到/root/projects/fs9315/mngroog/usr目录下。
cd /root/projects/fs9315/minigui/lib
tar cf miniguires.tar minigui
cp miniguires.tar /root/projects/fs9315/mngroot/usr
2、  删除旧的miniGUI资源
在mngroot下已经存在旧的miniGUI资源,我们需要把他删除
cd /root/projects/fs9315/mngroot/usr
rm -f minigui-res.tgz mde.tgz
其中mde.tgz是1.3版本的miniGUI使用的demo程序,我们不需要了,把他删除。
3、  修正rcS文件
上面我们提到的minigui-res.tgz文件就是在这个脚本中被解压所到正确的位置(/var/tmp/minigui),而我们已经把minigui-res.tgz文件删除,换成我们自己的miniguires.tar文件了,所以需要修改这个脚本。
用vi打开mngroot/etc/init.d/rcS文件,找到下面的内容:
把上面的内容改成:
注意:我们所看到的/tmp实际上指向/var/tmp。
保存并退出vi
4、  制作miniGUI配置输入文件
如果这个时候把mngroot制作成cramfs文件,烧录到开发板启动后,你会发现,/etc/MiniGUI.cfg文件并不是我们拷贝的那个,系统在什么地方什么时候更改了这个文件的内容我没有找到,应该是被编译到busybox中了。但myroot.cramfs文件系统给我们留了一个余地,就是在/usr/etc/下放置了一个MiniGUI_bh.cfg文件,其中的内容是正常MiniGUI.cfg [systemfont]段以后的内容,当系统启动是会把这个文件的内容合并到/etc/MiniGUI.cfg文件中。所以我们只要复制一个1.6.8版本的配置文件,并删除[systemfont]段以前的内容就可以了。
cp  -f  /root/projects/fs9315/minigui/etc/MiniGUI.cfg /root/projects/fs9315/mngroot/usr/etc/MiniGUI_bh.cfg
然后用vi打开MiniGUI_bh.cfg文件,删除[systemfont]段以前的内容,修改后的文件大致如下:
现在明白我们为什么在第一步的时候删除了正常MiniGUI.cfg文件[systemfont]段以前的内容了吧?

MiniGUI Demo程序编译

怎么解压归档文件就不用多说了吧,这里需要注意的是配置参数的问题,因为我们做的是交叉编译。
CC=arm-linux-gcc ./confiigure --build=i386-redhat-linux --host=arm-linux --target=arm-linux
make
成功执行后,在gdidemo目录下我们会看到gdidemo可执行程序,把他拷贝到方便开发板下载的地方就可以了(我的是/root/release/FS9315-v2目录)。

下载执行

              到目前,就剩下最后的工作了,我们需要把mngroot目录制作成cramfs文件。
              cd /root/projects/fs9315
              ./mkcramfs mngroot mngroot.cramfs
              mkcramfs文件是我们拷贝myroot.cramfs文件时一起从优龙提供的光盘上拷贝来的,可别忘了要用这个哟。
              cp mngroot.cramfs /root/release/FS9315-v2
              回到windows,在超级终端中的redboot命令行状态下,把mngroot.cramfs文件烧写到flash中,至于如何烧写,启动开发板,请参考开发板的操作手册,这里不浪费口水了。
阅读更多
个人分类: linux开发
上一篇WTL安装
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭