摘要:
<概述> Linux启动大致分为一下几个步骤,详细的启动步骤在<启动分析>中详解。 <概述> Linux启动大致分为一下几个步骤,详细的启动步骤在<启动分析>中详解。 1:首先bios加电自检,初始化(这个过程会检测相关硬件(cpu,内存,显卡,硬盘等)) 1:首先bios加电自检,初始化(这个过程 阅读全文
posted @ 2018-03-17 15:50
流浪的Coder
阅读(3287)
评论(0)
推荐(0)
摘要:
<什么是Linux输入设备> ➤简介 Linux输入设备总类繁杂,常见的包括有按键、键盘、触摸屏、鼠标、摇杆等等,他们本身就是字符设备,而linux内核将这些设备的共同性抽象出来,简化驱动开发建立了一个input子系统。子系统共分为三层,如图1所示。 图1 input输入子系统 ➣驱动层 驱动层和硬 阅读全文
posted @ 2018-03-17 15:34
流浪的Coder
阅读(4077)
评论(0)
推荐(0)
摘要:
<hash表的特性> Hash 表是使用 O(1) 时间进行数据的插入删除和查找,但是 hash 表不保证表中数据的有序性,这样在 hash 表中查找最大数据或者最小数据的时间是 O(N) 。 <寻址和 hash 函数> 理想状态下 hash 足够大,每一数据保存在一个 hash 存储单元内,这样对 阅读全文
posted @ 2018-03-17 15:32
流浪的Coder
阅读(23961)
评论(0)
推荐(0)
摘要:
➤背景 一般情况下,Linux系统中,进程的4GB内存空间被划分成为两个部分 用户空间和内核空间,大小分别为0~3G,3~4G。用户进程通常情况下,只能访问用户空间的虚拟地址,不能访问到内核空间。每个进程的用户空间都是完全独立、互不相干的,用户进程各自有不同的页表。而内核空间是由内核负责映射,它并不 阅读全文
posted @ 2018-03-17 15:30
流浪的Coder
阅读(37139)
评论(1)
推荐(5)
摘要:
➤字节顺序有“大端模式” 和 “小端模式” 两种 ➣字节顺序只是对内置数据类型而言,例如对于一整型(int,int 是内置数据类型)数,比如 0x123456 大端模式: 高地址 >低地址 0x56 | 0x34 | 0x12 小端模式: 高地址 >低地址 0x12 | 0x34 | 0x56 但对 阅读全文
posted @ 2018-03-17 15:29
流浪的Coder
阅读(4157)
评论(1)
推荐(1)
摘要:
S3C2440集成了丰富了外设控制器(LCD控制器、USB Device控制器、USB Host控制器、NAND FLASH控制器、I2C控制器、SPI控制器等)。要控制这些外设就要设置相应控制器的寄存器以产生相应的驱动时序。学习S3C2440,主要是如何配置寄存器。下面是S3C2440特殊功能寄存 阅读全文
posted @ 2018-03-17 15:27
流浪的Coder
阅读(6744)
评论(0)
推荐(0)
摘要:
<背景> MMU即内存管理单元(Memory Manage Unit),是一个与软件密切相关的硬件部件,也是理解linux等操作系统内核机制的最大障碍之一。可以说,不懂MMU使很多人一直停滞在单片机与无OS的时代。 <虚拟地址/物理地址> a:如果处理器没有MMU,CPU内部执行单元产生的内存地址信 阅读全文
posted @ 2018-03-17 15:22
流浪的Coder
阅读(3234)
评论(0)
推荐(0)
摘要:
<按键驱动程序> #include <stdio.h> #include <fcntl.h> #include <linux/input.h> #include <sys/types.h> #include <unistd.h> int main(int argc, char** argv) { i 阅读全文
posted @ 2018-03-17 15:20
流浪的Coder
阅读(588)
评论(0)
推荐(0)
摘要:
<什么是液晶> 我们一般认为物体有三态:固态、液态、气态,其实这只是针对水而言,有一些有机化和物 还有介于固态和液态中间的状态 就是液晶态,如下图(一): 图(一) <TFT LCD显示原理> a:背景 两块偏光的栅栏角度相互垂直时光线就完全无法通过,图(六)是用偏光太阳镜做的测试。 图(六) b: 阅读全文
posted @ 2018-03-17 15:20
流浪的Coder
阅读(64998)
评论(1)
推荐(2)
摘要:
<简介> LCD驱动里有个很重要的概念叫帧缓冲(framebuffer),它是Linux系统为显示设备提供的一个接口,应用程序在图形模式允许对显示缓冲区进行读写操作。用户根本不用关心物理显示缓冲区的具体位置及存放方式,因为这些都由缓冲区设备驱动完成了。 启动开发板后执行ls /dev/fb* 命令可 阅读全文
posted @ 2018-03-17 15:20
流浪的Coder
阅读(3295)
评论(0)
推荐(0)
摘要:
<输入子系统简介> a:背景 内核的输入子系统是对“分散的”,“多种不同类别”的输入设备(键盘,鼠标,跟踪杆,触摸屏,加速度计等)进行“统一处理”的驱动程序。具有如下特点: a-1:统一各种形态各异的相似的输入设备的处理功能(鼠标,不论是PS/2形的鼠标,还是usb形式的鼠标,还是蓝牙形式的鼠标), 阅读全文
posted @ 2018-03-17 15:19
流浪的Coder
阅读(2866)
评论(1)
推荐(0)
摘要:
linxu_usb驱动之框架 USB骨架程序可以被看做一个最简单的USB设备驱动的实例。 首先看看USB骨架程序的usb_driver的定义 [cpp] view plain copy static struct usb_driver skel_driver = { .name = "skeleto 阅读全文
posted @ 2018-03-17 15:18
流浪的Coder
阅读(5849)
评论(0)
推荐(0)
摘要:
<uart驱动程序概述> 在嵌入式Linux系统中,串口被看成终端设备,终端设备(tty)的驱动程序分为3部分: tty_core tty_disicipline tty_driver 包括3个结构体:uart_driver,uart_port,uart_ops(include/serial_cor 阅读全文
posted @ 2018-03-17 15:17
流浪的Coder
阅读(49511)
评论(0)
推荐(3)
摘要:
字符设备之混杂设备: 定义混杂设备: 向Linux系统注册混杂设备驱动: 卸载混杂设备: 注意:混杂设备的初始化没有使用函数cdev_init(stuct cdev *,const struct file_operation *)来将将设备描述结构和设备操作函数集联系起来。 <wiz_tmp_tag 阅读全文
posted @ 2018-03-17 15:16
流浪的Coder
阅读(712)
评论(0)
推荐(0)
摘要:
<简介> a:什么是液晶 物质一般有三态,固态,气态,和液态。这只是一种比较大致的划分,但是有些物质介于液体和固体之间——液晶。一般固体的分子或原子都由固定的排列方式,但是液晶介于固体和液体之间,具有流动性和排列性,可以用磁场来改变液晶的排列方式。 b:LCD背光 场致发光(Electro-Lumi 阅读全文
posted @ 2018-03-17 15:16
流浪的Coder
阅读(1276)
评论(0)
推荐(0)
摘要:
<平台设备设备驱动> a:背景: 平台总线是Linux2.6的设备驱动模型中,关心总线,设备和驱动这3个实体。一个现实的Linux设备和驱动通常需要挂接在一种总线上(比如本身依附于PCI,USB,IIC,SPI等设备而言)。但是在嵌入式系统里面,SoC系统即集成的独立外设控制器,挂接在SoC内存空间 阅读全文
posted @ 2018-03-17 15:15
流浪的Coder
阅读(2819)
评论(0)
推荐(0)
摘要:
<linux系统7大子系统> a:SCI(system call interface) ————用户程序通过软件中断后,调用系统内核提供的功能,这个在用户空间和内核提供的服务之间的接口称为系统调用。系统调用是Linux内核提供的,用户空间无法直接使用系统调用。在用户进程使用系统调用必须跨越应用程序和 阅读全文
posted @ 2018-03-17 15:14
流浪的Coder
阅读(453)
评论(0)
推荐(0)
摘要:
<机械硬盘> a:磁盘结构 传统的机械硬盘一般为3.5英寸硬盘,并由多个圆形蝶片组成,每个蝶片拥有独立的机械臂和磁头,每个堞片的圆形平面被划分了不同的同心圆,每一个同心圆称为一个磁道,位于最外面的道的周长最长称为外道,最里面的道称为内道,通常硬盘厂商会将圆形蝶片最靠里面的一些内道(速度较慢,影响性能 阅读全文
posted @ 2018-03-17 15:13
流浪的Coder
阅读(17855)
评论(2)
推荐(1)
摘要:
USB概述 <USB简介> a:背景 USB是Universal Serial Bus的缩写,是一种全新的,双向同步传输的,支持热插拔的PC串行通信协议,USB标准提出的主要目的是为了提供一种兼容低速和高速,可扩充并且使用方便外围设备接口共人们使用,同时解决之前计算机接口过多的难题(这也是造成USB 阅读全文
posted @ 2018-03-17 15:11
流浪的Coder
阅读(5044)
评论(0)
推荐(1)
摘要:
Linux驱动框架分析(一) 事实上,Linux的设备驱动都遵循一个惯例——表征驱动程序(用driver更贴切一些,应该称为驱动器比较好吧)的结构体,结构体里面应该包含了驱动程序所需要的所有资源。用术语来说,就是这个驱动器对象所拥有的属性及成员。由于Linux的内核用c来编写,所以我们也按照这种结构 阅读全文
posted @ 2018-03-17 15:10
流浪的Coder
阅读(499)
评论(0)
推荐(0)
摘要:
<设备驱动模型> 注:几乎所有的设备结构体都包含"strcut kobject kobj"和"srtuct list_head list"该结构体。 struct kobject kobj: 该结构体用于构建Linux设备驱动模型的模型建立 struct list_head { struct lis 阅读全文
posted @ 2018-03-17 15:09
流浪的Coder
阅读(280)
评论(0)
推荐(0)
摘要:
<背景> a:Linux中,时钟又分为实时时钟和系统时钟。 实时时钟(硬件时钟): 实时时钟的主要作用是提供计时和产生精确的时钟中断。实时时钟是用来持久存放系统时间的设备,即便系统关闭后,它也可以靠主板上的微型电池提供的电力保持系统的计时。 系统时钟(软时钟): (1)保证系统时间的准确性。 (2) 阅读全文
posted @ 2018-03-17 15:08
流浪的Coder
阅读(966)
评论(0)
推荐(0)
摘要:
<背景> 内存会以分页方式组织内存,而且每页大小和计算机体系结构有关系,Linux中每个页都有对应的struct page{} 与之对应。 <分配连续的内存> a:void *kmalloc(int count,int flags)函数用于从zone_normal区域返回连续内存的分配的地址。 参数 阅读全文
posted @ 2018-03-17 15:08
流浪的Coder
阅读(336)
评论(0)
推荐(0)
摘要:
<什么是中断> 计算停下当前处理任务,并保存现场,转而去处理其他是任务,当完成任务后再回到原来的任务中去。 <中断的分类> a:软中断 软中断时执行中断指令产生的,软中断不用施加中断请求信号,因此中断的产生的不是随机的而是由程序安排的。内核线程是实现软中断的助手。 b:硬中断 硬中断时由外部硬件产生 阅读全文
posted @ 2018-03-17 15:07
流浪的Coder
阅读(371)
评论(0)
推荐(0)
摘要:
<临界区> a:对共享资源进行访问的代码称为临界区。 <原子操作> a:原子操作用于执行轻量级,仅仅执行一次的的操作比如修改计数器,有条件的增加值,设置某一位。所谓原子操作是指该操作在执行玩之前绝对不会被打断,原子操作的代码都是用汇编实现的,因为C语言无法实现这样的操作。 任何拥有锁的代码都必须是原 阅读全文
posted @ 2018-03-17 15:07
流浪的Coder
阅读(783)
评论(0)
推荐(0)
摘要:
<背景> 在linux系统驱动程序中,因为要面临各种各样的硬件,字符设备,快设备,网络接口设备,USB设备,PCI设备,平台设备,混在设备 ,设备不同则所对应的驱动模型不同,这就导致我们要掌握众多的驱动模型,能从这些众多的驱动模型中找到共性,则是学号linux驱动的关键 <linux 驱动程序的编写 阅读全文
posted @ 2018-03-17 15:05
流浪的Coder
阅读(345)
评论(0)
推荐(0)
摘要:
<访问流程> 驱动程序控制设备,其主要是通过访问设备中的寄存器来到达控制设备的目的,因此讨论如何访问硬件,其实质是研究如何访问寄存器。 <地址映射> 在linux系统中,无论是内核所使用地址还是应用程序所使用地址,都虚拟地址,然而芯片手册上锁给出的地址都是物理地址,因此驱动程序开发是第一步就是将物理 阅读全文
posted @ 2018-03-17 15:04
流浪的Coder
阅读(355)
评论(0)
推荐(0)
摘要:
《linux内核简介》 <linux系统架构> 系统架构 用户部分: 应用程序:GNU C 库内核部分:系统调用接口、内核、体系结构相关代码(与硬件相关的代码) 划分原因:不同的运行空间所能访问的寄存器,访问的设备是不一样,其目的就是为了保护操作系统 两种状态的转换:系统调用和硬件中断可以完成两种模 阅读全文
posted @ 2018-03-17 15:04
流浪的Coder
阅读(652)
评论(0)
推荐(0)
摘要:
<文件系统定义> 怎么将文件和文件目录加载到linux内核中,这一种加载的方式就叫做文件系统 《建立根文件系统目录和文件》 <创建目录> 1)在linux系统中使用命令mkdir rootfs 创建一个文件夹 2)进入该文件夹依次批量的创建文件夹 bin dev etc lib proc sbin 阅读全文
posted @ 2018-03-17 15:03
流浪的Coder
阅读(1128)
评论(0)
推荐(0)
摘要:
<内核模块代码> 1)内核模块内有main()函数 2)首先编写没内核模块相应的函数功能 3)内核模块的入口由一个宏(module_init(),module_exit()),来加载和卸载(实际是指明加载函数和卸载函数,这样内核才会认识) 4)头文件:<linux/init.h><linux/mod 阅读全文
posted @ 2018-03-17 15:02
流浪的Coder
阅读(345)
评论(0)
推荐(0)
摘要:
《进程要素》 <进程与程序的区别> 程序: 存放在硬盘上一些列代码和数据的可执行映像,是一个静止的实体 进程: 是一个执行中的程序,是动态的实体 <进程4要素> 1)有一段程序供其执行,这段程序不一定是某个进程所专有,可以与其他进程所共用。 2)有进程所专用的内核空间堆栈 3)在内核中有task_s 阅读全文
posted @ 2018-03-17 15:01
流浪的Coder
阅读(542)
评论(0)
推荐(0)
摘要:
<模块申明> MODULE_LICENSE (): 声明该模块遵守的许可证协议,如“GPL”“GPL V2” MODULE_AUTHOR(“姓名”) MODULE_DESCREPTION(“功能描述”) MODULE_VERSION(“版本号”) <使用方式> #include<linux/init 阅读全文
posted @ 2018-03-17 15:01
流浪的Coder
阅读(224)
评论(0)
推荐(0)
摘要:
嵌入式软件的层次: bootloader +boot_parameter+kernel+ boot filesystem <uboot的编译> 1)将uboot压缩文件拷贝到 linux系统中并解压 2)解压后会得到一个uboot文件 3)进入uboot文件 4)vim Makefile 找到需要配 阅读全文
posted @ 2018-03-17 15:00
流浪的Coder
阅读(1131)
评论(0)
推荐(0)
摘要:
<const 关键字> 在嵌入式系开发中,const关键字就是“只读”的意思 <为什么要ARM需要进行C语言环境的初始化> 在汇编情况下,指令的跳转,保护现场需要保存的数据很少,并且可以直接访问寄存器,但是到了C语言环境中,函数的调用。 (1)无时无刻都需要保护现场,(2)并且无法直接访问寄存器,( 阅读全文
posted @ 2018-03-17 14:59
流浪的Coder
阅读(1534)
评论(0)
推荐(0)
摘要:
<总线模型概述> 随着技术的发展,系统的拓扑结构也越来越复杂,对热插拔。跨平台移植性的要求越来越高,从Linux2.6内核开始提供全新的设备模型。将所有的驱动挂载到计算机的总线上(比如USB总线),当有设备连接到总线上的时候,总线能够感知到,这时系统就会把挂载到总线上是所有驱动和设备匹配。通过不同的 阅读全文
posted @ 2018-03-17 14:58
流浪的Coder
阅读(678)
评论(0)
推荐(0)
摘要:
《《字符设备驱动程序》》 《设备控制理论》 <作用> 大部分驱动除了对外部设备提供读和写的基本功能以外,还需要对设备进行控制。 <应用程序接口> 在用户空间使用ioctl()系统调用来控制设备。 函数原型: int ioctl (int fd,unsigned long cmd,........) 阅读全文
posted @ 2018-03-17 14:57
流浪的Coder
阅读(518)
评论(0)
推荐(0)
摘要:
全局描述符表GDT(Global Descriptor Table): (1)在整个系统中,全局描述符表(注意这里是表,表只有一张)GDT只有一张(一个处理器对应一个GDT)。 (2)GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄 阅读全文
posted @ 2018-03-17 14:57
流浪的Coder
阅读(330)
评论(0)
推荐(0)
摘要:
<作用介绍> linux 系统可以分为内核空间和用户空间,当用户空间的一个函数的实现既不是在C库,也不是自己实现,而是在内核空间,这就是系统调用 实现体是内核空间,使用者是用户空间。 <流程分析> 从用户空间,到内核空间,并找到函数执行体。 软中断: 当用户空间使用系统调用的时候就会触发软中断。当要 阅读全文
posted @ 2018-03-17 14:56
流浪的Coder
阅读(355)
评论(0)
推荐(0)
摘要:
《《混杂设备驱动模型》》 《混杂设设备的描述》 <混在设备的概念> 在linux系统中,存在一类字符设备,他们拥有相同的主设备号(10),但是次设备号不同,称这类设备为混在设备(missdevice),所有的混杂设备形成一个链表,对设备进行访问,根据次设备号在链表中查找相应的混杂设备。 注意:混杂设 阅读全文
posted @ 2018-03-17 14:56
流浪的Coder
阅读(1592)
评论(0)
推荐(0)
摘要:
《内核链表》 内核链表即,我么在一个链表中插入或删除一个数据,都需要自己编写代码,相当的麻烦,怎么解决这个问题呢,为了更加方便的解决这个问题,linux中就产生了内核链表,以后想要在链表中插入数据或删除数据时,只需要调用函数就可以了。 <链表对比> 链表是一种数据结构,他通过指针将一系列的数据节点连 阅读全文
posted @ 2018-03-17 14:55
流浪的Coder
阅读(441)
评论(0)
推荐(0)
摘要:
<linux 内存管理模型> 下面这个图将Linux内存管理基本上描述完了,但是显得有点复杂,接下来一部分一部分的解析。 内存管理系统可以分为两部分,分别是内核空间内存管理和用户空间内存管理: ————内存管理子系统的职责是:进程请求内存时分配可用内存,进程释放内存后回收内存,以及跟踪系统内存使用情 阅读全文
posted @ 2018-03-17 14:53
流浪的Coder
阅读(14085)
评论(1)
推荐(0)
摘要:
<网络知识> a:网络模型 OSI模型 TCP模型 虽然OSI模型看着挺完美的,但是过于复杂,这样就会导致不实用,在Linux系统中用的是TCP模型。每一层都是一种协议,系统对要发送的数据进行层层数据封装,就像洋葱层层刨去还原数据。 <Linux网络驱动特点> a:对于网络接口的常用文件操作(读,写 阅读全文
posted @ 2018-03-17 14:50
流浪的Coder
阅读(9670)
评论(0)
推荐(0)
摘要:
<作用> 电子设备中有很多IIC设备之间需要进行相互通信,这样就产生了IIC总线,常用来实现设备之间的数据通信。 <IIC总线结构> IIC总线只有两条线,一条是串行数据线(SDA),另外一条是串行时钟线(SCL). 注:每一个连接到总线上的设备都有一个唯一的地址可以访问(这一点有点像USB设备) 阅读全文
posted @ 2018-03-17 14:40
流浪的Coder
阅读(2009)
评论(0)
推荐(0)
摘要:
字符设备之混杂设备: 定义混杂设备: struct misdevice{ int minor; //为什么这里只有次设备号,因为混杂设备是一种在 /////////////////////////Linux系统默认主设备号为10 的特殊字符设备。 const char *name; const st 阅读全文
posted @ 2018-03-17 14:09
流浪的Coder
阅读(477)
评论(0)
推荐(0)
摘要:
<什么是中断> 计算停下当前处理任务,并保存现场,转而去处理其他是任务,当完成任务后再回到原来的任务中去。 <中断的分类> a:软中断 软中断时执行中断指令产生的,软中断不用施加中断请求信号,因此中断的产生的不是随机的而是由程序安排的。内核线程是实现软中断的助手。 b:硬中断 硬中断时由外部硬件产生 阅读全文
posted @ 2018-03-17 14:09
流浪的Coder
阅读(3591)
评论(0)
推荐(0)
摘要:
<背景> 在linux系统驱动程序中,因为要面临各种各样的硬件,字符设备,快设备,网络接口设备,USB设备,PCI设备,平台设备,混在设备 ,设备不同则所对应的驱动模型不同,这就导致我们要掌握众多的驱动模型,能从这些众多的驱动模型中找到共性,则是学号linux驱动的关键 <linux 驱动程序的编写 阅读全文
posted @ 2018-03-17 14:08
流浪的Coder
阅读(899)
评论(0)
推荐(0)
摘要:
<linux系统7大子系统> a:SCI(system call interface) ————用户程序通过软件中断后,调用系统内核提供的功能,这个在用户空间和内核提供的服务之间的接口称为系统调用。系统调用是Linux内核提供的,用户空间无法直接使用系统调用。在用户进程使用系统调用必须跨越应用程序和 阅读全文
posted @ 2018-03-17 14:07
流浪的Coder
阅读(1499)
评论(0)
推荐(0)
摘要:
<字符设备> 字符设备的上层没有磁盘文件系统,所以字符设备的file_operations成员函数就直接由字符设备驱动提供(一般字符设备都会实现相应的fops集),因此file_operations 也就成为了字符设备驱动的核心。 <块设备> 对于块设备而言,ext2,jiffs2,fat等文件系统 阅读全文
posted @ 2018-03-17 14:07
流浪的Coder
阅读(1236)
评论(0)
推荐(0)
摘要:
<背景> PCI设备有许多地址配置的寄存器,初始化时这寄存器来配置设备的总线地址,配置好后CPU就可以访问该设备的各项资源了。(提炼:配置总线地址) <配置寄存器> (1)256字节的PCI配置空间分为64字节的头标区和192字节的设备相关区两部分。头标区的各个寄存器用来唯一地识别设备;设备相关区则 阅读全文
posted @ 2018-03-17 14:07
流浪的Coder
阅读(4322)
评论(0)
推荐(0)
摘要:
<设备驱动模型> 注:几乎所有的设备结构体都包含"strcut kobject kobj"和"srtuct list_head list"该结构体。 struct kobject kobj: 该结构体用于构建Linux设备驱动模型的模型建立 struct list_head { struct lis 阅读全文
posted @ 2018-03-17 14:06
流浪的Coder
阅读(547)
评论(0)
推荐(0)
摘要:
Linux驱动框架分析(一) 事实上,Linux的设备驱动都遵循一个惯例——表征驱动程序(用driver更贴切一些,应该称为驱动器比较好吧)的结构体,结构体里面应该包含了驱动程序所需要的所有资源。用术语来说,就是这个驱动器对象所拥有的属性及成员。由于Linux的内核用c来编写,所以我们也按照这种结构 阅读全文
posted @ 2018-03-17 14:06
流浪的Coder
阅读(3035)
评论(0)
推荐(0)
摘要:
<背景> 内核线程类似于用户进程,通常用于并并发处理性质的任务,并且可以抢占调度。不同于用户进程,内核线程位于内核空间,并且可以访问内核函数和内核数据。 <创建内核线程> a:ret = kernel_thread(mythread,null,CLONE_FS | CLONE_FILES | CLO 阅读全文
posted @ 2018-03-17 14:05
流浪的Coder
阅读(1338)
评论(0)
推荐(0)
摘要:
<背景> 内存会以分页方式组织内存,而且每页大小和计算机体系结构有关系,Linux中每个页都有对应的struct page{} 与之对应。 <分配连续的内存> a:void *kmalloc(int count,int flags)函数用于从zone_normal区域返回连续内存的分配的地址。 参数 阅读全文
posted @ 2018-03-17 14:04
流浪的Coder
阅读(248)
评论(0)
推荐(0)
摘要:
《《混杂设备驱动模型》》 《混杂设设备的描述》 <混在设备的概念> 在linux系统中,存在一类字符设备,他们拥有相同的主设备号(10),但是次设备号不同,称这类设备为混在设备(missdevice),所有的混杂设备形成一个链表,对设备进行访问,根据次设备号在链表中查找相应的混杂设备。 注意:混杂设 阅读全文
posted @ 2018-03-17 14:03
流浪的Coder
阅读(1128)
评论(0)
推荐(0)
摘要:
mini2440的地址怎么分配。mini2440处理器的地址怎么分配。 S3C2440处理器可以使用的物理地址空间可以达到4GB,其中前1GB的地址为连接外设的地址空间。>1G的地址空间 分配给处理器的其他模块使用。 还有一部分为CPU内部使用的特殊功能寄存器地址空间(地址范围为0x4800 000 阅读全文
posted @ 2018-03-17 14:03
流浪的Coder
阅读(455)
评论(0)
推荐(0)
摘要:
全局描述符表GDT(Global Descriptor Table): (1)在整个系统中,全局描述符表(注意这里是表,表只有一张)GDT只有一张(一个处理器对应一个GDT)。 (2)GDT可以被放在内存的任何位置,但CPU必须知道GDT的入口,也就是基地址放在哪里,Intel的设计者门提供了一个寄 阅读全文
posted @ 2018-03-17 14:02
流浪的Coder
阅读(1583)
评论(0)
推荐(0)
摘要:
注意:为什么要进行C语言环境的初始化?在没有进行C语言环境的初始化之前的初始化工作都是用汇编进行初始化的。比如核心初始化,和内存初始化 栈:栈帧:一个进程中一般会有多个函数,每一个函数都需要在内存中开辟一个栈空间来使用,每一个函数所占用栈叫做栈帧。pclrspfp这四个数据。 栈帧之空间的界定:fp 阅读全文
posted @ 2018-03-17 14:01
流浪的Coder
阅读(3333)
评论(0)
推荐(0)
摘要:
<前言> 嵌入式开发是一个交叉开发的模式,需要将宿主机上的文件烧写到目标机上。 方式: JTAG USB 串口 网络 <tftp下载> 首先需要将宿主机架成一个TFTP的服务器,其次开发板需要具有从tftp服务下载数据的能力。一般可以用串口调试工具进行调试 <tftp交互过程> (1)客户机向服务器 阅读全文
posted @ 2018-03-17 14:00
流浪的Coder
阅读(1700)
评论(0)
推荐(0)
摘要:
当一个程序工作于不同的ARM工作模式下,程序处所能调用的ARM 指令是不一样的,可以访问的寄存器也是不一样的 ARM总共有7中不同的工作模式。 user 模式 usr 普通用户模式 0b10000 FIQ 模式 fiq 处理终端是以一种快速中断的模式 0b10001 IRQ 模式 irq 就是以一最 阅读全文
posted @ 2018-03-17 14:00
流浪的Coder
阅读(680)
评论(0)
推荐(0)
摘要:
电容的分类: DRAM:基本原件是电容,需要定时刷新,存储速度较慢 DRAM又分为:SRAM(同步动态随机存储器synchronous dynamic random access memory) DDR(双倍速率同步动态随机存储器double data rate sdram) DDR2(在ddr的基 阅读全文
posted @ 2018-03-17 13:58
流浪的Coder
阅读(1744)
评论(0)
推荐(0)
摘要:
<网络模型> OSI七层模型 特点:过于复杂 应用层——表示层——会话层——传输层——网络层——数据链路层——物理层 作用:数据传输的时候按照每层的协议对数据进行封装 Linux四层模型 特点:相对来说简单 (应用层/表示层/会话层) ———传输层———网络层————(数据链路层/物理层) 应用层— 阅读全文
posted @ 2018-03-17 13:58
流浪的Coder
阅读(334)
评论(0)
推荐(0)
摘要:
异常处理 总共有七中的异常情况: 1:reset 2:undefined instruct(不支持命令异常) 3:软件中断 4:指令预取失败异常 5:数据读取失败异常 6:中断 7:快速中断(比一般的中断处理速度快一些) 中断向量: 当中断发生时,处理器就会跳转到一个固定的地址去处理指令 .glob 阅读全文
posted @ 2018-03-17 13:58
流浪的Coder
阅读(235)
评论(0)
推荐(0)
摘要:
串口的功能: 一:数据传输 二:控制台,用于传送命令用于控制 串口通信格: 串行通信方式分为“异步通信方式”“同步通信方式” 通讯参数: 起始位:当电路空闲时,线路一直是高电平,所起始位位低,当检测到线路电平变为低电平是,表示将要传输数据。 数据位:表示一帧数据中将要传输有效数据。 奇偶校验位:用于 阅读全文
posted @ 2018-03-17 13:57
流浪的Coder
阅读(396)
评论(0)
推荐(0)
摘要:
GCC命令: 格式:gcc -[命令选项] 文件名(这里指需要编译的文件名) 一个C语言程序需要经过这几个过程才能进行一个可以执行的文件 例如hello.c这个源文件 Hello.c——> hello.i——>hello.s——>hello.o——>hello -E -S -C 将一个汇编文件编译成 阅读全文
posted @ 2018-03-17 13:56
流浪的Coder
阅读(3033)
评论(0)
推荐(0)
摘要:
驱动:编写任何设备的驱动程序,都需要对该设备的原理有一定了解和认识。对于外部设备的访问总是需要通过一个控制器来间接访问,对于这个控制器的控制程序称为驱动程序 Nandflash 原理: 一:角色分析 数据存储的物理介质 二:Nandflash 分类 根据不同的方式可以将Nandflash 分出不同的 阅读全文
posted @ 2018-03-17 13:55
流浪的Coder
阅读(519)
评论(0)
推荐(0)
摘要:
<触摸屏种类> 常见 电阻式触摸屏 电容式触摸屏 不常见 红外线技术触摸屏 表面声波触摸屏 适量压力传感触摸屏 <原理分析> 电阻式触摸屏 如图所示,在屏幕的上下和左右加上一个5V电压,将这个5V根据屏幕的长度分成不同的电压值,只要将屏幕的上下接触,就可以检测出该点是电压,然后除以总的电压5V就可以 阅读全文
posted @ 2018-03-17 13:55
流浪的Coder
阅读(193)
评论(0)
推荐(0)
摘要:
Linux拥有广泛的硬件支持,能够支持x86 ARM MIPS ALPHA PPOWERPC ,同时拥有广泛的驱动资源。 Linux内核高效稳定。Linux的内核设计相当精巧,分成进程调度,内存管理,进程间通信,虚拟文件系统和网络接口部分。 Linux的一些常用命令: mkdir:建立子目录 du: 阅读全文
posted @ 2018-03-17 13:54
流浪的Coder
阅读(228)
评论(0)
推荐(0)
摘要:
MMU(内存管理) 1:将程序中的虚拟地址映射到具体的物理地址,所谓虚拟地址,即为程序中的地址,对于不同的程序所使用的虚拟地址可能相同,但是通过mmu,可以将其映射到不同的物理地址,防止访问上的冲突。 2:控制访问的权限管理。 深入剖析地址转换 对于一个地址,假设为32位的虚拟地址: 31-20位索 阅读全文
posted @ 2018-03-17 13:54
流浪的Coder
阅读(683)
评论(0)
推荐(0)
摘要:
<LCD硬件体系结构> LCD控制器:位于ARM核内部,为LCD提供需要显示的数据,控制信息,控制时序 <LCD控制器结构> REGBANKK : 寄存器组,总共有17个寄存器 LCDCDMA:LCD 中的DMA模块,该模块位于LCD的控制器中,在嵌入式系统中是内存中 有一个内存区域叫做帧缓存区,告 阅读全文
posted @ 2018-03-17 13:53
流浪的Coder
阅读(683)
评论(0)
推荐(0)
摘要:
Linux中一切皆文件: 文件类型: 一般文件 - 目录文件 d 链接文件 l 块设备 b 字符设备 c soket s 管道文件 p linux 中目录结构: /bin 存放系统可以执行文件 有点类似于Windows中的那个Windows目录 /sbin 存放管理员(super user)用的可以 阅读全文
posted @ 2018-03-17 13:53
流浪的Coder
阅读(212)
评论(0)
推荐(0)
摘要:
中断的概念CPU在处理过程中,经常需要同外部设备进行交互,交互的方式由“轮询方式”“中断方式” 轮询方式: 方式:在同外设进行交互的过程中,CPU每隔一定的时间状态就去查询相关的状态位,所以在交互期间CPU几乎没有干任何事情,仅仅就是是 在一直等待查询,等待查询。 特点:不断查询设备状态,实现方式简 阅读全文
posted @ 2018-03-17 13:52
流浪的Coder
阅读(564)
评论(0)
推荐(0)
摘要:
<bootm作用> 为linux内核的启动准备条件 <bootloader作用总结> (1)初始化软/硬件(内存硬件/外部设备/堆栈) (2)启动操作系统 <uImagine和zImagine之间的关系> zImagine 是最纯粹的Linux内核 在zImagine之上加上一个信息头就成位了uIm 阅读全文
posted @ 2018-03-17 13:51
流浪的Coder
阅读(934)
评论(0)
推荐(0)
摘要:
DMA:如果将一串字符串通过串口传送到外设中去,用传统的方法,则CPU将不断的去扫描UTSTAT这个寄存器,在字符发送期间,CPU将不能做任何其他事情。为了解决这个问题,则在诞生了DMA CPU只需要告诉DMA控制器,目标地址和目的地址就行了,其他事情就直接交由DMA去完成。 DMA控制器控制:通道 阅读全文
posted @ 2018-03-17 13:51
流浪的Coder
阅读(1636)
评论(1)
推荐(0)
摘要:
文章具体介绍了关于ARM的22个常用概念。 1.ARM中一些常见英文缩写解释 MSB:最高有效位; LSB:最低有效位; AHB:先进的高性能总线; VPB:连接片内外设功能的VLSI外设总线; EMC:外部存储器控制器; MAM:存储器加速模块; VIC:向量中断控制器; SPI:全双工串行接口; 阅读全文
posted @ 2018-03-17 13:50
流浪的Coder
阅读(5253)
评论(0)
推荐(0)
摘要:
《ARP协议介绍》 <以太网通讯格式> 在计算机网络中,数据的发送就是将数据按照网络分层中的各层协议封装的过程,在这个过程中,最终要使用的协议是以太网协议(数据链路成协议) 分析: 目的MAC地址:接受者的物理地址(注意这里是物理地址,一个固化在网卡中的唯一地址, 而不是ip地址) 源MAC地址:发 阅读全文
posted @ 2018-03-17 13:50
流浪的Coder
阅读(246)
评论(0)
推荐(0)
摘要:
ARM相关知识: ARM核:A8,ARM11,ARM9 指令架构:ARMv7,ARMv6,ARMv4 ARM核分为两个阵营: 经典型:ARM7,ARM9,ARM11 Cortex: Cortex A:主要用于面向多媒体应用,如手机 Cortex R:主要用于面向实时的应用场合,可以有操作系统 Cor 阅读全文
posted @ 2018-03-17 13:49
流浪的Coder
阅读(253)
评论(0)
推荐(0)
摘要:
立即数寻址: 操作数本身就在指令中 例子:ADD R0,R0,#0X3F(注意:立即数需要在数据前面加上一个#号) 寄存器寻址: 利用寄存器中的数值作为操作数,数据存在寄存器中 例子:ADD R0,R1,R2 寄存器间接寻址: 数据存放在内存中,寄存其中存放的不是操作数本身,而是其在内存中的地址。通 阅读全文
posted @ 2018-03-17 13:49
流浪的Coder
阅读(708)
评论(0)
推荐(0)
摘要:
ARM 汇编程序的框架结构 .section .data <初始化的数据> .section.bss <未初始化的数据> .section .text .global _start _start: <汇编代码> 注意: 一般是将上面结构进行简化 .text .global _start _start 阅读全文
posted @ 2018-03-17 13:48
流浪的Coder
阅读(6168)
评论(0)
推荐(1)
摘要:
ARM总共有37个寄存器 ARM寄存器物理分类 通用寄存器:1:不分组寄存器(R0--R7) 2:分组寄存器(R8-R14) 3:程序计数器(R15)(注意:又名pc指针) 程序状态寄存器:1:CPSR 2:SPSR 应用分类:(有一部分是相同寄存器在不同状态下的不同功能) 31个通用寄存器: 未分 阅读全文
posted @ 2018-03-17 13:48
流浪的Coder
阅读(717)
评论(0)
推荐(0)
摘要:
查找文件位置 1:U-boot 有几千个文件,所以要通过makfile来查找文U -boot文件的入口。 2:查看芯片的配置文件smdk2440 3:在board目录里面的sumsing目录里面查找smdk2440目录里面存放的就是开发板相关的配置文件,其中最重要的是名字叫u-boot.lds的文件 阅读全文
posted @ 2018-03-17 13:47
流浪的Coder
阅读(258)
评论(0)
推荐(0)
摘要:
<什么是TS> TS(transport stream) , TS流文件,是一种DVD的文件格式,TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的,这种特性就决定了TS流文件主要用来实时传送的节目,比如实时广播的电视节目。与之相互对应的是PS(Program Stream),PS主要应 阅读全文
posted @ 2018-03-17 13:45
流浪的Coder
阅读(5814)
评论(0)
推荐(1)

浙公网安备 33010602011771号