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系统基础知识的更多相关文章

  1. 【开学季】自学嵌入式开发|四核开发板|4412开发板|ARM+Android+linux技术

    淘宝店铺:迅为开发板http://arm-board.taobao.com 网站:http://www.topeetboard.com QQ咨询:2551456065 电话咨询:010-5895758 ...

  2. 【转帖】嵌入式4412开发板QT5.7编译安装到arm

    QT5.7.0+UBUNTU16.04+ARM-NONE-LINUX-GNUEABI4.8+busybox最小LINUX系统 Orandragon记录 本文转自迅为4412开发板群:http://to ...

  3. [转载]iTOP-4412开发板搭建最小linux系统

    本文转迅为电子论坛:http://www.topeetboard.com 最小linux系统所需资料下载:http://pan.baidu.com/s/1kTNan0j 开发板不仅可以运行Androi ...

  4. Linux系统基础知识整理

    一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅. 二.基本知识整理 1.Linux文件 ...

  5. Linux系统基础知识整理(一)

    本文来自于: https://www.cnblogs.com/hafiz/p/6686187.html#4196989 一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰 ...

  6. linux学习之八---Linux进程基础知识

    一.linux进程 linux是一个多用户多任务的操作系统. 多用户是指多个用户能够在同一时间使用计算机. 多任务是指linux能够同一时候运行几个任务. 进程简单来说就是执行中的程序,Linux系统 ...

  7. 4412开发板学习笔记-NFS服务器的搭建

    转自iTOP-4412讨论群: http://www.topeetboard.com 先来介绍一下NFS: NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件 ...

  8. 讯为开发板的最小LINUX系统烧写及U盘的挂载及卸载

    fdisk -c 0 fatformat mmc 0:1ext3format mmc 0:2ext3format mmc 0:3ext3format mmc 0:4 fastboot fastboot ...

  9. 安装 Linux 系统基础知识概要

    虚拟化软件,建议使用 Vmware Workstation 虚拟硬件配置CPU:2核或更多内存:1G以上,推荐2G硬盘:一块硬盘,200G (虚拟大小)网卡:NAT模式 (桥接在外部网络变化时,无法访 ...

随机推荐

  1. QML学习笔记(三)-引入Font-awesome

    作者: 狐狸家的鱼 Github: 八至 1.首先得在qml文件夹下建立字体文件,将font-awesome放入进去 2.然后在main.cpp中注册字体 引入中一定要写上 引用字体 引用字体得路径一 ...

  2. A1117. Eddington Number

    British astronomer Eddington liked to ride a bike. It is said that in order to show off his skill, h ...

  3. 使用ZXing.Net生成与识别二维码(QR Code)

    Google ZXing是目前一个常用的基于Java实现的多种格式的1D/2D条码图像处理库,出于其开源的特性其现在已有多平台版本.比如今天要用到的ZXing.Net就是针对微软.Net平台的版本.使 ...

  4. 第一篇 - bsp抓取python中文开发者社区中的所有高级教程

    工具:python3.6  pycharm 库:bs4 + urllib 第一步:读取html源码 from bs4 import BeautifulSoup import urllib.reques ...

  5. echart折线区域图

    在引入echart区域折线图时,没有出现对应的区域图 当发现引入下面代码到自己的代码中并没有对应的区域图 option = { xAxis: { type: 'category', boundaryG ...

  6. 关于JAVA-JS-JSP之间传值的各种方法

    https://blog.csdn.net/murex_dustyone/article/details/52945552 这篇博文写的非常好,保存下来,一起学习

  7. (暴力求解)Encoding HDU1020

    Encoding 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1020 Time Limit: 2000/1000 MS (Java/Others)    ...

  8. mysql5.6 主从同步配置

    一:配置前说明 在centos 6环境下配置 mysql 5.6主从同步 准备两台测试的虚拟机,2台虚拟机上都安装mysql软件,并开启mysql服务主master : 192.168.1.110从s ...

  9. python对象继承

    继承允许我们在两个或者更多的类之间创建一种“是一个”的关系,这种关系把共同的细节抽象到一个超类里. 从技术上讲,每一个我们创建的类都使用了继承,所有的python类都是一个叫做object的特殊类的子 ...

  10. Java使用POI导入Excel异常Cannot get a text value from a numeric cell 解决

    异常原因:Excel数据Cell有不同的类型,当我们试图从一个数字类型的Cell读取出一个字符串并写入数据库时,就会出现Cannot get a text value from a numeric c ...