ok6410学习笔记
这里面的文章是我个人学习ARM11、Linux、OK6410开发板的一些经验之谈,希望能给正在学习嵌入式的同学带来帮助~~~~~目前主要是驱动方面的~~~~
qq418674358
热爱嵌入式开发,热爱编程,喜欢对自己的学习过程进行总结,并乐于分享
展开
-
ok6410学习笔记(19.块设备驱动程序设计)
本节知识点:预备知识:1.块设备与字符设备的区别:a.块设备和字符设备的读取单元不同,块设备是以一块为基本单元进行读写的,一般是512字节,字符设备是以字节为单位进行读写的。 b.块设备可以随机访问(随机对各个块进行访问) 字符设备必须按照顺序访问(按照地址进行访问)2.块设备在li原创 2013-07-21 17:53:19 · 2095 阅读 · 0 评论 -
ok6410学习笔记(18.linux串口驱动程序设计)
串口这节的资料真的是少的可怜啊~~~国嵌这节讲的真心不敢恭维,网上的资料基本都是一个样子,不是说说s3c6400.c和samsung.c这两个文件就是说说驱动的结构。都是些意义不大的东西。 首先,我先说说本节的学习资料: 1. 宋宝华 这本说里面对uart的基本驱动结构讲的是比较细致的是深入tty设备驱动讲解的,但是缺乏从驱动到应用的一贯性。原创 2013-07-13 17:43:56 · 4386 阅读 · 0 评论 -
ok6410学习笔记(17.中断下部分之工作队列)
本节知识点:基础知识:1.其实工作队列就是在中断处理函数中,起一个线程,然后把要处理的数据都传递给这个线程,让这个线程去执行你写好的特定程序即回调函数。2.当在linux下运行应用程序的是 可以使用 ./a.out & 来让应用程序在后台运行。这样还可以进行其他操作,但是要想杀死进程就得用ps和kill pid了重点函数:1.struct work_struct 工原创 2013-07-04 17:17:38 · 1690 阅读 · 0 评论 -
ok6410学习笔记(16.按键中断控制led驱动)
这一节是我学驱动这么多天来,最头疼的一节,事后想了想应该是poll驱动当时没有做练习,再加上对前面的一些知识开始遗忘了,出现了好多不该出现的错误,还有些错误仍然没有解决,但是好歹功能是实现了,看来不动手写程序真的很伤,就是因为电脑当时出了问题,没有写poll,导致我在中断处理函数,poll,read三个驱动函数之间,不断的徘徊也没找到直接的关系。题外话不多了~~~~~进入正题!!!本节知识点:原创 2013-07-03 00:48:29 · 4015 阅读 · 1 评论 -
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 · 2061 阅读 · 0 评论 -
ok6410学习笔记(14.platform平台总线驱动模型)
本节知识点:基础知识:1.把最近学的东西串串线,首先学的是kobject,这个东西是在sysfs文件系统中,创建一个目录的基类,在这点上linux有着面向对象的编程思想,也就是什么kset,总线,platform都是继承了kobject的特性,在sys目录中创建目录。2.学习kobject和kset是为了学习总线设备驱动模型的,因为创建总线,设备,驱动实际就是在/sys/bus原创 2013-06-27 16:44:36 · 1885 阅读 · 0 评论 -
ok6410学习笔记(13.总线设备驱动)
本节知识点:基础知识:1.总线结构:name是总线的名称,即总线在bus目录下面 文件夹的名称bus_attribute device_attribute driver_attribute分别是总线 设备 驱动三者的属性文件的描述 如图他们分别是通过三个宏完成赋值的 下面详细说明2.设备结构:kobjec原创 2013-06-27 11:19:29 · 1626 阅读 · 0 评论 -
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 · 1534 阅读 · 0 评论 -
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 · 1504 阅读 · 0 评论 -
ok6410学习笔记(10.硬件访问之led控制3)
这节说说linux帮我们映射好的物理地址:dev_led.c/************************************************************************** 文件名: dev_led.c 日期: 2013/06/08 头文件: led.h 功能:原创 2013-06-09 12:50:34 · 1711 阅读 · 0 评论 -
ok6410学习笔记(10.硬件访问之led控制2)
混杂设备驱动的ioremap见ok6410学习笔记(9.混杂设备驱动及硬件访问)简单字符驱动的ioremap驱动memdev.c/************************************************************************** 文件名: memdev.c 日期: 2013/06/07原创 2013-06-09 12:39:48 · 1509 阅读 · 0 评论 -
ok6410学习笔记(10.硬件访问之led控制1)
在对于led控制驱动方式上,我看见了6种方式:在用户空间角度上说有两种:1.mmap驱动自己写的设备,来把物理地址映射到用户空间。2.mmap驱动linux内核提供的mem设备,来把物理地址映射到用户空间。在内核空间角度上说有四种:1.ioremap的字符设备驱动中或者在混杂设备驱动中的应用,把物理地址映射到内核空间。2.在不管是国嵌的移植好的内核,还是飞凌移植好的内核中,原创 2013-06-09 12:31:48 · 1625 阅读 · 0 评论 -
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 · 1768 阅读 · 0 评论 -
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 · 1403 阅读 · 0 评论 -
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 · 1375 阅读 · 0 评论 -
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 · 1579 阅读 · 0 评论 -
ok6410学习笔记(8.mmap地址映射之linux内存管理)
在学习mmap的时候,遇到了好多障碍,最后总结为对内核机制的理解不透彻,尤其是对内存管理理解不到位,所以转载好多篇不错的内存管理的文章。这节就当做学习mmap前面的知识铺垫吧。问题思考:1.linux页式管理与mmu有什么关系:在linux内核移植中,移植了mmu(内存管理单元)到系统中,用作把操作系统的虚拟地址转换成物理地址,也就是mmu中保存了linux系统中各级的页表,页目录。mmu原创 2013-06-02 15:47:31 · 1848 阅读 · 0 评论 -
ok6410学习笔记(7.poll驱动设计)
本节难点:1.理解内核信号量,阻塞型设备驱动,poll之间的关系,其实三者之间的关系并不矛盾,可以一起使用。可以把信号量放到阻塞设备驱动下层,等待条件成立后再去申请信号量。poll是对多个文件进行监控,如果只用阻塞型设备驱动的话,有一个文件不能读写,整个进程就挂起了。如果用poll只要有一个能读写,进程就可以正常进行,然后再用阻塞型设备驱动去处理。2.select和poll函数之间参数传递原创 2013-05-25 18:01:36 · 1371 阅读 · 0 评论 -
ok6410学习笔记(6.自动创建设备文件)
本节难点:1.这里说的是在/dev目录下创建设备文件的两种方法之一,一种是通过mknod手动创建 ,另一种是通过函数自动创建2.两种方式对比,对于自动创建不知道是怎么把设备类型传递下去的 就是mknod中的c 我感觉是THIS_MODULE传递的参数本节知识点:注意事项:1.busybox中必须要支持udev(mdev这个是嵌入式设备的命令)重点函数:1.原创 2013-05-23 21:01:50 · 1364 阅读 · 0 评论 -
ok6410学习笔记(5.阻塞字符驱动)
本节难点:1.重点在理解阻塞型设备驱动和内核信号量的区别,详细在内核信号量那节有说明。2.理解本节的几个重要函数,驱动的结构。本节知识点: 细节知识点:1.在判断是否阻塞进程的时候,使用了while的好处是,可以避免wakeup唤醒的进程不是现在你想唤醒的进程,因为wakeup是唤醒等待队列中的一类进程,而不是一个。所以在wakeup的使用中要伴随着 阻塞条件的赋值(可能是全原创 2013-05-23 16:08:29 · 1403 阅读 · 0 评论 -
ok6410学习笔记(4.ioctl字符驱动)
写了几篇文章发现,自己的总结方式有些问题进行了如下调整: 1.对于驱动的学习应该注重的是驱动的结构,module_init里面的结构,read,write,ioctl里面的结构,日后的文章会详细结构部分。 2.对于知识点的总结,应该加强对函数的总结,函数是一个很容易忘记的东西(因为不常用)。 本节难点: 1.ioctl的参数原创 2013-05-23 11:11:06 · 1725 阅读 · 1 评论 -
ok6410学习笔记(3.并发和竞态)
学习资料:1.国嵌视频和ppt 2.操作系统精髓与设计原理 (机械工业出版社) 主要知识点:1.自旋锁(spinlock) 2.信号量(semaphore) 具体函数详细见ppt和操作系统P195~P199 思考:1.内核的信号量和应用层的信号量(见国嵌应用开发进程通信)有什么关系和区别(这里涉及内核中进程间通信与用户空间进程通信的通信方式)原创 2013-05-14 15:17:37 · 1520 阅读 · 0 评论 -
ok6410学习笔记(2.简单字符驱动)
最近在看国嵌的字符驱动的教学,可能是刚刚入手驱动很不适应,所以将一些知识点总结如下: 从如下几个方面进行总结 1.字符驱动基础知识 和.字符驱动程序设计的流程 2.字符驱动的过程(如何从应用层控制内核模块的 vsf文件系统) 3.部分琐碎知识点总结 4.我写的代码分析(此代码经过测试成功的)。 1.字符驱动的基础知识:a.设备号 (原创 2013-05-13 22:53:24 · 2198 阅读 · 0 评论 -
ok6410学习笔记(1.arm常见的各种地址总结)
学习ok6410有一段时间了,总是对其中各中地址的来源比较模糊一会0x500080000 一会0x71000000的,最近自己又看了看手册,找了找资料,并和2440对比学习了下,总结如下。PS:资料有6410,2440中英文手册,ok6410原理图,mini2440原理图,韦东山第一期视频中的存储控制器,mmu,nandflash,和看原理图视频。 mini2440地址映射问题原创 2013-04-19 13:26:44 · 4334 阅读 · 2 评论