于博
摘要摘要:CortexA8处理器是第一款基于ARMv7 架构的应用处理器,是有史以来ARM 开发的性能最高、最具功率效率的处理器。ARM Cortex-A8处理器是一款适用于复杂操作系统的应用处理器。基于NFS文件系统,对CortexA8开发板远程添加自开发程序应用进行了研究。
关键词关键词:NFS; CortexA8处理器; ARMv7 架构; 自开发程序
DOIDOI:10.11907/rjdk.1431004
中图分类号:TP319
文献标识码:A文章编号文章编号:16727800(2015)004011802
0引言
NFS是Network File System的简写,即网络文件系统[1]。网络文件系统是FreeBSD支持的文件系统中的一种。 NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,不同的操作系统彼此共享文件(share files)——可以通过NFS挂载远程主机目录,访问该目录就像访问本地目录一样,所以也可以简单地将它看作一个文件服务器(Fileserver)[2]。
1学习和使用NFS文件系统
NFS工作原理可以理解为:CortexA8开发板上需要安装一个NFS客户端软件,Linux宿主机上安装NFS服务器端软件。Linux宿主机配置NFS文件,告诉本机哪块硬盘区域可以被NFS Client设备挂载,Linux宿主机启动NFS服务器程序并等待Client挂载。CortexA8和Linux宿主机通过网线相连,运行NFS Client程序通过网线挂载Linux宿主机上的那块硬盘,这样在CortexA8开发板(NFS Client)一端就可以看到Linux宿主机上这块硬盘区域里所有的文件了。
1.1CortexA8开发板和Linux宿主机两端安装NFS组件
CortexA8开发板的Linux内核和文件系统支持NFS组件,所以CortexA8这端不需作任何修改就可以支持NFS。Linux内核的配置:在Linux宿主机下进入/opt/Friendly ARM/mini210/linux3.0.8,运行命令:#make menuconfig (进入Linux内核配置界面),进入NFS组件的选择安装,如图1所示。
1.2主机端安装NFS服务器
在Linux宿主机端安装NFS服务器,不同的Linux发行版会略有不同,笔者使用的是Fedora 17发行版,过程如下:运行命令:#yum install port map nfsutils(安装NFS所需要的组件) ,在/opt/Friendly ARM/mini210/目录下建立一个共享目录,取名为Source Code
运行命令:#chimed 777 /opt/Friendly ARM/mini210/Source Code (将文件夹Source Code的权限设置为所有人可读写和操作),#vim /etc/exports(修改exports配置文件)。在exports配置文件添加一行/opt/Friendly ARM/mini210/Source Code *(sync,rw,no_root_squash)解析。/opt/Friendly ARM/mini210/Source Code 就是NFS服务器允许NFS客户端挂载的文件。*:代表任意IP地址都可以挂载该NFS服务器的指定文件,Rw:代表拥有可读写权限。
No_root_squash:表示当登陆NFS服务器使用共享目录的使用者是root时,其权限将被转换为匿名使用者(nobody)。接下来Linux宿主机端还要禁用防火墙,在Fedora17下禁用防火墙的命令为#systemctl stop iptables.service。将NFS服务器配置成开机启动并启动NFS服务器,命令为#systemctl enable nfsserver.service。
2为CortexA8开发板添加自开发程序
2.1CortexA8处理器编译
CortexA8采用了复杂的流水线构架,针对强功耗应用,CortexA8采用了一个优化的装载/存储流水线,顺序执行,同步执行超标量处理器内核,其拥有13级主流水线,10级NEON多媒体流水线,可以提供2 DMIPS/MHZ的性能;它有优化的L1缓存,可以提高访问存储速度并降低功耗;它有专用的L2缓存,在编译时,可以把缓存当作标准的RAM进行处理,而缓存大小可以灵活配置,缓存的访问延迟也可以编程控制;它有基于执行记录的动态跳转预盼,准确性高达95%,而且提供重放机制以有效降低预判错误带来的性能损失;在技术方面,使用了更高性能及功耗效率和高代码密度的Thumb-2技术[3]。它首次采用了强大的NEONTM信号处理扩展集,对H.264和MP3等媒体编解码提供加速。CortexA8解决方案还包括JazelleRCT Java加速技术,提供最优化的实时(JIT)和动态调适编译(DAC),同时减少3/4的内存占用空间。此外,新处理器还配置了用于安全交易和数字版权管理的TrustZone技术和AMBA 3 AXITM互连协议,实现低功耗管理IEM的功能[4]。
在Linux宿主机下,进入/opt/Friendly ARM/mini210目录,用C语言编写helloworld.c程序,运行命令#armLinuxgcc helloworld.c hello world(使用交叉编译器armlinuxgcc,编译helloworld.c,源码为helloworld的可执行程序) 。
2.2CortexA8开发板烧录
在同目录下运行命令#./hello world(执行本目录下的helloworld程序,应该会报错,因为这个程序是一个ARM体系程序而不是X86体系程序,X86主机无法识别里面的机器码),将hello world可执行程序复制到rootfs_qtopia_qt4目录下,重新制作rootfs_qtopia_qt4.img文件系统,并将文件系统烧录至CortexA8开发板。
利用超级终端或者Telnet登陆开发板控制台,找到添加的helloworld程序,在控制台下运行命令$./hello world(执行hello world程序),观察是否有正确的输出返回。
至此,已经至少向开发板烧录过两次文件系统了。这里的问题是在之后的开发过程中是不是每次添加或者修改程序时都要进行烧录呢?那效率也实在太低了[5]。下面采用嵌入式软件开发中最常用的开发方法,使用NFS文件系统进行远程挂载来进行程序开发。
3使用NFS进行CortexA8开发
将Linux宿主机和CortexA8开发板通过网线相连,并将Linux宿主机的有线IP地址和CortexA8开发板的有线IP地址设置为同一网段(此次实验室笔者的Linux宿主机IP地址为192.168.1.22,CortexA8开发板的IP地址为192.168.1.230)。
在Linux宿主机上,将之前写好的helloworld.c源程序和helloworld可执行程序复制到/opt/Friendly ARM/mini210/Source Code目录下。我们在实验中曾经使用Windows下的putty.exe程序telnet登陆过开发板,其实绝大多数Linux操作系统也带有该功能,在Linux宿主机下运行命令#telnet 192.168.1.230(使用telnet工具登陆IP地址为192.168.1.230的CortexA8开发板命令行控制台),输入用户名为root,即可在Linux宿主机上完成命令行登陆,如图2所示。
在控制台下运行命令:
$mount –t nfs 192.168.1.22:/opt/Friendly ARM/mini210/Source Code /mnt –o no lock(注意这个命令是“$”符号打头,是在控制台进行的,意思是将IP地址为192.168.1.22的NFS服务器/opt/Friendly ARM/mini210/Source Code文件夹挂载到开发板Linux文件系统的/mnt目录下)。完成挂载后,运行$ls /mnt命令,看一下是否是Linux宿主机/opt/Friendly ARM/mini210/Source Code目录下的内容,如图3所示。笔者此时的/opt/Friendly ARM/mini210/Source Code目录下的内容稍有不同,读者此时应该只有helloworld.c和helloworld。尝试运行hello world程序,看是否有正确的返回。返回结果为正确,由此推出,NFS进行CortexA8开发效率较高。
综上所述,使用NFS进行开发,可以通过建立NFS,把Linux 服务器上的特定分区共享到待调试的嵌入式目标系统上,这样就可以直接在嵌入式目标系统上操作Linux 服务器,同时可以在线对程序进行调试和修改,大大简化了软件开发工作。
参考文献参考文献:
[1]程海粟,李庆武,俞楷,等.基于CortexA8 处理器的车牌识别系统设计[J].计算机与现代化,2014(5):123125.
[2]百度百科.CortexA8开发平台[EB/OL].http://baike.baidu.com/view/6631918.htm?fr=aladdin.
[3]杨亮.基于CortexA8嵌入式实验平台的设计与实现[J]. 电子设计工程,2014(4) : 153154.
[4]任亮.基于ARM CortexA8的嵌入式Linux开发的平台构建[J]. 山西煤炭管理干部学院学报,2012(4) : 134135.
[5]李宁.ARM CortexA8处理器原理与应用[M].北京: 北京航空航天大学出版社,2012.
责任编辑(责任编辑:杜能钢)