基于Arm-Linux和TCP/IP的远程控制嵌入式系统设计

本文档详述了一种基于博创up-techs3c2410实验箱的嵌入式系统设计,利用TCP/IP协议实现局域网内的远程控制。内容涵盖ARM9开发平台、交叉编译环境建立、Bootloader移植、Linux内核与根文件系统移植、LED驱动程序移植,以及基于TCP/IP的服务器和客户端程序设计。通过该系统,可远程控制LED灯的流水灯和闪烁等效果。
摘要由CSDN通过智能技术生成

一 概要设计

1.1系统功能说明

基于博创up-techs3c2410实验箱的硬件平台,设计基于TCP/IP协议的arm-linux嵌入式系统服务器端。在局域网内的PC客户端(或另一台基于博创up-techs3c2410实验箱的arm-linux嵌入式系统客户端)设计TCP/IP协议的客户端程序,远程控制同一局域网内的arm-linux嵌入式系统服务器端的LED等,分别实现LED灯的流水灯(轮询点亮)、闪烁等功能。

1.2具体设计要求

(1)基于博创up-techs3c2410实验箱的硬件平台,移植bootloader、linux内核和文件系统;
(2)在1的基础上,移植博创up-techs3c2410实验箱硬件平台的LED驱动程序;
(3)设计基于TCP/IP的服务器和客户端程序;
(4)通过局域网运行服务器和客户端程序,实现LED灯远程控制。

二 详细设计

2.1.ARM9的博创2410s开发实验平台

在这里插入图片描述

2.2交叉开发环境建立
2.2.1交叉编译环境

交叉编译环境是由一个编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要包括针对目标系统的编译器GCC、目标系统的二进制工具binutils、目标系统的标准C库Glibc和目标系统的Linux内核头文件。
在建立交叉编译环境之前,首先要下载包括GCC、binutils、Glibc(如ftp.gnu.org)及Linux(如ftp.kernel.org)内核在内的源代码,尽量选用较新版本,Glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致,并设定shell变量PREFIX指定可执行程序的安装路径.

2.2.2交叉开发环境搭建

使用 Redhat Linux 9.0操作系统环境,安装ARM-Linux 交叉编译器,配置linux环境下的相关服务(tftp、nfs服务)和工具软件(串口工具minicom配置,sjf2410-s烧写工具等),并烧写bootloader、kenerl和rootFS。
具体步骤:
安装REDHAT LINUX 9.0虚拟机(或其它版本);
配置Linux环境下的串口工具minicom;
首先确认 Linux 中是否已经安装了 minicom

#rpm -qa | grep minicom

回车后若显示 minicom 的版本信息,表明已安装。此节跳过,不用再装。
启动时若输入 minicom 提示错误。则需进行 minicom 配置:

# minicom –s

出现配置菜单:
在这里插入图片描述
选 serial port setup

进入串口配置

在这里插入图片描述
输入 A 配置串口驱动为/dev/ttyS0,回车
输入 E 配置速率为 115200 8N1,回车
输入 F 将 Hardware Flow Control 设 为 NO,回车并退出该配置页面。

由于我们使用 minicom 作为超级终端控制路由器等设备, 而不是控制 modem, 所 以进一步修改 Modem and dialing, 将 Init string, Reset string, Hang-up string 设置为空。
设置完成后选择 Save setup as dfl 将当前设置保存为默认设置.
在配置菜单 选 Save setup as df1 保存选 Exit 退出
下次在 shell 命令行中输入 minicon 即可直接进入。
配置Linux环境下的NFS服务;
NFS 是基于 Linux 与 Linux 的网络文件共享功能。包括 PC 机上的 NFS 服务器和目标板上的 NFS 客户端组成。PC 机与目标板可通过交叉网线传输数据。
a.服务器端(PC 机)
(1)安装 nfs 服务器
查看是否已经安装(也可以在 setup 中查看):

# rpm -q nfs-utils

如果已经安装,会打印安装版本:
如果没有安装,从对应 linux 操作系统版本的安装光盘上找到 nfs-utils 的安装包安装:

#rpm –ivh nfs-utils-1.0.9-24.el5.i386.rpm

(2)nfs 配置(加入允许被其他计算机访问的目录和访问权限)

# vim /etc/exports

添加如下内容:

/home 192.168.1.*(rw,sync,no_root_squash)

其中:
/home 允许其他计算机访问的目录(当然也可以设置成其他目录)
192.168.1.* 被允许访问该目录的客户端。
该配置告诉我们,目标板要想共享 NFS 服务器的/home 目录(当然也可以设置其他目录),目标板的 IP 地址必须处于 192.168.1.* 的网段,并且服务器的 IP 地址也必须处于 192.168.1.*,即同一网段(可用在 linux 中用 ifconfig 命令配置)。
Rw 可读可写
Sync 同步写磁盘(async 资料会先暂存于内存中,而非直接写入硬盘)
no_root_squash 表示客户端 root 用户对该目录具备写权限
该项配置过程,在 Redhat 中也可以通过系统菜单配置,即系统设置—服务器设置—NFS 服务器,点击“Add”。在相应拦分别填入共享目录以及可以访问该共享目录的主机的 IP。
(3)启动 nfs 服务器

# service nfs start

或重启 nfs 服务器

# service nfs restart

(4)关闭防火墙

# iptables – F

b.目标板建立 NFS Client
(1)先 ping 一下服务器。若 ping 不通,首先要考虑客户端(目标板)的 IP 地址与NFS 服务器是否处于同一网段。
(2)

# mount –t nfs –o nolock 192.168.1.103 :/home /tmp

tmp 目录为客户端挂载目录
(3)进入客户端(目标板)的 tmp 目录,即可看到服务器(PC 机)的/home 目录中的内容

# cd /tmp
# ls

若要卸载已挂载的 NFS 服务器目录,先退出客户端的挂载目录/tmp,然后

# umount /tmp

配置Linux环境下的TFTP服务;
若要在客户端(目标板)使用 TFTP 功能从 Linux 服务器上远程下载文件,需要配置好 Linux 的 TFTP 服务

第一步: 检查 TFTP-SERVER 软件是否安装
在 LINUX 下输入:

# rpm -q tftp-server

如出现类似:
tftp-server-0.39-2 的信息则表示 tftp-server 已安装。
第二步: 配置 TFTP 服务
需要修改 ftptpd 的启动脚本

# vi /etc/xinetd.d/tftp

将 disable =yes 改为 no 此时即可启动 tfpt 服务
Server_args 配置的是 TFTP 从服务器下载数据的目录,默认配置的目录是
/tftproot。修改该项配置可改变 TFTP 下载的目录。
第三步:启动 TFTP 服务
在服务器端(PC 机)输入命令:

# service xinetd restart

TFTP 服务就启动 OK 了.
对于以下横线之间的内容,Linux Enterprise 版本可进一步进行配置,Red-Hat 版本略过。

# netstat -a | grep tftp

查看 TFTP 是否安装并启动,得到
udp 0 0 *:tftp :
表明安装 并启动成功
另外,上述配置完成后 tftp 仍下载不了,这很可能是 linux 系统中 selinux 设置问题造成的,查看 selinux 设置:
root@cms001 ~]# getenforce
Enforcing

说明被禁用了,必须开放。
[root@cms001 ~]# setenforce 0
再次查看,发现已经开放了
[root@cms001 ~]# getenforce
Permissive

5、烧写UP-TECH S2410试验箱的vivi(bootloader)、linux(kernel)、
rootFS;
烧写2410-CL linux 操作系统包括烧写vivi,kernel,root三个步骤,除此我们还要烧写应用程序,这四个文件分别为:
vivi ---- linux操作系统启动的bootloader;
zImage ---- linux操作系统内核;
root.cramfs ---- 根文件系统;
yaffs.tar.bz2 ---- 应用程序压缩包。

一. 烧写vivi

1.把并口线插到pc机的并口,并把并口的另一端与实验箱上端
的UP-LINK相连,打开2410-CL电源(12V)。
2.把整个GIVEIO目录(在资料的Linux\img\flashvivi目录下)
拷贝到c:/windows下,并把该目录下的giveio.sys文件拷贝到
c:/windows/system32/drivers下。
3.在我的电脑里打开控制面板,选添加硬件,点击“下一步”,选择“是,我已经连接了此硬件”然后点击“下一步”,选中“添加新的硬件设备”然后点击“下一步”,选中“安装我手动从列表选择的硬件”后点击“下一步”,选择“显示所有设备”然后点击“下一步”,选择“从磁盘安装”然后点击“下一步”,选择“浏览”,指定驱动为C:\WINDOWS\GIVEIO\giveio.inf文件,选择giveio.inf文件,然后点击“打开”, 然后选择“确定”,
点击“下一步”至“完成”即安装好驱动。
4.在d盘新建一目录bootloader,把sjf2410-s.exe(在flashvivi
目录下)和要烧写的vivi,linux操作系统内核,根文件系统和应
用程序压缩包拷贝到该目录下。
在所有程序-附件-命令提示符下,进入D:\bootloader目录,运
行sjf2410-s命令如下:sjf2410-s /f:vivi。然后按回车,
在此后出现的三次要求输入参数,
第一次是让选择Flash,选0,然后回车,第二次是选择jtag对flash的两种功能,也选0,然后回车,
第三次是让选择起始地址,选0,然后回车,等待大约3-5分钟的
烧写时间,当VIVI 烧写完毕后选择参数2,退出烧写。如下图所示。烧录后关闭2410-CL,拔掉并口线与开发板的连线。

二、 烧写内核

1.用串口线和交叉网线连接pc和2410-CL(与并口无关了),
打开windows下的超级终端(当然也可以用linux虚拟机中的
minicom),启动2410-CL试验箱系统。vivi启动后,先按住
“BackSpace”键,进入vivi> 命令状态下,设置开发板IP,其
命令为:ifconfig ip 192.168.1.115 (具体IP地址应该根据
TFTP服务的配置要求和主机与试验箱情况设置),
2.设置 tftp 服务器的 IP(启动 tftp 服务器的主机),其命令为:
ifconfig server 192.168.1.85,
保存IP设置:其命令为:ifconfig save
3.配置好Linux平台下的tftp服务,并将要烧写的文件放至tftp服务配置的下载目录中(注意启动相应的服务,关闭防火墙等)。
4. 在vivi命令状态下,输入烧写内核的命令为:
tftp flash kernel zImage

三. 烧写根文件系统

在vivi命令状态下,输入烧写根文件的命令为:
tftp flash root root.cramfs

四. 烧写与解压应用程序
  1. 用网线连接好2410-CL的ETHERNET-1口和PC机的网口,配置IP
    在同一网段,重启2410-CL进入[/mnt/yaffs]下。进行设置开发板IP。
  2. 打开ftp软件(在光盘中的img/flashvivi目录中提供),点击
    FTP选择Quick Connent…,
  3. 在弹出的小窗口里录入:192.168.0.115,用户名:root,密码:
    无,点击Connect,直接点击“OK”即可。选择要上传的“yaffs.tar.bz2”文件,并上传“yaffs.tar.bz2”。到2410-CL的/var下, 10秒左右上传完毕。 回到超级终端后先回车然后转换到实验箱的/var文件夹下将应用程序的压缩包进行解压。 其命令为:
    tar xjvf yaffs.tar.bz2 -C /mnt/yaffs --解压
    yaffs.tar.bz2到mnt/yaffs目录下,需6分钟左右。解压完成后,我们可以转换到mnt/yaffs文件夹下进行ls查看文件夹下的内容。
2.2.3ARM-Linux交叉工具链

对于ARM-Linux嵌入式系统开发,则应当选择相应的交叉工具链。在PC-Linux上安装ARM-Linux交叉工具链的方法是:
1、准备好需要的交叉工具安装包,如cross-3.3.2.tar.bz2,
首先可以在/usr/local目录下建一个arm的目录,再将cross-3.3.2.tar.bz2 拷贝到arm目录下,并进入该目录:

# cd /usr/local/arm

执行解包命令:

 # tar jxvf cross-3.3.2.tar.bz2

(解压后在当前目录生产一个3.3.2文件夹。如果没按上述过程,解压后不在/usr/local/arm目录下,则将3.3.2文件夹拷贝到/usr/local/arm目录下。因为arm-linux-gcc的交叉编译工具集都在3.3.2/bin里面。)
2、配置相应的环境变量。做法是修改/etc/profile文件:

  # vim /etc/profile

在末尾添加如下内容,并保存/etc/profile文件:

 export PATH=$PATH:/usr/local/arm/3.3.2/bin

3、立即重启Linux,使新的环境变量生效;
4、检查是否将路径加入到PATH:
# echo $PATH
  若输出的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。
5、测试是否安装成功
# arm-linux-gcc -v
若有相应的交叉编译器版本显示,则表明安装成功。
2.2.4 测试交叉链工具
编译Hello World程序,测试交叉工具链
写下下面的Hello World程序,保存为hello.c

    #include <stdio.h>
    int main()
    {
   
    printf("Hello World!\n");
       return 0;
    }

采用GCC编译器编译hello.c

#gcc hello.c –o hello

分别在宿主PC 机和2410试验箱上执行 ./hello
观察执行结果。
(2)采用交叉编译器armv4l-unknown-linux-gcc编译hello.c

#armv4l-unknown-linux-gcc hello.c –o hello

分别在宿主PC 机和2410试验箱上执行 ./hello
观察执行结果。

2.2.5 编写Makefile

为了简化调试过程中反复输入编译链接命令的繁琐过程,可以对上面的hello.c 程序编写一个Makefile 文件,Makefile 文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,你只需要敲一个“make”命令整个工程就可以实现自动编译。
下面用于hello.c的Makefile 文件。


CC= armv4l-unknown-linux-gcc
EXEC = hello
OBJS = hello.o
//CFLAGS +=
//LDFLAGS+= –static
all: $(EXEC)
$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS)
clean:
-rm -f $(EXEC) *.elf *.gdb *.o

在这个Makefile 中:
CC 指明编译器
EXEC 表示编译后生成的执行文件名称
OBJS 目标文件列表
C

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值