ImageVerifierCode 换一换
格式:DOC , 页数:6 ,大小:66KB ,
资源ID:7445262      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-7445262.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(linux有关.doc)为本站会员(fmgc7290)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

linux有关.doc

1、1.嵌入式开发过程绝大多数 Linux 软件开发都是以 native 方式进行的,即本机(HOST)开发、调试,本机运行的方式。这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即板子上系统)运行开发工具和调试工具。通常的嵌入式系统的软件开发采用一种交叉编译调试的方式。交叉编译调试环境建立在宿主机(即一台 PC 机)上,对应的开发板叫做目标板。运行 Linux 的 PC【宿主机】开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行) ,然后把可执行文件下载到目标机上运行。调试时的方法

2、很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器提供的支持作出选择。宿主机和目标板的处理器一般不相同,宿主机为 Intel 处理器,而目标板如 UP-CUP S2410 经典平台开发板为三星 S3c2410.GNU 编译器提供这样的功能,在编译器编译时可以选择开发所需的宿主机和目标机从而建立开发环境。所以在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的 PC 机作宿主开发机,对于嵌入式 LINUX,宿主机上的操作系统一般要求为 REDHAT LINUX。嵌入式开发通常要求宿主机配置有网络,支持 NFS(为交叉开发时 mount 所用) 。然后要在宿主机上建

3、立交叉编译调试的开发环境。环境的建立需要许多的软件模块协同工作,这将是一个比较繁杂的工作,但现在已通过博创嵌入式教学套件中光盘的安装而自动完成了。2.多线程程序的优缺点多线程程序作为一种多任务、并发的工作方式,有以下的优点:1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。2) 使多CPU 系统更加有效。操作系统会保证当线程数不大于CPU 数目时,不同的线程运行于不同的CPU 上。3) 改善程序结构

4、。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。LIBC 中的 pthread 库提供了大量的 API 函数,为用户编写应用程序提供支持3主要的多线程API在本程序的代码中大量的使用了线程函数,如pthread_cond_signal、pthread_mutex_init、pthread_mutex_lock 等等,这些函数的作用是什么,在哪里定义的,我们将在下面的内容中为大家做一个简单的介绍,并且为其中比较重要的函数做一些详细的说明。 线程创建函数:int pthread_create (pthread_t * thread_id, _

5、const pthread_attr_t * _attr,void *(*_start_routine) (void *),void *_restrict _arg) 获得父进程ID:pthread_t pthread_self (void) 测试两个线程号是否相同:int pthread_equal (pthread_t _thread1, pthread_t _thread2) 线程退出:void pthread_exit (void *_retval) 等待指定的线程结束:int pthread_join (pthread_t _th, void *_thread_return) 互斥量

6、初始化:pthread_mutex_init (pthread_mutex_t *,_const pthread_mutexattr_t *)4.C 编程1、建立工作目录rootzxt smile# mkdir hellorootzxt smile# cd hello2、编写程序源代码在 Linux 下的文本编辑器有许多,常用的是 vim 和 Xwindow 界面下的 gedit 等,我们在开发过程中推荐使用 vim,用户需要学习 vim 的操作方法,请参考相关书籍中的关于 vim 的操作指南。 Kdevelope、anjuta 软件的界面与 vc6.0 类似,使用它们对于熟悉 windows

7、 环境下开发的用户更容易上手。实际的 hello.c 源代码较简单,如下:include main()printf(“hello world n”);我们可以是用下面的命令来编写 hello.c 的源代码,进入 hello 目录使用 vi 命令来编辑代码:rootzxt hello# vi hello.c按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按 Esc 键进入命令状态,再用命令“ :wq”保存并退出。这样我们便在当前目录下建立了一个名为 hello.c 的文件。3、编写 Makefile要使上面的 hello.c 程序能够运行,我们必须要编写一个 Makefile 文件,

8、Makefile 文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,你只需要敲一个“make” 命令整个工程就可以实现自动编译,当然我们本次实验只有一个文件,它还不能体现出使用 Makefile 的优越性,但当工程比较大文件比较多时,不使用 Makefile 几乎是不可能的。下面我们介绍本次实验用到的 Makefile 文件。CC= armv4l-unknown-linux-gccEXEC = helloOBJS = hello.o CFLAGS += LDFLAGS+= static all: $(EX

9、EC)$(EXEC): $(OBJS)$(CC) $(LDFLAGS) -o $ $(OBJS) clean:-rm -f $(EXEC) *.elf *.gdb *.o下面我们来简单介绍这个 Makefile 文件的几个主要部分: CC 指明编译器 EXEC 表示编译后生成的执行文件名称 OBJS 目标文件列表 CFLAGS 编译参数 LDFLAGS 连接参数 all: 编译主入口 clean: 清除编译结果注意:“$(CC) $(LDFLAGS) -o $ $(OBJS)”和“-rm -f $(EXEC) *.elf *.gdb *.o”前空白由一个 Tab 制表符生成,不能单纯由空格来代

10、替。与上面编写 hello.c 的过程类似,用 vi 来创建一个 Makefile 文件并将代码录入其中rootzxt hello# vi Makefile4、编译应用程序在上面的步骤完成后,我们就可以在 hello 目录下运行“make” 来编译我们的程序了。如果进行了修改,重新编译则运行:rootzxt hello# make cleanrootzxt hello# make注意:编译、修改程序都是在宿主机(本地 PC 机)上进行,不能在 MINICOM 下进行。5、下载调试在宿主 PC 计算机上启动 NFS 服务,并设置好共享的目录,具体配置请参照前面第一章第四节中关于嵌入式 Linux

11、 环境开发环境的建立。在建立好 NFS 共享目录以后,我们就可以进入 MINICOM 中建立开发板与宿主 PC 机之间的通讯了。rootzxt hello# minicom/mnt/yaffs mount -t nfs -o nolock 192.168.0.56:/arm2410cl /host 注意: IP 地址需要根据宿主 PC 机的实际情况修改成功挂接宿主机的 arm2410cl 目录后,在开发板上进入/host 目录便相应进入宿主机的/arm2410cl 目录,我们已经给出了编辑好的 hello.c 和 Makefile 文件,它们在/arm2410cl/exp/basic/01_h

12、ello 目录下。用户可以直接在宿主 PC 上编译生成可执行文件,并通过上面的命令挂载到开发板上,运行程序察看结果。如果不想使用我们提供的源码的话,可以再建立一个 NFS 共享文件夹。如/root/share,我们把我们自己编译生成的可执行文件复制到该文件夹下,并通过 MINICOM 挂载到开发板上。rootzxt hello# cp hello /root/sharerootzxt hello# minicom/mnt/yaffs mount -t nfs -o nolock 192.168.0.56:/root/share /host 再进入/host 目录运行刚刚编译好的 hello 程

13、序,查看运行结果。/mnt/yaffs cd /host/host ./hellohello world下载调试方法,在之后的实验中如没有明显说明,请使用这种方法,不再赘述5.串口 打开串口在 Linux 下串口文件位于/dev 下,一般在老版本的内核中串口一为/dev/ttyS0 ,串口二为 /dev/ttyS1, 在我们的开发板中串口设备位于/dev/tts/下,因为开发板中没有 ttyS0 这个设备,所以我们要建立一个连接,方法如下:/mnt/yaffs cd /dev/dev ln sf /dev/tts/0 ttyS0打开串口是通过标准的文件打开函数来实现的int fd;fd = o

14、pen( “/dev/ttyS0“, O_RDWR); /*以读写方式打开串口*/if (-1 = fd) /* 不能打开串口一*/perror(“ 提示错误!“); 串口设置最基本的设置串口包括波特率设置,效验位和停止位设置。串口的设置主要是设置 struct termios 结构体的各成员值,关于该结构体的定义可以查看/arm2410cl/kernel/linux-2.4.18-2410cl/include/asm/termios.h 文件。struct termiounsigned short c_iflag; /* 输入模式标志 */unsigned short c_oflag; /*

15、 输出模式标志 */unsigned short c_cflag; /* 控制模式标志 */unsigned short c_lflag; /* local mode flags */unsigned char c_line; /* line discipline */unsigned char c_ccNCC; /* control characters */;设置这个结构体很复杂,可以参考 man 手册或者由赵克佳、沈志宇编写的UNIX 程序编写教程 ,我这里就只考虑常见的一些设置: 波特率设置:下面是修改波特率的代码:struct termios Opt;tcgetattr(fd, cf

16、setispeed( /*设置为 19200Bps*/cfsetospeed(tcsetattr(fd,TCANOW, 校验位和停止位的设置:无效验 8 位Option.c_cflag Option.c_cflag Option.c_cflag Option.c_cflag |= CS8; 奇效验(Odd) 7 位Option.c_cflag |= PARENB;Option.c_cflag Option.c_cflag Option.c_cflag Option.c_cflag |= CS7; 偶效验(Even) 7 位Option.c_cflag Option.c_cflag |= PAR

17、ODD;Option.c_cflag Option.c_cflag Option.c_cflag |= CS7; Space 效验 7 位 Option.c_cflag Option.c_cflag Option.c_cflag Option.c_cflag |= CS8; 设置停止位:1 位:options.c_cflag 2 位:options.c_cflag |= CSTOPB;注意:如果不是开发终端之类的,只是串口传输数据,而不需要串口来处理,那么使用原始模式(Raw Mode)方式来通讯,设置方式如下: options.c_lflag /*Input*/options.c_oflag

18、 /*Output*/ 读写串口设置好串口之后,读写串口就很容易了,把串口当作文件读写就可以了。 发送数据:char buffer1024;int Length1024;int nByte;nByte = write(fd, buffer ,Length) 读取串口数据:使用文件操作 read 函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read 函数返回的字符数是实际串口收到的字符数。可以使用操作文件的函数来实现异步读取,如 fcntl,或者 select 等来操作。char buff1024;int Len1024;int readByte = read(fd, buff, Len); 关闭串口关闭串口就是关闭文件。close(fd);

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报