嵌入式Linux开发环境的建立.ppt
搭建嵌入式Linux开发环境,张黎明,主要内容:,1.Linux开发环境的建立(Vmware虚拟机,fedora系统,VMwaretools的安装,交叉编译工具链)2.网络文件系统的配置(主机端,开发板端)3.Minigui开发环境的建立(pc端,交叉编译),1.Linux开发环境的建立,背景知识:Vmware虚拟机简介,VMware Workstation虚拟机是一个在Windows或Linux计算机上运行的应用程序,它可以模拟一个基于x86的标准PC环境。这个环境和真实的计算机一样,都有芯片组、CPU、内存、显卡、声卡、网卡、软驱、硬盘、光驱、串口、并口、USB控制器、SCSI控制器等设备,提供这个应用程序的窗口就是虚拟机的显示器。在使用上,这台虚拟机和真正的物理主机没有太大的区别,都需要分区、格式化、安装操作系统、安装应用程序和软件,总之,一切操作都跟一台真正的计算机一样。下面,就请大家根据我们的介绍,一步步操作,自己安装一台可以操作的虚拟机。,1.1安装vmware workstation 虚拟机软件,版本,虚拟机版本向下兼容,选择典型安装,单击Install继续,按照默认安装即可,背景知识:Fedora7简介,Fedora(Fedora Linux,第七版以前为Fedora Core)是较具知名度的 Linux 发行包之一,由 Fedora Project 社群开发、红帽公司赞助,目标是建立一套新颖、多功能并且自由(开放源代码)的操作系统。Fedora 是奠基于 Red Hat Linux,在 Red Hat Linux 终止发行后,红帽公司计划以 Fedora 来取代 Red Hat Linux 在个人应用的领域,而另外发行的 Red Hat Enterprise Linux(Red Hat 企业版 Linux,RHEL)则取代 Red Hat Linux 在商业应用的领域。和经典的redhat9的操作习惯相同自身携带了大量开发工具包,是实验室的经验总结之后的最佳选择,1.2在虚拟机中安装fedora7,初始界面如下:点击File-New-Virtual Machine,选择典型安装,选择操作系统类型应该选linux-other linux 2.6X kernel,选择一个地方保存你的虚拟机注意:保存的地方空间要足够大,网络选择默认的brige模式,背景知识:何为VMware中的bridge&nat?,bridged(桥接模式):在这种模式下,虚拟系统就像是局域网中的一台独立的主机,与宿主计算机平等的存在于网络中,你必须像对待局域网中的其他真正的机子一样来对待它(比如分配你的局域网所要求的网络地址、子网掩码、网关等)。使用bridged模式的虚拟系统和宿主机器的关系:就像连接在同一个Hub上的两台电脑。虚拟系统与宿主计算机以及宿主计算机所在网络的其他计算机都可以相互访问。如果你想利用VMWare在局域网内新建一个虚拟服务器,为局域网用户提供网络服务,就应该选择桥接模式。NAT(网络地址转换模式):这 种模式下,虚拟系统的网卡连接到宿主计算机的VMware Network Adapter VMnet8网卡上(宿主计算机安装了VMWare软件后会自动添加VMware Network Adapter VMnet1和VMware Network Adapter VMnet8两个网卡,当然是在宿主计算机的网络连接里查看啰)。如果你希望你的虚拟系统连接外部网络,这种模式最简单,虚拟系统不用做任何网络设置 就可以访问外部网络。使用NAT模式的虚拟系统和宿主计算机的关系:宿主计算机就相当于是开启了DHCP功能的路由器,虚拟系统就是内网中的一台实际的机器,通过路由器的DHCP服务获得网络参数。虚拟系统可以访问宿主计算机所在网络的其他计算机(反之不行),可以与宿主计算机互访。,给虚拟机分配空间建议刚开始分配大一点,因为它是根据你的使用动态变大的,so dont worry it is too large for your disk.这里使用的是16G,点击完成,这个时候的界面应该如下,在点击start按钮之前,我们还需要做一些设置1)配置虚拟机的内存条件允许的话配大一点,会影响你后面的性能的,这里配的是540M,2)在虚拟cdrom中插入fedora的镜像文件(双击cdrom),(3)点击start,启动虚拟机:此时相当于一台没有装系统的虚拟PC,可能会出现诸如下图的提示,点击yes,忽略它,继续,如果刚才正确装载了Fedora7的安装镜像会看到如下启动界面选择第一个并按回车,注意这个时候开始,鼠标就会被锁在虚拟机里面,如果你想光标返回到windows下,可以使用组合键ctrl+alt。接下来按下列图片操作,没有说明的操作代表使用系统默认:,选择skip:,选择简体中文:,点击是,点击Remove Linux partitions,并在跳出对话框选择是,输入口令,这个口令是你以后以root用户登陆时使用的,将软件开发和网络服务器也选上,紧接着就进入整个安装的过程,大概需要40分钟左右(视电脑配置不同),需要耐心等待。,安装完毕后会跳出对话框,按照下列操作继续进行:禁用防火墙,不发送profile,点击前进,不创建用户(我们将直接以root用户登陆),点击继续,重新引导即可启动Fedora7!,背景知识:VMware tools,1.更新虚拟机中的显卡驱动,使虚拟机中的XWindows可以运行在SVGA模式下.2.提供一个vmware-toolbox,这个Xwindows下的工具可以让你修改一些VMWare的参数和功能.3.同步虚拟机和Host的时间.4.支持同一个分区的真实启动和从虚拟机中启动,自动修改相应的设置文件.对于我们来说最重要的是:更好的解决虚拟机与主机的共享问题,通过VMWaretools,来实现文件共享。只要安装成功了VMware tools,Windows主机与Windows客户虚拟机之间的文件的共享就比较简单了。,1.3.1 vmware界面点击vm-install vmware tools,会出现下列界面,点击install,1.3 安装vmware tools工具,1.3.2 双击计算机,进入目录,双击cdrom,会跳出下列对话框:,1.3.3 双击rpm包,选择无论如何都要安装,直到提示安装完毕,1.3.4 打开一个终端(tips:终端拖到桌面上,因为会经常使用):,在终端中依次输入:cd空格/usr/bin,./vmware-config-tool.pl如图,一路按回车,直到出现分辨率的时候,为你的虚拟机选择合适的分辨率,完成配置后重启虚拟机。安装vmtools的优点:1)分辨率可以按自己的设置变化;2)鼠标不用ctrl+alt出来,和windows无缝兼容;3)可以把windows下的东西直接拖拽进虚拟机的窗口看看,即能够直接交互文件了现在虚拟机就像windows的一个文件夹,这点使以后的开发非常方便。,首先下载一个源码包:解压到目录/usr/local/arm下,解压后确认目录的顺序是否为/usr/local/arm/3.4.1/添加环境变量到系统中:打开/etc/bashrc,并在bashrc文件的最后一行添加:export PATH=/usr/local/arm/3.4.1/bin:$PATH,保存,此时环境变量已经添入系统。,1.4 安装交叉编译工具,此时只要在终端中输入arm-linux-gcc v,会出现一下信息的话代表交叉编译工具已经安装成功,如果没有下图信息,再检查前面几步有没有出错。,此时将内核源码放在/根目录下,解压压缩包,进入解压后的文件,将当中的/linux-3.2复制到根目录底下#cd/linux-3.2#make menuconfig(配置内核选项,可选)#make可以看到能正常make了具体的内核配置编译会在后面的课程中详细讲述,这里只是给大家一个交叉编译的概念。,编译内核:,为编译好的内核添加uboot引导信息:,将mkimage文件拷贝至虚拟机的/bin目录底下;调整mkimage程序的权限:chmod 777/bin/mkimage在终端中进入/linux-3.2目录,执行如下命令:mkimage-n Kernel 2.6.16-A arm-O linux-T kernel-C none-a 30007fc0-e 30008000-d./arch/arm/boot/zImage vmlinux.img将在/linux-3.2目录下生成的vmlinux.img文件拷贝至tftp目录,就可以按照昨天讲的方法来运行了!,2.网络文件系统的配置,NFS文件系统的优点:1.空间无限大(内容是存储在主机上的,不受开发板存储大小限制)2.与开发板的交互方便(内容是存储在主机上的,只需要换个主机文件夹)3.使用cramfs作为根文件系统,开发起来很不方便,需要修改一点文件都要重新烧写nand,在开发时推荐挂载虚拟机下的NFS分区作为根文件系统。4.NFS文件系统可以虚拟pc机的一个目录作为嵌入式linux的文件系统,非常适合开发时使用。,背景知识:NFS文件系统介绍,2.1主机端的nfs配置点击 系统-管理-网络,双击你的网络配置,选择静态设置ip地址,填入你的ip,子网掩码和网关。(比如我的是;),点击确认,再点击激活,会跳出下面对话框,再点击是,完成后可以在终端下输入ifconfig eth0命令来查看是否配置好:,在虚拟机下配置虚拟机的网卡edit-virtual network setting-Host virtual network mapping添加一个真实的网卡,并按应用,确认。,编辑文件/etc/exports添加nfs目录的支持:/nfs 192.168.0.2(rw,sync,no_root_squash)其中是开发板的ip,也可以使用*,这样就所有地址的开发板都能挂载。/nfs表示 nfs 共享目录,它可以作为开发板的根文件系统通过 nfs 挂接;rw 表示挂接此目录的客户机对该目录有读写的权力 no_root_squash 表示允许挂接此目录的客户机享有该主机的 root 身份,在终端下输入setup,将系统服务中的netconsole,netplugd,nfs服务选上,并按tab确认退出。也可以通过系统-管理-服务中选择,在终端中输入service nfs restart,在/根目录下添加nfs文件夹(这个文件系统可在armfans网站上下到)重启电脑,主机端的nfs设置完成。,/bin目录下是常用的命令/dev目录下是所有设备/etc目录下是系统的配置文件/lib目录下是所有的库文件(glib,tslib,miniguilib)/sbin目录下是一些高级命令/usr目录下存放了用户常用的文件/tmp是临时文件夹,断电后该文件夹内的所有文件将会消失,背景资料:文件系统常用目录介绍,开发板端的配置比较简单,主要是修改U-Boot的bootargs参数,修改后的参数应为:set bootargs root=/dev/nfs rw nfsroot=192.168.0.3:/nfs ip=192.168.0.2:192.168.0.3:192.168.0.1:255.255.255.0:sep4020:eth0:off console=ttyS0,115200 mem=32mb修改后敲入save命令,将开发板和主机用直连网线相连接,开启板子会看到已经把nfs文件系统挂载上去了:,2.2 开发板端的nfs配置:,至此,NFS服务配置完毕,下图为正确加载NFS的启动画面:,1.如果使用nfs的时候,发现错误为unable to open an initial console,如下图,,补充说明:,请检查你的主机/nfs/dev文件夹下是否有console这个文件,如果没有,请在终端下输入指令:mknod/nfs/dev/console c 5 1,开发结束后应该把你的nfs做成cramfs文件系统,这里只需要简单的几步就能生成能烧录在板子上运行的cramfs文件系统。首先要将mkcramfs这个程序拷贝到/bin目录下,这个程序在上也能下到。可能直接拷进去会出现权限不够的提示,在终端下输入命令chmod 777/bin/mkcramfscd/进入根目录下输入命令:mkcramfs/nfs nfs.cramfs,这样在根目录上生成的一个后缀为cramfs的文件就是我们生成的cramfs文件系统。,2.3.将NFS文件系统转换成Cramfs文件系统,3.Minigui开发环境的建立,背景资料:minigui,MiniGUI是由北京飞漫软件技术有限公司创办的开源Linux图形用户界面支持系统,经过近些年的发展,MiniGUI已经发展成为比较成熟的性能优良的、功能丰富的跨操作系统的嵌入式图形界面支持系统。“小”是MiniGUI的特色,它目前已经广泛应用于通讯、医疗、工控、电子、机顶盒、多媒体等领域。目前,MiniGUI的最新版本为MiniGUI 3.0。MiniGUI 起初仅仅是为了能够在 Linux 上显示中文而开发的,但是目前,MiniGUI 已发展为一个跨操作系统的嵌入式图形支持系统。目前MiniGUI 已经一步步发展成为跨操作系统的嵌入式图形中间件产品。,下载原始文件:rootlocalhost/#mkdir-p/home/source/minigui/minigui1.3.3 将需要的几个文件拷贝到此目录下,所需文件为:,(MiniGUI的库文件),(MiniGUI的资源文件),(MiniGUI的综合例程文件),(MiniGUI的具体例程文件)qvfb-1.0.tar.gz(qvfb模拟器软件)qt-devel-3.3.8-4.fc7.i386.rpm(qvfb安装的依赖软件),65,3.1 minigui的pc模拟开发环境的建立,第一步:pc端的环境建立的准备工作,解压:rootlocalhost minigui1.3.3#tar-zxvf libminigui-1.3.3.tar.gz rootlocalhost minigui1.3.3#tar-zxvf minigui-res-1.3.3.tar.gz rootlocalhost minigui1.3.3#tar-zxvf mde-1.3.0.tar.gz rootlocalhost minigui1.3.3#tar-zxvf mg-samples-1.3.0.tar.gz rootlocalhost minigui1.3.3#tar-zxvf,66,第二步:编译安装miniGUI 库,rootlocalhost#cdrootlocalhost libminigui-1.3.3#make menuconfig将“Font options”中的“Var bitmap font”选项去掉:*Raw bitmap font Var bitmap font*Incore font sansserif*Incore font courier*Incore font symbol*Incore font vgas*Qt Prerendered Font*TrueType font*Adobe Type1 font,67,*TreeView control*ListView control*Grid control*MonthCalendar control*SpinBox control*CoolBar control Full GIF98a support Skin support Library of VCOnGUI,68,EXT LIBRARY OPTIONS部分配置为:,(Linux)Platform(i386)Compiler(glibc)Libc-Installation options Path prefix:/usr/local-Additonal Compiler Flags CFLAGS:LDFLAGS:,69,核对DEVELOPMENT ENVIROMENT OPTIONS开发环境设置是否如下:,完成上面操作后,推出并保存配置。注:使用键盘上下可以上下移动光标;使用空格实现选中或取消;使用Tab键实现切换。不心急make,先完成下面的操作!,进入 目录修改grid.c将所有类似这样的代码:(PGRIDCOLHDR)pCell*-pColHdr=pColHdr;(PGRIDROWHDR)pCell*-pRowHdr=pRow2;将前面的括号去掉就可以编译通过了。pCell*-pColHdr=pColHdr;pCell*-pRowHdr=pRow2;pCell*指(pCell,pCell1,pCell2,pCell3)一共16处,分别在行数为626,627,638,639,667,668,680,681,733,734,745,746,774,775,788,789。请打开gedit的行数查看,方法:打开gedit-编辑-首选项-将显示行号打勾,71,除了修改make menuconfig还需要修改一下源代码:,还需要改动:,进入 src/kernel/目录修改init.c将第435行 pthread_kill_other_threads_np();注释掉/pthread_kill_other_threads_np();,进行编译:,rootlocalhost kernel#cdrootlocalhost libminigui-1.3.3#makerootlocalhost libminigui-1.3.3#make install,73,第三步:编译安装miniGUI 资源包,rootlocalhost libminigui-1.3.3#cdrootlocalhost minigui-res-1.3.3#make install默认安装到/usr/local/lib/minigui/res 目录。,74,第四步:编译控件例子,rootlocalhost minigui-res-1.3.3#cdrootlocalhost mg-samples-1.3.1#./configure rootlocalhost mg-samples-1.3.1#make,75,第五步:编译综合例子,rootlocalhost mg-samples-1.3.1#cdrootlocalhost mde-1.3.0#./configure rootlocalhost mde-1.3.0#进入目录修改vcongui.c将第106行 VCOnMiniGUI(rootlocalhost tools#cd/rootlocalhost mde-1.3.0#make,76,第六步:编译安装qvfb,在图形界面下进入目录,双击安装。(选择无论如何都安装)然后在终端中进入qvfb目录:rootlocalhost mde-1.3.0#cdrootlocalhost qvfb-1.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.3然后rootlocalhost qvfb-1.0#make最后rootlocalhost qvfb-1.0#make install,77,第七步 设置参数,进入/usr/local/etc/,将MiniGUI.cfg修改为:rootlocalhost qvfb-1.0#cd/usr/local/etc/修改 MiniGUI.cfgsystem#GAL enginegal_engine=qvfb/这里修改,开发时使用qvfb 模拟#IAL engineial_engine=qvfb/这里修改,同上,78,参数设置,进入/etc/建一个minigui.conf,文件的内容为/usr/local/librootlocalhost etc#cd/etc/rootlocalhost#gedit minigui.conf在minigui.conf中添加/usr/local/lib,保存退出最后要把系统共享库缓存刷新,将libminigui加载上,可以使用命令rootlocalhost#ldconfig,79,后台运行qvfb,然后就可以使用qvfb体验MiniGUI了,进入qvfb1.0根目录下的qvfb文件夹:rootlocalhost#cd输入下面命令:rootfedora7#qvfb&此时弹出窗口Virtual framebuffer 选择Fiel-Configure 在size栏选择640*480“VGA”在Depth栏选择16 bit 然后按回车(Enter)键/qvfb运行起来后在qvfb中设置虚拟显示器,80,第八步:调试程序,先试一下具体例程:rootlocalhost qvfb-1.0#cdrootlocalhost src#./helloworld,81,82,再试一下具体综合例程:rootlocalhost qvfb-1.0#cdrootlocalhost src#./bomb,上面部分讲的只是在pc机上的虚拟环境qvfb下运行,上面的minigui的编译环境都是在i386 gcc下编译的,这些可执行程序只能在pc的fedora7下运行,而不能直接下载到板子上运行,要想在板子上运行gui应用程序,还得 用arm-linux-gcc进行交叉编译。,3.2 minigui的交叉编译环境的建立,(1)首先安装 zlib 库,这个是后面的库的编译基础(2)安装 png 库(3)第三步:安装 jpeg 库(4)第四步:安装 libttf 库(5)第五步:编译安装 miniGUI 资源包(6)第六步:配置编译安装 miniGUI(7)安装 popt 库(8)编译综合例子(9)添加对tslib的支持,需要编译一下库文件:,现在我们提供一种更加简洁的方式:下载包含有minigui的arm-linux-gcc,用这个软件替换掉在的arm-linux-gcc,注意路径仍要和之前保持一致,安装过程相当繁琐,有兴趣的参考上的minigui移植的帖子进行移植;,为重新选择一个目录,区分pc端编译的,在这里我放在/目录下cd/./configure CC=arm-linux-gcc-build=i686-pc-linux-target=arm-linux-host=arm-linuxlts make,1.交叉编译综合实例,移动已经编译好的Minigui程序到开发板上,将/下的文件夹都拷贝(每一个文件夹都是一个综合实例)到/nfs下面注意:1.由于某些综合实例对一些特殊库有要求,并不是每个实例都可以在开发板端运行2.要正确运行,请确认使用的nfs是sdk3.2以上版本。因为在这个文件系统已经把一些额外的工作替用户做好了。(比如库文件,资源文件的拷贝,配置文件的修改)3.运行时可能会出现Permission denied,请使用下面命令:chmod 777 文件名,为重新选择一个目录,区分pc端编译的,在这里我放在目录下cd./configure CC=arm-linux-gcc-build=i686-pc-linux-target=arm-linux-host=arm-linuxlts make,2.交叉编译综合实例,综合例子 安装成功后,在这个目录下会出现这些文件夹,交叉编译综合实例,移动已经编译好的Minigui程序到开发板上,将下的文件夹都拷贝(每一个文件夹都是一个综合实例)到/nfs/minigui-demo/下面(如图6.15)注意:1.由于某些综合实例对一些特殊库有要求,并不是每个实例都可以在开发板端运行2.要正确运行,请确认使用的nfs是sdk3.2以上版本。因为在这个文件系统已经把一些额外的工作替用户做好了。(比如库文件,资源文件的拷贝,配置文件的修改),下面我们看看泡泡龙的演示程序:将开发板上电,接着按下图的步骤进入/demo/minigui-demo/minigui-mde/same下运行same程序,The End!Thanks!,