- 博客(12)
- 资源 (44)
- 收藏
- 关注
原创 内核地址空间与进程地址空间
一、内核地址空间1)物理内存映射区: kmalloc,get_free_pages申请的内存位于物理内存映射区,在物理上连续,他们与真实的物理地址只有一个固定的偏移。 virt_to_phys() 可以实现内核虚拟地址转化为物理地址 phys_to_virt() 物理地址转化为虚拟地址2)虚拟内存分配区:
2013-11-29 20:37:18 2314
原创 Linux I/O端口与I/O内存
一、IO端口访问 1、直接使用IO端口操作函数 1)在设备打开或驱动模块被加载时申请IO端口区域,之后使用inb(),outb()等进行端口访问,最后在设备关闭或驱动被卸载时释放IO端口范围。流程如下: 2)struct resource *request_region(unsigned long first,unsigned long n
2013-11-29 15:40:49 1622
转载 linux设备驱动之mmap函数
1.mmap系统调用void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);功能:负责把文件内容映射到进程的虚拟地址空间,通过对这段内存的读取和修改来实现对文件的读取和修改,而不需要再调用read和write;参数:addr:映射的起始地址,设为NULL由系统指定;len:映
2013-11-28 18:03:19 1760
原创 i2c驱动之普通设备驱动2(推荐设备驱动方法)
与前面普通设备驱动1方法不同,这里的普通设备驱动利用i2c-core.c提供的i2c_transfer方法来实现设备驱动,而不是普通设备驱动1里面的通过操纵s3c2440的i2c寄存器来与设备通信 采用友善之臂的2.6.32.2内核,需要修改/linux-2.6.32.2/arch/arm/mach-s3c2440/mach-mini2440.c文件1)添加 #include
2013-11-23 15:29:18 2493
原创 i2c驱动之普通设备驱动1
驱动程序#include #include #include #include #include #include #include #include /* printk() */#include /* kmalloc() */#include /* everything... */#include /* error codes */#i
2013-11-21 23:44:32 2786 2
原创 i2c驱动之i2c-dev驱动
i2c的设备驱动可以直接利用内核提供的i2c-dev.c文件提供的ioctl函数接口在应用层实现对i2c设备的读写,但是在应用层使用ioctl函数对应用程序员要求较高,必须了解设备的操作流程,时序之类的。 另外i2c设备的驱动也可以通过普通的设备驱动实现,像往常的驱动一样实现,然后在应用层就可以像读取普通文件一样操作,无需再考虑读写时序。 在编译驱动的时候提示出
2013-11-20 00:18:18 16861 3
转载 Linux completion理解
completion是一种轻量级的机制,它允许一个线程告诉另一个线程工作已经完成。可以利用下面的宏静态创建completion:DECLARE_COMPLETION(my_completion);如果运行时创建completion,则必须采用以下方法动态创建和初始化:struct compltion my_completion;init_completion(&my_com
2013-11-19 11:38:42 1071
原创 i2c驱动之调用ioctl函数进行读写at24c08
在linux驱动中/drivers/i2c/目录下有i2c-dev.c提供了I2C设备的通用驱动,实现了read(),write(),ioctl等函数,不过这里的read()和write()函数只能对应一条消息,即如下,但是如果碰到下面的情况:先写一次地址,然后再开始读数据,即分为两次消息,这个时候read(),write()函数就不能正常读写了,因为先
2013-11-18 21:45:42 19562 5
原创 动手做一个linux字符驱动
最近学习了一本书《linux 设备驱动开发详解》——宋宝华老师写的,不过买的竟然是第二版的,里面是关于处理器s3c6410的,本来看这书的第一版是讲s3c2410,后来发现其实内容差不多了。 学习了一下里面第2篇,设备驱动的核心理论,涉及很多,基础的知识需要反复的推敲才能明白。 主要内容:1、模块加载函数static int __init combine_init(
2013-11-11 22:53:44 1200 1
原创 function declaration isn't a prototype解决办法
对以上程序,在编译驱动的时候会出现以下warning:在网上查到解决办法是:即使函数括号内没有任何参数,也要加一个void类型,来避免这种warning:解决如下:
2013-11-10 00:26:15 49530 4
原创 linux驱动头文件
#include 是在linux-2.6.29/include/linux下面寻找源文件。#include 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。#include 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。Linux驱动程序常用头文件列举#inclu
2013-11-04 20:42:39 1454
原创 hello驱动与Makefile
#include #include MODULE_LICENSE("Dual BSD/GPL");MODULE_AUTHOR("xxx");static int __init hello_init(void){ printk(KERN_ALERT "Hello world\n"); return 0;}static void __exit hello
2013-11-03 22:37:21 859
嵌入式系统开发之道笔记
2015-05-17
alsa-utils-1.0.25_alsa-lib-1.0.25
2015-05-11
pthread API的一些用法
2015-02-15
MJPEG压缩与解压缩
2013-12-13
MassStorageClass协议文档
2013-09-28
QT连续显示多幅图片看起来像动画
2012-12-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人