![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux Device Driver
yuesichiu
目前负责相机功能开发,工作内容主要包括拍照、录像、相册浏览、图像融合等工作
展开
-
Linux字符设备驱动分析
Linux字符设备驱动分析1、字符设备描述 struct cdevstruct cdev表示字符设备的内核的内部结构。struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list;原创 2012-11-10 20:02:51 · 813 阅读 · 0 评论 -
Linux下内存分配与映射之一
地址类型:32位的cpu,共4G空间,其中0-3G属于用户空间地址,3G-4G是内核空间地址。用户虚拟地址:用户空间程序的地址物理地址:cpu与内存之间的使用地址总线地址:外围总线和内存之间的使用地址内核逻辑地址:内存的部分或全部映射,大多数情况下,它与物理地址仅差一个偏移量。如Kmalloc分配的内存。内核虚拟地址:内核空间的地址映射到物理地址上,但映射不必是线性的。所有原创 2013-05-05 18:32:26 · 1113 阅读 · 0 评论 -
Linux内核设计与实现(8)---中断和中断处理
之前写过中断相关的文章了,详细分析过ARM底层中断实现过程,这篇文章着重从操作系统设计层面理解中断系统。1.中断中断:是外围设备产生的异步事件,不同设备,中断号不同;比如在经典PC上,IRQ 0是时钟中断,IRQ 1是键盘中断;对于连接于PCI总线上的设备,中断还可以是动态分配的。异常:与中断不同,异常的产生必须考虑与处理器时钟同步,比如除零,缺页,软中断等,都是由处理器自身产生的同步转载 2014-03-26 19:08:10 · 978 阅读 · 0 评论 -
进程上下文和中断上下文、原子上下文的区别
内核空间和用户空间是现代操作系统的两种工作模式,内核模块运行在内核空间,而 用户态应用程序运行在用户空间。它们代表不同的级别,而对系统资源具有不同的访问权限。内核模块运行在最高级别(内核态),这个级下所有的操作都受系统信 任,而应用程序运行在较低级别(用户态)。在这个级别,处理器控制着对硬件的直接访问以及对内存的非授权访问。内核态和用户态有自己的内存映射,即自己的 地址空间。 系统的两种不同转载 2014-03-26 20:03:19 · 4552 阅读 · 0 评论 -
Linux中块设备驱动程序分析
基于《Linux设备驱动程序》书中的sbull程序以对Linux块设备驱动总结分析。开始之前先来了解这个块设备中的核心数据结构:struct sbull_dev { int size; /* Device size in sectors */ u8 *data;原创 2014-07-04 10:39:11 · 1809 阅读 · 0 评论 -
X86架构下Linux启动过程分析
1、X86架构下的从开机到Start_kernel启动的总体过程这个过程简要概述为:开机——>BIOS——>GRUB/LILO——>Linux Kernel其运行的流程图和重要函数如下图所示: 2、加载Linux内核(基于X86)的内存布局图 | |0A0000 +--------------------------+| Reserve原创 2014-08-07 15:27:02 · 6794 阅读 · 0 评论 -
Linux 内核引导参数简介
概述内核引导参数大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导参数多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导参数。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导参数,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导参数说明。大多数参数是通过"__set转载 2014-10-13 11:51:08 · 13975 阅读 · 0 评论 -
Redis快速入门、熟悉和使用
Redis快速入门这篇文章主要为那些不熟悉而首次使用Redis的程序开发人员撰写,文章主要包括以下内容:Download and compile Redis to start hacking.Use redis-cli to access the server.Use Redis from your application.Understand how Redis persistenc翻译 2014-11-07 08:43:51 · 2024 阅读 · 0 评论 -
Linux驱动程序之I/O端口操作和I/O内存操作__raw_readl和__raw_writel函数
1、__raw_readl和__raw_writel函数 Linux对I/O的操作都定义在asm/io.h中,相应的在arm平台下,就在asm-arm/io.h中。#define __raw_readl(a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a))#define __raw_w原创 2015-04-18 18:57:22 · 6352 阅读 · 0 评论 -
Linux设备驱动之工作队列
工作队列与Tasklet相同点和不同点:1、相同工作队列与Tasklet都允许内核代码请求某个函数在将来的时间被调用2、区别(1)、tasklet运行在中断上下文,因此所有的tasklet代码都必须是原子的。而工作队列函数运行在一个特殊的内核进程上下文, 因此它们具有更好的灵活性。工作队列可以休眠。(2)、Tasklet始终运行在被初始提交的同一处理器上,但这只是原创 2017-04-06 10:14:29 · 492 阅读 · 0 评论 -
Mini2440中的DM9000网卡驱动分析
虽然Linux驱动程序应该是和具体的硬件平台分离的,但是为了更好的理解DM9000的驱动程序,这里还是结合一下Mini2440开发板,这样也可以更好的体会如何实现驱动和平台分离。本文分成以下几个部分: 一、Mini2440开发板上DM9000的电气连接和Mach-mini2440.c文件的关系。 二、两个重要的结构体介绍:sk_buff和net_device 三、具体代码分析转载 2013-03-29 10:34:32 · 1005 阅读 · 0 评论 -
友善之臂Mini2440之嵌入式Linux下Nor Flash驱动程序设计
嵌入式Linux下Nor Flash驱动程序设计前面已经详细讲述了MTD子系统原理知识,这一节讲述嵌入式Linux下对NorFlash的驱动程序设计。在MTD设备层上有MTD字符设备和MTD块设备。1、MTD字符设备层的源码文件为/mtd/mtdchar.c。该源码文件为MTD原始设备提供了一个字符设备访问接口,使得上层应用程序可以以字符设备的方式来访问MTD原始设备。mtdchar.c主原创 2013-01-01 16:49:15 · 2093 阅读 · 0 评论 -
内存映射和DMA
内存映射和DMAstruct page { unsigned long flags; /* Atomic flags, some possibly * updated asynchronously */ atomic_t _count; /* Usage count, see below. */ //对该页的访问计数,当计数值为0时,给空闲链表。 union原创 2012-11-27 22:23:52 · 1068 阅读 · 0 评论 -
linux字符设备驱动程序的设计之休眠
linux字符设备驱动程序的设计之休眠 休眠对进程来说,意味着等待将来的某个时间发生。如何以安全的方式进入休眠,需要注意以下两点:永远不要在原子上下文中进入休眠。当进程被唤醒时,我们永远无法知道休眠了多长时间,或者休眠期间发生了什么事情。 等待队列就是一个进程链表,其中包含了等待某个特定事件的所有进程。在linux中,一个等待队列通过一个“等待队列头(原创 2012-11-15 12:43:15 · 1291 阅读 · 0 评论 -
Linux设备驱动模型之总线
Linux设备驱动模型之总线宏BUS_ATTR 在创建属于总线的设备属性的函数bus_creat_file。其形式如下:int bus_create_file(struct bus_type *bus, struct bus_attribute *attr){ int error; if (bus_get(bus)) { error = sysfs_create_原创 2012-11-21 20:38:40 · 769 阅读 · 0 评论 -
嵌入式Linux系统中利用mdev自动创建设备文件节点
嵌入式Linux系统中利用mdev自动创建设备文件节点 mdev是busybox自带的一个简化版的udev,作用是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件,在文件系统中的/dev目录下的设备节点都是由mdev创建的 mdev扫描/sys/class和/sys/block中所有的类设备目录,如果在目录中含有名为"dev"的文件,且文件中包原创 2012-12-23 20:06:24 · 3027 阅读 · 0 评论 -
友善之臂Mini2440之嵌入式Linux下Nand Flash驱动分析
嵌入式Linux下Nand Flash驱动分析一、Nand Flash驱动源码文件含义 在Linux内核中,MTD源代码放在/driver/mtd目录下,该目录中包含chips、devices、maps、nand、onenand和ubi六个子目录。其中只有nand和onenand目录中的代码才与Nand驱动有关,nand目录中的代码比较通用,而onenand目原创 2012-12-24 22:14:26 · 1696 阅读 · 0 评论 -
Linux设备驱动程序:中断处理之顶半部和底半部
Linux设备驱动程序:中断处理之顶半部和底半 设备的中断会打断内核中进程的正常调度和运行,系统对更高吞吐率的追求势必要求中断服务程序尽可能地短小精悍。但是,这个良好的愿望往往与现实并不吻合。在大多数真实的系统中,当中断到来时,要完成的工作往往并不会是短小的,它可能要进行较大量的耗时处理。 为了在中断执行时间尽可能短和中断处理需完成大量工作之间找到一个原创 2012-12-12 14:37:27 · 1904 阅读 · 0 评论 -
友善之臂Mini2440之嵌入式Linux下Nand Flash相关操作流程
嵌入式Linux下Nand Flash相关操作流程嵌入式Linux系统采用MTD子系统来进行存储的访问和管理。MTD(Memory Technology Device)是用于访问memory设备的Linux子系统。MTD的主要目的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。MTD设备可分为四层,这四层从上到下分别是设备节点、MTD设备层、MT原创 2012-12-27 13:35:11 · 1369 阅读 · 0 评论 -
友善之臂Mini2440之嵌入式Linux下应用程序对Nand Flash的读写操作
应用程序对Nand Flash的读写操作接上篇继续分析Nand Flash驱动:Nand Flash的设备探测函数s3c24xx_nand_probe的动作。s3c24xx_nand_probe函数首先创建代表MTD原始设备的数据结构体struct mtd_info *mtd,并将其初始化,源代码如下所示:/* s3c24xx_nand_probe * called by devi原创 2012-12-29 13:18:57 · 3050 阅读 · 0 评论 -
《Linux Kernel Development》读书笔记
《Linux Kernel Development》读书笔记http://www.cppblog.com/luckycat/archive/2010/03/03/108836.html 《Linux内核情景分析》这本书读过了一遍,不想继续读第二遍了. 《Linux Kernel Development》这本书前后读了3遍,写得实在是好,正所谓"布衣暖,菜根香,好书滋转载 2012-12-17 09:45:30 · 1611 阅读 · 0 评论 -
How To Write Linux PCI Drivers
摘自:https://www.kernel.org/doc/Documentation/PCI/pci.txt How To Write Linux PCI Drivers by Martin Mares <mj@ucw.cz> on 07-Feb-2000 updated by Grant Grundler <grundler@parisc-l...转载 2018-07-21 18:07:40 · 1250 阅读 · 0 评论