- 博客(16)
- 资源 (27)
- 收藏
- 关注
原创 linux驱动程序-读书笔记(一)scull函数详解
这几天开始看比较难的 linux设备驱动程序了。看到本书作者编写的代码,(从官网上下载到的示例:大家也可以从这里下载。http://download.csdn.net/detail/zhaole20094463/4541209)不禁对该书作者科波特敬仰万分。看过之后终于知道为什么这本书比较难了。我们对书籍评价的难,无非就是两个原因,一个是写法太艰涩,不好理解。另外一个就
2012-08-30 20:04:20 1880 1
原创 驱动程序学习(八)说些发自肺腑的吧
总算是把驱动程序学习系列写完了。今天是第一天实习,上午实习完后就一直坐在电脑前在写剩下的文章了。当然这不是结束。众所周知,驱动程序的学习是嵌入式开发中较难的部分,怎么能简单的几章博客就说完了呢。这些是我在近期学习的时候总结的吧,“摘抄”的也可以这么说。我看的书籍总共是这样几本,觉得不错,大家也可以找来看看。嵌入式系统设计与应用 张思民 这本书很不错,讲的很梗概,让你
2012-08-27 20:25:41 1342 4
原创 驱动程序学习(七)内存与IO操作
提到内存,我们不得不说一个概念那就是用户空间和内核空间的概念。用户空间主要针对于应用程序的内存申请,栈的设置,而内核空间呢,我们主要看到的就是驱动程序的地址映射。Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。用户空间的地址是从0 到3GB 内核空间的地址是3GB到4GB。而MMU也就是存储管理器的存在使得每一个应用程序都可以访问0 到3GB的内存空间
2012-08-27 20:02:44 1285
原创 驱动程序学习(六)中断处理
中断的概念我想大家都很清楚,在我们学习单片机的时候接触很多,所以这里就不再赘述了。在linux设备驱动程序中,中断处理相关的首先是申请与释放IRQ的API是:request_irq()和free_irq()request_irq()的原型是int request_irq(unsigened int irq,void (*handler)(int irq,void *dev_id ,
2012-08-27 14:58:39 727
原创 驱动程序学习(五)select and poll
Select()系统调用在驱动程序中一个进程同时处理多个文件描述符是很常见的情况。select()系统调用可以使进程检测同时等待的多个I/O设备,当没有设备准备好时,select()阻塞,其中任一设备准备好时,select()就返回。select()的调用形式为:#include #include int select(int maxfd, fd_set *readfds,
2012-08-26 10:42:22 1560 7
转载 虚拟机 出现 cannot find a valid peer process to connect to(支持)
虚拟机出现问题,打开虚拟机是显示:cannot find a valid peer process to connect to解决:1、用process explorer杀掉vmware-vmx.exe进程(如果有的话)2、清除虚拟机目录下的.lck文件3、在dos命令行下执行net start vmx86,以启动peer process在执
2012-08-26 09:48:37 11471 3
原创 驱动程序学习(四)并发控制(3):阻塞与非阻塞
阻塞是指在执行设备操作的同时,若不能获得资源,则进程挂起直到满足可操作的条件在进行操作。非阻塞操作是在进程不能执行设备操作时并不挂起。被挂起的程序进入休眠状态,一直等待条件满足后才被执行,非阻塞模式则不会进入休眠状态,具体处理方式根据编程者的编程意图,所以一般情况下,非阻塞的逻辑要比阻塞的逻辑复杂些,但是效率较高。在linux驱动程序中,我们长使用等待队列来实现阻塞操作。wait
2012-08-25 15:37:07 2036
转载 Fedora9.0安装中文输入法
1. yum install scim-python-chinese 或者 yum update scim-python-chinese2. 重新登录桌面,或者运行scim-restart
2012-08-23 08:59:58 2327
原创 内核移植(详细版)
今天,自己又重新移植了一遍内核。感受颇多,原本已经烂熟于心的东西,忽然都不明白了。看来,随着时间的增长,人们看东西的视角也不同。原本是本着一颗,做东西的心情,移植成功就好,好使就行,不会太关注,为什么,怎么来的。今天移植想的问题却又不一样了。好吧,那就详细的讨论一下吧。看本文之前,建议,先自己好好的做一遍内核移植http://blog.csdn.net/zhaole200944
2012-08-20 09:59:23 14861 2
原创 mini2440 tq2440 vivi uboot 去除nandflash坏块
我们在学习嵌入式的工程中,最多的方式莫过于买一家公司的开发板。跟着它们的教程以及网上的相关博客进行实验学习。随着烧写次数的增加,我们开发板的nand flash中就会出现或多或少的坏块,也就是bad block。坏块少对于你的系统运行没有任何影响,顶多是影响心情罢了。但是如果坏块太多的话,就可能影响你根文件系统的正常挂载启动。先来说说bad block是怎么来的吧。其实跟
2012-08-19 19:13:45 5694
原创 驱动程序学习(四)并发控制(2)自旋锁控制
在概念上,自旋锁非常简单。一个自旋锁就是一个互斥设备,它只有两个值:“锁定”和“解锁”。它通常实现为某个整数值中的单个位。希望获得某特定锁的代码测试的相关的位。如果锁可用,则“锁定”位被设置,而代码进入临界区;相反,如果锁被其他人获得,则代码进入忙循环并重复坚持这个锁,直到该锁可用为止。这个循环就是自旋锁的“自旋”部分。 自旋锁不会引起调用者休眠,如果自旋锁已经被别的
2012-08-16 09:59:00 1103
原创 驱动程序学习(四)并发控制(1)信号量的控制
并发是驱动程序中,最常见的一种现象。因此掌握并发也是编写驱动程序的一个最基本的知识点。当多个线程同时访问相同的资源时(比如全局变量)可能引发竞态。竞态是:当多个线程同时访问同一个资源时,最后一个对资源修改的线程将把前面所有线程对资源的修改全部覆盖掉,就好像前面的线程没有任何操作一样。竞态会导致对共享数据的非控制访问,发生错误的访问模式,会产生非预期的结果。(参照)因此必须对共享
2012-08-15 19:22:59 978
原创 驱动程序学习(三)示例2 :设备驱动程序与应用程序之间数据传输的另外一种方式
代码如下:chardev.c#include#include#include#includeMODULE_LICENSE("GPL");#define MAJOR_NUM 111static ssize_t chardev_read(struct file *,char *,size_t,loff_t *);static ssize_t
2012-08-13 21:20:07 2070
原创 驱动程序学习(三)示例:设备驱动程序与用户应用程序之间的数据传递
示例:设计一个程序,在用户空间的用户程序中产生20个随机数,通过内核空间的设备驱动程序按五行四列的排列输出,并打印出能被3整除的数。程序设计:data_dev.c#include#include#include#include#define data_MAJOR 104#define data_DEBUG#define VERSION "
2012-08-13 13:14:12 2224
原创 驱动程序学习(二)一个简单的字符型设备驱动函数
通过第一个hello world驱动程序,我们学会了驱动程序的框架。知道了,如何编译,如何加载,如何卸载一个驱动程序。接下来我们来做一个完整的驱动程序Demo_Driver.c#include#include#include#include#define Demo_MAJOR 98 //定义主设备号#define Demo_DEBUG#define VERS
2012-08-13 08:40:59 1808 2
原创 驱动程序学习(一)从“hello world”开始
终于开始写驱动程序,首先说些题外话吧。我们学习嵌入式,学习了bootloader kernel filesystem进行过内核的移植,驱动的移植,根文件系统的制作,可是这些都与编程能力无关。而我们学习的造诣,我们的能力,更多的是体现在编程能力上,所以以后的学习还要多敲代码,多看书。首先来贴一段代码:hello.c#include#includeint ins
2012-08-12 09:02:13 852 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人