您的位置: 首页 >> 新闻中心 >> 计算机 >> 软件开发
ARM的嵌入式Linux移植体验之应用实例
精英教育阅读提示:应用实例的编写实际上已经不属于Linux操作系统移植的范畴,但是为了保证本系列文章的完整性,这里提供一系列针对嵌入式Linux开发应用程序的实例。
■ 最新课程推荐更多课程>>
学校培训课程开课时间上课地点精英价报名
正辰培训 微软软件测试工程师电话预约西直门教学区¥4704
新 科 海 软件测试工程师就业班电话预约海淀长远天地¥6280
北师大IT 软件工程与测试实战班电话预约北京师范大学¥1800
北师大IT 高级网络工程师就业班电话预约北京师范大学¥13000
金 同 方 网络工程师就业周末班电话预约人大总部¥7000
  编写Linux应用程序要用到如下工具:

  (1)编译器:GCC

  GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]。

  我们应该使用arm-linux-gcc。

  (2)调试器:GDB

  gdb是一个用来调试C和C++程序的强力调试器,我们能通过它进行一系列调试工作,包括设置断点、观查变量、单步等。

  我们应该使用arm-linux-gdb。

  (3)Make

  GNU Make的主要工作是读进一个文本文件,称为makefile。这个文件记录了哪些文件由哪些文件产生,用什么命令来产生。Make依靠此makefile中的信息检查磁盘上的文件,如果目的文件的创建或修改时间比它的一个依靠文件旧的话,make就执行相应的命令,以便更新目的文件。

  Makefile中的编译规则要相应地使用arm-linux-版本。

  (4)代码编辑

  可以使用传统的vi编辑器,但最好采用emacs软件,它具备语法高亮、版本控制等附带功能。

  在宿主机上用上述工具完成应用程序的开发后,可以通过如下途径将程序下载到目标板上运行:

  (1)通过串口通信协议rz将程序下载到目标板的文件系统中(感谢Linux提供了rz这样的一个命令);

  (2)通过ftp通信协议从宿主机上的ftp目录里将程序下载到目标板的文件系统中;

  (3)将程序拷入U盘,在目标机上mount U盘,运行U盘中的程序;

  (4)如果目标机Linux使用NFS文件系统,则可以直接将程序拷入到宿主机相应的目录内,在目标机Linux中可以直接使用。

  1. 文件编程

  Linux的文件操作API涉及到创建、打开、读写和关闭文件。

  创建

int creat(const char *filename, mode_t mode);

  参数mode指定新建文件的存取权限,它同umask一起决定文件的最终权限(mode&umask),其中umask代表了文件在创建时需要去掉的一些存取权限。umask可通过系统调用umask()来改变:

int umask(int newmask);

  该调用将umask设置为newmask,然后返回旧的umask,它只影响读、写和执行权限。

  打开

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

  读写

  在文件打开以后,我们才可对文件进行读写了,Linux中提供文件读写的系统调用是read、write函数:

int read(int fd, const void *buf, size_t length);
int write(int fd, const void *buf, size_t length);

  其中参数buf为指向缓冲区的指针,length为缓冲区的大小(以字节为单位)。函数read()实现从文件描述符fd所指定的文件中读取length个字节到buf所指向的缓冲区中,返回值为实际读取的字节数。函数write实现将把length个字节从buf指向的缓冲区中写到文件描述符fd所指向的文件中,返回值为实际写入的字节数。

  以O_CREAT为标志的open实际上实现了文件创建的功能,因此,下面的函数等同creat()函数:

int open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode);

  定位

  对于随机文件,我们可以随机的指定位置读写,使用如下函数进行定位:

int lseek(int fd, offset_t offset, int whence);

  lseek()将文件读写指针相对whence移动offset个字节。操作成功时,返回文件指针相对于文件头的位置。参数whence可使用下述值:

  SEEK_SET:相对文件开头
  SEEK_CUR:相对文件读写指针的当前位置
  SEEK_END:相对文件末尾

  offset可取负值,例如下述调用可将文件指针相对当前位置向前移动5个字节:

lseek(fd, -5, SEEK_CUR);

  由于lseek函数的返回值为文件指针相对于文件头的位置,因此下列调用的返回值就是文件的长度:

lseek(fd, 0, SEEK_END);

  关闭

  只要调用close就可以了,其中fd是我们要关闭的文件描述符:

int close(int fd);

  下面我们来编写一个应用程序,在当前目录下创建用户可读写文件"example.txt",在其中写入"Hello World",关闭文件,再次打开它,读取其中的内容并输出在屏幕上:

本新闻共2页,当前在第1页  1  2

  影视动画培训   北大BEC培训官方报名网站   2008美国夏令营启航官方指定报名网站   2008留学第一站!  
  北师大 火星时代
共举影视动画培训之鼎
  北大BEC培训官方报名网站
现在报名独享95折!
  2008年国家职业资格考试
一次过关完全备考手册
  2008留学第一站
留学资讯尽在精英留学站!
 
上一篇:JSP报表打印的一种简单解决方案
下一篇:应用:嵌入式linux启动信息注释之bootloader
 相关新闻
·在PHP中全面阻止SQL注入式攻击之一·传奇的诞生 PHP三位创始人的简介
·小荷才露尖尖角 中国的PHP社群介绍·PHP大潮将至 PHP近年的发展分析
·从草根到大腕 PHP的技术发展历程·基于PHP的AJAX技术实现文件异步上传
·PHP对战ASP:这个问题还值得讨论吗?·7种流行PHP集成开发工具(IDE)的比较
·自己在做项目过程中学到的PHP知识收集·草根的进化 PHP的语言发展简史介绍
·软件知识讨论:PHPer为什么被认为是草根?·软件:Windows CE跨进程内存注入之实践
·软件知识:Java 手机与空间制图服务应用集成·应用:linux内核初始化及启动之用户模式开始
·软件应用:linux内核初始化及启动之start_kernel·应用:嵌入式linux启动信息注释之bootloader
 
◇ 重点栏目导航
◇ 精英服务承诺
教育顾问:010-51660910
QQ交流:138660910
相关资料
·软件测试新手的修炼之路
·Smarty简体中文参考手册
·Struts中文手册
·Struts快速学习指南
·ultradev动态网页制作教程
·UML工具箱
·《设计模式》中文版
·学友Flash伴侣 1.11
·阿须图像水印(AssureMark)V2.0
·超级语霸
相关试题
·2007年全国CPA考试试卷及答案解析之《会
·2007年CPA试卷及答案解析之《财务成本管
·2008年注会考前模拟试题之《财务成本管理
·2007年全国CPA《税法》考试试卷及答案解
·2008年中级会计职称《经济法》试题及答案
·2008年注册会计师考前模拟试题参考答案之
·2008年注册会计师考前模拟试题之《会计》
·2008年注册会计师考前模拟试题之《税法》
·2008年高校招生全国统考理数试题(四川延
·2008年全国高考物理科试题参考答案(上海
相关热贴
·如何改QQ IP地址!
·恰当选择软件测试自动化方案
·ADO.NET学习总结
·.net操纵xml文件类(c#)
·Log4net教程
·VPN技术详解
·高手必读 网络端口安全防护技巧放送
·访问XP共享出现的问题解决办法
·Web2.0时代,RSS你会用了吗?(技术实现总
·.NET下正则表达式应用的四个示例