- 博客(35)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 《x86_x64体系结构探索》读书笔记 —— 第三章
第三章 实验运行环境实验结果的运行主要分为两种情况:软盘映像启动(floppy)和硬盘映像启动(hasr disk) ,hard disk可以在U盘或者bochs启动,floppy可以在VMware和bochs上启动。因此,书中有两种img文件,软盘映像demo.img和硬盘映像c.img。软盘和硬盘的区别软盘启动时,boot代码直接写在扇区0中,硬盘启动时,如果直接将boot代码写到扇区0.会导致一些机器启动不了。软盘启动:boot代码直接写在MBR中,即扇区0,这样boot代码就是我们的MB
2021-09-25 13:51:45
450
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux设备驱动(三)—— 块设备驱动
块设备驱动在前一章,我们具体的介绍了简单字符设备驱动的编写,在具体的工程中,需要考虑的比我们写的复杂得多,还要考虑电源管理,以及定时器的一些东西。这一章,我们会介绍linux设备驱动中的...
2019-07-03 15:49:06
512
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux设备驱动(五)—— 中断机制
Linux设备驱动中断机制Linux设备驱动编程中的中断与定时器处理一、基础概念什么是中断?所谓中断是指CPU在执行程序的过程中,出现了某些突发事件急待处理,CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU又返回程序被中断的位置并继续执行。中断的分类1. 根据中断来源分类: 分为内部中断和外部中断。2. 根据终端是否可以被屏蔽: 分为可屏蔽中断和不可屏蔽中断。3...
2019-05-27 14:51:43
720
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux设备驱动开发(一)—— platform总线、设备和驱动
platform总线、设备和驱动一个现实的Linux设备和驱动通常都需要挂载在一种总线上,对于本身依附于PCIUSB、I2C、SPI等的设备而言,这自然不是问题,但是在嵌入式系统中,SoC系统中集成的独立的外设控制器,挂接在SoC内存空间的外设却不依附于此类总线。因此,Linux发明了一种虚拟的总线,称为platform总线(虚拟总线),相应的设备称为platform_device,驱动称为p...
2019-05-19 20:25:04
1441
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux网络编程(五)—— socket编程
socket编程基本函数接口创建套接字的函数socket()socket函数对应于普通文件的打开操作。普通文件的打开操作返回一个文件描述字,而socket()用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。函数原型声明#include...
2019-05-05 14:49:50
154
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux网络编程(三)—— TCP三次握手、四次挥手详解(图)
三次握手建立连接TCP 发送数据之前要先建立连接(三次握手)所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。两台主机,服务器(server)...
2019-04-28 15:49:05
446
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux网络编程(二)—— OSI七层与TCP/IP四层网络架构详解
OSI七层模型OSI是Open System Interconnect的缩写,意为开放式系统互联。OSI参考模型分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。**物理层: ** 涉及在信道上传输的原始比特流。**数据链路层:**的主要任务是加强物理层传输原始比特流的功能,使之对应的网络层显现为一条无错线路。发送包把输入数据封装在数据帧,按顺序传送出去并处理接收方回送的确...
2019-04-27 21:22:27
604
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux网络编程(一)—— TCP/UDP的区别与联系以及各自的使用场景
TCP(数据传输协议)TCP向应用层提供可靠地面向连接的字节流传输服务。它能提供高可靠性能通信(即数据无误、数据无丢失、数据无失序、数据无重复到达)。面向连接使用TCP必须要先建立连接,建立连接之后双方的系统内核会为它们分配必要的资源,用来管理练连接的状态和传输的数据。在数据传输完成之后,涮坊需要关闭连接释放系统资源。TCP是全双工的(双方的读写操作可以在一条连接线上进行),并且是一...
2019-04-27 19:53:01
564
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 浅谈u-boot
uboot是个大软件uboot是个最大的裸机程序,但是uboot没有多任务运行的机制,不能实现任务调度等操作系统应用的功能,虽然有协议栈,有文件系统,但是没有多任务运行的内核uboot是研究裸机最好的范例,这个是本质区别uboot包含了非常丰富的功能,而且是源代码全开放最初是为powerpc开发的启动程序内核启动以后,uboot就没什么事了,完成任务靠边站了uboot是个bootloa...
2019-04-19 14:49:45
307
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux设备驱动——Linux I2C核心、总线与设备驱动
Linux设备驱动——Linux I2C核心、总线与设备驱动Linux I2C体系结构**I2C核心 **I2C核心提供了 I2C总线驱动和设备驱动的注册、注销的方法,I2C通信(Algorithm)方法上层的与具体适配器无关代码以及探测设备、检测设备地址的上层代码等。I2C总线驱动是对 I2C 体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部。总线驱...
2019-04-15 14:46:24
577
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux设备驱动(二)—— 字符设备驱动(三)——自动创建设备节点
自动创建设备节点使用udev或mdev来实现自动创建设备节点。使用mknod手动创建设备节点不够灵活,如果是动态分配的设备号怎么办,难道每次加载驱动后去查看/proc/devices文件中查看它的主设备号,利用**udev(mdev)**来实现设备节点的自动创建,**udev(mdev)**存在于应用层。包含头文件#include<linux/device.h>新建一个c......
2019-04-01 18:53:20
751
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux设备驱动(二)—— 字符设备驱动(一)
字符设备驱动程序概念linux系统从千千万万设备中提取它们的共性,将这些设备分成3大类:字符设备,块设备,网络设备。字符设备是前面提到的这三类设备中最常见的设备,比如生活中大家常见的键盘、鼠标、触摸屏等都属于字符设备。所以掌握字符设备驱动框架是每个驱动程序员所必须的。应用程序与内核、驱动的关系u-boot 启动内核内核 启动应用程序应用 读写文件、获取键值用点灯程...
2019-03-31 18:41:48
589
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 进程间通信方式--共享内存Shared Memory
共享内存定义共享内存是进程间通信最简单的方式之一。共享内存是系统在多进程通信而预留的一块内存区。共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。当两个程序想相互之间通信时,内存会为这两个程序生成一块公共的内存区域。这块被两个程序共享的内存区域叫做共...
2019-03-28 10:29:19
932
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 进程间通信方式—综述
进程间一共有六种通信方式:1.管道:管道分为无名管道(pipe)和有名管道(fifo),无名管道是一种半双工的通信方式,数据只能往一个方向流动,且只能在有亲缘关系的进程之间使用,进程间的亲缘关系一般是指父子进程;有名管道也是一种半双工的通信方式,可以再没有亲缘关系的进程之间通信;和无名管道的主要区别在于,命名管道有一个名字,命名管道的名字对应于一个磁盘索引节点,有了这个文件名,任何进程有相应的权...
2019-03-25 11:06:16
159
原创 深入理解linux操作系统
深入理解linux操作系统主要从计算机的组成、linux操作系统的启动、linux的内部结构,来分析整个linux系统,主要分为下面几个模块:linux 操作系统综述系统的初始化进程管理内存管理文件系统输入输出系统进程间通信网络系统虚拟化容器化...
2021-12-29 20:38:30
586
原创 《x86_x64体系结构探索》读书笔记 —— 第四章
《x86_x64体系结构探索》读书笔记 —— 第四章识别处理器–CPUID测试是否支持CPUIDeflags bit21:能修改成功,则支持CPUIDCPUID表达a. 查询从cpuid获得信息必须先提供相应的leaf(功能号main leaf),功能号main leaf:查询DPUID的01号功能,即CPUID的01 leaf;main leaf输入到EAX中sub leaf: 对于一些复杂的功能,需要复制的子叶,sub leaf输入到ECX中mov eax, 0Bh //功能号0B
2021-10-08 20:46:00
699
原创 C语言(二)— 整型
编程进阶— C语言(一)— 变量和数据类型整型在C语言中,整型数据一般用short、int、long三种数据类型来声明,int是C语言中常用的声明整形数据的数据类型,在现代的操作系统中,一般是占4字节(Byte)即32位(Bit),4字节可以存储很大的数值,为了节省空间,避免造成不必要的浪费,对于较小的数据,可以用short int来声明,也可以省略int;对于太大的数据,可以用long int来声明,也可以省略int。int 是基本的整数类型,short 和 long 是在 int 的基础上进行的扩
2021-03-06 15:36:21
7928
原创 C语言(一)— 变量和数据类型
C语言(一)—— 变量和数据类型C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是如何交互的,程序在内存中是一种怎样的状态,操作系统和用户程序之间有着怎样的“爱恨情仇”。变量首先我们需要明确:1. 计算机要处理的数据(诸如数字、文字、符号、图形、音频、视频等)是以二进制的形式存放在内存中的;2. 我们将8个比特(Bit)称为一个字节(Byte),并将字节作为最小的可操作单元。先在内存中找一块区域,规定用它来存放整数,并起一个好记的名字,方
2021-03-06 15:33:51
343
原创 编程能力提高——序章
从今天开始,将陆续更新编程进阶的相关内容,从开始的C语言,到后面的算法、数据结构。编程基础在编程进阶的系列文章开始之前,首先会讲解一些关于编程基础的内容。什么是编程语言我们通过“语言”来控制计算机,让计算机执行我们想要的操作,为我们做事情,这就是编程语言(programming language)。编程语言有固定的格式和词汇,这就是我们需要学习的内容。类似于人类语言,编程语言的种类也很繁多,常用的有C语言、C++、Java、C#、Python、PHP、JavaScript、Go语言、Objecti
2021-02-28 14:28:12
104
原创 Intel® 64 and IA-32 Architectures Software Developer’s Manual
Intel® 64 and IA-32 Architectures Software Developer’s Manual最近在看IA-32软件编程手册,对第三卷的前十章内容做了一些总结IA-32(Intel Architecture),英特尔体系架构,英特尔从486开始采用,也就叫X86-32架构,在同一时间内可以处理32位二进制数据。CPU的工作宽度是32位。其它公司在软硬方面都兼容此架构,也列属于IA-32架构。...
2020-05-17 10:06:21
815
原创 线性表(一)—— 顺序表
顺序表(一)—— 顺序表定义顺序表 是在计算机内存中以数组的形式保存的线性表;线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元...
2019-12-22 13:25:25
335
原创 linux总线
总线协议总线是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束,按照计算机所传输的信息种类。通俗的讲,总线就是是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道。工程师为了简化硬件电路设计、简化系统结构,常用一组线路,配置以适当的接口电路,与各部件和外围设备连接,这组共用的连接线路被称为总线。另外就是采用总线结构便于部件和设备的扩充,尤其制定了统一的...
2019-04-03 16:55:53
1604
原创 进程间通信方式--信号量semaphore
信号量semaphore定义信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。
2019-03-30 16:04:25
339
原创 进程间通信方式--消息队列
消息队列定义消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。消息队列就是一个消息的链表。可以...
2019-03-29 14:45:55
173
原创 shell脚本简单教程
shellLinux中通常使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。在大多数情况下,这些脚本同样可以在 bourne shell中运行。创建shell脚本程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个脚本中中我们使用/bin/sh来执...
2019-03-29 11:30:46
178
原创 Linux--cat命令
cat命令主要用于三个方面 :(1)创建并写入文件cat > firstcat > [filename] 新建文件并写入(覆盖原有文件)cat >> [filename] 新建文件并写入(若存在将内容追加到原有文件尾)(2)合并文件cat first two > object filecat [file1] [file2] > [obj ...
2019-03-29 10:34:29
197
原创 进程间通信方式--管道
管道无名管道(pipe)有名管道(FIFO)。无名管道(pipe):也简称为管道,是一种半双工的通信方式,数据只能往一个方向流动,且只能在有亲缘关系的进程之间使用,进程间的亲缘关系一般是指父子进程;**有名管道(FIFO)**也是一种半双工的通信方式,可以再没有亲缘关系的进程之间通信;对文件系统来说,匿名管道是不可见的,它的作用仅限于在父进程和子进程两个进程间进行通信。而命名管道...
2019-03-28 15:04:48
218
原创 进程间通信方式--信号
信号(sginal)信号的定义信号是linux系统响应某些条件而产生的一个事件,接收到信号的进程会采取相应的措施。通常喜好是因为一个错误产生的。也可以作为进程间通信的一种方式,由一个进程发送给另一个进程。信号的产生叫做生成,接收叫做捕获。信号的本质信号是在软件层次上对中断机制的一种模拟,一个进程接收到信号和处理器收到一个中断请求是一样的。信号是进程间通信机制中唯一的异步通信,进程不...
2019-03-28 10:30:59
286
原创 线程同步
cpu多线程的调度,当多个线程同时访问共享资源时,会造成竟态。线程的同步是解决“谁先执行,谁后执行”的问题。同步主要是确保在同一时刻只有一个线程访问共享资源。线程的同步方式有很多,包括自旋锁、读写锁、互斥锁、条件变量、信号量。1.自旋锁:用于多线程同步的一种锁,线程反复检查锁变量是否可用。一旦获取了自旋锁,线程会一直保持该锁,直至显式释放自旋锁,任何想要访问共享资源在获取所之前一直处于忙等(自...
2019-03-22 16:02:22
82
原创 ubuntu18.04安装libusb报错libtool: error: Failed to create '.libs'
$make\make all-recursivemake[1]: Entering directory ‘/home/yf/test1/libusb’Making all in libusbmake[2]: Entering directory ‘/home/yf/test1/libusb/libusb’CC libusb_1_0_la-core.lolibtool: ...
2019-03-22 11:38:53
2561
1
原创 fork函数的使用
fork是一个系统调用。进程存活于内存中。每个进程都在内存中分配有属于自己的一片空间 (address space)。当进程fork的时候,Linux在内存中开辟出一片新的内存空间给新的进程,并将老的进程空间中的内容复制到新的空间中,此后两个进程同时运行。fork通常作为一个函数被调用。这个函数会有两个返回值,将子进程的pid返回给父进程,0返回给子进程。子进程总可以查询自己的ppid来知道自己...
2019-03-19 15:47:47
205
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人