嵌入式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模式 (桥接在外部网络变化时,无法访 ...
随机推荐
- 牛客网NOIP赛前集训营-提高组(第一场)
牛客的这场比赛感觉真心不错!! 打得还是很过瘾的.水平也比较适合. T1:中位数: 题目描述 小N得到了一个非常神奇的序列A.这个序列长度为N,下标从1开始.A的一个子区间对应一个序列,可以由数对[l ...
- 洛谷P5112 FZOUTSY
卡map还行.....手写hash表即可. 我一开始以为这个k会变......在sam上想各种奇技淫巧. k不变就是问一段区间有多少对长度为k的子串相同. 然后hash把子串转化为数字,就是区间有多少 ...
- Redis在python中的使用
一 简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted ...
- 第二十二节,TensorFlow中的图片分类模型库slim的使用、数据集处理
Google在TensorFlow1.0,之后推出了一个叫slim的库,TF-slim是TensorFlow的一个新的轻量级的高级API接口.这个模块是在16年新推出的,其主要目的是来做所谓的“代码瘦 ...
- 第二节,神经网络中反向传播四个基本公式证明——BackPropagation
假设一个三层的神经网络结构图如下: 对于一个单独的训练样本x其二次代价函数可以写成: C = 1/2|| y - aL||2 = 1/2∑j(yj - ajL)2 ajL=σ(zjL) zjl = ∑ ...
- java eclipse 安卓环境配置
adt下载地址 http://www.runoob.com/w3cnote/android-tutorial-eclipse-adt-sdk-app.html 我的云 安卓学习 java htt ...
- js怎么获取微信浏览器内容的高度
通过window对象来得到窗口相关的内外款高度信息,如下: outerHeight属性设置或返回一个窗口的外部高度,包括所有界面元素(如工具栏/滚动条).outerWidth属性设置或返回窗口的外部宽 ...
- pageObject+selenium
新发现的设计模式,很好用. 参考:https://www.cnblogs.com/xiaofeifei-wang/p/6733753.html
- curl 出现错误的调试方法
private function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, tru ...
- gometalinter代码质量检查分析工具(golang)
GitHub地址:https://github.com/alecthomas/gometalinter gometalinter安装和使用 1.安装 go get github.com/alectho ...