驱动编程
玉露枫林
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
drivers_day01
三个要求: 1.安装linux系统 ubuntu,fedora(u盘安装,硬盘安装) 安装前备份重要的资料! 手动分区! 2.安装工具和搭建开发环境 tftp nfs vim + .vimrc + .vim(插件) (/home/tarena/下) ctags / cscope :看源代码工具 wine + SI op转载 2015-04-01 21:52:54 · 500 阅读 · 0 评论 -
drivers_day16
回顾: I2C总线: 1.定义:两线式串行总线 2.硬件特性: SCL SDA 上拉电阻 3.I2C总线协议:数据的传输 START 设备地址 ACK STOP 时序问题:看芯片手册! linux内核软件实现: 1.驱动通过GPIO模拟I2C时序来实现! 2.lin转载 2015-04-01 22:11:14 · 470 阅读 · 0 评论 -
drivers_day13
回顾: 1.linux内核分离思想 明确:一个完整的硬件设备驱动必须包含硬件信息和软件信息; 分离:就是将硬件信息和软件信息进行分离,让以后驱动的开发重心放在硬件信息上,让驱动开发者从软件的实现上解脱出来! linux内核分离思想的实现: 定义一个平台总线platform_bus_type(struct bus_type虚拟总线类型)来维护两个链表。 特点: 内核已经实现; 维护d转载 2015-04-01 22:08:25 · 405 阅读 · 0 评论 -
drivers_day02
回顾: 1.回顾嵌入式linux系统相关内容 2.linux系统分为用户空间和内核空间 用户空间: CPU的工作模式为:USR(用户)模式,也是非特权模式 运行:应用程序,C库等 地址空间:4G虚拟地址空间,占前3G 地址范围:0x00000000~0xBFFFFFFF 不能直接访问硬件资源,不能访问内核空间地址 内核空转载 2015-04-01 21:54:52 · 415 阅读 · 0 评论 -
drivers_day08
回顾: 谈谈中断: 1.为什么有中断 轮询 中断 2.中断硬件触发过程 中断控制器 3.中断的处理流程 异常向量表 保存现场 执行服务程序 恢复现场 4.linux中断编程 内核已经实现的内容: 异常向量表 保存现场 恢复现场 驱动开发关注内容: 申请中断硬件资源:中断号 注册中断对应的服务程序:中断处理函数 reqeust_irq/free_irq 5.转载 2015-04-01 22:12:54 · 367 阅读 · 0 评论 -
drivers_day17
回顾: 1.linux内核I2C驱动实现 GPIO模拟I2C的时序来实现; 直接操作I2C控制器来实现; 采用linux内核的I2C驱动框架来实现; linux内核I2C驱动框架: 应用层:open,read,write,ioctl访问I2C外设 eeprom.addr //外设的片内地址 eeprom.data //外设访问的数据 --------转载 2015-04-01 22:12:08 · 336 阅读 · 0 评论 -
drivers_day15
回顾: 1.select 目的:利用select/poll能够对多个设备进行同时的监听; 应用程序调用select/poll,对应底层驱动的接口都是同一个poll. select系统调用实现过程: 1.应用程序调用select,首先调用C库的select 2.保存系统调用号,触发软中断 3.最终到达内核的sys_select 4.sys_select: 根据select指定转载 2015-04-01 22:10:25 · 358 阅读 · 0 评论 -
drivers_day14
回顾: 1.mmap: 作用:就是将设备的物理地址映射到用户的虚拟内存空间上; read,write,ioctl三个系统调用函数,如果涉及数据的访问,必然要经过两次的数据拷贝:用户空间,内核空间,硬件。 mmap的使用将2次的数据操作变成1次,大大的提高了设备数据的访问效率! mmap系统调用过程: 1.应用程序mmap 2.C库的mmap 3.sys_mmap: 内核到当前进程转载 2015-04-01 22:09:05 · 554 阅读 · 0 评论 -
drivers_day09
回顾: 1.硬件定时器的特点 能够通过编程指定它的工作输出频率,周期性给CPU产生一个时钟中断信号; linux内核也有对应的时钟中断的处理函数,这个函数被内核周期性的调用; 时钟中断的处理函数: 1.更新jiffies/jiffies_64 2.更新实际时间 3.检查当前进程的时间片 4.检查是否有到期的软件定时器(如果有,执行软件定时器处理函数,然后删除软件定时器) ..转载 2015-04-01 22:05:28 · 705 阅读 · 0 评论 -
syscall_add
案例 新增内核系统调用 案例目的 u 理解linux内核系统调用 u 掌握增加系统调用的方法 硬件设备 u PC机(X86兼容机) u CW210开发板 软件环境 u Ubuntu12.04 u arm-none-linux-gnueabi-gcc 案例内容 在linux内核中增加新的系统调用,在用户空间编程实现对新增系统调用的使用。 案例步骤 1、进入内转载 2015-04-01 21:58:39 · 402 阅读 · 0 评论 -
drivers_day12
回顾: 1.阻塞和非阻塞 阻塞:休眠,等待队列,2个编程方法 非阻塞:不休眠,立即返回到用户空间 应用程序:open(...,O_NONBLOCK); 驱动:if(file->f_flags & O_NONBLOCK) //成立非阻塞 2.linux内核内存相关内容 内存空间:32,4G IO空间:16,64K 3.物理地址和虚拟地址,MMU 4.用户空间,内转载 2015-04-01 22:08:23 · 323 阅读 · 0 评论 -
drivers_day11
回顾: 1.linux内核等待队列机制 目的:应用程序通过系统调用,进入内核空间,一旦发现驱动操作的设备或者数据不可用,由内核让进程进行休眠和唤醒操作。 等待队列机制编程的实现过程: 1.方法1 分配等待队列头 初始化等待队列头 分配进程的容器,内核表示当前进程用current指向当前进程的struct task_struct结构体对象! 初始化进程容器 将当前进程添加到睡眠队列转载 2015-04-01 22:07:32 · 334 阅读 · 0 评论 -
drivers_day10
回顾: linux内核如何解决竞态: 1.概念 并发:多个执行单元同时发生! 竞态:并发的多个执行单元同时访问共享资源引起的竞争状态! 互斥访问:当有多个执行单元对共享资源进行访问时,只允许一个执行单元对共享资源进行访问,其他执行单元禁止访问共享资源! 临界区:访问共享资源的代码区,所以互斥访问就是对临界区的互斥访问! 共享资源 休眠 2.形成竞态的情况 多CPU:多个cpu之转载 2015-04-01 22:06:06 · 389 阅读 · 0 评论 -
drivers_day07
回顾: 中断 1.为什么有中断,中断作用? 因为CPU与外设处理数据的速度不同,CPU处理数据的速度远远大于外设处理数据的速度!以串口为例:波特率115200bits/s,但CPU为1G的主频(109),如果采用轮询的方式,则每隔一定时间,查看一次。在这段时间内只能干一件事!CPU的利用率太低! 轮询的方式: 轮询(Polling)是一种CPU决策如何提供周边设备服务的方式,又称“程控输出转载 2015-04-01 22:03:38 · 390 阅读 · 0 评论 -
drivers_day06
回顾: linux字符设备驱动struct file_operations相关操作接口: structfile_operations { int(*open)(struct inode *inode, struct file *file); int(*release)(struct inode *inode, struct file *file); ssize_t(*read)(stru转载 2015-04-01 22:02:59 · 376 阅读 · 0 评论 -
drivers_day05
回顾: linux内核字符设备驱动实现 1.linux内核设备驱动分类 字符设备:字节流,串口,LED,按键,蜂鸣器,ADC,声卡,显卡,LCD液晶屏,触摸屏,各类传感器,GPS,GPRS,蓝牙 块设备:512字节,硬盘,光盘,SD卡,TF卡,nandflash(SLC,MLC,TLC),emmc,U盘 网络设备:网卡,配合网络协议栈 2.设备文件 “一切皆文件”; 硬件设备在用户转载 2015-04-01 22:03:05 · 376 阅读 · 0 评论 -
drivers_day04
回顾: 1.linux内核提供的GPIO通用的操作库函数 硬件GPIO在内核都给定了一个软件编号,表示他们的唯一性! 硬件GPIO 内核软件编号 GPC1_3 S5PV210_GPC1(3) 内核驱动程序首先向内核申请GPIO资源: gpio_request 一旦申请成功,就可以进行输入和输出操作: gpio_direction_output gp转载 2015-04-01 22:00:02 · 419 阅读 · 0 评论 -
drivers_day03
回顾: 1.linux系统分为用户空间和内核空间 用户空间 内核空间 2.linux内核编程的规范 2.1入口函数:module_init intdriver_entry(void); 2.2出口函数:module_exit voiddriver_exit(void); 注意: 1.不能使用标准的C库头文件和C库 2.不能处理浮点数,一般把转载 2015-04-01 21:55:29 · 409 阅读 · 0 评论 -
Linux内核学习总结(附录linux协议栈函数调用图)
Linux内核学习总结 作者: 北京—小武 邮箱:night_elf1020@163.com 新浪微博:北京-小武 Linux操作系统以GPL作为限制条款进行开源,对计算机界产生了巨大影响。在短短的二十年里迅速壮大。Linux内核从产生到现在一直在不断被改进,现在就我最近对其学习内容和体会进行下总结。学习所用书籍是美国Robert Love著的《linux内核设计和转载 2016-08-15 22:53:24 · 1455 阅读 · 0 评论
分享