1、tftp服务器的安装
注意:
如果在apt-get install过程中,出现找不到一大堆的东西,一般是源有问题。到新立得下面操作,标记安装,一般就可以,还不行的话,换个源。在新立得下如果卸载出现什么子进程的什么什么东东。要到/var/lib/dpkg/info/下删除相应的tftp-hpa和tftpd_hpa文件。然后到/var/cache/apt/archives下删除相应的tftp-hpa和tftpd_hpa文件。
在ubuntu11.10中,在终端中输入如下命令进行安装:(使用root用户)
1.apt-get install tftp-hpa tftpd-hpa(或者在新立得中标记安装)前者为客户程序,后者为服务程序
2. mkdir /home/tang/tmp (可根据需要建立相应的目录,此目录为tftp的共享目录)
chmod 777 /home/tang/tmp
cd /home/tang/tmp
vi test.txt
随便输入数据保存
cd /home/tang
vi test1.txt (需要用root权限进行创建,否则无法进行保存退出)
随便输入数据保存
3.vi /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/tang/tmp" //这里是你的tftpd-hpa的服务目录,这个想建立在哪里都行
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s" //这里是选项,-c是可以上传文件的参数,-s是指定tftpd-hpa服务目录,上面已经指定
4. service tftpd-hpa restart 启动服务,这里要注意,采用的服务形式。而不是采用超级服务xinetd启动tftpd的方式。在网上有人说用tftpd-hpa和tftp- hpa再加上在/etc/xinetd.d下编写tftp服务文件的方式,经过我的反复测试,并不能用service xinetd restart来启动tftpd服务。至于用较老的版本tftpd和tftp再加上xinetd能否成功,我没有测试过。既然新版本能成功,我也就不再测试了。
5.测试
cd /home/tang root
tftp 127.0.0.1
tftp>get test.txt (if not root ,will warning permission denied)
tftp>put test1.txt
tftp>quit
$ls
会看见test.txt
cd tmp
ls
test.txt,test1.txt都存在
如果成功,会没有任何提示,而且基本上看不见任何延时。注意严格按照以上操作,不要动xinetd的配置。只需要修改/etc/default/tfptd-hpa即可。
安装过程整理总结:
1、前期按照其他方法来进行安装配置,但是系统提示tftp无法进行文件传输。
2、卸载掉原来安装的版本,重新上面的安装方法进行安装配置
3、在安装过程中可以不安装守护进程xinetd,配置完成后可以在本机下进行测试。
[备注:]
验证tftp是否生效(先在本机下进行测试)
上传文件:
切换到/home/用户/ 下并创建test.txt文件
tftp 127.0.0.1
tftp> put test.txt
tftp>quit
此时/home/tang/tmp目录下应该有test.txt文件了
下载文件:
到其他的目录下(当前目录不要与创建文件的目录一样)
tftp 127.0.0.1
tftp> get test.txt
tftp>quit
就可以把test.txt下载到当前目录
与开发板的文件传输过程:
tftp服务器的使用:
1>在主机(也就是服务器端)开启tftp服务器
service tftpd-hpa restart 启动服务(由于没有安装守护程序,可直接重启服务器)
2>打开终端,用minicom进入到uclinux
3>修改AT91SAM9260开发板的IP地址跟主机在同一个网段
ifconfig eth0 192.168.9.100
4>进入其中的一个下载目录:如/mnt
5>在开发板的终端中
输入:tftp 192.168.9.103(假设我这台主机的IP是这个)
注意这里的ARM开发板板要跟主机在同一个网段,若ARM板不是跟主机在同一个网段,则会出现无法登录的情况,修改方法是:在ARM(9260)上输入ifconfig eth0 192.168.9.*(这里假设主机的网关是192.168.9.1)若成功登录则会有如下的提示:tftp >
6>输入:get <你要下载的文件名> //注意这个文件名必须是在tftp的工作目录下,如前面我设置为
/home/tang/tmp
7>如果下载成功则会提示用了多少秒
8>接下来我们就可以直接运行这个文件了(有时候会出现不能运行的情况,如badcommand等,此时可以用以下的命令:chmod 777 文件名)。
====================在ubuntu11.10中可以成功安装===============
2、安装NFS
嵌入式开发时,nfs(网络文件系统)可以实现主机和开发板共享文件
(1)安装所需软件包
apt-get install nfs-common nfs-kernel-server portmap
(2)配置
vim /etc/exports
增加下面这一行内容:
/home/alextang *(rw,sync,no_root_squash) #(注意:在共享目录后面要留有一个空格!)
ps:/home/alextang: 表示共享的目录(同时需要在/home目录下新建alextang做为共享目录)
* :允许所有的网段访问,也可以设置成某一个ip段,如192.168.0.*
rw :读写权限
sync:资料同步写入内在和硬盘
no_root_squash:nfs 允许客户端共享目录所有者权限
(3)启动服务
/etc/init.d/nfs-kernel-server restart --重启nfs服务器
/etc/init.d/nfs-kernel-server status --查看nfs状态
也可以使用:netstat -a | grep nfs 查看
查看nfs的设置:
showmount -e 192.168.1.130
检验一下设置是否有问题
(4)测试NFS
在本机环境下进行NFS测试:
在/mnt下创建nfs目录
sudo mkdir /mnt/nfs
将主机/home/alextang目录挂载到/mnt/nfs下
sudo mount -t nfs 127.0.0.1:/home/alextang /mnt/nfs
查看/mnt/nfs目录下所有的文件,跟/home/alextang目录下的文件一样
ls -l /mnt/nfs/
卸载:
sudo umount /mnt/nfs/
在开发板进行NFS测试可能会出现的一些问题:
1、提示NFS服务器的权限拒绝时,可能是主机的/etc/exports文件的网段设置与mount的网段不一致,或者是文件中的共享目录设置与mount的目录不一致。
2、启动目标板并连通网络后,首先查看kernel自身是否支持nfs,
cat /proc/filesystems
查看其中是否有nfs一行,若没有则表示内核不支持nfs,就需要重新编译和烧录内核;有则OK,接下来就可以直接mount操作。
3、提示NFS服务器没有回应,超时,应该在mount 命令后面添加nolock,命令格式:
mount -o nolock 192.168.9.103:/home/alextang /mnt
原因是连接到旧版本的NFS服务器时需要用到禁止文件锁。也有可能是因为在其他的终端中已经mount了别的目录,需要将已挂载的目录umount。
4、主机防火墙有设置时,也可能导致目标板无法正常访问。(一般ubuntu系统会默认把防火墙关掉,如果打开的话就得先关掉防火墙后再测试。
【备注:】
通过NFS挂接远程主机的文件系统时,使用一些不同的选现可以使得mount比较简单易用。这些选项可以在mount命令中使用,也可以在/etc/fstab和autofs中设定。
以下是NFS mount常用的一些选现:
hard or soft -- 指定当程序无法通过NFS连接使用服务器输出的文件系统上的文件时,是否需要等待服务器重新在线。如果是soft情况,它将报错。如果指定hard,用户 无法不能终止程序等待NFS通讯恢复,除非同时指定了intr选项。如果指定了soft,用户可以设置附加选项timeo= intr -- 当服务器宕机或者无法到达时,允许中断NFS请求。 nfsvers=2或者nfsvers=3 -- 指定使用那个版本的NFS协议。 nolock -- 禁用文件锁。这个设置在连接到一个旧版本的NFS服务器时偶尔会用到。 noexec -- 防止执行被挂接的系统上的二进制文件。这在系统通过NFS挂接一个包含有不兼容的二进制文件的非linux系统时是很有用的。 nosuid -- 禁用"设置用户标志位"(set-user-identifier)或者"设置组标志位"(set-group-identifier)。这样防止远程用户运行setuid程序获得更高权限。 rsize=8192和wsize=8192 -- 通过设定大的同时传输的数据块大小(bytes),以提高NFS读写的速度。改变这些值时要当心,一些旧的linux内核和网卡在大的块大小不能正常工作。 tcp -- 指定NFS使用TCP协议mount,替换UDP。 成功把测试文件传到NFS服务器的共享目录后,从开发板终端将开发板共享目录挂载到某个目录下,就可以进行相关的测试: 1、进行串口测试: ./uart_test 然后出现选择端口的命令Select a port to test (0-6) 输入一个数字如:0。选择好端口后,就可以进行串口的测试 即在开发板终端中输入字符会自动返回显示出来 ===================================== ====================================== 此处以下以后再进行详细过程整理总结 ====================================================== ===================== 嵌入式Linux实战篇--交叉编译环境的建立(基于ubuntu 11.10) 在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。本文具体说明了嵌入式交叉编译环境的建立过程和具体的操作步骤,希望能够对各位朋友搭建对应的交叉编译环境有所帮助。 一、所需软硬件环境 ■ 主机环境 建立交叉编译工具链的主机环境: Ubuntu 11.10,gcc-4.3.2 ■ Ubuntu 11.10软件环境 保证你的 Ubuntu 11.10 安装了如下的软件: Bison flex build-essential patch libncurses5-dev 安装这些软件包: sudo apt-get install Bison flex build-essential patch libncurese5-dev 或直接下载下列deb软件包 bison_13a2.3.dfsg-4build1_i386.deb build-essential_11.4_i386.deb flex_2.5.33-10build1_i386.deb libncurses5-dev_5.6+20071124-1ubuntu2_i386.deb m4_1.4.8-1build1_i386.deb patch_2.5.9-5_i386.deb 然后 sudo dpkg –i *.deb 安装这些软件包。 ■ 相关软件包 本方案所选软件包如下: gcc-3.4.5.tar.gz glibc-2.3.6.tar.gz linux-2.6.26.5.tar.gz crosstool-0.43.tar.gz binutils-2.15.tar.gz glibc-linuxthreads-2.3.3.tar.gz linux-libc-headers-2.6.12.0.tar.bz2 二、具体工作步骤 1、修改系统配置 1.1、Ubuntu 8.10 默认安装的 gcc 版本为4.3.2,这个版本对于语法要求较高,编译会出错,目前不宜选用,于是选择了 gcc-4.1.1 ,但并不需要卸载 gcc-4.3.2。 (1)第一种方法:直接在终端输入安装gcc-4.1 sudo apt-get install gcc-4.1 (2)第二种方法:下载下列软件包: gcc-4.1_4.1.2-23ubuntu3_i386.deb gcc-4.1-base_4.1.2-23ubuntu3_i386.deb cpp-4.1_4.1.2-23ubuntu3_i386.deb 然后sudo dpkg –i *.deb 安装就可以了 sudo rm /usr/bin/gcc (删除GCC,它只是个到gcc-4.3.2的软链接文件) sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc (建立GCC到gcc-4.1的软链接) 1.2、修改sh版本 如果运行 ls -la /bin/sh 看到链接的是 dash ,则请运行以下命令 sudo dpkg-reconfigure dash 选择 no 以删除 dash 此处如果不改好的话,编译时会出现错误 2.解压软件包,并进入该目录,查看重要的脚本文件。 $cd downloads $tar –zxvf crosstool-0.43.tar.gz $cd crosstool-0.43 在此目录下可以看到有很多.sh脚本和.dat配置文件,每一个支持的处理器都有它所相应的脚本。假如选用demo-arm-softfloat.sh 就是建立目标为支持软浮点的arm交叉编译工具链。 3.修改demo-arm-softfloat.sh $vim demo-arm-softfloat.sh 修改下面两句 TARBALLS_DIR=$HOME/downloads //表示下载的源码的存放目录 RESULT_TOP=/opt/crosstools //表示生成的工具链的存放目录 为: TARBALLS_DIR=/home/linux/downloads(源码存放目录) RESULT_TOP=/home/linux/crosstools(生成工具链目录) 4.修改 gcc-3.4.5-glibc-2.3.6.dat $ vim gcc-3.4.5-glibc-2.3.6.dat 修改内容为: BINUTILS_DIR=binutils-2.15 GCC_DIR=gcc-3.4.5 GLIBC_DIR=glibc-2.3.6 LINUX_DIR=linux-2.6.26.5 LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.6 5.$ ./ demo-arm-softfloat.sh 这个过程较长(半个小时左右) 6.修改环境变量 修改环境变量有多种方法我们介绍两种 (1)第一种方法:在当前用户目录的.bashrc中添加如下内容 $export PATH=$PATH:/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin: (2)第二种方法:或直接修改/home/linux/.bashrc cd /home/linux vim .bashrc 添加如下内容: PATH=$PATH:/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin: 然后 source .bashrc 7.执行如下命令 $ arm-softfloat-linux-gnu-gcc -v 显示 Reading specs from /home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/lib/gcc/arm-softfloat-linux-gnu/3.4.5/specs Configured with: /home/david/downloads/crosstool-0.43/build/arm-softfloat-linux-gnu/gcc-3.4.5-glibc-2.3.6/gcc-3.4.5/configure --target=arm-softfloat-linux-gnu --host=i686-host_pc-linux-gnu --prefix=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu --with-float=soft --with-headers=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/arm-softfloat-linux-gnu/include --with-local-prefix=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/arm-softfloat-linux-gnu --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long Thread model: posix gcc version 3.4.5 ok交叉编译环境创建成功! 8.恢复我们修改的系统配置: 恢复gcc为4.3 sudo rm /usr/bin/gcc sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc 重新安装dash sudo dpkg-reconfigure dash 选择 yes 以重新安装 dash 000000000000000000000000000000000000000000000000000 内核编译的安装 000000000000000000000000000000000000000000000000000 开发板附带的安装过程参考: 如果还没有安装armv5-linux-gcc这个编译器,按如下方法安装。 从光盘中拷贝armv5-linux-gcc.tar.bz2 文件到linux PC 的/opt/timesys/toolchains文件夹下面,用如下命令进安装。 [root@localhost opt]$ tar –jxvf armv5-linux-gcc.tar.bz2 这时在/opt/timesys/toolchains这个文件夹下面可看到文件,这里面就是安装的编译器 1.1.编译Linux内核 从光盘中拷贝linux-2.6.19.tar.bz2文件PC机某个目录下面并解压,然后进入内核源码的根目录。 [root@localhost 9260s]$ ls linux-2.6.19.tar.bz2 [root@localhost 9260s]$ tar -xjvf linux-2.6.19 [root@localhost 9260s]$ ls linux-2.6.19 linux-2.6.19.tar.bz2 [root@localhost 9260s]$ cd linux-2.6.19 [root@localhost linux-2.6.19]$ make menuconfig 按照开发板附带的安装Linux编译文件,执行以下步骤后发现,执行make menuconfig命令后,提示如下错误信息: HOSTCC scripts/kconfig/lxdialog/checklist.o In file included from scripts/kconfig/lxdialog/checklist.c:24:0: scripts/kconfig/lxdialog/dialog.h:32:20: 致命错误: curses.h:没有那个文件或目录 编译中断。 make[1]: *** [scripts/kconfig/lxdialog/checklist.o] 错误 1 make: *** [menuconfig] 错误 2 解决办法:ubuntu系统中缺少一个套件 ncurses devel ,把此套件安装下即可 $ sudo apt-get install libncurses5-dev 然后可以进行编译内核的配置。 [注:] 配置文件的保存可以采用默认的名字,编译时会自动选择默认的名字。也可以在Makefile中进行更改,gedit xxx.cfg 进行查看内核的配置,文件中的内容与用Make menuconfig打开的界面内容选项对应。 0000000000000000000000000000000000000000000000 一、交叉编译环境 arm-linux-gcc-2.95.3 的建立 1.下载cross-2.95.3.tar.bz2 2.建目录,复制,解压 # cd /usr/local # mkdir arm # cd arm 复制cross-2.95.3.tar.bz2 到当前目录 # tar jxvf cross-2.95.3.tar.bz2 3.导出/usr/local/arm/2.95.3/bin 到环境变量 在/etc/profile 最后添加 PATH=$PATH:/usr/local/arm/2.95.3/bin 二、交叉编译环境 arm-linux-gcc-3.4.1的建立 书中介绍的crosstool制作工具的链的方法很好,但是很浪费时间,因为编译一次要数个小时,很是麻烦,也不适合初学这,这里的方法是书中3.2节提 到的第一种方法,很简单,但是正如书中所说,不是自己定制的受到局限不是很理想,但对我们的开发这已经足够用了。建议大家还是先选用这种方法 1.下载arm-linux-gcc-3.4.1.tar.bz2到任意的目录下。 arm-linux-gcc-3.4.1.tar.bz2 的下载地址如下: http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2 2.解压 arm-linux-gcc-3.4.1.tar.bz2 #tar -jxvf arm-linux-gcc-3.4.1.tar.bz2 解压过程需要一段时间,解压后的文件形成了 usr/local/ 文件夹,进入该文件夹,将arm文件夹拷贝到/usr/local/下 # cd usr/local/ #cp -rv arm /usr/local/ 现在交叉编译程序集都在/usr/local/arm/3.4.1/bin下面了 3. 修改环境变量,把交叉编译器的路径加入到PATH。(有三种方法,强烈推荐使用方法一) 方法一:修改/etc/bash.bashrc文件 #vim /etc/bash.bashrc 在最后加上: export PATH=$PATH:/usr/local/arm/3.4.1/bin export PATH (注意:“=”前后不能有空格) (如果不能编辑,先修改相关文件的权限使用chmod命令。) 方法二:修改/etc/profile文件: # vim /etc/profile 增加路径设置,在末尾添加如下,保存/etc/profile文件: export PATH=$PATH:/usr/local/arm/3.4.1/bin 方法三:#export PATH=$PATH:/usr/local/arm/3.4.1/bin 注:(这只能在当前的终端下才是有效的!) 4. 立即使新的环境变量生效,不用重启电脑: 对应方法一:#source /root/.bashrc 对应方法二:# source /etc/profile 5. 检查是否将路径加入到PATH: # echo $PATH 显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。至此,交叉编译环境安装完成。 6.测试是否安装成功 # arm-linux-gcc -v 上面的命令会显示arm-linux-gcc信息和版本,这是我显示的信息: Reading specs from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/specs Configured with: /work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc- 3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/usr/local/arm/3.4.1 --with-headers=/usr/local/arm/3.4.1/arm -linux/include --with-local-prefix=/usr/local/arm/3.4.1/arm-linux --disable -nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable- languages=c,c++ --enable-shared --enable-c99 --enable-long-long Thread model: posix gcc version 3.4.1 7.编译Hello World程序,测试交叉工具链 写下下面的Hello World程序,保存为 hello.c #include int main() { printf("Hello World!\\n"); return 0; } 执行下面的命令: # arm-linux-gcc -o hello hello.c 源程序有错误的话会有提示,没有任何提示的话,就是通过了,就可以下载到ARM目标板上运行了! 接着可以输入file hello的命令,查看生成的hello文件的类型,要注意的是生成的可执行文件只能在ARM体系下运行,不能在其于X86的PC机上运行。 有时会有如下的警告: warning: no newline at end of file 英文的意思就是说文末没有换行符。Unix文档的回车换行符是一个字符\\n,Windows的是分别的两个\\n\\r,所以你在Windows下编辑的最后一个字符是\\r不是\\n,所以编译器以为有错误。在文件最后补一个新行即可。 源程序有错误的话会有提示,没有任何提示的话,就是通过了,就可以下载到ARM目标板上运行了! 接着可以输入file hello的命令,查看生成的hello文件的类型,要注意的是生成的可执行文件只能在ARM体系下运行,不能在其于X86的PC机上运行。 想要在PC机linux上运行,只需执行如下命令: gcc hello.c -o hello ./hello 显示打印结果 至此嵌入式的开发环境搭建完毕下载本文