驱动开发
文章平均质量分 80
GoGeekBaird
Gopher, Pythonic and AI.
Change the world, even a little bit.
展开
-
linux内核学习--准备环境
一.查找源码由于我用VB装的虚拟机是Centos 8的版本,为方便后续学习,所以就以当前我正在使用的这个版本内核为例。1.先查看当前Centos具体版本号# 查看Centos版本[root@localhost kernel]# cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core) # 查看内核版本号[root@localhost linux-4.18.0-193.14.2.el8.x86_64]# uname -r4.18原创 2021-04-18 11:55:22 · 611 阅读 · 0 评论 -
Linux内核对中断函数的要求
1.linux内核对中断处理函数的要求明确:CPU资源给进程,软中断,硬件中断使用;明确:在linux系统中,硬件中断的优先级高于软中断,软中断的优先级高于进程;明确:优先级是指某个任务获取CPU资源的能力;明确:在linux系统,硬件中断无优先级;软中断有优先级;进程有优先级;明确:在linux系统,任务分中断和进程中断上下文:中断处理的整个流程,过程;进程上原创 2018-02-01 16:42:49 · 1098 阅读 · 0 评论 -
Linux内核内存
1.linux内核内存相关内容明确:用户空间占用4G虚拟内存的前3G 虚拟地址范围:0x00000000 ~ 0xBFFFFFFF 内核空间占用4G虚拟内存的后1G 虚拟地址范围:0xC0000000 ~ 0xFFFFFFFF明确: 不论在内核空间还是用户空间,看到的地址都是虚拟地址,只是虚拟地址空间不一样; 但是...原创 2018-02-09 14:57:16 · 539 阅读 · 0 评论 -
Linux内核内存分配方法
linux内核内存分配的方法 用户变量:用户空间定义的变量,地址为前3G 内核变量:内核空间定义的变量,地址为后1G1.1 kmalloc / kfree void *kmalloc(size_t size, gfp_t flags) 函数功能: 1.内核空间分配内存; 2.从内核1G的直接内存映射区中分配内存 3.物理地址和虚拟地址都是连续的(...原创 2018-02-09 14:59:55 · 1445 阅读 · 0 评论 -
Linux内核mmap机制
1. 问:如何将物理地址映射到用户空间的虚拟地址上?2.linux内核mmap机制 2.1.回顾LED驱动数据流的操作过程 通过分析LED驱动,得出以下结论: 如果利用read,write,ioctl三个系统调用函数实现对LED硬件进行操作,这三个系统调用函数操作数据最终要经过两次数据拷贝, 分别是用户空间到内核空间,内核空间到硬件或者硬件到内核,内核到用户; 如果操作访问的数据量比较小,对系统性...原创 2018-02-09 15:07:11 · 3052 阅读 · 0 评论 -
Linux内核platform机制
一.linux内核platform机制1.1.回顾ioremap实现开关灯驱动 需求: 硬件LED的GPIO由GPC0_3,GPC0_4更换为GPF1_4,GPF1_5 通过分析代码可知: 1.一个完整的驱动包括两部分:纯硬件和纯软件 2.之前的驱动如果硬件发生变化,代码几乎重头都要进行检查和修改,增大了驱动开发的工作量,可移植性非常差; 3.如果要优化此问题,内核提出分离思想,把纯软...原创 2018-02-09 15:10:11 · 516 阅读 · 0 评论 -
LinuxI2C总线驱动
一.概念 I2C总线:1.回顾相关的概念 串行传输: 一个时钟周期传输1bit 并行传输: 一个时钟周期传输多字节 "一个时钟周期":CPU在时钟的高电平或者下降沿将数据发送到数据线上,那么设备在同周期的低电平或者上升沿从数据线上获取数据; 总线:硬件上实实在在存在的总线,总线上可以挂接多个外设,将来CPU通过总线来访问具体的某个外设2.I2C总线概念:两线式串行总线 "两线式":...原创 2018-02-09 15:16:21 · 1723 阅读 · 0 评论 -
Linux定时器
1.硬件定时器一.硬件定时器特点:1.一旦上电,硬件定时器周期性的给CPU产生定时器中断信号;2.给CPU产生中断信号的周期和频率可以通过软件来设置;3.对应的linux内核定时器中断处理函数也将会被周期性的被内核调用;此函数由内核已经实现; 4.定时器中断处理函数将会做以下主要工作:1.更新系统的运行时间;2.更新实际时间(wall time);3.检原创 2018-02-05 17:37:39 · 1096 阅读 · 0 评论 -
Linux内核并发和竞态(1)
分析案例:要求LED设备同一时刻只能被一个应用软件打开(open)访问操作;实施: 1.不管有多少个应用程序,只要访问LED设备,必须先open,最终都会调用到底层驱动的open函数;只需再底层驱动的open做相关的代码限定即可;static int open_cnt = 1; //全局static int led_open(struct inode *inode,原创 2018-02-05 17:44:19 · 216 阅读 · 0 评论 -
Linux内核并发和竞态(2)
一.并发和竞态相关的概念并发: 多个执行单元同时发生;执行单元包括进程和中断竞态:多个执行单元对共享资源的同时访问造成的竞争状态形成竞态条件:1.要有多个执行单元2.要有共享资源3.要同时访问共享资源:1.软件上的全局变量属于共享资源2.硬件资源 (寄存器都是共享资源)避免竞态的本质目的:一个执行单元在访问共享资源的时候,其他执行单元禁止访问共享资源原创 2018-02-05 17:45:41 · 225 阅读 · 0 评论 -
Linux内核并发和竞态(3)
一.解决竞态的方法1.中断屏蔽避免竞态方法之中断屏蔽特点:1.能够解决进程与进程的抢占引起的竞态问题2.能够解决中断与进程的抢占引起的竞争问题3.能够解决中断与中断引起的竞态问题4.中断屏蔽保护的临界区不能做休眠操作,并且执行速度要快;长时间的屏蔽中断,会造成跟中断相关的系统机制会失效,严重影响系统的稳定,有可能会造成数据的丢失,甚至会造成操作系统的崩溃。原创 2018-02-05 17:53:33 · 269 阅读 · 0 评论 -
Linux等待队列机制
一.概念1.linux内核等待队列机制1.1.概念明确:等待分为忙等待和休眠等待"等待":期望某个事件发生“事件”:比如按键有操作,串口有数据,网络有数据;明确:阻塞一般是指休眠等待明确:进程的状态1.进程的准备就绪状态TASK_READY;2.进程的运行状态TASK_RUNNING;3.进程的休眠状态不可中断的休眠:TASK_UNINTERRU原创 2018-02-07 10:06:14 · 349 阅读 · 0 评论 -
从烧录程序到设备加载运行
前言 在最近的一个项目中,突然想起以前学习嵌入式系统启动流程,所以借此机会复习一下从烧录程序到设备加载代码运行的过程,加深印象。一.程序的结构一个程序一般分为3段:text段,data段,bss段text段:就是放程序代码的,编译时确定,只读,data段:存放在编译阶段(而非运行时)就能确定的数据,可读可写就是通常所说的静态存储区,赋了初值的全局变量和静态变量存放在这个区域,常量也存放在这个...原创 2018-03-23 17:00:21 · 2224 阅读 · 1 评论 -
Linux中断
前言:一.问:CPU为什么有中断机制? (本质:外设的处理速度要远远慢于CPU的处理速度)明确:计算机系统除了CPU,还有各种外设;明确:外设的处理速度要远远慢于CPU的处理速度;以CPU读取串口为例,假如没有中断机制,CPU为了避免串口数据的丢失,只能采用轮询方式(CPU原地空转),等待串口数据的到来;采用这种方式,CPU只能做一件事情,大大降低了CPU的利用率;原创 2018-02-01 16:35:34 · 834 阅读 · 0 评论 -
linux驱动开发--一个驱动管理多个设备
一.通过程序流程管理二.通过struct file , struct inode 5.问:struct inode?struct file?如果做到一个驱动程序管理多个硬件设备个体,通过次设备号,共享一个主设备号;答:struct inode{dev_t i_rdev;struct cdev *icdev;...};作用:描述一个文件原创 2018-02-01 16:17:57 · 4337 阅读 · 2 评论 -
Linux系统调用原理
linux系统的系统调用原理原创 2017-09-13 17:08:34 · 419 阅读 · 0 评论 -
Linux设备驱动开发
设备驱动概念原创 2017-09-14 15:05:02 · 265 阅读 · 2 评论 -
linux内核字符设备驱动之读操作
linux内核字符设备驱动读操作介绍原创 2017-09-15 15:13:32 · 1189 阅读 · 0 评论 -
linux内核字符设备驱动之写操作
linux内核字符设备驱动之写操作原创 2017-09-15 15:46:38 · 1306 阅读 · 0 评论 -
嵌入式开发系统部署
嵌入式开发的系统部署步骤原创 2017-09-11 10:36:39 · 1392 阅读 · 0 评论 -
内核程序的基本框架
内核程序的基本框架原创 2017-09-11 14:59:22 · 521 阅读 · 0 评论 -
内核命令行传参
内核程序如何通过命令行进行传递参数原创 2017-09-12 09:51:52 · 773 阅读 · 0 评论 -
内核程序符号导出
作用将内核程序的变量或者函数导出原创 2017-09-12 10:22:07 · 314 阅读 · 0 评论 -
内核打印函数printk
printk函数以及内核打印级别介绍原创 2017-09-12 15:51:05 · 1808 阅读 · 0 评论 -
linux内核字符设备驱动之发送命令接口
1.linux内核字符设备驱动之发送命令(ioctl)接口 int ioctl(int fd, int request, ...);函数功能:1.应用程序可以向设备发送控制命令;2.应用程序还可以和设备进行读/写操作;参数:fd:设备文件描述符request:向设备发送的命令字,命令定义;#define LED_ON 0x100001 //开灯命令#defi原创 2018-01-31 16:06:54 · 358 阅读 · 0 评论 -
linux内核字符设备驱动之设备文件自动创建
1. linux内核字符设备驱动之设备文件的自动创建设备文件创建:手动创建:mknod /dev/设备文件名 c/b 主设备号 次设备号自动创建:作用:每当加载完设备驱动以后,设备文件也会创建成功!每当卸载驱动以后,设备文件也会自动删除;设备文件自动创建的编程步骤:1.根文件系统要支持mdev可执行程序mdev的作用就是将来创建设备文件;原创 2018-02-01 16:09:32 · 438 阅读 · 0 评论 -
Linux内核混杂设备驱动
1.linux内核混杂设备驱动1.1混杂设备驱动特点:本质上还是一类字符设备,在驱动软件上,混杂设备的主设备号已经由内核指定主设备号为10;各个混杂设备个体通过次设备号来区分;1.2linux内核描述混杂设备的数据结构struct miscdevice{int minor;int name;const struct file_operatiions *f原创 2018-02-01 16:12:54 · 979 阅读 · 0 评论 -
内核GPIO操作库函数
内核GPIO操作库函数作用原创 2017-09-13 10:27:16 · 572 阅读 · 0 评论