
驱动编程
玉露枫林
这个作者很懒,什么都没留下…
展开
-
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 · 480 阅读 · 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 · 429 阅读 · 0 评论 -
drivers_day13
回顾:1.linux内核分离思想明确:一个完整的硬件设备驱动必须包含硬件信息和软件信息;分离:就是将硬件信息和软件信息进行分离,让以后驱动的开发重心放在硬件信息上,让驱动开发者从软件的实现上解脱出来!linux内核分离思想的实现:定义一个平台总线platform_bus_type(struct bus_type虚拟总线类型)来维护两个链表。特点:内核已经实现;维护d转载 2015-04-01 22:08:25 · 387 阅读 · 0 评论 -
drivers_day02
回顾:1.回顾嵌入式linux系统相关内容2.linux系统分为用户空间和内核空间用户空间: CPU的工作模式为:USR(用户)模式,也是非特权模式 运行:应用程序,C库等 地址空间:4G虚拟地址空间,占前3G 地址范围:0x00000000~0xBFFFFFFF 不能直接访问硬件资源,不能访问内核空间地址内核空转载 2015-04-01 21:54:52 · 382 阅读 · 0 评论 -
drivers_day08
回顾:谈谈中断:1.为什么有中断轮询中断2.中断硬件触发过程中断控制器3.中断的处理流程异常向量表保存现场执行服务程序恢复现场4.linux中断编程内核已经实现的内容:异常向量表保存现场恢复现场驱动开发关注内容:申请中断硬件资源:中断号注册中断对应的服务程序:中断处理函数reqeust_irq/free_irq5.转载 2015-04-01 22:12:54 · 346 阅读 · 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 · 314 阅读 · 0 评论 -
drivers_day15
回顾:1.select目的:利用select/poll能够对多个设备进行同时的监听;应用程序调用select/poll,对应底层驱动的接口都是同一个poll. select系统调用实现过程:1.应用程序调用select,首先调用C库的select2.保存系统调用号,触发软中断3.最终到达内核的sys_select4.sys_select:根据select指定转载 2015-04-01 22:10:25 · 337 阅读 · 0 评论 -
drivers_day14
回顾:1.mmap:作用:就是将设备的物理地址映射到用户的虚拟内存空间上;read,write,ioctl三个系统调用函数,如果涉及数据的访问,必然要经过两次的数据拷贝:用户空间,内核空间,硬件。mmap的使用将2次的数据操作变成1次,大大的提高了设备数据的访问效率!mmap系统调用过程:1.应用程序mmap2.C库的mmap3.sys_mmap:内核到当前进程转载 2015-04-01 22:09:05 · 521 阅读 · 0 评论 -
drivers_day09
回顾:1.硬件定时器的特点能够通过编程指定它的工作输出频率,周期性给CPU产生一个时钟中断信号;linux内核也有对应的时钟中断的处理函数,这个函数被内核周期性的调用;时钟中断的处理函数:1.更新jiffies/jiffies_642.更新实际时间3.检查当前进程的时间片4.检查是否有到期的软件定时器(如果有,执行软件定时器处理函数,然后删除软件定时器)..转载 2015-04-01 22:05:28 · 672 阅读 · 0 评论 -
syscall_add
案例 新增内核系统调用案例目的u 理解linux内核系统调用u 掌握增加系统调用的方法硬件设备u PC机(X86兼容机)u CW210开发板软件环境u Ubuntu12.04u arm-none-linux-gnueabi-gcc案例内容在linux内核中增加新的系统调用,在用户空间编程实现对新增系统调用的使用。案例步骤1、进入内转载 2015-04-01 21:58:39 · 382 阅读 · 0 评论 -
drivers_day12
回顾:1.阻塞和非阻塞阻塞:休眠,等待队列,2个编程方法非阻塞:不休眠,立即返回到用户空间应用程序:open(...,O_NONBLOCK);驱动:if(file->f_flags & O_NONBLOCK) //成立非阻塞 2.linux内核内存相关内容内存空间:32,4GIO空间:16,64K 3.物理地址和虚拟地址,MMU 4.用户空间,内转载 2015-04-01 22:08:23 · 308 阅读 · 0 评论 -
drivers_day11
回顾:1.linux内核等待队列机制目的:应用程序通过系统调用,进入内核空间,一旦发现驱动操作的设备或者数据不可用,由内核让进程进行休眠和唤醒操作。等待队列机制编程的实现过程:1.方法1分配等待队列头初始化等待队列头分配进程的容器,内核表示当前进程用current指向当前进程的struct task_struct结构体对象!初始化进程容器将当前进程添加到睡眠队列转载 2015-04-01 22:07:32 · 310 阅读 · 0 评论 -
drivers_day10
回顾:linux内核如何解决竞态:1.概念并发:多个执行单元同时发生!竞态:并发的多个执行单元同时访问共享资源引起的竞争状态!互斥访问:当有多个执行单元对共享资源进行访问时,只允许一个执行单元对共享资源进行访问,其他执行单元禁止访问共享资源!临界区:访问共享资源的代码区,所以互斥访问就是对临界区的互斥访问!共享资源休眠2.形成竞态的情况多CPU:多个cpu之转载 2015-04-01 22:06:06 · 372 阅读 · 0 评论 -
drivers_day07
回顾:中断1.为什么有中断,中断作用?因为CPU与外设处理数据的速度不同,CPU处理数据的速度远远大于外设处理数据的速度!以串口为例:波特率115200bits/s,但CPU为1G的主频(109),如果采用轮询的方式,则每隔一定时间,查看一次。在这段时间内只能干一件事!CPU的利用率太低!轮询的方式: 轮询(Polling)是一种CPU决策如何提供周边设备服务的方式,又称“程控输出转载 2015-04-01 22:03:38 · 368 阅读 · 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 · 354 阅读 · 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 · 355 阅读 · 0 评论 -
drivers_day04
回顾:1.linux内核提供的GPIO通用的操作库函数硬件GPIO在内核都给定了一个软件编号,表示他们的唯一性!硬件GPIO 内核软件编号GPC1_3 S5PV210_GPC1(3)内核驱动程序首先向内核申请GPIO资源:gpio_request一旦申请成功,就可以进行输入和输出操作:gpio_direction_outputgp转载 2015-04-01 22:00:02 · 396 阅读 · 0 评论 -
drivers_day03
回顾:1.linux系统分为用户空间和内核空间用户空间内核空间2.linux内核编程的规范2.1入口函数:module_initintdriver_entry(void);2.2出口函数:module_exitvoiddriver_exit(void);注意: 1.不能使用标准的C库头文件和C库 2.不能处理浮点数,一般把转载 2015-04-01 21:55:29 · 377 阅读 · 0 评论 -
Linux内核学习总结(附录linux协议栈函数调用图)
Linux内核学习总结作者: 北京—小武邮箱:night_elf1020@163.com新浪微博:北京-小武Linux操作系统以GPL作为限制条款进行开源,对计算机界产生了巨大影响。在短短的二十年里迅速壮大。Linux内核从产生到现在一直在不断被改进,现在就我最近对其学习内容和体会进行下总结。学习所用书籍是美国Robert Love著的《linux内核设计和转载 2016-08-15 22:53:24 · 1411 阅读 · 0 评论