- 博客(193)
- 收藏
- 关注
原创 linux驱动:(22)中断节点和中断函数
中断的存在可以极大的提高 CPU 的运行效率,但是中断会打断内核进程中的正常调度和运行,所以为保证系统实时性,中断服务程序必须足够简短,但实际应用中某些时候发生中断时必须处理大量的事物,这时候如果都在中断服务程序中完成,则会严重降低中断的实时性基于这个原因,linux 系统提出了一个概念:把中断服务程序分为两部分:中断上文和中断下。如果一个设备需要用到中断功能,开发人员就需要在设备树中配置好中断属性信息,因为设备树是用来描述硬件信息的,然后Linux内核通过设备树配置的中断属性来配置中断功能。
2024-10-06 13:34:02 602
原创 linux驱动:(21)ioctl接口(二)驱动与应用程序传递ioctl命令
将以前的beep杂项设备中的copy_from_user改为用ioctl接口,修改的代码是 linux驱动:(8)实战:用杂项设备完成蜂鸣器驱动 中的代码。
2024-10-04 17:57:28 507
原创 linux驱动:(18)设备树下的platfrom总线
目录匹配节点name旧driver.c新driver.c (设备树)验证方式取资源旧方法新方法第一个方法第二个方法注意设备树of映射地址函数例子最后创建自己想要的设备,已经获取到了寄存器的值,可以回看前面章节在以前的platfrom总线是通过两个文件,driver和device两个文件进行匹配成功送到probe函数的现在有了设备树,通过设备树来替换device文件部分,那如何进行匹配呢,是通过设备树节点中的compatible属性来匹配相对应的name,但根节点中的compatible属性并不是,这个属性
2024-09-14 00:27:51 533
原创 linux驱动:(17)设备树中常用的of操作函数
在设备树中如何获取到寄存器的值呢,linux提供了几个函数,在 include/linux/of.h 中都是以 of 开头的。
2024-09-12 23:16:46 674
原创 面试题目:(8)合法分割的最小坐标
获取到出现最多次数的数字我上面分成了两步,其实可以用算法来进行快速筛选,可以使用 Boyer-Moore 投票算法找到支配元素。
2024-08-27 21:56:07 610
原创 linux驱动:(16)在设备树添加自定义节点
进入 源码根目录/proc/device-tree/ 查看到设备树里的属性通过cat就可以看到属性的值是多少,如果是节点,可以cd进入再通过cat看节点中的属性我们添加完后,通过cat就可以看到有没有添加成功。
2024-08-25 17:26:16 475
原创 linux驱动:(15)设备树
如果在根目录中又包含了一个dtsi文件,进去这个dtsi文件后,就又会看到一个根节点,这就是我上面说的,dtsi里面的根节点会于我们第一个找到的根节点合并成一个根节点。当我们找一个节点的时候,我们必须书写完整的节点路轻,如果我们的节点名很长,那么我们在引用的时候就十分不方便,所以,设备树允许我们用下面的形式为节点标注引用。一般往一个节点里面添加内容的时候,不会直接把添加的内容写到节点里面,而是通过节点的引用来添加。如果该设备树文件没有 /{ } 开头的节点,就去包含的头文件去找,先找到根节点。
2024-08-25 16:43:22 535
原创 面试题目:(7)将字符串中的元音字母排序
简单来说就是会从第一个开始遍历,然后和后面的每一个元素进行减法判断大小移动位置,当遍历完到下一个元素开始往后遍历。两个相减通过ascll进行排序,
2024-08-24 21:38:57 179
原创 面试题目:(4)给表达式添加运算符
简单来说就是先从第一个字符开始变化标志位,从1到2到3,也就从乘法加法减法,但在第一个执行乘法前,后面的要先完成从1到2到3的变化,所以就是在第一个执行1的时候要等第二个数字从1到2到3变化完才进行变2,然后又要等第二个数字从1到2到3才变3,如果有第三个数字的话第二个数字也要等第三个数字变化完,一层一层递归,直到递归到最后一个数字后,才开始进行计算。输入 1234 目标 10。
2024-08-20 21:01:04 445
原创 面试题目:(3)整数拆分
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积。
2024-08-19 20:25:45 200
原创 linux驱动:(14)平台总线模型 (platform设备 二)
到了第二步注册,但在注册前我们要先登记,用到的函数定义在ioport.h里。我这就注册一个杂项设备,下面是完整driver.c代码。可以利用函数来将硬件资源单独复制出来一份。登记不成功就需要注销登记,也有函数。
2024-08-15 15:55:40 365
原创 linux驱动:(14)平台总线模型 (platform设备 一)
平台总线模型也叫platform总线模型,是linux内核虚拟出来的一条总线,不是真实的导线平台总线是以名字来匹配的,实际上就是字符串比较,主要就是把原来的驱动.c文件分为两个c文件,一个驱动,c,一个设备,cproberemove。
2024-08-15 15:00:26 676
原创 面试题目:(1)“abcde”删除“ac”=“bde”
输入两个字符串M和N,从字符串M中删除字符串N中所有的字符。例如,输入”abcda”和”ac”,则删除之后的第一个字符串变成”bd”
2024-08-14 16:24:33 131
原创 linux驱动:(13)杂项设备和字符设备总结
杂项设备是字符设备里面的一种 主设备号固定为10,只需要分配次设备号 步骤 构建文件操作集 其中write/read中应用与内核层传输需要用到两个函数 copy_from_user copy_to_user 构建杂项设备结构体 struct miscdevice misc = {} 注册杂项设备 misc_register(&misc); 卸载杂项设备 misc_deregister(&misc); 字符
2024-08-12 17:55:53 321
原创 linux驱动:(12)自动创建设备节点
udev 是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev 目录下。使用 udev 后,在/dev 目录下就只包含系统中真正存在的设备。udev 一般用在 PC上的 linux中,相对 mdev 来说要复杂些。mdev是udev的简化版本是busybox中所带的程序,最适合用在linux系统。在linux中使用mdev来实现设备节点文件的自动创建和删除。用的是第11章的代码。
2024-08-11 22:06:22 901
原创 linux驱动:(10)申请字符类设备号
如果加载内核的时候不将主次设备号参数传入,就动态分配,如果传入的话就静态分配。定义在types.h里的,用来保存设备号的,是一个32位数。高12位保存主设备号,低12位保存次设备号,在linux中宏定义来操作设备号。
2024-08-06 19:09:01 911
原创 linux驱动:(8)实战:用杂项设备完成蜂鸣器驱动
最终效果是使用杂项设备完成一个蜂鸣器驱动,然后在应用程序中传入参数1为打开蜂鸣器,0为关闭蜂鸣器。
2024-08-05 18:24:54 564
原创 linux驱动:(7)物理地址到虚拟地址映射
在单片机和裸机中操作硬件是通过指针来对寄存器赋值来进行操控但对于linux中不能这样,不能直接对物理地址直接修改,因为linux使能了mmu,所以不能直接菜操作物理地址如果要操作硬件,需要先把物理地址转换成虚拟地址。
2024-08-05 17:46:58 387
原创 linux驱动:(5)杂项设备驱动
其中的次设备号不能相同,但不知道有什么可以选择,就需要一个宏定义MISC_DYNAMIC_MINOR,也在 miscdevice.h中,他会自动分配次设备号。里面有一个结构体成员都对应一个调用,后面会仔细讲,现在只用知道当对驱动进行读取read时,就会调用这个结构体中的read成员。可以在根目录下的include/linux/miscdevice.h中定义,这个结构体作用是描述这个设备。可以在根目录下的include/linux/fs.h中定义。可以在根目录下的include/linux/fs.h中定义。
2024-08-04 17:34:09 946
原创 linux驱动:(3)图形化界面
当我们make menuconfig保存退出以后,linux会将所有的配置选项以宏定义的形式保存在include/generated/下面的autoconf.h里面。使用空格按键来配置三个不同状态。
2024-07-30 19:37:53 247
原创 linux驱动:(2)添加别的驱动
先去内核源码中搜索,看看有没有我们需要的驱动,有的话就可以直接使用了假如没有这个驱动,我们需要自己编译一个驱动,然后加载到内核中就可以了。
2024-07-30 16:50:22 157
原创 uboot学习:(五)bootz 启动 Linux 内核过程
bootz 命令的执行函数为 do_bootz,在文件 cmd/bootm.c 中定义。
2024-07-28 19:43:55 421
原创 stm32:CAN通讯
一种功能丰富的车用总线标准。被设计用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信它基于消息传递协议,设计之初在车辆上复用通信线缆,以降低铜线使用量,后来也被其他行业所使用CAN拥有了良好的弹性调整能力,可以在现有网络中增加节点而不用在软、硬件上做出调整。除此之外,消息的传递不基于特殊种类的节点,增加了升级网络的便利性。
2024-07-17 16:53:40 2026 1
原创 stm32学习:(寄存器3)系统架构
HSE时钟高速外部时钟是由外部时钟源提供,目前几乎所有的STM32单片机的设计都是在外部接一个8MHz的晶振,经过PLL倍频(9倍频)后得到一个72MHz的系统时钟。这个在启动文件可以看到HSI时钟HSI时钟信号由内部8MHz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差PLL时钟。
2024-07-17 16:01:17 582 1
原创 stm32学习:(寄存器2)GPIO总体说明
STM32有多组GPIO,比如我们使用的芯片:共有7组GPIO端口,他们分别是GPIOxx从A-G),16个引脚,共有112个GPIO引脚。具体一个其他STM32芯片有多少组GPIO,可以去查看他们的对应的。每个引脚的电平是0-3.3V,部分引脚最高可以兼容到5V。
2024-07-17 14:23:05 1106
原创 uboot学习:(四)顶层makefile分析
最后回到 分析 make xxx_defconfig 里的一句 $(Q)$(MAKE) $(build)=scripts/kconfig $@$@表示目标文件,就是xxx_defconfig最后展开得到的是 make -f ./scripts/Makefile.build obj = scripts/kconfig xxx_defconfig现在我们得到了两条命令先是运行make xxx_defconfig命令然后就分析顶层的makefile找到文件中的%config,有依赖和命令两个依赖。
2024-07-13 17:06:23 678
原创 uboot学习:(二)uboot命令
bdinfo:查看板子信息 (DRAM 的起始地址和大小、启动参数保存起始地址、波特率、 sp(堆栈指针)起始地址等信息)cp:数据拷贝命令,用于将DRAM中的数据从一段内存拷贝到另一段内存中,或者把Nor Flash 中的数据拷贝到DRAM中。bootz 或 help bootz :查看“bootz”这个命令的用法。5、nand read命令从NAND中的指定地址读取指定大小的数据到DRAM中。help /?5、fatwrite命令将DRAM中的数据写入到MMC设备中。
2024-07-10 22:25:41 630
原创 uboot学习:(一)基础认知
先配置,一个板子一个配置文件,然后执行配置文件,就会把uboot配置好,然后再次编译,就可以得到配对这个板子的uboot执行文件(.bin),用bin文件来启动板子,这就是裸机开发,通常是操控寄存器来编程,汇编。
2024-07-10 20:31:52 791
qt学习:停车场管理系统+摄像头+http识别车牌+sqlite3数据库
2024-02-01
stm32学习:hal库usart+esp8266+tcp+onenet+可以远程监督家里情况
2023-12-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人