自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 资源 (80)
  • 收藏
  • 关注

转载 为什么子类中不能访问另一个包中父类中的protected方法?

http://blog.csdn.net/dawn_after_dark/article/details/74453915

2017-12-17 12:26:33 874

转载 CPU地址空间,IO端口和IO内存

1)物理地址:CPU地址总线传来的地址,由硬件 电路控制其具体含义。物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上(如显存、BIOS等)。在程序指令中的虚拟地址经过段映 射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。        物理地址空间,一部分给物理RAM(内存)用,一部分给总线用,这是由硬件设计来决定的,因此在32 bits地址线的x8

2016-12-11 16:23:59 6024

转载 Linux内核——伙伴系统跟slab缓存

Linux内核——伙伴系统和slab缓存    伙伴系统    使用场景:内核中很多时候要求分配连续页,为快速检测内存中的连续区域,内核采用了一种技术:伙伴系统。    原理:系统中的空闲内存总是两两分组,每组中的两个内存块称作伙伴。伙伴的分配可以是彼此独立的。但如果两个小伙伴都是空闲的,内核将其合并为一个更大的内存块,作为下一层次上某个内存块的伙伴。如下图给出了一对伙伴,

2016-12-07 10:06:53 736

转载 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 662

转载 linux 文件描述符表 打开文件表 inode vnode

在Linux中,进程是通过文件描述符(file descriptors,简称fd)而不是文件名来访问文件的,文件描述符实际上是一个整数。Linux中规定每个进程能最多能同时使用NR_OPEN个文件描述符,这个值在fs.h中定义,为1024*1024(2.0版中仅定义为256)。每个文件都有一个32位的数字来表示下一个读写的字节位置,这个数字叫做文件位置。每次打开一个文件,除非明确要求,

2016-12-04 21:28:56 548

转载 文件描述符、文件描述符表、打开文件表、目录项、索引节点之间的联系

文件描述符、文件描述符表、打开文件表、目录项、索引节点之间的联系如下图所示:    每个进程在PCB(Process Control Block)中都保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针,已打开的文件在内核中用file结构体表示,文件描述符表中的指针指向file结构体。    在file结构体中维护File Status

2016-12-04 20:10:51 6548 1

转载 以太网协议以及常用帧格式

为了以后找到更方便,先保存这个链接http://blog.sina.com.cn/s/blog_603e4a3c0101mh4q.html

2016-11-28 22:45:06 707 1

转载 什么是ARP,它有什么作用

ARP协议      Address Resolution Protocol      地址解析协议 在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧

2016-11-28 22:43:03 14342

转载 Linux下静态链接库与动态链接库的区别

Linux下静态链接库与动态链接库的区别引言 通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件 (executable file)。程序 在运行 时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下。所以这些函数库被成为静态库(static

2016-10-14 10:29:46 220

转载 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 307

转载 stm32 驱动 TFT LCD

LCD/LCM的基本概念    液晶显示器(Liquid Crystal Display: LCD)的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。它包括了TFT,OLED,UFB,TFD,STN等类型的液晶显示屏.     LCM(LCD Module)即LCD显示模组、液晶模块,是指

2016-10-07 10:12:33 14424 2

转载 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 734

转载 linux LCD驱动(二)--FrameBuffer

2.  Linux 驱动2.1  FrameBufferLinux是工作在保护模式下,所以用户态进程是无法像DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Lin仿显卡的功能,将显ux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。Framebuffer机制模卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer

2016-10-07 10:09:16 273

转载 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 308

转载 Linux驱动调试

驱动程序开发的一个重大难点就是不易调试。本文目的就是介绍驱动开发中常用的几种直接和间接的调试手段,它们是:利用printk查看OOP消息利用strace利用内核内置的hacking选项利用ioctl方法利用/proc 文件系统使用kgdb一、利用printk这是驱动开发中最朴实无华,同时也是最常用和有效的手段。scull驱动的main.c第338行如下,就是使用printk

2016-09-28 17:13:03 2525

转载 C语言中冒泡法、选择法、插入法三种常见排序算法

一、冒泡法 算法要求:用起泡法对10个整数按升序排序。    算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。    算法源代码:# include main()

2016-09-23 21:26:08 9588 3

原创 (十一)1 简单的看门狗驱动

来个简单的看门狗驱动——静态平台类的杂设备看门狗驱动,有定时和重启两个基本功能。一、S3C2440中的看门狗——具体请看s3c2440文档看门狗应该可以算是S3C2440中最简单的一个设备的,仅仅只有三个寄存器需要配置。S3C2440中的看门狗有两种功能(只能二选一):1、复位功能,在指定时间内,如果没有执行喂狗操作。指定时间到达后会执行系统重启操作

2016-09-21 11:32:21 970

原创 (十)1 udev&misc

一、动态创建设备节点——udev之前加载字符型设备后是通过命令mknod来创建设备节点的。在2.6内核中,有一个名叫udev的后台程序,它通过读取/sys/class的信息,一旦添加的新的设备,该后台程序就会自动创建设备节点。一、要使用动态创建设备节点,首先要运行udev后台程序。在嵌入式下有两种方法:1、移植udev到嵌入式系统

2016-09-21 11:28:26 263

原创 (九)1 platform设备驱动

一、什么是paltform总线一个现实的linux设备和驱动通常都需要挂接在一种总线上,比较常见的总线有USB、PCI总线等。但是,在嵌入式系统里面,SoC系统中集成的独立的外设控制器、挂接在SoC内存空间的外设却不依附与此类总线。基于这样的背景下,2.6内核加入了platform虚拟总线。platform机制将设备本身的资源注册进内核,有内核统一管理,在驱动程序使用这些资源时

2016-09-21 11:26:37 262

原创 (八)4.总线热插拔

一、热插拔的实现我不知道在这里用热插拔这样的名字是否合适,在之前的代码,需要我自己手动去加载驱动和设备的模块,但在现实的情况下,一般是当设备一被插入,系统自己会注册设备,并调用合适的驱动。所以,接下来我要实现的是,在加载了usb总线和usb鼠标驱动的前提下,当有usb鼠标插入,系统自己进行设备的操作。当然,上面的usb鼠标是我自己想象出来的,当我一按下按键(对应中断E_

2016-09-21 11:24:25 9007

原创 (八) 3 设备模型的分层与面向对象

一、设备管理的分层回想一下之前的设备和驱动函数注册时,它们是自己指定所属的总线。但是,内核开发人员觉得,这样的方法不好,应该由总线来提供设备和驱动的注册函数。当设备和驱动需要注册到指定总线时,那就必须使用该总线为设备和驱动提供的注册函数。所以,将上一节的bus.c修改如下:/*8th_devModule_3/1st/bus.c*/21 /*总

2016-09-21 11:22:46 248

原创 (八)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 291

原创 (八)1 总线、设备和驱动

一、sysfs文件系统设备模型是2.6内核新引入的特征。设备模型提供了一个独立的机制专门来表示设备,并描述其在系统中的拓扑结构。在2.4内核中,设备的信息放在/proc中。而在2.6内核,内核把设备相关的信息归类在新增加sysfs文件系统,并将它挂载到/sys目录中,把设备信息归类的同时,让用户可以通过用户空间访问。接下来简单介绍一些sys中

2016-09-21 11:18:44 266

原创 (七)2 内核定时器

一、定时器之前说过两类跟时间相关的内核结构。1、延时:通过忙等待或者睡眠机制实现延时。2、tasklet和工作队列,通过某种机制使工作推后执行,但不知道执行的具体时间。接下来要介绍的定时器,能够使工作在指定的时间点上执行,而且不需要使用忙等待这类的延时方法。通过定义一个定时器,告之内核在哪个时间需要执行什么函数就可以了,等时间一到,内核会就执行指定的函数

2016-09-21 11:16:01 154

原创 (七)1 时间管理与内核延时

一、内核时间的相关概念墙上时钟:也就是实际时间。系统时间:自系统启动开始所经过的时间。时钟中断:内核会周期性的产生时钟中断,在中断处理函数中执行一些与时间相关的操作,如更新时间,进程调度,检查时间片等。节拍率:在linux内核中,通过编程定义节拍率,也就是HZ。每1/HZ秒发生一次时钟中断。在ARM中,节拍率被定义为1

2016-09-21 11:12:59 267

原创 (六)3中断下半部之工作队列

1、工作队列的使用按惯例,在介绍工作队列如何实现之前,先说说如何使用工作队列实现下半部。步骤一、定义并初始化工作队列:创建工作队列函数:struct workqueue_struct *create_workqueue(const char *name)函数传参是内核中工作队列的名称,返回值是workqueue_struc

2016-09-21 11:10:49 245

原创 (六)3中断下半部之tasklet

一、什么是下半部中断是一个很霸道的东西,处理器一旦接收到中断,就会打断正在执行的代码,调用中断处理函数。如果在中断处理函数中没有禁止中断,该中断处理函数执行过程中仍有可能被其他中断打断。出于这样的原因,大家都希望中断处理函数执行得越快越好。另外,中断上下文中不能阻塞,这也限制了中断上下文中能干的事。基于上面的原因,内核将整个的中断处理流程分为了上半部和下半部。上

2016-09-21 11:08:23 240

原创 (六)2 分享中断号

上一节介绍的内容是,调用接口request_irq(),使中断号与中断处理函数对应。但是,有时候会有这样的情况,如果开发板上按键的中断已经被另外的驱动程序注册中断了,而我现在又想再注册一次这个中断,这就出现了一个中断号不止对应一个中断函数的情况。注意,这里与硬件上的共享中断不一样,这里是指,当一个中断信号来了,基于操作系统,一个中断的到来可以调用多个中断处理程序,与硬件无关。接下来从错误的

2016-09-20 19:50:16 286

原创 (六)1 中断的实现

一、什么是中断中断分两种:1)中断,又叫外部中断或异步中断,它的产生是由于外设向处理器发出中断请求。其中外部中断也有两种,这是由配置寄存器设定的:普通中断请求(IRQ)和快速中断请求(FIQ)。一般地,linux下很少使用快速中断请求。2)异常,又叫内部中断或同步中断,它的产生是由于处理器执行指令出错。在以下的内容我是要介绍由于外部设备产生的中断。

2016-09-20 19:46:17 713

原创 (五)4 写个简单的LED驱动

一、实现硬件操作函数一般的,我写驱动的时候,我会先确定一些基本的硬件操作函数能够使用。如LED驱动我要实现三个操作:配置、开灯和关灯,所以我先要实现这几个硬件操作函数。其实这些在我介绍IO内存时已经实现了(5th_mm_2/3rd/test.c),我只是稍作了一点修改,改了一下内存的数据类型,其实没什么大出入。/*5th_mm_4/1st/test.c*/

2016-09-20 19:43:59 1150

原创 (五)3 IO静态映射

一、静态IO是怎么建立的Io静态映射发生在内核启动的时候,接下来通过内核源代码来分析,如果你的开发板是mini2440或者时候mini2440的内核配置文件,可以跟着我同样修改。注意:我的开发板只是使用mini2440的配置文件,外围电路跟mini2440不一样。注:以下代码在内核目录linux-2.6.29/arch/arm/mach-s3c2440/ma

2016-09-20 19:41:40 410

原创 (五)2 操作硬件——IO内存

一、IO端口与IO内存介绍之前可以看看以下的博客:http://blogold.chinaunix.net/u2/66435/showart_2137870.htmlx86体系和ARM体系的寻址方式是有差别的:在x86下,为了能够满足CPU高速地运行,内存与CPU之间通过北桥相连并通过地址方式访问,而外设通过南桥与CPU相连并通过端口访问。在

2016-09-20 19:39:40 284

原创 (五)1在内核空间分配内存

一、内核空间和用户空间有什么不同学c语言的时候应该学过,从用户空间看,每个进程都傻乎乎的以为自己有4G的内存空间,其中位于高地址(3G-4G)的1G空间给内核用,另外的3G(0-3G)都是它一个人独占的。所以用户空间很慷慨的把3G的空间分了好几个区域,如堆、栈、代码段等。其中,malloc()分配的空间位于堆,而程序中的自动变量,如你在函数内定义的“int i”,它是放在栈

2016-09-20 19:37:26 484

原创 (四)5多处理器下的竞态和并发

一、多处理器抢占式内核的内核同步需要防什么1)防内核抢占。2)防中断打断。3)防其他处理器也来插一脚。所以,在上一节讲的防抢占和防中断,接下来的内容实在这两个的基础上说一下如何防其他处理器。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2016-09-20 19:34:01 383

原创 (四)4单CPU下竞态和并发

一、什么是并发所谓并发,就是多个进程同时、并行执行。在单处理器的情况下,并发只是宏观上的,用户会感觉多个程序共同执行,其实只不过是多个进程轮流占用处理器运行,只有在多处理器的情况下才会实现真正的同时执行。但是,不管单处理器还是多处理器,内核中的并发都会引起共享资源的并发访问。举个简单的例子,有两个相同代码的进程并发执行,它们都是要修改存在与内核中个一个数据data。

2016-09-20 19:30:46 652

原创 (四)3抢占和上下文切换

一、什么是上下文切换上下文切换,是指从一个可执行的进程切换到另外一个可执行的进程。在linux内核中,上下文的切换有两种方式:第一种是进程主动让出CPU,这样的操作成为“让步”。第二种是由内核调度程序决定进程运行时间,在在运行时间结束(如时间片耗尽)或者需要切换高优先级进程时强制挂起进程,这样的操作叫“抢占”。抢占是我一直误解的概念,我一直以为抢占是一个进程强制切换到另

2016-09-20 19:28:51 563

原创 (四)2进程调度的相关概念

一、I/O消耗型进程和处理器消耗型的进程进程分为I/O消耗型和处理器消耗型两种。I/O消耗型,是指进程大部分时间用来提交I/O请求或者等待I/O请求的进程。这类进程的特征是,经常需要运行,但执行一次需要的时间不长。如文字编辑。处理器消耗型,是指进程大部分时间用来执行代码的进程。这类进程对系统的响应时间要求比较少,像看个视频,慢个半秒人是察觉不出来的。

2016-09-20 19:27:14 257

原创 (四)1进程管理的相关概念

一、什么是进程简单的说,进程就是正在运行的程序,一个程序可以同时有多个进程。学过C语言都知道,程序运行时并不是只有代码,还包含其他的资源,如打开的文件,信号,全局变量等等。我在《操作系统原理》中看过一个很生动很深刻的例子:一个人对照着菜谱做菜。在这例子中,人就是内核,菜谱就是程序,做菜的过程就是进程,而菜、锅就是这个进程的资源。内核为线程提供了两种技术:虚拟处理器和虚拟

2016-09-20 19:25:53 229

原创 (三)7异步通知fasync

一、什么是异步通知个人认为,异步通知类似于中断的机制,如下面的将要举例的程序,当设备可写时,设备驱动函数发送一个信号给内核,告知内核有数据可读,在条件不满足之前,并不会造成阻塞。而不像之前学的阻塞型IO和poll,它们是调用函数进去检查,条件不满足时还会造成阻塞。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2016-09-20 19:23:51 256

原创 (三)6 poll和sellct

一、系统调用select的简介简单来说,select这个系统调用的作用就是在应用层调用驱动函数中的poll来检测指定的文件的状态(读、写和异常)。如果某个状态满足,select函数调用成功后返回,应用程序就可以通过指定的函数来判断现在的文件状态。注意的是:select可以指定判断的时间,指定时间内,应用程序会阻塞在select函数,直到状态满足或者超时。xx

2016-09-20 19:22:03 367

Detection and Identification of Cyclostationary Signals

这是一份bpsk循环谱的文件,这里介绍了FAM和SSCA两种算法 文章后面有代码 自己拷贝

2016-03-30

25_继承的由来 和 继承的访问控制权限_2 video

25_继承的由来 和 继承的访问控制权限_2 javase视频文件

2016-03-28

23_static(2) video

23_static(2) javase 视频文件

2016-03-28

22_static video

22_static javase 视频文件

2016-03-28

27_Java为什么没有多继承

27_Java为什么没有多继承 javase video file

2016-03-28

26_面向对象的继承反映

26_面向对象的继承反映 javase video file

2016-03-28

24_继承的由来 和 继承的访问控制权限 video

24_继承的由来 和 继承的访问控制权限 javase video file

2016-03-28

C++ Sort summary

c++中所有的排序算法,包含选择,插入,冒泡,希尔,归并,快速等排序算法,可以用txt文件打开,没装C++编辑器也可以打开

2016-03-27

BPSk循环谱

matlab 文件 bpsk产生循环谱

2016-03-26

18_构造函数 视频

18_构造函数 视频文件(javase)

2016-03-24

17_函数的重载

17_函数的重载 视频文件(javase)

2016-03-24

14_构造函数 视频

14_构造函数 视频文件(javase)

2016-03-24

C++初级到精髓3本书

C++初级到精髓3本书 下载下来保留着 等忘记了的时候看看

2016-03-24

20_static 视频

20_static. 视频文件(javase)

2016-03-24

19_this 视频

19_this 视频文件(javase)

2016-03-24

16_复习 视频

16_复习 视频文件(javase)

2016-03-24

15_UltraEdit的使用 视频

15_UltraEdit的使用 视频文件(javase)

2016-03-24

13_访问控制符_2 视频

13_访问控制符_2 视频文件(javase)

2016-03-24

12_访问控制符_1 视频

12_访问控制符_1 视频文件(javase)

2016-03-24

11_内存分配 视频

11_内存分配 视频文件(javase)

2016-03-24

MTD原始设备与FLASH硬件驱动的对话

描述了nand flash在linux内核被调用一页的过程

2016-08-25

linux驱动程序设计从入门到精通

适合嵌入式初学者

2016-08-25

BootLoader技术内幕

分析了bootloader的启动过程,真的很不错

2016-08-19

keil上开发S3C2440

在MDK上开发S3C2440,以前开发是在ADS上开发,但是ADS好像不支持win7/win8等系统

2016-08-12

mini2440原理图

mini2440开发板原理图

2016-08-12

SD3.0(英文版)

SD3.0协议标准

2016-08-10

SD2.0协议(中文版)

SD卡协议标准

2016-08-10

S3C2440 裸机开发 SPI

S3C2440 裸机开发 SPI 只有一个main函数,要参考更详细可以下载资源页的另一文件

2016-08-03

S3C2440 SPI 裸机开发

S3C2440 SPI 裸机开发,ADS项目文件,可供参考

2016-08-03

CuteFTP.Pro.v9.0.5.0007

本人测试过可用 不用注册码 先不要生成快捷方式 替换之后在生成 非常完美

2016-07-16

S3C2440与S3C6410中文数据手册

想学嵌入式的可以参考下,两个常用芯片的中文数据手册,许多开发板都是采用这两款芯片做主芯片

2016-07-07

S3C2440裸机学习心得

很多同学想学嵌入式,一开始就往Linux方向走是不明智的,可以先搞裸机程序,对底层比较了解才去搞内核驱动层

2016-07-06

计算机操作系统.

讲操作系统挺不错的书,买一本要好几十呢 ,建议收藏

2016-06-06

糗百桌面版

代码所用的程序开发工具VS2013,开发环境.net2.0,开发语言c#。流程:首先利用HttpGet请求去获取糗百的网页内容,再利用正则表达式从网页源码中获取所需要的内容,最后进行数据绑定。

2016-05-11

java面试试题

java面试题汇总,看一遍会让收获不少

2016-04-23

c语言代码的120个小建议

改善自己编写代码的风格,适应企业用人标准

2016-04-18

Android2016开发规范

Android开发要求及规范,很全面

2016-04-08

java思维导图

java知识点概括图,所有知识点尽收眼底 不到2M大小

2016-04-05

apktool工具

apktool工具,经验证可用

2016-03-31

Qt模仿酷狗音乐UI界面

使用Qt编写纯代码,模仿酷狗音乐界面,实现了基本的界面。给其他做QT开发的做个参考

2016-03-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除