嵌入式4412开发板学习知识-Linux系统基础知识
1. 什么是Linux系统编程
Linux系统编程分为三个部分:系统调用、C库和C编译器。
系统调用系统编程的基础是系统调用,也结束于系统调用。在带有操作系统的嵌入式开发中,需要从操作系统申请一些服务和资源,从用户空间向内核发起的一些函数调用。系统调用包括对文件的读写、进程的控制等等。
在Linux中,系统的实现少于其它内核。例如在Windows下有几千个系统调用,但是在Linux中只有不到300个。Linux作为开源软件,在不同的体系结构(x86,PowerPC,ARM等)中各自实现标准系统调用。所以,在不同的体系结构中支持的系统调用可能存在一些区别,但是绝大部分都是通用的。本章讨论的内容主要是基于ARM-Linux上的调用。
在嵌入式单片机编程中,用户可以直接通过编写的裸机程序实现对寄存器的调用。
在Linux中,从安全性和可靠性考虑,需要禁止用户空间的应用程序直接执行对硬件的操作以及对内核的操作。但是应用程序必须通过一种方式获取对底层的操作。在i386处理器上,用户需要通过中断来实现用户空间的调用,然后通过传递参数来实现对底层的操作。在ARM处理器上,是通过切换工作模式来实现对底层的操作,不同模式下CPU可执行的指令和访问的寄存器不一样。
当然在不同的操作系统中,也是有区别的,例如在Android中,所有的应用都是在系统提供的Java虚拟机中运行,应用程序更加远离底层。
C库
C库是Linux系统编程的基础,是所有应用的核心,从前面的Linux结构图中可以看到Linux系统中已经完整的包含了C库。即使你使用其它语言,例如在Android中使用Java编程,很多功能也是通过对C库进行封装,方便系统调用,很多功能只是为了保持API的一致性,对C库的核心也很少修改。
在Linux中,使用的是GNU C库。在glibc中,除了标准的C库,还提供了系统调用的封装、线程的支持和基本应用工具。
C编译器
在Linux中,标准C编译器是有GNU编辑器工具提供,一般的操作系统都会带有GNU编译器。
在嵌入式开发中,由于使用的是交叉编译工具,所以使用的编译器最好和内核的编译器保持一致,避免最终应用出现调用失败的情况。
2. 为什么要学习Linux系统编程
尽管现在流行的Web开发、Java开发、Android开发等,这些的都是逐渐远离系统编程,向高级开发发展。但是这些开发并不是意味着系统编程的结束,例如在嵌入式开发中,要使用处理器做一些算法处理,这些算法不需要高级语言,项目也不需要图形界面,那么使用系统编程加上最小Linux系统可以节省大量的资源。在对内核进行开发时,需要对驱动进行测试,程序员可以使用系统编程来实现一些基础的测试工作。而且像Web开发,Java开发,Android开发,它们的底层也需要工程师去完成,这些工作都会涉及到大量的系统编程。
3. Linux的man命令
Linux提供了丰富的帮助手册,当你需要查看某个命令的参数时不必到处上网查找,只要man一下即可。强大的man命令不止查找命令这一个简单的功能。还可以查找各种API函数,想要学会Linux编程,这个man命令一定要掌握。
man命令熟悉之后,很多东西就可以不用教程,不用手册,可以自己进行学习了。将来大家独立做实际项目或者学习的时候,也会经常用到man命令的。
通常情况下,UNIX 系统上的所有软件(包括每个命令行实用程序、每个系统调用、编程库中每个可调用的函数和每种文件格式)都包含一个手册页。
每个部分实现为一个独立的子目录。每个部分按惯例命名为 man1、man2 直到 man8分别包含一类命令的手册页。
man手册分页的标准内容。
man1:一般命令。这个部分中的命令通常不需要超级用户(即管理员)特权。ls、cat 和 passwd 放在这里,还有 shell。例如,请试试 man bash。
man2:用来访问 UNIX 内核提供的服务的系统调用或函数。例如 fork 系统,它从一个现有的进程生成一个新进程。输入 man fork 显示它的手册页。使用系统软件的程序员常常参考这个部分。
man3:C 库函数。许多软件包提供功能丰富的代码库,让开发人员可以创建新软件来补充现有的特性或开发全新的特性。每个库通常有一个手册页;一些库(比如系统的 libc)太大了,所以各个函数或一组相关函数有单独的文档。
man4:特殊文件,比如设备和驱动程序。
man5:文件格式。UNIX 几乎完全使用文本配置文件定制系统的操作。有大量配置文件,包括网络服务的列表 (/etc/services) 和可用的 shell 列表 (/etc/shells) 等等。
man6:游戏和屏幕保护程序。
man7:杂类文件。这是一个包罗万象的类别。在传统的系统上,可以了解 glob 操作符、正则表达式等方面的信息。
man8:系统管理命令,超级用户很可能要使用它们。
详情了解:http://topeetboard.com更多了解:https://arm-board.taobao.com






嵌入式4412开发板学习知识-Linux系统基础知识的更多相关文章
- 【开学季】自学嵌入式开发|四核开发板|4412开发板|ARM+Android+linux技术
淘宝店铺:迅为开发板http://arm-board.taobao.com 网站:http://www.topeetboard.com QQ咨询:2551456065 电话咨询:010-5895758 ...
- 【转帖】嵌入式4412开发板QT5.7编译安装到arm
QT5.7.0+UBUNTU16.04+ARM-NONE-LINUX-GNUEABI4.8+busybox最小LINUX系统 Orandragon记录 本文转自迅为4412开发板群:http://to ...
- [转载]iTOP-4412开发板搭建最小linux系统
本文转迅为电子论坛:http://www.topeetboard.com 最小linux系统所需资料下载:http://pan.baidu.com/s/1kTNan0j 开发板不仅可以运行Androi ...
- Linux系统基础知识整理
一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅. 二.基本知识整理 1.Linux文件 ...
- Linux系统基础知识整理(一)
本文来自于: https://www.cnblogs.com/hafiz/p/6686187.html#4196989 一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰 ...
- linux学习之八---Linux进程基础知识
一.linux进程 linux是一个多用户多任务的操作系统. 多用户是指多个用户能够在同一时间使用计算机. 多任务是指linux能够同一时候运行几个任务. 进程简单来说就是执行中的程序,Linux系统 ...
- 4412开发板学习笔记-NFS服务器的搭建
转自iTOP-4412讨论群: http://www.topeetboard.com 先来介绍一下NFS: NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件 ...
- 讯为开发板的最小LINUX系统烧写及U盘的挂载及卸载
fdisk -c 0 fatformat mmc 0:1ext3format mmc 0:2ext3format mmc 0:3ext3format mmc 0:4 fastboot fastboot ...
- 安装 Linux 系统基础知识概要
虚拟化软件,建议使用 Vmware Workstation 虚拟硬件配置CPU:2核或更多内存:1G以上,推荐2G硬盘:一块硬盘,200G (虚拟大小)网卡:NAT模式 (桥接在外部网络变化时,无法访 ...
随机推荐
- spring 中连接多个数据源
http://www.ityouknow.com/springboot/2016/08/20/springboot(%E4%BA%94)-spring-data-jpa%E7%9A%84%E4%BD% ...
- 【洛谷P2042】维护数列
题目大意:维护一个序列,支持区间插入,区间删除,区间翻转,查询区间元素和,查询区间最大子段和操作. 题解:毒瘤题...QAQ打完这道题发现自己以前学了一个假的 Splay.. 对于区间操作,用 spl ...
- 被addPropertyChangeListener("...",this)差点搞崩溃
以前常用的是addPropertyChangeListener(this)方法 记得有一天我发现还有另一种写法: addPropertyChangeListener(String propertyNa ...
- ICPC模板编写 latex
推荐模板 https://www.jianshu.com/p/28552706e811 另外导入C文件: \lstinputlisting[language=C]{xxx.c} .c文件编码方式为UT ...
- Android app:transformNativeLibsWithStripDebugSymbolForDebug错误分析
升级NDK解决问题: 先清除 Android/Sdk/ndk-bundle/ 下的内容从 https://developer.android.google.cn/ndk/downloads/older ...
- NTT学习笔记
和\(FFT\)相对应的,把单位根换成了原根,把共轭复数换成了原根的逆元,最后输出的时候记得乘以原\(N\)的逆元即可. #include <bits/stdc++.h> using na ...
- Luogu P2336 [SCOI2012]喵星球上的点名
题目链接 \(Click Here\)_ \(200\)行纯干货的代码,一发\(WA\)掉真的是让人窒息,幸好最后找到了锅在哪.(差点就要弃掉了\(QAQ\)) [调出来的时候真的是要高兴到哭出来了\ ...
- 使用rdbtools工具来解析redis rdb文件
工欲善其事必先利其器,日常工作中,好的工具能够高效的协助我们工作:今天介绍一款用来解析redis rdb文件的工具,非常好用.会之,受用无穷! 一.rdbtools工具介绍 源码地址:https:// ...
- go官方的http.request + context样例
go官方的http.request + context样例 https://github.com/DavadDi/go_study/blob/master/src/httpreq_context/ma ...
- 使用CMD 命令创建指定大小的文件
在做资源更新的时候要做 磁盘空间不足的测试,于是想创建一个文件塞满硬盘,搜索到可以用命令来创建. fsutil file createnew null.zip 524288000