- 博客(42)
- 收藏
- 关注
原创 嵌入式linux基础教程 第九章 文件系统(1)
文件系统 嵌入式开发者所做的最重要的决定之一就是部署哪种文件系统。有些文件系统性能比较高有些文件系统空间利用率比较高,还有一些文件系统设备故障或者意外断电后恢复数据比较方便。 linux文件系统概念 分区 分区是对物理设备的逻辑划分,而文件系统就存在于这个设备上。一个物理设备可以只包含一个分区,占据所有可用空间,或者,它可以被分成多个分区
2016-12-13 14:34:37
603
原创 嵌入式linux基础教程 用户空间初始化(2)
用户空间初始化 Web服务器启动脚本示例 这个示例很简单但是它可以说明一些机制,指导你设计自己的系统启动和关机行为。这个例子是基于busybox,他和init的初始化行为稍有不同。 在典型的包含Web服务器的嵌入式应用中,你也许会期望系统中有多个服务器,用于系统维护和远程访问。在这个例子中,我们启用了访问HTTP和Telnet的服务器。下面代码显
2016-11-24 21:42:59
840
原创 嵌入式linux基础教程 第六章 用户空间初始化(1)
用户空间初始化 linux内核本身只是任何嵌入式linux系统中的一个很小的组成部分,当内核完成其自身初始化后,它必须挂载一个根文件系统,并执行一组由开发人员定义的初始化历程。本章继续研究继内核初始化之后的系统初始化 根文件系统 Linux和很多其他高级操作系统一样,需要一个根文件系统以充分发挥它的优势。根文件系统是指挂载于文件系统层次结
2016-11-24 15:48:07
1009
原创 嵌入式linux基础教程第二版 第五章 内核初始化
第五章 内核初始化 5.1合成内核镜像:Piggy 及其他 make ARCH=arm CROSS_COMPILE=xcale_be- zImage LD vmlinux SYSMAP System.map SYSMAP
2016-11-17 21:41:46
1149
原创 嵌入式linux基础教程第二版 第二章续
7.第一个用户空间进程:init INIT:version 2.86 booting 在上述代码中,直到这个地方内核都在执行自己的代码,他在一个称为内核上下文的环境中完成大量的初始化工作。在这个运行状态下内核拥有所有的系统内存并且全权控制所有的系统资源。内核能够访问所有的物理内存和所有的I/O子系统。他在内核虚拟地址空间中执行代码,使用一个由内核自己创建和支配的栈。
2016-11-03 22:27:13
656
原创 嵌入式linux基础教程第二版 第二章
本章将带您观摩一个典型的嵌入式开发系统的开发环境,重点介绍嵌入式开发的一些组件和概念 1.嵌入和非嵌入 嵌入式系统的一些常见的特性 a.包含一个处理引擎,比如通用微处理器 b.一般针对某种具体的应用或目的而设计的 c.包含一个简单的用户界面 d.
2016-11-03 09:34:44
1162
原创 嵌入式linux基础教程(第二版)第一章
linux已经成为很多设备的操作系统,手机、DVD播放器、电子游戏机、数码相机、网络交换机和无线网络设备、机顶盒、高清电视、蓝光DVD播放器、汽车的信息娱乐中心和很多日常使用的电器等都在使用linux操作系统。linux已经成为很多设备的嵌入式操作系统一.为什么嵌入式设备选择linux 1.linux支持的硬件种类繁多,可以超过任何一种操作系统 2.linux支持非常多
2016-10-20 20:06:55
1254
原创 const 、static、define 、inline、votatile
define的生命周期止于编译器,预处理的时候就替换了。 const的作用: (1)用于常量,编译器可以对其进行数据静态类型安全检查。 (2)void fun(A a); void fun(A const &
2016-09-12 14:57:10
585
原创 指针和引用
指针和引用 (1)int a = 10; int b = 20; int &rn = a; rn = b; rn是a的一个别名,对rn的赋值其实就是对a的赋值,执行完后a = 20; (2)int a = 1; i
2016-09-12 10:31:27
248
原创 因特网路由选择协议之RIP
因特网路由选择协议 路由选择协议:静态路由选择协议和动态路由选择协议。静态路由选择协议叫做非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。适用于简单的小网络。动态路由选择也叫作自适应路由选择,其特点是能较好的使用网络状态的变化,但实现起来较为复杂,开销也比较大。动态路由选择适用于较复杂的大网络。 因为采用的路由选择协议主要是自适应、分布式路
2016-08-04 16:13:18
1953
原创 VFS的索引节点
索引节点 文件系统处理文件所需要的所有信息都放在称为索引节点的数据结构中。文件名可以随时更改,但是索引节点对文件是唯一的,并且随文件的存在而存在。具体文件系统的索引节点是存放在磁盘上的,是一种静态数据结构,要使用他必须调入内存,填写VFS的索引节点,因此,也称VFS索引节点是动态节点。 VFS索引节点数据结构主要域有 struct inode
2016-07-16 11:27:30
1354
原创 文件系统简介及软硬连接
文件系统 文件:存放一切数据化信息的仓库 文件系统:文件系统对文件的管理,如同国家对人民的管理一样 LINUX的文件分为:常规文件、目录文件、设备文件、管道文件、连接文件 文件的存取权限和文件模式 为了保护文件信息的安全,LINUX设置了文件保护机制,其中之一就是给文件都设定了一定得访问权限。当文件被访问时,系统首先检验访问者的权限,只有
2016-07-15 11:47:56
474
原创 IPC之共享内存(2)
在内存映射文件中给计数器持续加1 本程序的目的是使父子进程之间共享存放着计数器的一个内存区 int main() { int fd, i, nloop, zero = 0; int *ptr; sem_t *mutex; if(argc !=
2016-07-14 11:58:34
320
原创 IPC之共享内存(1)
共享内存 共享内存区是可用的IPC形式中最快的。一旦这样的内存区映射到共享他的进程的地址空间,这些进程间的数据传递就不再涉及内核。然而往共享内存区存放信息或者从共享内存区取走信息通常需要某种形式的同步。互斥锁,条件变量,读写锁,记录上锁和信号量都可以用于这种同步。 一般的进程间通信与共享内存区的区别: 通过管
2016-07-14 11:28:30
442
原创 管道和FIFO
管道和FIFO 管道和FIFO是许多应用程序的基本构建模块。管道普遍用于shell中,不过也可以从程序中使用,往往用于从子进程向父进程回传消息。 FIFO与管道类似,但他们是用mkfifo创建,之后需要用open打开。打开管道必须小心,因为许多规则制约着open的阻塞与否 管道和FIFO的特征之一是他们的数据是一个字节流,类似于TCP连接。把这种字节流分割成各个记
2016-07-06 16:44:16
380
原创 IPC概述
IPC IPC(运行在某个操作系统上的不同进程间的各种消息传递)进程间通信是UNIX域一个杂乱不堪的领域,虽然有各种各样的解决办法,但没有一个是完美的。我们主要讨论四个领域 (1)消息传递(管道、FIFO、消息队列) (2)同步(互斥锁、条件变量、读写锁、信号量) (3)共享内存区(匿名共享内存区、有名共享内存区) (4)过程
2016-07-05 11:52:19
589
原创 ICMP应用之PING和traceroute
ICMP应用之PING和traceroute PING: ICMP的一个重要应用是PING,用来测试两个链接之间的联通性。PING是应用层直接使用网络层ICMP的一个例子。,不通过传输层。PING发送的是回送请求报文,服务器如果正常工作的话会回复回送应答报文。往返的ICMP上有时间戳,因此可以计算出往返时间。最后可以得出发送到哪个机器的IP地址,发送的、收到
2016-07-02 10:55:45
2261
原创 IP层关联协议之ICMP
ICMP ICMP是IP层协议(曾经被面试官问到的问题我不知道,个哈哈哈哈),他的使用是为了有效地转发数据报和提高交付成功的机会。ICMP作为IP层数据报的数据,加上数据报的首部,组成ICMP报文发送出去。ICMP允许主机或者路由器报告差错情况和提供有关异常情况的报告。 ICMP报文的种类:ICMP差错报告报文和ICMP询问报文 ICMP差错
2016-07-02 10:17:15
1465
原创 IP层关联协议之ARP&RARP
ARP&&RARP ARP:根据机器的IP地址找到他的物理地址。解决同一个局域网上的主机或者路由器的IP地址和硬件地址的映射问题。 RARP:根据机器的物理地址找到他的IP地址。 DHCP协议包含了RARP协议的一些内容,因此RARP没有人单独使用RARP协议。重点介绍ARP协议。 大家都知道在网络层使用IP地址,但在实际的网
2016-07-01 16:50:58
1227
原创 IP层存在的原因是因为异构网络的存在
网络层 在计算机通信中,可靠交付应该由谁负责?是端系统还是网络?这曾是一个备受争议的话题。 在传统的电信网中,因为终端极为简单因此网络层负责可靠交付,这是一种面向连接的通信,一种可靠的无丢失无重复的通信。但是缺点是要在网络中建立一条虚电路。 因特网的思想是:网络层向上提供简单灵活的、无连接的、尽最大努力交付的数据报服务。也就是网络层不提供服务
2016-07-01 15:55:28
2335
原创 进程(4)
进程调度 进程调度的实质是资源的分配 进程调度算法及其基本原理 (1)时间片轮转调度算法 系统将所有可运行的进程按照先来先服务的原则排成一个队列,每次调度时把CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,系统发出信号通知调度程序,调度程序便根据此信号来停止进程的运行,并将它送回到就绪队列的末尾,等待下一次执行
2016-06-29 10:28:38
353
原创 进程(3)
linux系统中进程的组织方式 一个系统中通常可以有数百个数千个进程,相应的也就有这么多的PCB,必须使用一些适当的方式将这些PCB组织起来。进程的组织方式其实大都是数据结构中数据的组织方式。 进程链表:双向循环链表将进程联系起来 struct task_struct { stru
2016-06-29 08:52:41
291
原创 简单的并发服务器
简单的并发服务器UNIX下编写简单的并发服务器最简单的方法就是fork一个子进程来服务每个客户。pid_t pid;int listenfd, connfd;listenfd = socket();bind(listenfd, );listen(listenfd, LISTENQ)for(; ;){ connfd = accpet(lis
2016-06-25 15:57:18
321
原创 为什么是三次握手而不是两次握手为什么是四次挥手
为什么是三次握手捏::: 三次握手可以简单看做是客户发送请求,服务器对客户的请求进行确认,客户对服务器的确认再进行确认。 如果采用两次握手,假设下面这种情况,客户向服务器发送请求,服务器没有对客户的请求进行确认(因为网络的延迟他可能没有收到这个请求)。客户收不到这个确认于是过一段时间他在向服务器发起连接请求并顺利完成数据传输,但是过了一段时间这个请求到达了服
2016-06-07 09:49:59
4959
2
原创 三路握手和四次挥手
这是我在书上拍的图大家凑合看,图虽不漂亮但是内容好啊 服务器调用socket,bind,listen,后处于LISTEN状态(桢听来自远方TCP端口的连接请求)。称之为被动打开。 客户端通过调用connect激发三路握手,调用connect后处于SYN_SENT状态(在发送连接请求后等待匹配的连接请求)。这将导致TCP发送一个SYN分节,他告诉服务器将在待建立的
2016-06-06 19:42:15
296
原创 应用程序写数据到套接字
tcp输出 每个TCP套接字都有一个发送缓冲区,可以用SO_SENDBUF套接字选项来更改该缓冲区的大小。 当某个应用程序调用write时,内核从该应用进程缓冲区中复制所有数据到套接字的发送缓冲区。如果套接字的发送缓冲区容不下该应用进程的所有数据则该应用进程被投入睡眠。假设该套接字是阻塞的,则write将不从write系统调用返回,直到应用进程缓冲区中的所有数据都复
2016-06-06 17:34:02
615
原创 网络连接时套接字对的变化状态
TCP网络连接的详细过程 套接字对唯一标识一个网络上的每个TCP连接。 一个TCP连接的套接字对是定义该连接的两个端点的四元组:本地IP地址本地端口号(唯一标识一个进程,网络通信其实两台机器数两个进程之间的通信)和外地IP地址外地端口号。 连接的整个过程。 1.在主机上启动服务器
2016-06-06 15:40:04
764
原创 剑指offer1
剑指offer1 C++ 1.定义一个空的类型,里面没有任何数据和成员函数,对该类型求sizeof? 结果为1而不是0,因为当我们声明这个类型的实例的时候他肯定在内存中占有一定的空间,否则无法使用实例。具体这个空间多大由compiler决定,一般为1. 2.如果在空类型中添加一个构造和析构函数再对该类型求sizeof
2016-06-06 11:38:48
279
原创 进程(1)
进程为何有进程的存在????????多个程序在执行时都想占用CPU,但CPU没有分身术,于是OS设计者发明了进程这一概念。伪并行:CPU在多道程序之间快速的切换。 程序和进程进程是运行中的程序,他除了包含程序中所有的内容外,还包含一些额外的数据。程序装入内存以后才得以运行,在程序计数器的控制下,指令不断的从内存取至CPU中运行。
2016-06-04 17:29:30
753
原创 虚拟地址、线性地址、物理地址(2)
1中讲述了分段机制,那么LUNIX中的段是什么样子的? 由于大多数硬件都不支持段机制只支持页机制,为了使LINUX具有更好的可移植性需要去掉段机制而只使用页机制。80x86规定段机制是不可禁止的。因此不能绕过他而只给出线性地址。聪明的LINUX设计人员让段基地址为0,段界限为4GB,这样虚拟地址和线性地址就是同一个。80X86规定必须为代码段和数据段创建不同的段所以LINUX必须为代
2016-06-04 15:47:14
500
原创 物理地址、线性地址、虚拟地址(1)
物理地址、线性地址、虚拟地址OS充分挖掘硬件潜能。OS开发者需要知道物理内存的地址也需要提供一套机制为应用程序员提供另一个内存空间,这个内存空间的大小可以和实际的物理内存大小之间没有关系。 物理地址:物理内存条所提供的内存空间,每个内存单元的实际地址就是物理地址。线性地址:一段连续的、不分段的范围从0到4GB的地址空间,一个线性地址就是线性地址空间的一个绝对地址。虚拟地址:
2016-06-03 15:26:44
677
原创 友元函数
友元函数 友元函数:类的友元函数是非成员函数但是其访问权限和友元函数一样。 先谈谈函数重载,函数重载或者函数多态旨在能够使用同名的函数来完成相同的基本操作。 运算符重载将重载的概念拓展到运算符上,允许C++运算符有多重含义。 C++允许将运算符重载扩展到用户定义的类型。 在C++中可以定义一个表示数组的类,并
2016-05-27 15:18:48
572
原创 引用变量
引用变量:引用已定义的变量的别名。 作用:用作函数形参,通过将引用变量用作形参,函数将使用原始数据而不是其副本,除指针外引用也为函数处理大型数据结构提供了一种非常方便的途径。 example, int rats; int & rodents = rats; rats和rodents的值和地址都是一样的。 引用变量与指针变量
2016-05-27 14:29:41
384
原创 对象和类
对象和类 oop重要特性:抽象、封装和数据隐藏、多态、继承、代码可重用 为了实现这些特性并将它们组合在一起,C++重要改进是提供了类 过程型编程:首先考虑遵循的步骤,然后考虑如何表示这些数据,(将数据保持在一个文件中然后从文件中读取data)
2016-05-26 11:12:00
278
原创 变量的三个属性
变量的三个基本属性:作用域、链接属性、存储持续性,这三个属性决定了变量的可视性(他可以在什么地方使用)和生命周期(它的值将保留多久) 四种基本的数据类型:整形、浮点型、指针、聚合类型 【1】变量的存储持续性:根据数据保留在内存中的时间 自动存储持续性:在函数定义中声明的变量(包含函数参数)他们在函数开始执行其所属函数或代码块时被创建,在执行完函数或者代码块时被释放。存储在栈中
2016-05-25 17:29:05
3722
原创 初识OS
什么是OS? 有的人说OS 就是电脑启动的时候跑的那个大程序,上面写着正在启动windows。有的人说OS和CS有什么区别。哈哈哈,那么对于我们计算机专业的人来说我们必须对OS有一个准确的认识。 OS最主要的两个介绍词就是manager和server。那么如何解释这两个词呢,请看下面的解释。 为什
2015-11-27 21:37:55
500
原创 C语言基础
转义字符 如果把“写入" "中将引起编译器的误解,因为前两个双引号已经构成了一个字符串,而后一个则由于没有与之对应的"而无法解释。这个时候通常是在\后加一个字母来表示一些无法直接书写的符号。在" "之内的\并不意味着\字符本身,而是和后面的一个字母共同作为一个字符而被编译器理解。转义字符:\“ \n \t \\ \' \a \b 另外在C语言中
2015-05-04 18:54:52
425
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人