嵌入式Linux系统的学习
2017-03-22王日任军曾星罗莹玉
王日++任军++曾星++罗莹玉
本文主要介绍嵌入式系统的基本概念以及学习嵌入式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