- 博客(24)
- 收藏
- 关注
原创 平台总线式驱动开发(id匹配和设备树匹配lv12-day3)
id匹配(可想象成八字匹配):一个驱动可以对应多个设备 ------在三种匹配方式中优先级次低。注意事项:2 ID 匹配编写步骤1 编写 xxx_device.c(设备)1 在 platform_device xxxxxx中添加id_entry成员2 编写 platform_device_id xxxxx2 编写 xxx_driver.c(驱动)1 在struct platform_driver xxxxx 中添加id_table成员2 编写struct platform_device_
2022-08-17 18:39:18
1621
5
原创 平台总线式驱动开发(lv12-day2)
一个驱动可以对应多个设备 ------优先级次低 device模块中,id的name成员必须与struct platform_device中的name成员内容一致 因此device模块中,struct platform_device中的name成员必须指定 driver模块中,struct platform_driver成员driver的name成员必须指定,但与device模块中name可以不相同。 带来的问题-------怎样将二者进行关联(匹配)?hello_device.c (设备).
2022-08-15 23:15:05
652
2
原创 设备模型(lv12-day1)
uevent机制:sysfs + uevent + udevd(上层app)1 包含头文件#include""一种用内存模拟的文件系统,系统启动时mount到/sys目录。sysfs用途:(类似于windows的设备管理器)4 调用 device_create(…4 ##### 代码中自动mknod步骤。3 调用 class_create(…5 ##### 参考代码。......
2022-08-15 11:37:31
410
1
原创 设备树(lv11-day9)
interrupt-controller 一个无值空属性用来声明这个node接收中断信号,表示该节点是一个中断控制器。一般来说,每一种设备的节点属性设置都会有一些套路,比如可以设置哪些属性?#interrupt-cells 这是中断控制器节点的属性,用来标识这个控制器需要几个单位做中断描述符。gpio-controller,无值空属性,用来说明该节点描述的是一个gpio控制器。数字形式的节点标识,在后续节点中属性值性质表示某节点时,可以引用对应节点。compatible = “字符串1”,“字符串2”,….
2022-08-11 21:53:00
768
原创 内核内存管理(lv11-day8)
由于vmalloc() 没有保证申请到的是连续的物理内存,因此对申请的内存大小没有限制,如果需要申请较大的内存空间就需要用此函数了。kmalloc() 申请的内存位于直接映射区域,而且在物理上也是连续的,它们与真实的物理地址只有一个固定的偏移,因为存在较简单的转换关系,所以对申请的内存大小有限制,不能超过128KB。一般情况下,内存只有在要被 DMA 访问的时候才需要物理上连续,但为了性能上的考虑,内核中一般使用 kmalloc(),而只有在需要获得大块内存时才使用 vmalloc()。......
2022-08-10 18:13:49
224
原创 内核定时器(lv11-day7)
初始化定时器 init_timer(struct timer_list *) 增加定时器 ------ 定时器开始计时 void。删除定时器 -------定时器停止工作 int。jiffies_64 是一个全局64位整型, jiffies全局变量为其低32位的全局变量,程序中一般用jiffies。硬件有一个时钟装置,该装置每隔一定时间发出一个时钟中断(称为一次时钟嘀嗒-tick),对应的中断处理程序就将全局变量。...
2022-08-09 22:56:48
357
原创 字符设备驱动基础下_并发控制(lv11-day6)
/成功获得自旋锁立即返回真,否则返回假,而不是像上一个那样"在原地打转”//成功获得自旋锁立即返回,否则自旋在那里直到该自旋锁的保持者释放。竞态:多任务并行执行时,如果在一个时刻同时操作同一个资源,会引起资源的错乱,这种错乱情形被称为竞态。为了解决竞态,需要提供一种控制机制,来避免在同一时刻使用共享资源,这种机制被称为并发控制机制。适用场合:任务上下文之间且临界区执行时间较长时的互斥或同步问题。适用场合:任务上下文之间且临界区执行时间较长时的互斥问题。e.操作并测试:运算后结果为0则返回真,否则返回假。..
2022-08-09 21:06:59
497
原创 向Linux内核增加新功能(LV11Day2)
ko #此处为内核模块文件名,将内核模块插入正在执>行的内核中运行 ----- 相当于安装插件。#,此处为插入内核后的模块名,此时将已被插入的内>核模块从内核中移除 ----- 相当于卸载插件。可以用 模块名-objs 变量来指定编译到ko中的所有.o文件名(每个同名的.c文件对应的.o目标文件)insmod ./?.ko #将内核模块插入正在执行的内核中运行 ----- 相当于安装插件。#将已被插入的内核模块从内核中移除 ----- 相当于卸载插件。...
2022-08-04 00:21:24
370
原创 uboot的烧写及使用
Bootloader在操作系统运行之前运行的一小段代码,用于将软硬件环境初始化到一个合适的状态,为操作系统的加载和运行做准备(其本身不是操作系统)Bootloader基本功能-> 初始化软硬件环境-> 引导加载linux内核-> 给linux内核传参-> 执行用户命令注:bootloader是启动引导程序的统称,嵌入式linux常用的bootloader是uboot1 自启动模式uboot启动后若没有用户介入,倒计时结束后会自动执行自启动环境变量(bootcmd)中设置的命令(一般作加载
2022-07-08 15:31:31
950
原创 IIC实验(lv9-day22-24)
IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线主要用于近距离、低速的芯片之间的通信;IIC总线有两根双向的信号线一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;IIC总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用。IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误产生;每个连接到IIC总线上的器件都有一个唯一
2022-06-08 01:43:00
648
原创 PWM实验(lv9-day11)
由电路原理图,可知4412开发板上嗡鸣器连接到开发板上的GPD0_0我们会用这个引脚来产生一个PWM来控制嗡鸣器。这个寄存器用于设置PWM1级分频和死区长度。[7:0] 设置0,1的一级分频(我们要设置)。[15:8]设置2,3,4的一级分频。[23:16] 设置死区长度(本次实验没有使用到)设置2级分频(这里我们设置[3:0]位)设置PWM自动重装载值的开和关以及输出有效电平,装载计数器和比较寄存器值,使能定时器(这里我们只要设置定时器0,也就是只要设置这个寄存器的[3:0]位)。第3位设
2022-06-02 11:59:13
705
原创 轮询与中断(lv9-day16-day18)
轮询与中断1 CPU与硬件的交互方式2轮询方式实现按键检测这里采用4412开发板上的按键2 当其按下,就向串口发送 “key2 poress”通过上面原理图可知,KEY2连接到板子的GPX1_1上。由上面原理图可知,当按键K2未被按下时GPX1_1此时的电平时是高电平,被按下时电平是低电平。可以通过读GPX1_1的电平检测按键是否按下(GPX1_1设置成输入模式)。#include "exynos_4412.h"int main(){ /*将GPX1_1设置成输入模式*/ GPX
2022-05-28 15:59:27
1457
1
原创 WTD实验(lv9-day15)
文章目录WTD实验(lv9-day15)1 WDT简介2exynos4412下的WDT控制器3 WDT寄存器详解3.1 WTCON3.2 WTCNTWTD实验(lv9-day15)1 WDT简介由上图可知当cpu程序正常工作时,会定时去刷新WDT的计数器,也就是说WDT的计数器在程序正常运行时永远不会为0. 当程序异常不能定时刷新WDT的计数器(喂狗),那么WDT就会给cpu发送一个复位信号系统复位。2exynos4412下的WDT控制器这是计算看门狗周期t_watchdog = 1/(P
2022-05-19 14:04:34
431
原创 UART实验原理(lv9-day14.1)
文章目录UART实验(lv9-day14)1 UART帧格式详解1.1 UART简介1.2 串行与并行通信1.3 单工与双工1.4 波特率UART实验(lv9-day14)1 UART帧格式详解1.1 UART简介1.2 串行与并行通信优点效率高,缺点传输线较多,布线困难。优点 节约资源,缺点:传输速度较慢。1.3 单工与双工1.4 波特率#8## 1.5 UART帧格式...
2022-05-16 08:12:41
880
原创 GPIO实验(lv9-day12)
文章目录GPIO实验(lv9-day12)1 GPIO简介2 LED实验步骤2.1 通过电路原理图分析LED的控制逻辑2.2 通过电路原理图查找LED与Exynos4412的连接关系2.3通过数据手册分析GPI0中哪些寄存器可以控制LED22.3.1 GPX2CON 的相关配置(设置GPIO输入模式 还是输出模式)2.3.2 GPX2DAT (设置GPIO输出高电平或者低电平)2.3.3 通过程序去操控对应的寄存器完成对LED的控制GPIO实验(lv9-day12)1 GPIO简介GPI0 (Gen
2022-05-12 14:25:08
902
原创 FS4412开发环境搭建
文章目录FS4412开发环境搭建1 交叉编译的搭建1.1 ubuntu交叉编译工具链的安装2 地址映射表2.1CPU控制硬件的原理FS4412开发环境搭建1 交叉编译的搭建1.1 ubuntu交叉编译工具链的安装【实验环境】ubuntu 14.04发行版【注意事项】1、实验步骤中以“$”开头的命令表示在 ubuntu 环境下执行【实验步骤】1、安装交叉编译工具链在 ubuntu 下打开一个终端并进入到家目录$ cd ~ 在家目录下创建“Linux_4412/toolchain”目录用于
2022-05-11 09:12:34
425
原创 ARM-伪操作与混合编程(lv9-10)
[@Toc]伪操作与混合编程1伪操作伪操作:不会生成代码,只是在编译阶段告诉编译器怎么编译1.1举例GNU伪操作一般都与‘.’开头.global 将一个符号声明为全局符号.global symbol @将一个symbol 声明为全局.local 将符号声明成局部符号.local symbol @将一个symbol 声明为局部.equ 相当于C语言中的宏...
2022-05-09 23:10:17
452
原创 ARM-专用指令(lv9-day9)
ARM-专用指令(lv9-day9)1 状态寄存器与传送指令状态寄存器与传送指令:访问(读写)CPSR寄存器。
2022-05-07 08:23:54
524
原创 ARM-栈的种类与应用(lv9-day8)
文章目录ARM-栈的种类与应用(lv9-day8)1 多寄存器内存访问指令1.1 写内存 STM 寄存器,{寄存器-寄存器}1.2 读内存 LDM 寄存器,{寄存器-寄存器}2 多寄存器内存访问指令的寻址方式2.1 STMIA2.2 STMIB x {x1-x2}2.3 STMDA x {x1-x2}2.3 STMDB x {x1-x2}ARM-栈的种类与应用(lv9-day8)1 多寄存器内存访问指令1.1 写内存 STM 寄存器,{寄存器-寄存器}MOV R1,#1MOV R2,#2M
2022-05-04 10:21:08
517
原创 ARM-跳转与储存器访问指令
ARM-跳转与储存器访问指令1 跳转指令1.1 直接去修改PC寄存器的值(不建议使用,需要我们自己去计算绝对地址)MAIN: @开始的地址是0 MOV R1,#1 MOV R2,#2 MOV R3,#3 @更改PC寄存器的值,跳转到0X18这个地址 MOV PC,#OX18 MOV R4,#4 MOV R5,#5FUNC: @这里是0X18 MOV R6,#6 MOV R7,#7 MOV R8,#8 1.2 通过不
2022-04-29 15:30:39
1647
2
原创 数据处理3-4(lv9-day6)
目录1 进位与借位1.1进位 ADDS和ADC1.2借位 SUB和 SBC2关于C语言与汇编的讨论1 进位与借位由于ARM是32位的,如果我们 要进行两个64位的数进行计算,那么就需要将数据拆成32位(高位放在一个寄存器,低位放在一个寄存器)高位减高位低位减低位。这时候就可能出现进位或者借位的情况。(这时候要使用带借/进位的减/加法指令)。这需要CPSR寄存器参与。1.1进位 ADDS和ADC如果没有使用ADD和ADC使用ADDS和AD..
2022-04-28 22:21:18
1047
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人