
Linux驱动编程
coding__madman
爱IT & 爱生活 && no error & no warn
展开
-
OK6410字符设备驱动点亮LED
字符设备驱动模型分为三步:第一步:驱动设备初始化 (分配cdev、初始化cdev、注册cdev、硬件初始化)第二步:实现设备操作(读写以及控制设备)第三步: 驱动注销虽然这是一个最简单的驱动,而且之前也曾经写过两遍,时隔大半年,今天回过头来重新整还是一波三折!感谢那些热心无私的同学的帮助!先贴下原理图和相关芯片手册上的一些要用到的东西!原创 2016-05-11 23:23:13 · 1861 阅读 · 0 评论 -
Linux应用程序访问字符设备驱动详细过程解析
在linux下对上面的文件进行静态编译(考虑到前面开发板上移植的某些库还没有添加进去)生成read-mem目标文件,然后进行反汇编并将反汇编生成的文件导入到当前目录下的dump上去。这里红箭头指向的两行是比较重要的两行,将3传给r7,然后使用了SVC系统调用指令,这时PC指针会从用户空间进入到内核空间(通过一个固定的入口),第二步会取r7寄存器里面的值3, 然后根据这个值查一个表确定要调用那个系统调用(即对于3的系统调用内核代码)。系统就是通过固定入口进入内核空间,然后取出系统调用编号,在利用编号查找上原创 2016-05-08 18:52:52 · 10181 阅读 · 2 评论 -
ioctl---字符设备的控制技术
字符设备的控制1. 字符设备控制理论 1.1 作用 大部分驱动程序除了需要提供读写设备的能力外,还需要具备控制设备的能力。比如:改变波特率 1.2 应用程序接口 在用户空间,使用ioctl系统调用来控制设备,原型如下: int ioctl(int fd, unsigned long cmd, ...)原创 2016-05-09 22:59:14 · 3755 阅读 · 0 评论 -
串口驱动程序设计详解---串口初始化(上)
TTY驱动程序架构:1. TTY概念解析 1.1 /dev/ttySCA0 1.2 /dev/tty1-n 1.3 /dev/console 在linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。 . 串口终端(/dev/ttyS*) 串口终端是使用计算机串口连接的终端设备。Li原创 2016-05-19 23:51:13 · 26425 阅读 · 3 评论 -
网卡驱动程序设计---网络子系统深入分析以及DM9000网卡驱动实现
网络子系统:比如网络编程里面通过socket创建好了一个文件操作符,然后对其进行write操作,这个write对应的入口其实是一个socket_file_ops结构对应的函数操作集:可以看到write对应的入口函数是sock_aio_write函数这个函数又对应着do_sock_write一层又一层,这个函数又调用了__sock_sendmsg函数,下面来看原创 2016-06-02 22:29:10 · 1113 阅读 · 0 评论 -
Linux I2C驱动
I2C总线介绍:1. I2C硬件结构 1.1 I2C电气特性 I2C总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。 I2C总线只有两根双向信号线。 SDA: Serial Data Line 数据线 SCL: Serial Clock 时钟线I2C总线协议规定:从设备采用7位的原创 2016-06-10 00:39:17 · 1294 阅读 · 0 评论 -
Linux SPI驱动设计
1. SPI总线结构SPI串行外设接口,是一种高速的,全双工,同步的通信总线。采用主从模式架构,支持多个slave,一般仅支持单MasterSPI接口共有4根信号线,分别是:设备选择线(SS)、时钟线(SCK)、串行输出数据线(MOSI)、串行输入数据线(MISO).2. 数据传输过程主节点通过MOSI线输出数据,从节点在SIMO处从主节点读取数据。同时,也通过SMOI原创 2016-06-10 15:34:49 · 5462 阅读 · 0 评论 -
Linux USB驱动程序设计
USB请求块(USB request block-URB)是USB设备驱动中用来与USB设备通信所用的基本载体和核心数据结 构,非常类似于网络设备驱动中的sk_buff结构体,是USB主机与设备通信的“电波”。 1. USB 设备驱动程序创建并初始化一个访问特定端点的urb,并提交给USB core; 2. USB core提交该urb到USB主控制器驱动程序; 3. USB 主控制器驱动程序根据该urb描述的信息,来访问USB设备原创 2016-06-11 11:31:18 · 6467 阅读 · 0 评论 -
块设备驱动架构分析
1. 块设备概念:块设备是指只能以块为单位进行访问的设备,块的大小一般是512个字节的整数倍。常见的块设备包括硬件,SD卡,光盘等。2. 块设备驱动的系统架构2.1 系统架构---VFSVFS是对各种具体文件系统的一种封装,用户程序访问文件提供统一的接口。2.2 系统架构---Cache当用户发起文件访问请求的时候,首先回到Disk Cache中寻址文件原创 2016-06-06 22:34:12 · 8475 阅读 · 2 评论 -
字符设备驱动模型
字符驱动编程模型:1. 设备描述结构cdev 1.1 结构定义 1.2 设备号 1.3 设备操作集在Linux系统中,设备的类型非常繁多,如:字符设备,块设备,网络接口设备,USB设备,PCI设备,平台设备,混杂设备……,而设备类型不同,也意味着其对应的驱动程序模型不同,这样就导致了我们需要去掌握众多的驱动程序模型。那么能不能从这些众多的驱动模型中提炼出原创 2016-05-08 21:48:23 · 5342 阅读 · 0 评论 -
printk函数日志级别的设置
下面执行cat /proc/sys/kernel/printk 打印出的四个数字分别代表:控制台日志级别、默认的消息日志级别、最低的控制台日志级别和默认的控制台日志级别只有当printk的日志级别小于console_loglevel时,消息才能显示出来。以下为查看和设置printk函数的日志级别原创 2016-05-08 13:54:07 · 1074 阅读 · 0 评论 -
嵌入式linux内核制作
1. Linux体系结构从整体上来分,linux可以分为User Space和Kernel Space构成,即用户空间和内核空间用户空间:应用程序 C库 系统配置文件等内核空间:在内存中,用户一般不能直接接触到(系统调用接口,体系结构相关的一些代码等等)这样划分的的好处:其实内核空间与用户空间是程序执行的两种不同的状态,通过系统调用和硬件中断能够完成从用户空间到原创 2016-05-01 23:58:06 · 6565 阅读 · 1 评论 -
嵌入式Linux根文件系统制作和挂载
嵌入式Linux系统由三部分组成: uboot、kernel、根文件系统, 还是这张老图这里的根文件系统可以说是包含两个部分: 一个是根,一个是文件系统那么什么是根呢?哈哈 其实根表示的就是第一个的意思下面贴张图看看整个根文件系统制作的步骤:第一步创建目录,这里是在我自己的一个目录下建立一个名为rootfs的目录:第二步 :创建设备文件(比如操作串口,其原创 2016-05-02 20:33:53 · 20642 阅读 · 2 评论 -
linux进程管理子系统简要分析
Linux进程管理:进程与程序:程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体。进程:是一个执行中的程序,它是动态的实体进程四要素:1. 有一段程序供其执行,这段程序不一定是某个进程所专有,可以与其他进程共用2. 有进程专用的内核空间堆栈3. 在内核中有一个task_struct数据结构,即通常所说的“进程控制块”。有了这个数据结构,进程才能原创 2016-05-05 19:21:39 · 2103 阅读 · 0 评论 -
网卡驱动设计---架构分析加回环网卡驱动设计(网卡驱动上)
网卡驱动架构分析:1. Linux网络子系统2. 重要数据结构总结一下三个重要的数据结构: 2.1. net_device 2.2. net_device_ops 2.3. sk_buff3. 网卡驱动架构分析CS8900.c //早期2410使用的网卡芯片 3.1. 网卡初始化首先找到驱动程原创 2016-05-29 21:24:55 · 4483 阅读 · 2 评论 -
linux内核模块开发基础
1. 什么是内核模块 内核模块具有以下两个特点:1. 模块本身并不被编译进内核文件(zImage或bzImage),可以根据需求,在内核运行期间动态的安装或卸载。2. 为什么需要内核模块 原因:Linux内核的整体结构非常庞大,其包含的组件也非常多,如何使用这些组件呢,方法1:把所有的组件都编译键内核,即:zImage或bzImage,但这样会导致一个问题:占用内存过多。然后原创 2016-05-06 20:35:50 · 3472 阅读 · 0 评论 -
总线设备驱动模型
总线驱动设备模型:1. 总线设备驱动模型概述 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求也越来越高,2.4内核已经难以满足这些需求,为适应这宗形势的需求,从linux2.6内核开始提供了全新的设备模型2. 总线 2.1 描述结构 2.2 注册 2.3 注销void bus_unr原创 2016-05-17 21:52:45 · 5511 阅读 · 1 评论 -
Linux内核链表深度分析
链表简介:链表是哟中常用的数据结构,它通过指针将一系列数据节点连接成一条数据链。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或者删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。1. 链表对比传统链表和内核链表传统链表:一般指的是单向链表struct List{struct li原创 2016-05-07 16:15:04 · 13046 阅读 · 2 评论 -
Linux按键驱动程序设计详解---从简单到不简单
混杂设备驱动模型:1. 混杂设备描述 在Linux系统中,存在一类字符设备,它们拥有相同的主设备号(10),单次设备号不同,我们称这类设备为混 杂设备(miscdevice).所有的混杂设备形成一个链表,对设备访问时内核根据次设备号查到相应的混杂设备。 混杂设备也是字符设备! linux中使用struct miscdevi原创 2016-05-15 21:01:05 · 16064 阅读 · 10 评论 -
Linux的fasync驱动异步通知详解
首先还是先从init函数来总结:该驱动是一混杂设备驱动模型来写的,这个主要是借鉴网上的好多资料都是一这种模式来写的,Linux里面misc混杂设备驱动的主设备号是为10的驱动设备,init模块首先是用 misc_register()函数注册一个一个混杂设备驱动,参数一个混杂设备驱动里面非常重要的一个数据结构 struct miscdevice。kill_fasync 及 fasync_helper用于异步通知中,其中 kill_fasync(&b_async,SIGIO,POLL_IN)函数的功能是向应用原创 2016-07-07 17:43:14 · 5787 阅读 · 1 评论