- 博客(92)
- 资源 (5)
- 收藏
- 关注
转载 第十章 内核同步方法
原子操作原子正数操作定义一个 atomic_t 类型的数据方法很平常,你还可以在定义它时给它设定初值:atomic_t v; //定义vatomic_t u = ATOMIC_INIT(0); //定义u并把它初始化为0atomic_set(&v, 4); //v = 4 atomic_add(2, &v...
2018-07-13 00:41:51
218
转载 (学习笔记)ARM汇编指令集
ARM汇编指令集指令、伪指令(汇编)指令:是机器码的助记符,经过汇编器编译后,由CPU执行。(汇编)伪指令:用来指导指令执行,是汇编器的产物,最终不会生成机器码。两种不同风格的ARM指令ARM官方的ARM汇编风格:指令一般用大写,Windows中的IDE开发环境。GNU风格的ARM汇编:指令一般用小写。ARM汇编的特点1. LDR/STR架构.ARM采用RISC架构,CPU本身不能直接读取内存,而...
2018-07-12 01:09:31
789
转载 uboot专题:uboot1.1.6 第一阶段
最近打算移植一个比较新的 uboot 到开发板,回想起来上一次移植 uboot1.1.6 已经差不多是一年前了,手头保留了一些当时移植分析时的笔记,但是没有归纳梳理,在移植新版 uboot 之前,再来回味一下经典。本文重点在于分析 uboot 启动流程以及 uboot 自身的细节,比如栈空间的划分、如何设置 tag 、如何添加一个自定义命令等。但是不涉及基本的硬件驱动的分析,比如内存初始化、时钟...
2018-07-12 00:40:02
403
原创 Linux内核专题:第二十一章linux启动流程,
********************************内核的启动流程**************************************************1.内核的自解压702:vmlinux-lds=arch/arm/kernel/vmlinux.lds内核的入口地址:arch/arm/kernel/head.s78:入口地址|||79:关中断,设置svc模式|||81:...
2018-07-12 00:37:07
189
转载 第九章 内核同步介绍
临界区所谓临界区就是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源通常是不安全的,为了避免在临界区中并发访问,编程者必须保证这些代码原子的执行——也就是说,操作在执行结束前不可被打断,就如同临界区是一个不可分割的指令一样。竞争如果两个执行线程有可能处于同一个临界区中执行,那么这就是程序的一个Bug,如果这种情况确实发生了,我们就称它为竞争条件。同步避免并发和防止竞争条件称为同步。内核同...
2018-07-11 23:09:22
196
转载 第八章 下半部和推后执行的工作
上半部的局限性:中断处理程序以异步方式执行,并且它有可能打断其他重要代码(甚至包括其他中断处理程序)的执行,因此中断处理程序应该越快越好。如果当前有一个中断处理程序正在执行,在最好的情况下(如果IRQF_DISABLED没有被设置),与该中断同级的其他中断被屏蔽,在最坏的情况下(设置了IRQF_DISABLED),当前处理器上所有其他中断都会被屏蔽。因为禁止中断后硬件与操作系统无法通信,因此,中断...
2018-07-11 23:08:29
177
转载 第七章 中断和中断处理
什么是中断中断本质上是一种特殊的电信号,由硬件设备发向处理器,处理器接收到中断后,会马上向操作系统反应此信号到来。硬件设备产生中断的时候并不考虑处理器的时钟同步,因此中断是异步的,换句话说中断随时可能产生。什么是异常异常一般由处理器本身引起(异常是同步中断),比如运算中的除0操作。中断处理程序——中断上下文、原子上下文中断处理程序与其他内核函数的真正区别在于,中断处理程序是被内核调用来相应中断的,...
2018-07-11 23:06:37
371
转载 第五章 系统调用
什么是系统调用系统调用在用户进程和硬件设备之间添加了一个中间层。该层的作用有三个:首先,它为用户空间提供了一种硬件抽象接口,举例来说,当需要读写文件的时候,应用程序就可以不去管磁盘类型和介质,甚至不用去管文件所在的文件系统是那种类型。第二,系统调用保证了系统的稳定和安全。作为硬件设备和应用程序之间的中间人,内核可以基于权限、用户类型和其它一些规则对需要进行的访问进行裁决。第三,每个进程都运行在虚拟...
2018-07-11 23:05:45
294
转载 第四章 进程的调度
1. 什么是调度现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程)。这个管理程序就是调度程序,它的功能说起来很简单:决定哪些进程运行,哪些进程等待决定每个进程运行多长时间此外,为了获得更好的用户体验,运行中的进程还可以立即被其他更紧急的进程打断。总之,调度是一个平衡的过程。一方面,它要保证各个运行的进程能够最大限度...
2018-07-11 23:04:49
237
转载 第三章 进程管理
1、进程和线程 进程就是出于执行期的程序,但进程并不仅仅局限于一段可执行代码。通常还要包括其它资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存空间地址及一个或多个执行线程,当然还包括用来存放全局变量的数据段等。 执行线程,简称线程,是在进程中活动的对象,每个线程拥有独立的程序计数器、进程栈和一组进程寄存器。内核调度的对象是线程,而不是进程。 对 Li...
2018-07-11 23:03:46
165
转载 第二章 从内核出发
内核开发的特点:内核编程时既不能访问 C 库,也不能访问标准的 C 头文件。内核编程时必须使用 GNU C。内核编程时缺乏像用户空间的那样的内核保护机制。内核编程时难以执行浮点数运算。内核给每一个进程只有一个很小的定长堆栈。由于内核支持异步中断、抢占和 SMP,因此必须时刻注意内核同步和并发。要考虑可移植性的重要性。1、无 libc 库抑或无标准头文件 对内核来说完整的 C 库——哪怕是它的一个...
2018-07-11 23:02:27
162
转载 第一章 Linux内核简介
1.1 Unix 特点Unix 很简洁,不像其他动辄几千个系统调用并且设计目的不明确的系统,Unix 仅仅提供几百个系统调用并且有一个非常明确的设计目的。Unix 中所有的东西都被当作文件对待。Unix 内核和相关的系统工具软件是用 C 语言编写而成。Unix 进程创建非常迅速,并且有一个非常独特的 fork()系统调用。1.2 Linux 简介Linux 是类 Unix 系统,但它不是 Unix...
2018-07-11 23:00:56
211
转载 linux内核专题:内存管理
https://blog.csdn.net/gatieme/article/details/52384965深入理解Linux内存管理-之-目录导航
2018-07-11 00:34:16
217
转载 驱动专题:第六章块设备驱动 5.块设备驱动参考文章
基本概念 块设备(blockdevice)--- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。字符设备(Character device)---是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流。他不具备缓冲区,所以对这种设备的读写是实时的。 扇...
2018-07-10 23:53:17
244
转载 驱动专题:第六章块设备驱动 4.块设备驱动编写
通过上节的块设备驱动分析,本节便通过内存来模拟块设备驱动 ,方便我们更加熟悉块设备驱动框架 参考内核自带的块设备驱动程序:drivers/block /xd.c drivers/block /z2ram.c 1.本节需要的结构体如下:1.1 gendisk磁盘结构体: struct gendisk { int major; //设备主设备号...
2018-07-10 23:45:58
199
转载 驱动专题:第六章块设备驱动 3.块设备驱动分析
字符设备三部曲: alloc_chrdev_region(&devid, 0, HELLO_CNT, "hello"); cdev_init(&hello_cdev, &hello_fops); cdev_add(&hello_cdev, devid, HELLO_CNT); 块设备: major = register_blkdev...
2018-07-10 23:43:29
196
转载 驱动专题:第六章块设备驱动 2.块设备框架分析
本节目的: 通过分析2.6内核下的块设备驱动框架,知道如何来写驱动 1.之前我们学的都是字符设备驱动,先来回忆一下字符设备驱动:当我们的应用层读写(read()/write())字符设备驱动时,是按字节/字符来读写数据的,期间没有任何缓存区,因为数据量小,不能随机读取数据,例如:按键、LED、鼠标、键盘等 2.接下来本节开始学习块设备驱动块设备:块设备是i/o设备中的一类, 当我们的应用层对...
2018-07-10 23:37:06
198
转载 驱动专题:第六章块设备驱动 1. 块设备驱动程序概念介绍
块设备驱动程序概念介绍系统中能够随机访问特定大小数据片的设备被称作块设备,这些数据片就称作块。最常见的块设备是硬盘。注意,它们都是以安装文件系统的方式使用的——这也是块设备通常的访问方式。 另一种基本的设备类型是字符设备。字符设备按照字符流的方式被有序访问,像串口和键盘就属于字符设备。 这两种设备的根本区别在于它们是否可以被随机访问。内核管理块设备比字符设备复杂的多,有一个专门的子系统...
2018-07-10 23:32:53
254
转载 AI专题:第一章 人工智能之入门基本方法
眼下,人工智能已经成为越来越火的一个方向。普通程序员,如何转向人工智能方向,是知乎上的一个问题。本文是我对此问题的一个回答的归档版。相比原回答有所内容增加。一、目的本文的目的是给出一个简单的,平滑的,易于实现的学习方法,帮助 “普通” 程序员踏入AI领域这个门。这里,我对普通程序员的定义是:拥有大学本科知识;平时工作较忙;自己能获取的数据有限。因此,本文更像是一篇 “from the scratc...
2018-07-08 00:35:36
5175
转载 驱动专题:第三章 Spi及spiflash驱动 1. Spi基本概念和基本时序
SPI就是串行外围设备接口,它是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,这四根线的定义分别是:MISO:主设备数据输入,从设备数据输出;MOSI:主设备数据输出,从设备数据输入;SCLK:时钟信号,由主设备产生;CS:从设备片选信号,由主设备控制;特点:SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护...
2018-07-08 00:31:57
910
转载 驱动专题:第三章 Spi及spiflash驱动 3. Spiflash裸驱-软件模拟
STM32F10x_SPI(硬件接口 + 软件模拟)读写Flash(25Q16)SPI(Serial Perripheral Interface)串行外设通信接口,主要实现设备(主从)之间的通信。硬件上由CS、SCK、MISO、MOSI四根通信线连接而成。关于SPI更多介绍不再详细描述,本文主要以STM32F103为主机、W25Q16为从机进行SPI通信实验。 本文将提供STM32硬件SPI、软件...
2018-07-08 00:31:49
883
转载 驱动专题:第三章 Spi及spiflash驱动 2. Spi通信协议
SPI协议参考:SPI协议及其工作原理浅析 http://bbs.chinaunix.net/thread-1916003-1-1.htmlSPI总线协议及SPI时序图详解 http://blog.163.com/sunshine_linting/blog/static/44893323201181482335951 一、概述 SPI, Serial Perripheral ...
2018-07-08 00:31:15
1718
转载 驱动专题:第五章MTD及Flash驱动 4.Norflash驱动
嵌入式Linux——nor flash (1):硬件介绍声明:本文章是学完韦东山老师的教学视频后看过一些文章后所写,在看文章时我会将一些可能重要的知识点复制下来,所以可能会抄到您文章中的一些内容,如果您有什么意见,请同我讲出我会修改或删除。而如果这篇文章对您有帮助,那是我的荣幸。同时我看到网上有一些很好的写nor驱动的文章,但是我发现这些文章中对于nor的硬件描述以及nor与开发板的联系上并不是说...
2018-07-08 00:30:37
2347
转载 驱动专题:第三章 Spi及spiflash驱动 4. Spiflash裸驱-硬件操作
Ⅰ、写在前面前面文章讲述过关于SPI的驱动(硬件SPI 和 软件模拟SPI),本文接着那篇文章来讲述关于SPI应用中【FLASH时序描述及驱动编程】。 写这篇文章的目的有两点:1.让大家知道SPI在实际应用开发中的重要意义; 2.让大家掌握SPI FLASH存储芯片的时序及驱动编程。 市面上的SPI FLASH类型很多,但是绝大部的芯片在硬件和软件上都是兼容的。虽然本文是以华邦的W25X16芯片为...
2018-07-07 22:02:00
1417
转载 驱动专题:第三章 Spi及spiflash驱动 5. Linux下的spi驱动
内核版本:linux2.6.32.2 硬件资源:s3c2440参考: 韦东山SPI视频教程内容概括: 1、I2C 驱动框架回顾 2、SPI 框架简单介绍 3、master 驱动框架 3.1 驱动侧 3.2 设备侧 4、SPI 设备驱动框架 4.1 设备册 4.2 驱动侧 5、设备驱动程序实例1、I2C 驱动框架...
2018-07-07 22:01:38
751
转载 驱动专题:第四章 IIC驱动 1. IIC基本概念和基本时序
1. IIC基本概念和基本时序1.1 I2C串行总线概述 I2C总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。1、I2C总线具有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL 2、IIC总线上可以挂很多设备:多个主设备,多个从设备(外围 设备)。上图中主设备是两个单片机,剩下的都是从设备。 3、多主机会产生总线裁决...
2018-07-07 22:01:29
504
转载 驱动专题:第四章 IIC驱动 2. IIC通信协议
Ⅰ、写在前面说到IIC,大家都应该不会陌生,我们初学单片机的时候或多或少都知道或了解过,甚至使用I2C控制过器件。但是,有多少人真正去深入理解,或者深入研究过I2C通信协议呢? 1、我们有必要学习I2C通信吗?I2C作为常见串行通信的其中一种,在嵌入式领域中占有很重要的地位。原因在于我们嵌入式开发的产品中有很多设备都是使用I2C进行通信的。我们开始学习单片机开发的时候最先接触的应该是使用I2C操作...
2018-07-07 22:00:55
656
转载 驱动专题:第四章 IIC驱动 3.IIC裸驱
Ⅰ、写在前面上一篇文章是“STM32F10x_模拟I2C读写EEPROM”,讲述使用IO口模拟I2C总线通信,对EEPROM(AT24Xxx)进行读写操作的过程。上一篇文章主要内容:I2C协议、模拟I2C底层驱动、EEPROM(AT24Xxx)单字节读写操作。本文主要内容:STM32硬件I2C详细配置、EEPROM(AT24Xxx)多字节读写操作、ST官方I2C存在问题。 实例实验效果:1、多字节...
2018-07-07 22:00:46
1504
1
转载 驱动专题:第四章 IIC驱动 4. IIC协议/裸驱/adapter驱动程序分析
开发板:mini2440内核 :linux2.6.32.2参考 :韦东山毕业班I2C视频教程1、i2c协议简要分析 i2c中线是一种由 PHILIPS 公司开发的串行总线,用于连接微控制器及其外围设备,它具有以下特点。 1、只有两条总线线路:一条串行数据线SDA,一条串行时钟线SCL。 2、每个连接到总线的器件都可以使用软件根据它的唯一的地址来确定。 ...
2018-07-07 21:59:35
636
转载 驱动专题:第四章 IIC驱动 5. Linux I2C驱动源码分
struct s3c2410_platform_i2c *npd; if (!pd) pd = &default_i2c_data0; npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL); if (!npd) printk(KERN_ERR "%s: no memory for platform d...
2018-07-07 21:58:32
817
2
转载 驱动专题:第五章MTD及Flash驱动 2.Nandflash驱动
一、MTD体系结构:Linux内核提供MTD子系统来建立FLASH针对Linux的统一、抽象接口。MTD将文件系统与底层的FLASH存储器进行隔离。 引入MTD后Linux系统中对FLASH的设备驱动分为4层 设备节点:用户在/dev目录下使用mknod命令建立MTD字符设备节点(主设备号为90),或者MTD块设备节点(主设备号为31),使用该设备节点即可访问MTD设备。MTD设备...
2018-07-07 21:58:17
890
转载 驱动专题:第五章MTD及Flash驱动 1.mtd框架分析
MTD(memory technology device):内存技术设备,是linux用于描述ROM,NAND,NOR等设备的子系统的抽象,MTD设备可以按块读写也可以按字节读写,也就是说MTD设备既可以是块设备也可以是字符设备,块设备(mtdblackx)操作针对文件系统,字符设备(mtdx)操作主要针对格式化等操作的测试用。一个MTD设备的描述为mtd_info这个结构体,填充好这个结构体,然...
2018-07-07 21:58:10
907
转载 驱动专题:第二章 Uart及tty终端设备 3.Linux下的tty2
在前面的一篇文章中,我们分析了一个 uart_driver 的向上注册过程,主要是 tty 的一些东西,知道了 tty 注册了一个字符设备驱动,我们在用户空间 open 时将调用到 uart_port.ops.startup ,在用户空间 write 则调用 uart_port.ops.start_tx ,还知道了如何 read 数据等等。但是,这些都是内核帮我们实现好的,在真正的驱动开发过程中...
2018-07-07 00:16:03
451
转载 驱动专题:第二章 Uart及tty终端设备 3.Linux下的tty1
本文参考了大量牛人的博客,对大神的分享表示由衷的感谢。主要参考: tty驱动分析 :http://www.wowotech.net/linux_kenrel/183.html Linux TTY驱动--Uart_driver底层:http://blog.csdn.net/sharecode/article/details/9196591 Linux TTY驱动--Serial ...
2018-07-06 22:19:18
529
原创 驱动专题:第二章 Uart及tty终端设备 1.基本时序
Uart基本工作原理发送数据过程:空闲状态,线路处于高电位;当收到发送数据指令后,拉低线路一个数据位的时间T,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇偶校验位和停止位(停止位为高电位),一帧数据发送结束。接收数据过程:空闲状态,线路处于高电位;当检测到线路的下降沿(线路电位由高电位变为低电位)时说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,接着接收并比较...
2018-07-06 22:08:57
557
转载 驱动专题:第一章驱动框架 5. Linux Platform devices 平台设备驱动
设备总线驱动模型:http://blog.csdn.net/lizuobin2/article/details/51570196 本文主要参考:http://www.wowotech.net/device_model/platform_device.html platform平台设备驱动是基于设备总线驱动模型的,它只不过是将 device 进一步封装成为 platform_device...
2018-07-06 21:31:47
243
转载 驱动专题:第一章驱动框架 4. linux设备模型之Class
参考:http://www.wowotech.net/device_model/class.html 刚开始写字符设备驱动程序的时候,老师教我们自动创建设备节点,“要先创建类,在类下面创建设备,类名字不重要“。 firstdrv_class = class_create(THIS_MODULE, "firstdrv"); firstdrv_class_dev =...
2018-07-06 21:28:45
294
原创 驱动专题:Linux驱动大汇总
驱动知识架构图驱动专题:第一章驱动框架1. Linux 设备驱动总线模型2. Linux设备驱动之Kobject/Kset3. Linux设备驱动之Kobject/Kset24. Linux设备模型之Class5. Linux Platform devices 平台设备驱动 驱动专题:第二章Uart及tty终端设备1.基本时序3.Linux下的tty1...
2018-07-06 21:17:50
1100
转载 驱动专题:第一章驱动框架 3. Linux设备驱动之Kobject/Kset2
LDD3中说,Kobject的作用为: 1、sysfs 表述:在 sysfs 中出现的每个对象都对应一个 kobject, 它和内核交互来创建它的可见表述。 2、热插拔事件处理 :kobject 子系统将产生的热插拔事件通知用户空间。 3、数据结构关联:整体来看, 设备模型是一个极端复杂的数据结构,通过其间的大量链接而构成一个多层次的体系结构。kobject 实现了该结构并将其聚...
2018-07-06 21:12:12
319
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人