2011-03-02
我用过很久的Ubuntu,不过也是Linux下开发的新手,我在使用Linux做交叉编译环境时候遇到不少麻烦,一顿“google、百度”发现有用的文章没几个,都是互相抄,还抄的显得很专业,嗬嗬,所以想这里写些经验体会,加以分享!:-)
关于嵌入式LINUX开发环境主要有以下几个方案: 1、直接安装 LINUX 操作系统; 2、在 WINDOWS 下安装虚拟机后,再在虚拟机中安装LINXUX操作系统; 3、两台电脑,一台 Linux 服务器,一台 Windows 客户端。 三种方案各有各的好处, 第三种方案,这种方式适合多人同时开发。可是需要以下设备: 1台 Linux 服务器 服务器,用来交叉编译 bootlaoder、内核以及应用程序等, 1台 Windows 机器 机器,SSH远程登陆至 Linux 服务器进行操作。 考虑到开发人员并不是那么多,也为了节省一台服务器,我们选择第一种方案:直接安装 LINUX 操作系统。
一、安装Ubuntu 10.10 至于以前使用Windows XP的选手,突然让我们换装Linux系统构成双系统,会有许多麻烦,因为Linux文件系统为EXT2、EXT3等文件系统,如果我们直接安装Linux,将使Linux系统文件与原Windows XP系统文件隔离,访问起来麻烦。而且Linux的安装很容易破坏原XP的启动,为此,我们选择Ubuntu的简单安装方式,在Windows环境下,像安装软件一样使用WUBI安装Ubuntu 10.10,简单方便,至于具体安装步骤,网上有的是,不多罗嗦,也不是本文的重点`````至此Ubuntu 10.10算是安装结束。
二、Ubuntu 10.10的基本设置 为了接下来的配置方便,这里先对Ubuntu进行一些简单的配置。 1、右键增加“以管理员身份打开“。 在终端输入sudo apt-get install nautilus-gksu,然后回车就可以了。 2、修改root账户的密码。 在终端键入“sudo passwd root” ,然后两次输入密码,即可。 以后在终端需要转换root账户的时候,只需键入”su root“,输入密码。 请牢记密码哈,当然如果实在忘了,可以通过$sudo passwd root 进行更改。
三、Ubuntu 10.10下的NFS服务器配置
1、安装Ubuntu
NFS
NFS(Network File System, 网络文件系统)可以通过网络将分享不同主机(不同的OS)的目录——可以通过NFS挂载远程主机的目录,访问该目录就像访问本地目录一样!因此,我们交叉编译以后,可以让开发板共享Ubuntu下编译好的文件目录,来运行程序。 (一般而言,使用nfs能够方便地使各unix-like系统之间实现共享.但如果需要在unix-like和windows系统之间共享,就得使用samba了!) NFS运行在SUN的RPC(Remote Procedure Call, 远程过程调用)基础上, RPC定义了一种与系统无关的方法来实现进程间通信.由此, NFS server也可以看作是RPC server. 正因为NFS是一个RPC服务程序,所以在使用它之前,先要映射好端口——通过portmap设定.比如:某个NFS client发起NFS服务请求时,它需要先得到一个端口(port).所以它先通过portmap得到port number. (不仅NFS,所有的RPC服务程序启动之前,都需要设定好portmap,不过一般情况下,使用默认的即可)。
$
sudo apt-get install nfs-kernel-server
2、配置portmap
方法1:编辑/etc/default/portmap,将 -i 127.0.0.1去掉. 方法2:$ sudo dpkg-reconfigure portmap ,对Should portmap be bound to the loopback address?选N. 配置/etc/hosts.deny (禁止任何host(主机)能和你的NFS服务器进行NFS连接),加入: ### NFS DAEMONS portmap:ALL lockd:ALL mountd:ALL rquotad:ALL statd:ALL 配置/etc/hosts.allow 允许那些你想要的主机和你的NFS服务器建立连接。下列步骤将允许任何IP地址以192.168.1开头的主机(连接到NFS服务器上),也可以指定特定的IP地址。参看man页 hosts_access(5), hosts_options(5)。加入: ### NFS DAEMONS portmap: 192.168.1. lockd: 192.168.1. rquotad: 192.168.1. mountd: 192.168.1. statd: 192.168.1. /etc/hosts.deny和 /etc/hosts.allow 设置对portmap的访问.采用这两个配置文件有点类似"mask"的意思.现在/etc/hosts.deny中禁止所有用户对portmap的访问.再在/etc/hosts.allow中允许某些用户对portmap的访问. 运行$ sudo /etc/init.d/portmap restart重启portmap daemon.
3、配置/etc/exports /home/sun/mc9260 *(rw,sync,no_root_squash)
其它Ubuntu
NFS常用的参数有: 4、Ubuntu
NFS重启服务 5、测试Ubuntu
NFS 由于我在home/sun/mc9260 目录下建立了hello文件夹,所以$ls /mnt会有以下结果:
四、Ubuntu10.10下的“超级终端” 在windows下大家都使用过“超级终端”,可以通过超级终端与开发板进行交互。由于这次我使用的开发板为ATMEL的MC9620处理器,不支持显示屏来进行交互,所以这里我们使用“超级终端”,那么在Linux下的超级终端都有哪些呢?最著名的莫属MiniCom了,不过我觉得使用起来不是很方便,我采用的是GTKTerm,关于GTKTerm的安装比较简单: $sudo apt-get install gtkterm $
gtkterm //回车后就会弹出一个对话柜
:
以下进入开发板的Linux系统,即可看出串口连接已经完成
至于不喜欢GTKTerm的可以选择Minicom,安装过程是我择优转载的:
一般linux系统都自带了此工具,如果你的linux系统没有安装(判断是否安装参见步骤2) 一、安装 将下载的文件解压到任意目录,例如:/minicom 进入/minicom,执行./configure 执行命令make 执行命令make install 上述过程参见解压后的README
在debian、Ubuntu下直接终端运行apt-get install minicom即可
二、配置(需要root用户角色) 执行minicom –s后出现配置界面 ========================== [configuration] Filename and paths File transfer and protocols Serial port setup Modem and dialing Screen and keyboard Save setup as df1 Save setup as…… Exit Exit from minicom ========================== 使用向下键选择serial port setup(串口设置),按回车出现设置界面 ========================== A — Serial Device:/dev/ttyS0 //这里很关键 B — lockfile Location : /var/lock C — Calling Program : D — Callout Program: E — Bps/par/Bits:9600 8N1 F — Hardware Flow Control : YES G — Software Flow Control : NO Change with setting? =========================== 按A,设置串口设备为/dev/ttyS0(Windows下的COM1) 按E:设置为9600。 按回车,保存设定,回到主菜单,可以选择Save setup as df1(设为默认配置)。 设置完成后选择Exit退出 三、直接输入minicom,就可以像使用Windows的超级终端一样操作了。 补充: 运行dmesg
|grep ttyS察看系统上面的serial ports,一般情况下都是ttyS0。
五、开发板与Ubuntu10.10共享NFS目录 Ubuntu端配置: 在上文中已经提到过我的共享目录为/home/sun/mc9260,在每次开发板需要与PC机Ubuntu 共享文件的时候,Ubuntu都需要先挂载共享目录,具体指令如下:
从截图大家可以看出来,mount指令是需要root权限的,至于root的密码设置,在文章的最开始已经介绍过了,ls /mnt指令可以看出已经将/home/sun/mc9260共享目录下的文件夹hello挂载到/mnt下。 PS: mount 命令简介 (总是敲击这命令总该明白咋回事吧:-)) mount [-t vfstype] [-o options] device dir 其中: 1.-t vfstype指定文件系统的类型,通常不必指定。mount会自动选择正确的类型。常用类型有: 光盘或光盘镜像iso9660 DOS fat16文件系统:msdos Windows 9x fat32文件系统:vfat Windows NT ntfs文件系统:ntfs Mount Windows文件网络共享:smbfs UNIX(LINUX)文件网络共享:nfs 2.-o options主要用来描述设备或档案的挂接方式。常用的参数有: loop:用来把一个文件当成硬盘分区挂接上系统 ro:采用只读方式挂接设备 rw:采用读写方式挂接设备 iocharset:指定访问文件系统所用字符集 3.device要挂接(mount)的设备。 4.dir设备在系统上的挂接点(mount point)。 开发板配置: 启动ARM开发板,应该保证开发板与Ubuntu在同一个网段。我的PC机Ubuntu的IP地址为192.168.1.244 $ ifconfig eth0 192.168.1.100 //可以对开发板IP进行设置。
也可以在开发板启动的时候进入U-BOOT选项进行配置,由于针对不同的开发板,配置不同,这里就简单说一下我的开发板,大家具体看说明书进行配置。
上电启动板子,在超级终端显示 Hit any key to stop autoboot 时快速敲一下回车键, 进入 u-boot 进行配置(如未配置 uboot 环境变量中的启动脚本,将不出现 Hit any key to stop autoboot,而自动停在 uboot 命令提示符界面)。U-boot命令可以只输入前几个字母, 如 setenv=set,save=sa 等。 设置物理地址: setenv ethaddr 00.11.22.33.44.55 设置本地 IP 地址 setenv ipaddr 192.168.1.100 保存设置 save
至此,开发板的IP问题解决。
下面进行 NFS 连接, 将主机 NFS 共享目录的/ home /sun/mc9260 目录 mount到 ARM Linux的/mnt /nfs 目录下。 $ mount -t nfs -o nolock 192.168.1.244: /home/sun/mc9260 /mnt/nfs 运行后,可以查看ARM开发板中/mnt/nfs目录下的文件: $ls /mnt/nfs
至此,可以看见ARM开发板已经与Ubuntu主机共享了文件目录,以后可以将需要开发板运行的程序放在此目录中即可。
六、Ubuntu10.10下的交叉编译器的安装配置 1、解压缩编译器工具包 把交叉编译工具的安装包 arm-2007q1-10-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2直接解压缩到根目录下。如果使用的是Ubuntu可以直接右键解压缩,当然也可以使用命令行,在终端进入压缩包所在文件目录,然后执行: $tar jxvf arm-2007q1-10-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /home/sun 2、建立环境变量 关于在Ubuntu下建立环境变量的方法有很多,网上的介绍也是数不尽。这里我党然是选最简单的办法啦: 找到/etc/profile文件,单击鼠标右键,以管理员身份打开(文章开头的介绍很方便有用的),然后在文件的末尾加上“PATH="$PATH:/home/sun/arm-2007q1/bin" export PATH “ 如下图:
修改结束后保存关闭文件,重启Ubuntu即可。
当然了,这里的修改可以在用vi指令修改: $ vi ~/.bashrc 在文件最后一行修改为: export PATH=/home/sun/arm-2007q1/bin/:$PATH 保存退出,执行下面命令。:$ source ~/.bashrc 测试环境变量$ arm-none-linux-gnueabi-gcc -v arm-none-linux-gnueabi-gcc -v 用来查看 arm-linux-gcc 的版本,输出信息如下说明交叉编 译环境安装成功:
细心的朋友可以发现我使用两种方式修改的不是同一个文件,前者修改/etc/profile文件,后者修改~/.bashrc文件,关于这其中的原因,就是两种修改环境变量的不同方法,也是不同级别的,关于这方面得知识,大家可以自己学习,也不是本文的重点。
同样我们编辑我们的Makefile文件,如下
输入make命令: $make
至此,交叉编译结束,由于开发板与Ubuntu共享此文件目录,所以可以通过GTKTerm来给开发板输入执行hello程序的命令来运行程序:
至此,hello程序运行成功! 这种交叉编译环境的配置方法,是我自己试着做的,我觉得算是比较简单的方式,针对不同的ARM芯片开发板的不同、开发系统得不同,使用方式自然有区别,我以前用过可以用开发板的USB直接进行下载运行的,也可以在线仿真的,用过WinCE的朋友们会知道那种方式更简单,可是这次我使用的是ATMEL芯片,就不得不使用这种方法了。以上说明可能不是很清晰,因为我是先前配置的,自己也是怕忘记,好久以后才整理,如果大家有疑问可以与我联系lusunshan@gmail.com或者shanlusun@gmail.com,毕竟是自己的第一篇文章,错误之处在所难免,望见谅:-)
2011-03-02
|
|