自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(117)
  • 资源 (7)
  • 收藏
  • 关注

原创 ok6410学习笔记(15.platform平台总线驱动模型之混杂设备驱动led)

本节知识点:1.这里就一个知识点设备资源:设备资源前面说过,这里就不多说了主要说说,在platform模型中,设备资源是定义在device模块中的,而使用是在driver模块中probe函数里面的,struct resource *platform_get_resource(struct platform_device *dev,unsigned int type,unsign

2013-06-28 21:55:36 2065

原创 ok6410学习笔记(14.platform平台总线驱动模型)

本节知识点:基础知识:1.把最近学的东西串串线,首先学的是kobject,这个东西是在sysfs文件系统中,创建一个目录的基类,在这点上linux有着面向对象的编程思想,也就是什么kset,总线,platform都是继承了kobject的特性,在sys目录中创建目录。2.学习kobject和kset是为了学习总线设备驱动模型的,因为创建总线,设备,驱动实际就是在/sys/bus

2013-06-27 16:44:36 1886

原创 ok6410学习笔记(13.总线设备驱动)

本节知识点:基础知识:1.总线结构:name是总线的名称,即总线在bus目录下面  文件夹的名称bus_attribute   device_attribute     driver_attribute分别是总线  设备  驱动三者的属性文件的描述   如图他们分别是通过三个宏完成赋值的   下面详细说明2.设备结构:kobjec

2013-06-27 11:19:29 1628

原创 ok6410学习笔记(12.kset学习记录)

本节知识点:基础知识:1.最重要的是弄清楚kobject和kset之间的关系:首先kobject是在sys目录下创建一个目录,这个目录里面只有属性文件。而kset也是创建一个目录,这个目录里面还可以创建目录(包括kset内嵌的kobject,和kobject)。kset里面可以有其他好多kset,其实这些kset都是内嵌的kobject,然后把kobject.kset赋值为父目录的kset

2013-06-25 16:39:09 1537

原创 ok6410学习笔记(11.kobject学习记录)

本节知识点:基础知识:1.目前学习了三种基于ram的文件系统,有ramdisk(实际上是ext2,ext3文件系统),proc,sysfs系统。2.根目录下sys文件下:block:里面包含所有块设备,即设备的属性文件。BUS:包含所有总线,有ide,pci,usb等,里面还有两个文件夹devices和drives。devices目录包含系统中所有属于该总线的设备,drives

2013-06-19 14:35:20 1506

原创 C语言中的内存布局

本节注重分清几个概念:.text .data .bss   堆   栈    静态存储区    只读存储区等从程序到a.out 把程序变成.text  .data  .bss  是编译原理完成的过程从a.out把程序映射到对应的内存地址空间是操作系统完成的,也就是在操作系统创建进程的时候完成的,在描述进程的那个结构体中。我们常说的堆是为了申请动态内存的时候使用的,malloc。

2013-06-15 11:28:53 3745 3

原创 c语言中数组名a和&a

最近又把学习c语言提上日程上来了~~~先把我打算看的书都写下来吧,,系类,声明:虽然数组名不是指针,但是用的很像指针,我们暂且把它叫做一个指针吧。第一个问题:int a[10];  a ,&a和&a[0] 都是分别是什么?先说明a ,&a和&a[0]三个值是的相等哈。a叫做数组名,是数组首元素的地址,也就是&a[0]的值。像是一个指针类型,是一个int型的指针类型,int *,先理

2013-06-12 16:24:49 6330 3

原创 ok6410学习笔记(10.硬件访问之led控制3)

这节说说linux帮我们映射好的物理地址:dev_led.c/************************************************************************** 文件名: dev_led.c 日期: 2013/06/08 头文件: led.h 功能:

2013-06-09 12:50:34 1714

原创 ok6410学习笔记(10.硬件访问之led控制2)

混杂设备驱动的ioremap见ok6410学习笔记(9.混杂设备驱动及硬件访问)简单字符驱动的ioremap驱动memdev.c/************************************************************************** 文件名: memdev.c 日期: 2013/06/07

2013-06-09 12:39:48 1511

原创 ok6410学习笔记(10.硬件访问之led控制1)

在对于led控制驱动方式上,我看见了6种方式:在用户空间角度上说有两种:1.mmap驱动自己写的设备,来把物理地址映射到用户空间。2.mmap驱动linux内核提供的mem设备,来把物理地址映射到用户空间。在内核空间角度上说有四种:1.ioremap的字符设备驱动中或者在混杂设备驱动中的应用,把物理地址映射到内核空间。2.在不管是国嵌的移植好的内核,还是飞凌移植好的内核中,

2013-06-09 12:31:48 1629

原创 ok6410学习笔记(9.混杂设备驱动及硬件访问)

本节知识:硬件访问知识点:1.I/O空间和内存空间的概念:I/O空间一般只有64K,内存空间有4G,他俩是分开的总线。切记ARM只有内存空间,一般只有X86才有I/O空间。2.I/O端口:当一个寄存器或内存位于I/O空间时候,称其为I/O端口。3.I/O内存:当一个寄存器或内存位于内存空间时候,称其为I/O内存。4.操作I/O端口的流程:第一种是 在设备驱动加载和open的时候

2013-06-09 12:08:08 1772

转载 应用程序中对/dev/mem和/dev/kmem设备文件的访问

Linux下/dev/mem和/dev/kmem的区别:/dev/mem: 物理内存的全镜像。可以用来访问物理内存。/dev/kmem: kernel看到的虚拟内存的全镜像。可以用来访问kernel的内容。作用: /dev/mem用来访问物理IO设备,比如X用来访问显卡的物理内存,或嵌入式中访问GPIO。用法一般就是open,然后mmap,接着可以使用map之后的地址来访问物理内存

2013-06-07 00:36:51 3061

原创 ok6410学习笔记(8.mmap地址映射之第二种mmap驱动)

最近弄mmap弄的特别烦,现在不想再弄了!!!但是还有一个地方的知识点没有搞定。就是mmap的驱动设备方法有两种,第一种是上面说过的用remap_pfn_range一次分配一段连续的物理页进行映射,有点像kmalloc分配到了真实的物理地址。第二种方式就是利用vm_operations_struct中的fault操作(这个过程在《linux设备驱动 宋保华》的P229页中有对vm_area_str

2013-06-04 22:35:52 1405

原创 ok6410学习笔记(8.mmap地址映射之led驱动)

前两节说mmap可以映射到真实的物理地址上面去,所有就打算把ok6410的#define GPMCON (*(volatile unsigned int *)0x7f008820)和#define GPMDAT (*(volatile unsigned int *)0x7f008824)两个寄存器地址映射上去,然后实现对led的控制。细节就不说了,直接上代码。       1.这个驱动弄了两天

2013-06-04 14:19:27 1378

原创 ok6410学习笔记(8.mmap地址映射之mmap驱动方法)

本节知识点:重点函数:1.mmap系统调用: void *mmap(void *addr,size_t len,int prot ,int flags , int fd , off_t offset) 将文件映射到进程空间的虚拟内存空间,直接对内存进行赋值,可以越过read,write对文件进行操作参数详解:addr为映射的起始地址,一般设置成NULL,让系统分配地址,系统会自动找一个

2013-06-03 11:44:59 1582

原创 ok6410学习笔记(8.mmap地址映射之linux内存管理)

在学习mmap的时候,遇到了好多障碍,最后总结为对内核机制的理解不透彻,尤其是对内存管理理解不到位,所以转载好多篇不错的内存管理的文章。这节就当做学习mmap前面的知识铺垫吧。问题思考:1.linux页式管理与mmu有什么关系:在linux内核移植中,移植了mmu(内存管理单元)到系统中,用作把操作系统的虚拟地址转换成物理地址,也就是mmu中保存了linux系统中各级的页表,页目录。mmu

2013-06-02 15:47:31 1850

转载 第8节 进程的创建和执行

6.8.1 进程的创建  新的进程通过克隆旧的程序(当前进程)而建立。fork() 和 clone()(对于线程)系统调用可用来建立新的进程。这两个系统调用结束时,内核在系统的物理内存中为新的进程分配新的 task_struct 结构,同时为新进程要使用的堆栈分配物理页。Linux 还会为新的进程分配新的进程标识符。然后,新 task_struct 结构的地址保存在链表中,而旧进程的

2013-06-02 14:53:44 1288

转载 第7节 缓存和刷新机制

6.7.1 Linux使用的缓存  不管在硬件设计还是软件设计中,高速缓存是获得高性能的常用手段。Linux 使用了多种和内存管理相关的高速缓存。 1. 缓冲区高速缓存:  缓冲区高速缓存中包含了由块设备使用的数据缓冲区。这些缓冲区中包含了从设备中读取的数据块或写入设备的数据块。缓冲区高速缓存由设备标识号和块标号索引,因此可以快速找出数据块。如果数据能够在缓冲区

2013-06-02 14:53:13 1362

转载 第6节 交换机制

6.6.1 交换的基本原理  如前所述,每个进程的可以使用的虚存空间很大(3GB),但实际使用的空间并不大,一般不会超过几MB,大多数情况下只有几十K或几百K。可是,当系统的进程数达到几百甚至上千个时,对存储空间的总需求就很大,在这种情况下,一般的物理内存量就很难满足要求。因此,在计算机技术的发展史上很早就有了把内存的内容与一个专用的磁盘空间交换的技术,在Linux中,我们把用作交换的

2013-06-02 14:52:34 1224

转载 第5节 请页机制

6.5.1 页故障的产生  页故障的产生有三种原因:  (1) 一是程序出现错误,例如向随机物理内存中写入数据,或页错误发生在TASK_SIZE(3G)的范围外,这些情况下,虚拟地址无效, Linux 将向进程发送 SIGSEGV 信号并终止进程的运行;  (2) 另一种情况是,虚拟地址有效,但其所对应的页当前不在物理内存中,即缺页错误,这时,操作系统必须从磁盘

2013-06-02 14:51:48 1086

转载 第1节 Linux的内存管理概述

6.1 Linux的内存管理概述 Linux是为多用户多任务设计的操作系统, 所以存储资源要被多个进程有效共享;且由于程序规模的不断膨胀,要求的内存空间比从前大得多。 Linux内存管理的设计充分利用了计算机系统所提供的虚拟存储技术,真正实现了虚拟存储器管理。第二章介绍的Intel386的段机制和页机制是 Linux实现虚拟存储管理的一种硬件平台。实际上, Linux2.0以上

2013-06-02 14:48:40 1125

转载 第2节 Linux内存管理的初始化

6.2.1 启用分页机制  当Linux启动时,首先运行在实模式下,随后就要转到保护模式下运行。因为在第二章段机制中,我们已经介绍了Linux对段的设置,在此我们主要讨论与分页机制相关的问题。Linux内核代码的入口点就是/arch/i386/kernel/head.S中的startup_32。 1.页表的初步初始化: /*  * The page tables a

2013-06-02 14:44:30 1416

转载 第3节 内存的分配和回收

6.3 内存的分配和回收  在内存初始化完成以后,内存中就常驻有内核映象(内核代码和数据)。以后,随着用户程序的执行和结束,就需要不断地分配和释放物理页面。内核应该为分配一组连续的页面而建立一种稳定、高效的分配策略。为此,必须解决一个比较重要的内存管理问题,即外碎片问题。频繁地请求和释放不同大小的一组连续页面,必然导致在已分配的内存块中分散许多小块的空闲页面。由此带来的问题是,即使这些

2013-06-02 14:43:10 1153

转载 第4节 地址映射机制

6. 4 地址映射机制 图6.13存储介质间的映射关系顾名思义地址映射就是建立几种存储媒介(内存,辅存,虚存)间的关联,完成地址间的相互转换,它既包括磁盘文件到虚拟内存的映射,也包括虚拟内存到物理内存的映射,如图6.13所示。本节主要讨论磁盘文件到虚拟内存的映射,虚拟内存到物理内存的映射实际上是请页机制完成的(请看下节)。 6.4.1 描

2013-06-02 14:41:40 1426

转载 LINUX内核经典面试题

1) Linux中主要有哪几种内核锁?2) Linux中的用户模式和内核模式是什么含意?3) 怎样申请大块内核内存?4) 用户进程间通信主要哪几种方式?5) 通过伙伴系统申请内核内存的函数有哪些?6) 通过slab分配器申请内核内存的函数有?7) Linux的内核空间和用户空间是如何划分的(以32位系统为例)?8) vmalloc()申请的内存有什么特点?9) 用户

2013-06-02 14:36:29 3458 1

转载 我在北京工作这几年 – 一个软件工程师的反省(转)

我于2007年来到北京,在北京工作这些年,先后在NEC、风行、百度几家公司担任软件工程师的职务。NEC是一家具有百年历史的传统日企,在知春路的分公司叫日电电子,我们部门主要从事机顶盒、数字电视上嵌入式软件的研发。风行是一家成立于2005年的在线视频公司,主要做P2P视频点播的业务,而我主要从事P2P后台服务器的开发。百度是一家在纳斯达克上市的互联网公司,我主要在客户端部门的百度影音项目组从事P2P

2013-06-02 14:35:06 1879

转载 linux内核空间和用户空间详解

linux驱动程序一般工作在内核空间,但也可以工作在用户空间。下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们。        Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G.Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为"内核空

2013-06-02 14:31:20 1081

转载 Linux内存管理(下)

物理内存管理(页管理)Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数4k(在i386体系结构中)大小页,从而分配和回收内存的基本单位便是内存页了。利用分页管理有助于灵活分配内存地址,因为分配时不必要求必须有大块的连续内存[1],系统可以东一页、西一页的凑出所需要的内存供进程使用。虽然如此,但是实际上系统使用内存还是倾向于分配连续的内存块,因为分配连续内存时,页表不需要更

2013-06-01 20:16:55 1030

转载 Linux内存管理(上)

摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存地使用方法。力求从外自内、水到渠成地引导网友分析Linux地内存管理与使用。在本章最后我们给出一个内存映射地实例,帮助网友们理解内核内存管理与用户内存管理之间地关系,希望大家最终能驾驭Linux内存管理。 前言内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容,无

2013-06-01 20:14:19 1104

原创 ok6410学习笔记(7.poll驱动设计)

本节难点:1.理解内核信号量,阻塞型设备驱动,poll之间的关系,其实三者之间的关系并不矛盾,可以一起使用。可以把信号量放到阻塞设备驱动下层,等待条件成立后再去申请信号量。poll是对多个文件进行监控,如果只用阻塞型设备驱动的话,有一个文件不能读写,整个进程就挂起了。如果用poll只要有一个能读写,进程就可以正常进行,然后再用阻塞型设备驱动去处理。2.select和poll函数之间参数传递

2013-05-25 18:01:36 1374

原创 ok6410学习笔记(6.自动创建设备文件)

本节难点:1.这里说的是在/dev目录下创建设备文件的两种方法之一,一种是通过mknod手动创建 ,另一种是通过函数自动创建2.两种方式对比,对于自动创建不知道是怎么把设备类型传递下去的  就是mknod中的c   我感觉是THIS_MODULE传递的参数本节知识点:注意事项:1.busybox中必须要支持udev(mdev这个是嵌入式设备的命令)重点函数:1.

2013-05-23 21:01:50 1367

原创 ok6410学习笔记(5.阻塞字符驱动)

本节难点:1.重点在理解阻塞型设备驱动和内核信号量的区别,详细在内核信号量那节有说明。2.理解本节的几个重要函数,驱动的结构。本节知识点: 细节知识点:1.在判断是否阻塞进程的时候,使用了while的好处是,可以避免wakeup唤醒的进程不是现在你想唤醒的进程,因为wakeup是唤醒等待队列中的一类进程,而不是一个。所以在wakeup的使用中要伴随着  阻塞条件的赋值(可能是全

2013-05-23 16:08:29 1407

原创 ok6410学习笔记(4.ioctl字符驱动)

写了几篇文章发现,自己的总结方式有些问题进行了如下调整:      1.对于驱动的学习应该注重的是驱动的结构,module_init里面的结构,read,write,ioctl里面的结构,日后的文章会详细结构部分。      2.对于知识点的总结,应该加强对函数的总结,函数是一个很容易忘记的东西(因为不常用)。      本节难点:               1.ioctl的参数

2013-05-23 11:11:06 1727 1

原创 ok6410学习笔记(3.并发和竞态)

学习资料:1.国嵌视频和ppt    2.操作系统精髓与设计原理 (机械工业出版社)       主要知识点:1.自旋锁(spinlock)   2.信号量(semaphore)    具体函数详细见ppt和操作系统P195~P199       思考:1.内核的信号量和应用层的信号量(见国嵌应用开发进程通信)有什么关系和区别(这里涉及内核中进程间通信与用户空间进程通信的通信方式)

2013-05-14 15:17:37 1523

原创 ok6410学习笔记(2.简单字符驱动)

最近在看国嵌的字符驱动的教学,可能是刚刚入手驱动很不适应,所以将一些知识点总结如下:        从如下几个方面进行总结  1.字符驱动基础知识 和.字符驱动程序设计的流程      2.字符驱动的过程(如何从应用层控制内核模块的 vsf文件系统)     3.部分琐碎知识点总结     4.我写的代码分析(此代码经过测试成功的)。        1.字符驱动的基础知识:a.设备号  (

2013-05-13 22:53:24 2200

原创 ok6410学习笔记(1.arm常见的各种地址总结)

学习ok6410有一段时间了,总是对其中各中地址的来源比较模糊一会0x500080000  一会0x71000000的,最近自己又看了看手册,找了找资料,并和2440对比学习了下,总结如下。PS:资料有6410,2440中英文手册,ok6410原理图,mini2440原理图,韦东山第一期视频中的存储控制器,mmu,nandflash,和看原理图视频。        mini2440地址映射问题

2013-04-19 13:26:44 4341 2

原创 对存储器的一些总结

对几种常见存储器进行对比学习(ROM  RAM  FLASH)       ROM是只读存储器,RAM是随机存储器,两者最多的区别是ROM掉电数据不丢失,但存储读取速度慢,所以常用作存放程序,存放bootloader,存放内核,存放文件系统。      RAM掉电数据丢失,但数据存储读取速度快,所以常用作内存(将ROM中的程序拷贝到RAM中去运行),RAM还分为SRAM静态随机存储器(不用

2013-04-18 19:51:37 1621

《MySQL必知必会》高清PDF

《MySQL必知必会》是经典畅销书《SQL必知必会》之后,作者应众多读者的请求编写的,专门针对MySQL用户。书中继承了《MySQL必知必会》的优点,没有过多阐述数据库基础理论,而是紧贴实战需要,直接从数据检索开始,逐步深入各种复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。通过本书,读者能够掌握扎实的基本功,迅速成为MySQL高手。

2018-10-21

最新国嵌全套练习答案源码

国嵌ok6410学习中练习的源码记录,同步附上学习手册博客仅供参考:http://blog.csdn.net/column/details/qq418674358.html

2017-09-26

前端Js显示数学公式插件(MathJax最新源码)

MathJax官网总是下载失败,亲测可用,放一个2.3版本的源码在这里。MathJax是一款运行在浏览器中的开源的数学符号渲染引擎,使用MathJax可以方便的在浏览器中显示数学公式,不需要使用图片。目前,MathJax可以解析Latex、MathML和ASCIIMathML的标记语言。

2017-09-26

数据结构练习代码

c语言描述的常用数据结构包括链表、队列、栈、kmp等

2015-03-12

常用数据结构

其中包括几种常用的排序算法,查找算法,和树结构相关的数据结构等

2015-03-12

linux-Vi及gcc的使用方法

这个资源是很详细的讲解,linux中vi和gcc的使用说明,及指令说明!

2013-08-30

ok6410韦东山裸机代码 我的练习

韦东山ok6410裸机代码 我的练习 包括nand lcd led key uart irq等 有注释

2013-07-11

空空如也

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

TA关注的人

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