APP下载

嵌入式Linux系统的学习

2017-03-22王日任军曾星罗莹玉

电子技术与软件工程 2017年3期
关键词:嵌入式系统

王日++任军++曾星++罗莹玉

本文主要介绍嵌入式系统的基本概念以及学习嵌入式Linux系统心得体会。在Linux系统的学习过程中,逐步熟练掌握操作方法并获得学习总结。

【关键词】嵌入式系统 嵌入式Linux系统 学习总结

1 嵌入式系统

1.1 嵌入式系统的定义

一方面按照历史性、本质性、普遍性要求,嵌入式系统定义为:嵌入式系统是嵌入到对象体系中的计算机应用系统,与对象系统交互,在实现对象系统某些任务过程时,对应用系统会提出响应时间的限定要求。

另一方面从应用上嵌入式系统被定义为:以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

1.2 嵌入式系统的特点

(1)系统内核小;

(2)专用性强;

(3)系统精简;

(4)高实时性;

(5)多任务的操作系统;

(6)需要开发工具和环境。

1.3 嵌入式系统的应用

在当前数字信息技术和网络技术高速发展的时代,嵌入式系统已经广泛地渗透到工业控制、交通管理、信息家电、家庭智能管理等方方面面中。随着国内外各种嵌入式产品的进一步开发和推广,嵌入式技术将越来越和人们的生活紧密结合。

2 嵌入式Linux的学习过程

2.1 常用命令总结

(1)cd命令——切换目录;

(2)cp命令——拷贝文件或目录;

(3)ls命令——列出目录内容;

(4)mkdir命令——创建目录;

(5)rmdir命令——刪除目录;

(6)rm命令——移动文件或目录;

(7)grep命令——行过滤工具;

(8)chmod命令——设置访问权限;

(9)cat命令——显示文件内容;

(10)vi命令——文本编辑器;

(11)jobs命令——查看中止或者在后台运行的程序;

(12)bg命令——把程序放在后台运行;

(13)fg命令——把程序放在前台运行;

(14)ctrl+c命令——终止在前台运行的程序;

(15)kill命令——终止一个进程;

(16)mount命令——把某个文件系统挂接到某个目录下;

(17)Ifconfig命令——显示或配置网络设备。

2.2 Gcc—makefile

2.2.1 Gcc的使用方法(以hello.c文件为例)

(1)预处理:gcc -E hello.c -o hello.i

编译:gcc -S hello.i -o hello.s

汇编:gcc -c hello.s -o hello.o

链接:gcc hello.o -o hello

生成可执行文件:hello

(2)gcc hello.c -o hello

生成可执行文件:hello

(3)gcc hello.c

生成可执行文件:a.out

2.2.2 makefile的使用方法

(1)基本结构:

目标文件:依赖文件

命令行

(2)使用make命令就能编译得到结果。

2.3 文件I/O编程

2.3.1 函数说明

(1)open()函数是用于打开或创建文件;

(2)close()函数是用于关闭一个被打开的文件;

(3)read()函数是用于将从指定的文件描述符中读出的数据放到缓存区中;

(4)write()函数是用于向打开的文件写数据,写操作从文件的当前指针位置开始;

(5)lseek()函数是用于在指定的文件描述符中将文件指针定位到相应的位置;

(6)fcntl()函数给文件上锁。

2.3.2 使用流程

打开文件open()、设置文件锁fcntl()、定位文件指针位置lseek()、对文件进行读写操作write()、read()。

2.4 编写守护进程

(1)创建子进程,终止父进程;

(2)在子进程中创建新会话setsid;

(3)改变工作目录chdir;

(4)重设文件创建掩码umask;

(5)关闭文件描述符。

2.5 进程间通信

2.5.1 管道

(1)用于具有亲缘关系的进程之间的通信;

(2)建立管道pipe();

(3)管道关闭时只需使用普通的close()函数逐个关闭各个文件描述符。

2.5.2 FIFO

有名管道的创建使用函数mkfifo(),在创建管道成功之后,就可以使用open()、read()、和write()这些函数。

2.5.3 信号(如图1所示)

(1)信号的发送与捕捉。

kill()函数、raise()函数、alarm()函数、pause()函数

(2)信号的处理。

使用简单函数signal(),只需指出要处理的信号和处理函数即可;

使用信号集函数组。

2.5.4 信号量

创建信号量或获得在系统已存在的信号量semget()

初始化信号量semctl()函数的SETVAL操作

信号量的PV操作semop()

删除信号量semclt()函数的IPC_RMID操作

2.5.5 共享内存

创建共享内存shmget()

映射共享内存shmat()

撤销映射shmdt()

2.5.6 消息队列

创建或打开消息队列msgget()

添加消息msgsnd()

读取消息msgrcv()

控制消息队列msgctl()。

3 学习总结

嵌入式系统本身是一个相对模糊的定义,而Linux则是类似于windows的操作系统,它的核心源代码是开放的、自用使用的。在了解了基础知识和安装虚拟机之后,我便开始进行上机操作,加深基本命令的理解和函数的使用。

在学习的过程中想要独立解决疑问,可以通过网络资源、课外书或大量的动手实践才能真正的领会Linux的精髓。同时在我们自己的学习中,要尽最大的能力去帮助他人,在帮助他人的同时自己会深刻巩固知识。

参考文献

[1]何立民.嵌入式系统的实时性问题[J].单片机与嵌入式系统应用,2004(09).

[2]孙天泽.嵌入式Linux操作系统[M].北京:人民邮电出版社,2012.

[3]夏玮玮,沈连丰等.嵌入式系统关键技术分析与开发应用[J].单片机与嵌入式应用,2003(02).

[4]贾红伟,叶文莱.嵌入式操作系统与嵌入式Linux[J].吉林师范大学学报,2005.

作者单位

山东科技大学 山东省青岛市 266590

猜你喜欢

嵌入式系统
Teaching Research on IoT and—Embedded System of Software Engineering
面向应用的智能专业嵌入式系统教学
办公自动化系统的设计
嵌入式系统课程“中断、异常与事件”教学实践及启示
面向实践创新人才培养的嵌入式系统教学研究