linux 设备驱动
文章平均质量分 76
knight_yzzz
专注于android的爱好者
展开
-
lcd 帧设备驱动(一)
lcd 帧缓冲(framebuffer)机制: 上层应用直接对缓冲区读写,从而对屏幕显示点操作。这种接口采用mmap系统调用,将显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间以后,就可以直接进行读写操作了,而写操作可以立即反映在屏幕上。帧缓冲驱动程序是最重要的驱动程序之一。帧缓冲设备驱动的工作:设定物理显示缓冲区的具体位置及存放方式。帧缓转载 2013-03-30 12:57:58 · 594 阅读 · 0 评论 -
linux uboot 启动顺序
U-Boot启动过程(国嵌) bootloader 除了依赖CPU,还依赖板级设备的配置,例如板卡的硬件地址分配,外设硬件芯片的类型。不同的板子需修改bootloader。阶段1:硬件初始化,为加载bootloader的二阶段准备RAM空间,拷贝2阶段代码到内存,设置好堆栈,跳到2阶段,初始化本阶段要的设备,将内核和根文件从flash中拷贝到RAM中,最后调用内核。开发原创 2013-03-31 20:31:52 · 5390 阅读 · 0 评论 -
uboot中 内嵌汇编
内嵌汇编语法:__asm__ __violate__ ("movl %1,%0" : "=r" (result) : "m" (input)); movl %1,%0 是指令模板;%0 和 %1 代表指令的操作数,称为占位符,内嵌汇编靠它们将C 语言表达式与指令操作数相对应。 指令模板后面用小括号括起来的是 C 语言表达式,本例中只有两个:resu原创 2013-04-05 21:56:57 · 992 阅读 · 0 评论 -
字符设备驱动模型
#include #include #include #include #include #include #include #include #include #include #include #define GLOBALMEM_SIZE 0x1000 /*全局内存最大4K字节*/#define MEM_CLEAR 0x1 /*清0全局内存*/转载 2013-05-18 13:31:09 · 721 阅读 · 0 评论 -
驱动编程之内存与IO操作
对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。 进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间,如下图:转载 2013-05-18 14:26:18 · 917 阅读 · 0 评论 -
驱动编程之定时器
Linux内核中定义了一个timer_list结构,我们在驱动程序中可以利用之: struct timer_list { struct list_head list; unsigned long expires; //定时器到期时间 unsigned long data; //作为参数被传入定时器处理函数 void (*function)(unsigned long);转载 2013-05-18 14:38:57 · 546 阅读 · 0 评论 -
驱动编程之异步通知
#include #include #include #include #include #include 异步通知:一旦设备就绪,则主动通知应用程序,这样应用就不需要查询设备状态,也叫 信号驱动的异步I/O/*接收到异步读信号后的动作*/void input_handler(int signum)//通过命令echo向/dev/globalfifo写入数据时,转载 2013-05-18 14:43:15 · 614 阅读 · 0 评论 -
驱动编程之中断处理
与Linux设备驱动中中断处理相关的首先是申请与释放IRQ的API request_irq()和free_irq(),request_irq()的原型为:int request_irq(unsigned int irq,void (*handler)(int irq, void *dev_id, struct pt_regs *regs),unsigned long irqflags,cons转载 2013-05-18 14:46:30 · 687 阅读 · 0 评论 -
驱动之并发控制
自旋锁与信号量"类似而不类",类似说的是它们功能上的相似性,"不类"指代它们在本质和实现机理上完全不一样,不属于一类。 自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环查看是否该自旋锁的保持者已经释放了锁,"自旋"就是"在原地打转"。而信号量则引起调用者睡眠,它把进程从运行队列上拖出去,除非获得锁。这就是它们的"不类"。 但是,无论是信号量,还是自旋锁,在任转载 2013-05-18 14:49:41 · 594 阅读 · 0 评论 -
驱动编程之阻塞与非阻塞
#include #include #include #include #include #include #include #include #include #include #include #include #define GLOBALFIFO_SIZE 0x1000 /*全局fifo最大4K字节*/#define FIFO_CLEAR转载 2013-05-18 14:51:15 · 621 阅读 · 0 评论 -
linux驱动笔记——环境搭建1
1, 安装 Module-Init-ToolsModule-Init-Tools 的内容安装的程序:depmod, insmod, insmod.static, lsmod (链接到 insmod), modinfo, modprobe (链接到 insmod), rmmod (链接到 insmod)简要描述depmod创建一个可加载原创 2012-02-04 01:00:45 · 1622 阅读 · 1 评论 -
设备驱动之class
static struct class amvideo_class = { .name = AMVIDEO_CLASS_NAME, .class_attrs = amvideo_class_attrs,#ifdef CONFIG_PM .suspend = amvideo_class_suspend, .resume =原创 2013-07-25 15:39:46 · 795 阅读 · 0 评论 -
uboot 中支持yaffs2文件系统
uboot源码默认是不支持yaffs文件系统的,所以我们需要自己修改源码进行支持。 首先我们进入U-Boot源码目录添加对yaffs镜像烧写的支持. 在common/cmd_nand.c里仿照jffs2来写一些yaffs的内容: 在: U_BOOT_CMD(nand, 5, 1, do_nand, "nand - NAND sub-system转载 2013-08-06 21:56:38 · 3070 阅读 · 1 评论 -
container_of
在学习Linux驱动的过程中,遇到一个宏叫做container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码:/** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the me转载 2012-10-06 12:48:44 · 473 阅读 · 0 评论 -
文件系统制作
1,什么是文件系统? 文件系统是在特定存储介质(flash ,硬盘)上管理目录和文件需要的数据2,文件系统制作: 1,创建目录和文件:mkdir rootfs cd rootfs mkdir bin dev etc lib proc sbin sys usr mnt tmp var mkdir usr/bin usr/lib usr转载 2013-04-01 21:10:03 · 678 阅读 · 0 评论 -
最经典的单片机矩阵扫描程序C语言
/****************************************************************************************** 键盘3*4扫描程序 入口参数: 出口参数: 键码:ee de be,7e,ed,dd,bd,7d,eb,db,bb,7b 0 1 2 3 4 5 6 7 8原创 2009-07-16 12:14:00 · 1597 阅读 · 1 评论 -
内核编译安装命令
内核编译:make clean : remove most generater files but keep config files.make mrproper: remove all gengerator files and config files.make distclean: mrproper + remove editor backup and patch files.原创 2013-03-30 23:27:52 · 704 阅读 · 0 评论 -
根文件系统制作
1,为什么要划分用户空间和内核空间:主要是保证安全性,ARM 7种工作模式: 用户模式(usr),快速中断(fiq),外部中断(irq),管理模式(svc),数据访问中止(abt),系统模式(sys),未定义指令异常(und).不同的模式对寄存器访问有不同权限。linux利用了CPU这一特性,分级来运行内核和应用,避免了用户误操作产生系统崩溃。使操作系统得到保护。通过系统调用和硬件中断转载 2013-03-30 22:11:02 · 732 阅读 · 0 评论 -
帧设备驱动(二)
一是对LCD及其相关部件的初始化,包括画面缓冲区的创建和对DMA通道的设置;二是对画面缓冲区的读写,具体到代码为read,write等系统调用接口。 这些都是由帧缓冲设备驱动来完成的。帧缓冲设备对应的设备文件通常为/dev/fb031,Linux的帧缓冲设备的驱动主要基于两个文件: 1)linux/include/linux/fb.h; 2)linux/driver转载 2013-03-30 16:56:15 · 797 阅读 · 0 评论 -
TINY6410烧写说明
烧到flash中 :1,烧写superboot到SD-Flasher,以后此步骤省。2,SD卡启动,进入USB下载模式。3,格式化NandFlash4,烧写UBOOT,256M的。5,下载kernel n43的6,下载UBIFS mcl2类型的根文件系统原创 2013-03-31 18:57:15 · 681 阅读 · 0 评论 -
驱动模块的加载
进入生成的目录, insmod ./hello.ko 装载驱动。Module Size Used byhello 9472 0 nls_iso8859_1 12032 0 nls_cp437 13696 0 vfat原创 2012-09-02 18:56:48 · 1029 阅读 · 0 评论 -
uboot 编译与其命令
交叉工具链:arm-linux-gcc arm-linux-objdump -D -S 反汇编arm-linux-readelf -a ELF文件查看信息。有的程序经过交叉编译器编译不能运行,可以查看大小端是否正确。arm-linux-readelf -d 查看程序依赖的库文件,以此判断所需库文件是否存在于lib目录下。uboot 编译:make clean 。make原创 2013-03-31 22:52:19 · 1764 阅读 · 0 评论 -
基于MTD的NAND的设备驱动
基于MTD的NAND驱动开发(一)○、说明大约用了两个礼拜不到的时间为公司的IPcamera系统写了基于MTD的NAND驱动(linux-2.6.22.10内核),目前已可以在该驱动的支持下跑cramfs和jffs2文件系统,另外,该驱动也可以同时支持small page(每页512Byte)和big page(每页2048 Byte)两种NAND芯片。在此整理一下与NAN转载 2013-04-01 21:33:45 · 795 阅读 · 0 评论 -
img 内存布局
RO是程序中的指令和常量RW是程序中的已初始化变量ZI是程序中的未初始化的变量由以上3点说明可以理解为:RO就是readonly,RW就是read/write,ZI就是zeroARM映像文件的组成所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。以下用Image文件来称呼它。Image文件包含了RO和RW数据。之所以Image文件不包原创 2013-03-03 14:38:31 · 498 阅读 · 0 评论 -
linux 内核调试
LINUX内核调试过程,多谢南方,让我能够顺利进入内核的调试界面,此教程也是请教南方的,我整理了一下发布上来,我想应该还有地方有错误,不过运行是正常了,希望大家指点。1、通过uboot下载linux内核 nfs 0x32000000192.168.0.10:/mnt/disk2/uImage192.168.0.10是linux内核的IP地址/mnt/disk2/uImage原创 2013-03-27 22:29:45 · 843 阅读 · 0 评论 -
如何编写linux驱动
如何编写Linux设备驱动程序Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简洁,操作方便,功能也很强大,但是支持函数少,只能依赖kernel中的函数,有些常用的操作要自己来编写,而且调试也不方便。以下的一些文字主要来源于khg,johns转载 2013-03-27 22:53:34 · 930 阅读 · 0 评论 -
request_region 申请一块输入输出区域
void request_region(unsigned long from, unsigned long num, const char *name) 这个函数用来申请一块输入输出区域。 如果这段I/O端口没有被占用,在我们的驱动程序中就可以使用它。在使用之前,必须向系统登记,以防止被其他程序占用。登记后,在/proc/ioports文件中可以看到你登记的io口。原创 2013-03-20 22:07:23 · 724 阅读 · 0 评论 -
ARM初始化
;简介:ARM初始化程序;************************************************************** IMPORT Main AREA Init,CODE,READONLY ENTRY LDR R0, =0x3FF0000 LDR R1, =0xE7FFFF80 ;配置SYSCFG,片内16K Cache,16K SRAM转载 2013-03-17 14:13:45 · 848 阅读 · 0 评论 -
linux系统移植要点
1,Boot Loader 编译环境搭建第一步: 在编译Boot Loader之前,首先要确保已经安装了交叉编译工具链,可以利用which arm-linux-gcc 命令进行检测.进入/mnt/cdrom/Toolchain 目录下,将xscalev1_liod_qt_2.3.7.tar.gz 工具链解压到/usr/local/ 目录下面,如下图2 所示。第三步: 利用export命转载 2013-08-06 22:41:17 · 3795 阅读 · 0 评论