嵌入式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模式 (桥接在外部网络变化时,无法访 ...
随机推荐
- Linux下Chrome/Chromium窗口边框有白线
原因 窗口边框有白线是因为没有开启使用系统边框和标题栏 解决方法 勾选菜单-设置-外观-使用系统标题栏和边框 效果展示
- 2019.4.1考试&2019.4.2考试&2019.4.4考试
4.1:T1原题,T2码农板子题,T3板子题 4.2 好像是三个出题人分别出的 以及#define *** 傻逼 T1 思维好题 转成树形DP,$dp[i][j]$表示点i值为j的方案数,记录前缀和转 ...
- 解题:SDOI2018 战略游戏
题面 先圆方树然后建虚树,答案就是虚树大小.虚树没必要建出来,把原来的点的点权设为1,直接dfs序排序后相邻点求距离加上首尾两个点的距离,最后除以二(画一下可以发现是正反算了两遍),注意还要去掉询问点 ...
- [AC自动机][学习笔记]
用途 AC自动机适用于一类用多个子串在模板串中匹配的字符串问题. 也就是说先给出一个模板串,然后给出一些子串.要求有多少个子串在这个模板串中出现过. KMP与trie树 其实AC自动机就是KMP与tr ...
- C#项目获取当前时间的农历时间
https://blog.csdn.net/cstester/article/details/7407044 using System.Globalization; class CnCanlendar ...
- 【译】3. Java反射——构造函数
原文地址:http://tutorials.jenkov.com/java-reflection/constructors.html ================================= ...
- struts2 二: 参数封装
封装请求正文到对象中(非常重要) 1.静态参数封装 在struts.xml配置文件中,给动作类注入值.调用的是setter方法. struts.xml的编写: <action name=&quo ...
- C++ template一些体悟(2)
class template的一般化设计之外,特别针对某些参数做特殊设计 #include <iostream> using namespace std; //一般设计 template& ...
- HDU 5965 扫雷
扫雷游戏是晨晨和小璐特别喜欢的智力游戏,她俩最近沉迷其中无法自拔. 该游戏的界面是一个矩阵,矩阵中有些格子中有一个地雷,其余格子中没有地雷. 游戏中,格子可能处于己知和未知的状态.如果一个己知的格子中 ...
- HDU5542 BIT优化dp
http://acm.hdu.edu.cn/showproblem.php?pid=5542 题意:求严格递增的长度为M的序列的组数. 当dp的优化方案不那么容易一眼看出来的时候,我们可以考虑先写一个 ...