- 博客(95)
- 资源 (80)
- 收藏
- 关注
转载 为什么子类中不能访问另一个包中父类中的protected方法?
http://blog.youkuaiyun.com/dawn_after_dark/article/details/74453915
2017-12-17 12:26:33
929
转载 CPU地址空间,IO端口和IO内存
1)物理地址:CPU地址总线传来的地址,由硬件 电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上(如显存、BIOS等)。在程序指令中的虚拟地址经过段映 射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。 物理地址空间,一部分给物理RAM(内存)用,一部分给总线用,这是由硬件设计来决定的,因此在32 bits地址线的x8
2016-12-11 16:23:59
6409
转载 Linux内核——伙伴系统跟slab缓存
Linux内核——伙伴系统和slab缓存 伙伴系统 使用场景:内核中很多时候要求分配连续页,为快速检测内存中的连续区域,内核采用了一种技术:伙伴系统。 原理:系统中的空闲内存总是两两分组,每组中的两个内存块称作伙伴。伙伴的分配可以是彼此独立的。但如果两个小伙伴都是空闲的,内核将其合并为一个更大的内存块,作为下一层次上某个内存块的伙伴。如下图给出了一对伙伴,
2016-12-07 10:06:53
796
转载 dentry与inode、dentry_cache
一、dentry的定义 dentry的中文名称是目录项,是Linux文件系统中某个索引节点(inode)的链接。这个索引节点可以是文件,也可以是目录。 二、dentry的结构:以下是dentry的结构体 struct dentry { atomic_t d_count; 目录项对象使用计数器 unsigned int d_flags; 目录项标志 struct
2016-12-05 10:21:56
718
转载 linux 文件描述符表 打开文件表 inode vnode
在Linux中,进程是通过文件描述符(file descriptors,简称fd)而不是文件名来访问文件的,文件描述符实际上是一个整数。Linux中规定每个进程能最多能同时使用NR_OPEN个文件描述符,这个值在fs.h中定义,为1024*1024(2.0版中仅定义为256)。每个文件都有一个32位的数字来表示下一个读写的字节位置,这个数字叫做文件位置。每次打开一个文件,除非明确要求,
2016-12-04 21:28:56
603
转载 文件描述符、文件描述符表、打开文件表、目录项、索引节点之间的联系
文件描述符、文件描述符表、打开文件表、目录项、索引节点之间的联系如下图所示: 每个进程在PCB(Process Control Block)中都保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针,已打开的文件在内核中用file结构体表示,文件描述符表中的指针指向file结构体。 在file结构体中维护File Status
2016-12-04 20:10:51
6721
1
转载 以太网协议以及常用帧格式
为了以后找到更方便,先保存这个链接http://blog.sina.com.cn/s/blog_603e4a3c0101mh4q.html
2016-11-28 22:45:06
762
1
转载 什么是ARP,它有什么作用
ARP协议 Address Resolution Protocol 地址解析协议 在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧
2016-11-28 22:43:03
14960
转载 Linux下静态链接库与动态链接库的区别
Linux下静态链接库与动态链接库的区别引言 通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件 (executable file)。程序 在运行 时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下。所以这些函数库被成为静态库(static
2016-10-14 10:29:46
258
转载 Linux-2.6.20的LCD驱动分析
一、让LCD显示可爱的小企鹅还是先说说环境吧,处理器为S3C2410,linux的版本当然是2.6.20的。下面先说说怎样让LCD上显示出可爱的小企鹅。最直接的步骤如下(记住不要问为什么哈~_~,一步一步跟着走就行了):1. 添加s3c2410处理器的LCD控制寄存器的初始值,具体做法为在文件arch/arm/mach-s3c2410/mach-smdk2410.c中添加str
2016-10-07 11:08:18
341
转载 stm32 驱动 TFT LCD
LCD/LCM的基本概念 液晶显示器(Liquid Crystal Display: LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。它包括了TFT,OLED,UFB,TFD,STN等类型的液晶显示屏. LCM(LCD Module)即LCD显示模组、液晶模块,是指
2016-10-07 10:12:33
14793
1
转载 Linux LCD驱动(三)--图形显示
3. BMP和JPEG图形显示程序3.1 在LCD上显示BMP或JPEG图片的主流程图首先,在程序开始前。要在nfs/dev目录下创建LCD的设备结点,设备名fb0,设备类型为字符设备,主设备号为29,次设备号为0。命令如下:mknod fb0 c 29 0在LCD上显示图象的主流程图如图3.1所示。程序一开始要调用open函数打开设备,然后调用ioctl获取设备相关信息,接下
2016-10-07 10:10:56
807
转载 linux LCD驱动(二)--FrameBuffer
2. Linux 驱动2.1 FrameBufferLinux是工作在保护模式下,所以用户态进程是无法像DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Lin仿显卡的功能,将显ux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。Framebuffer机制模卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer
2016-10-07 10:09:16
312
转载 linux LCD驱动(一)--硬件
一 实验内容简要描述1.实验目的学会驱动程序的编写方法,配置S3C2410的LCD驱动,以及在LCD屏上显示包括bmp和jpeg两种格式的图片2.实验内容 (1)分析S3c2410实验箱LCD以及LCD控制器的硬件原理,据此找出相应的硬件设置参数,参考xcale实验箱关于lcd的设置,完成s3c2410实验箱LCD的设置 (2)在LCD
2016-10-07 10:08:01
345
转载 Linux驱动调试
驱动程序开发的一个重大难点就是不易调试。本文目的就是介绍驱动开发中常用的几种直接和间接的调试手段,它们是:利用printk查看OOP消息利用strace利用内核内置的hacking选项利用ioctl方法利用/proc 文件系统使用kgdb一、利用printk这是驱动开发中最朴实无华,同时也是最常用和有效的手段。scull驱动的main.c第338行如下,就是使用printk
2016-09-28 17:13:03
3024
转载 C语言中冒泡法、选择法、插入法三种常见排序算法
一、冒泡法 算法要求:用起泡法对10个整数按升序排序。 算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。 算法源代码:# include main()
2016-09-23 21:26:08
9795
3
原创 (十一)1 简单的看门狗驱动
来个简单的看门狗驱动——静态平台类的杂设备看门狗驱动,有定时和重启两个基本功能。一、S3C2440中的看门狗——具体请看s3c2440文档看门狗应该可以算是S3C2440中最简单的一个设备的,仅仅只有三个寄存器需要配置。S3C2440中的看门狗有两种功能(只能二选一):1、复位功能,在指定时间内,如果没有执行喂狗操作。指定时间到达后会执行系统重启操作
2016-09-21 11:32:21
1038
原创 (十)1 udev&misc
一、动态创建设备节点——udev之前加载字符型设备后是通过命令mknod来创建设备节点的。在2.6内核中,有一个名叫udev的后台程序,它通过读取/sys/class的信息,一旦添加的新的设备,该后台程序就会自动创建设备节点。一、要使用动态创建设备节点,首先要运行udev后台程序。在嵌入式下有两种方法:1、移植udev到嵌入式系统
2016-09-21 11:28:26
293
原创 (九)1 platform设备驱动
一、什么是paltform总线一个现实的linux设备和驱动通常都需要挂接在一种总线上,比较常见的总线有USB、PCI总线等。但是,在嵌入式系统里面,SoC系统中集成的独立的外设控制器、挂接在SoC内存空间的外设却不依附与此类总线。基于这样的背景下,2.6内核加入了platform虚拟总线。platform机制将设备本身的资源注册进内核,有内核统一管理,在驱动程序使用这些资源时
2016-09-21 11:26:37
298
原创 (八)4.总线热插拔
一、热插拔的实现我不知道在这里用热插拔这样的名字是否合适,在之前的代码,需要我自己手动去加载驱动和设备的模块,但在现实的情况下,一般是当设备一被插入,系统自己会注册设备,并调用合适的驱动。所以,接下来我要实现的是,在加载了usb总线和usb鼠标驱动的前提下,当有usb鼠标插入,系统自己进行设备的操作。当然,上面的usb鼠标是我自己想象出来的,当我一按下按键(对应中断E_
2016-09-21 11:24:25
10363
原创 (八) 3 设备模型的分层与面向对象
一、设备管理的分层回想一下之前的设备和驱动函数注册时,它们是自己指定所属的总线。但是,内核开发人员觉得,这样的方法不好,应该由总线来提供设备和驱动的注册函数。当设备和驱动需要注册到指定总线时,那就必须使用该总线为设备和驱动提供的注册函数。所以,将上一节的bus.c修改如下:/*8th_devModule_3/1st/bus.c*/21 /*总
2016-09-21 11:22:46
280
原创 (八)2 match.probe.remove
一、总线、设备和驱动函数在/sys/中的框架首先要写三个函数,bus.c、device.c和driver.c。这几个函数其实就是上一节函数的精简版,去掉属性文件的创建,仅仅保留创建和注销操作。第一个函数是bus.c,加载模块会创建了一条名叫usb的总线,总线目录放在/sys/bus/目录下:/*8th_devModule_2/1st/bus.c*/6 s
2016-09-21 11:20:56
323
原创 (八)1 总线、设备和驱动
一、sysfs文件系统设备模型是2.6内核新引入的特征。设备模型提供了一个独立的机制专门来表示设备,并描述其在系统中的拓扑结构。在2.4内核中,设备的信息放在/proc中。而在2.6内核,内核把设备相关的信息归类在新增加sysfs文件系统,并将它挂载到/sys目录中,把设备信息归类的同时,让用户可以通过用户空间访问。接下来简单介绍一些sys中
2016-09-21 11:18:44
312
原创 (七)2 内核定时器
一、定时器之前说过两类跟时间相关的内核结构。1、延时:通过忙等待或者睡眠机制实现延时。2、tasklet和工作队列,通过某种机制使工作推后执行,但不知道执行的具体时间。接下来要介绍的定时器,能够使工作在指定的时间点上执行,而且不需要使用忙等待这类的延时方法。通过定义一个定时器,告之内核在哪个时间需要执行什么函数就可以了,等时间一到,内核会就执行指定的函数
2016-09-21 11:16:01
176
原创 (七)1 时间管理与内核延时
一、内核时间的相关概念墙上时钟:也就是实际时间。系统时间:自系统启动开始所经过的时间。时钟中断:内核会周期性的产生时钟中断,在中断处理函数中执行一些与时间相关的操作,如更新时间,进程调度,检查时间片等。节拍率:在linux内核中,通过编程定义节拍率,也就是HZ。每1/HZ秒发生一次时钟中断。在ARM中,节拍率被定义为1
2016-09-21 11:12:59
308
原创 (六)3中断下半部之工作队列
1、工作队列的使用按惯例,在介绍工作队列如何实现之前,先说说如何使用工作队列实现下半部。步骤一、定义并初始化工作队列:创建工作队列函数:struct workqueue_struct *create_workqueue(const char *name)函数传参是内核中工作队列的名称,返回值是workqueue_struc
2016-09-21 11:10:49
295
原创 (六)3中断下半部之tasklet
一、什么是下半部中断是一个很霸道的东西,处理器一旦接收到中断,就会打断正在执行的代码,调用中断处理函数。如果在中断处理函数中没有禁止中断,该中断处理函数执行过程中仍有可能被其他中断打断。出于这样的原因,大家都希望中断处理函数执行得越快越好。另外,中断上下文中不能阻塞,这也限制了中断上下文中能干的事。基于上面的原因,内核将整个的中断处理流程分为了上半部和下半部。上
2016-09-21 11:08:23
281
原创 (六)2 分享中断号
上一节介绍的内容是,调用接口request_irq(),使中断号与中断处理函数对应。但是,有时候会有这样的情况,如果开发板上按键的中断已经被另外的驱动程序注册中断了,而我现在又想再注册一次这个中断,这就出现了一个中断号不止对应一个中断函数的情况。注意,这里与硬件上的共享中断不一样,这里是指,当一个中断信号来了,基于操作系统,一个中断的到来可以调用多个中断处理程序,与硬件无关。接下来从错误的
2016-09-20 19:50:16
326
原创 (六)1 中断的实现
一、什么是中断中断分两种:1)中断,又叫外部中断或异步中断,它的产生是由于外设向处理器发出中断请求。其中外部中断也有两种,这是由配置寄存器设定的:普通中断请求(IRQ)和快速中断请求(FIQ)。一般地,linux下很少使用快速中断请求。2)异常,又叫内部中断或同步中断,它的产生是由于处理器执行指令出错。在以下的内容我是要介绍由于外部设备产生的中断。
2016-09-20 19:46:17
807
原创 (五)4 写个简单的LED驱动
一、实现硬件操作函数一般的,我写驱动的时候,我会先确定一些基本的硬件操作函数能够使用。如LED驱动我要实现三个操作:配置、开灯和关灯,所以我先要实现这几个硬件操作函数。其实这些在我介绍IO内存时已经实现了(5th_mm_2/3rd/test.c),我只是稍作了一点修改,改了一下内存的数据类型,其实没什么大出入。/*5th_mm_4/1st/test.c*/
2016-09-20 19:43:59
1195
原创 (五)3 IO静态映射
一、静态IO是怎么建立的Io静态映射发生在内核启动的时候,接下来通过内核源代码来分析,如果你的开发板是mini2440或者时候mini2440的内核配置文件,可以跟着我同样修改。注意:我的开发板只是使用mini2440的配置文件,外围电路跟mini2440不一样。注:以下代码在内核目录linux-2.6.29/arch/arm/mach-s3c2440/ma
2016-09-20 19:41:40
449
原创 (五)2 操作硬件——IO内存
一、IO端口与IO内存介绍之前可以看看以下的博客:http://blogold.chinaunix.net/u2/66435/showart_2137870.htmlx86体系和ARM体系的寻址方式是有差别的:在x86下,为了能够满足CPU高速地运行,内存与CPU之间通过北桥相连并通过地址方式访问,而外设通过南桥与CPU相连并通过端口访问。在
2016-09-20 19:39:40
413
原创 (五)1在内核空间分配内存
一、内核空间和用户空间有什么不同学c语言的时候应该学过,从用户空间看,每个进程都傻乎乎的以为自己有4G的内存空间,其中位于高地址(3G-4G)的1G空间给内核用,另外的3G(0-3G)都是它一个人独占的。所以用户空间很慷慨的把3G的空间分了好几个区域,如堆、栈、代码段等。其中,malloc()分配的空间位于堆,而程序中的自动变量,如你在函数内定义的“int i”,它是放在栈
2016-09-20 19:37:26
528
原创 (四)5多处理器下的竞态和并发
一、多处理器抢占式内核的内核同步需要防什么1)防内核抢占。2)防中断打断。3)防其他处理器也来插一脚。所以,在上一节讲的防抢占和防中断,接下来的内容实在这两个的基础上说一下如何防其他处理器。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2016-09-20 19:34:01
420
原创 (四)4单CPU下竞态和并发
一、什么是并发所谓并发,就是多个进程同时、并行执行。在单处理器的情况下,并发只是宏观上的,用户会感觉多个程序共同执行,其实只不过是多个进程轮流占用处理器运行,只有在多处理器的情况下才会实现真正的同时执行。但是,不管单处理器还是多处理器,内核中的并发都会引起共享资源的并发访问。举个简单的例子,有两个相同代码的进程并发执行,它们都是要修改存在与内核中个一个数据data。
2016-09-20 19:30:46
735
原创 (四)3抢占和上下文切换
一、什么是上下文切换上下文切换,是指从一个可执行的进程切换到另外一个可执行的进程。在linux内核中,上下文的切换有两种方式:第一种是进程主动让出CPU,这样的操作成为“让步”。第二种是由内核调度程序决定进程运行时间,在在运行时间结束(如时间片耗尽)或者需要切换高优先级进程时强制挂起进程,这样的操作叫“抢占”。抢占是我一直误解的概念,我一直以为抢占是一个进程强制切换到另
2016-09-20 19:28:51
608
原创 (四)2进程调度的相关概念
一、I/O消耗型进程和处理器消耗型的进程进程分为I/O消耗型和处理器消耗型两种。I/O消耗型,是指进程大部分时间用来提交I/O请求或者等待I/O请求的进程。这类进程的特征是,经常需要运行,但执行一次需要的时间不长。如文字编辑。处理器消耗型,是指进程大部分时间用来执行代码的进程。这类进程对系统的响应时间要求比较少,像看个视频,慢个半秒人是察觉不出来的。
2016-09-20 19:27:14
300
原创 (四)1进程管理的相关概念
一、什么是进程简单的说,进程就是正在运行的程序,一个程序可以同时有多个进程。学过C语言都知道,程序运行时并不是只有代码,还包含其他的资源,如打开的文件,信号,全局变量等等。我在《操作系统原理》中看过一个很生动很深刻的例子:一个人对照着菜谱做菜。在这例子中,人就是内核,菜谱就是程序,做菜的过程就是进程,而菜、锅就是这个进程的资源。内核为线程提供了两种技术:虚拟处理器和虚拟
2016-09-20 19:25:53
261
原创 (三)7异步通知fasync
一、什么是异步通知个人认为,异步通知类似于中断的机制,如下面的将要举例的程序,当设备可写时,设备驱动函数发送一个信号给内核,告知内核有数据可读,在条件不满足之前,并不会造成阻塞。而不像之前学的阻塞型IO和poll,它们是调用函数进去检查,条件不满足时还会造成阻塞。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2016-09-20 19:23:51
285
原创 (三)6 poll和sellct
一、系统调用select的简介简单来说,select这个系统调用的作用就是在应用层调用驱动函数中的poll来检测指定的文件的状态(读、写和异常)。如果某个状态满足,select函数调用成功后返回,应用程序就可以通过指定的函数来判断现在的文件状态。注意的是:select可以指定判断的时间,指定时间内,应用程序会阻塞在select函数,直到状态满足或者超时。xx
2016-09-20 19:22:03
399
Detection and Identification of Cyclostationary Signals
2016-03-30
糗百桌面版
2016-05-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人