讯为4412全能版
文章平均质量分 67
灵魂之Ca
广东广州,物联网工程小白,热爱电子。
展开
-
linux挂载rootfs到运行第一个程序分析
在上一篇博客“linux启动流程学习与总结”里,我们提到挂载根文件系统后,内核代码调用了init_post()函数执行了第一个应用程序,那么这个init_post()里面是干了什么呢?原创 2023-11-05 22:38:03 · 152 阅读 · 0 评论 -
linux启动流程学习与总结
无论是linux还是uboot,首先首先要看的就是其配置文件,而linux各种配置文件,例如xxx_defconfig、make menuconfig(Kconfig)、.config等,最终最终都是服务于makefile的。先看配置文件吧,且看下面这个图,网课截的总结起来就是,配置文件要么在架构-平台的configs文件夹里,找一个和你的板子相近的xxx_defconfig来作为蓝本,以此为基础进行修改,要么就用开发板厂家提供的xxx_defconfig或者xxx_config覆盖.config。原创 2023-11-04 22:53:39 · 65 阅读 · 0 评论 -
linux驱动i2c子系统之mpu6050
其实也没什么新颖的,因为Linux内核贯彻设备和驱动分离的原则,i2c驱动开发的流程和平台总线设备驱动开发差不太多。这个i2c子系统呢同样也是系统帮我们做好了bus,在硬件外设信息方面,我们描述好i2c外设设备然后注册进去或在设备树中描述好i2c外设硬件信息,设备这部分就搞定了,而i2c驱动方面,也和之前学过的一样,写好匹配的符号表,和proce的函数然后注册这个驱动到系统中,如果在系统中找到对应的设备或者在设备树中找到了一致的compatible,就会进入probe函数。原创 2023-10-16 14:52:50 · 319 阅读 · 0 评论 -
linux驱动i2c子系统之0.96寸oled
没有前言~相关知识参照我滴另一篇博客~这个是用来练手滴。总体思路还是在设备树写i2c设备地址,在驱动代码中,注册i2c驱动,写好probe中的“入号注节硬操”操作,然后根据oled数据手册,初始化它,然后根据应用层传来的字符去显示到oled上,至于怎么显示涉及的一些踩点算法,是参考之前stm32写的oled代码,其实都差不多,c语言移植起来也方便。linux驱动i2c子系统之mpu6050_灵魂之Ca的博客-CSDN博客。原创 2023-10-17 17:20:17 · 163 阅读 · 0 评论 -
linux驱动输入子系统之多输入设备
这篇写的是一次性给5个按键写好驱动~用输入子系统实现。原创 2023-10-15 19:06:02 · 38 阅读 · 0 评论 -
linux驱动输入子系统
输入子系统,就是 入号注节硬操 中 申请设备号,注册设备,生成设备节点,fops,不用自己写了,系统帮忙写好了,可以方便的开发。要不要用就看需求了,对于输入设备例如key等等确实很方便。/sys/class/input/enentx/device 中可以查看属于输入子系统的设备信息输入子系统参数内涵:Type就是哪种输入设备,例如鼠标、键盘、触摸屏等类型code就是按键的内涵,例如是电源开关、EXT、左键等,人为赋予的内涵value就是该按键的状态,0没按下,1是按下(规定死的)原创 2023-10-15 18:51:34 · 53 阅读 · 1 评论 -
平台总线设备驱动模型
平台总线设备驱动模型,其实是总线设备驱动模型的一个子集。它的总线是platform_bus,由linux内核提供,我们只需要往里面注册设备和驱动就行了。现在有了设备树,不注册设备也行。原创 2023-10-14 22:27:49 · 64 阅读 · 1 评论 -
总线设备驱动模型
字符设备驱动和总线设备驱动的关系用下图可以表明:这张图片中右边的device代表着系统中所有的设备,无论是字符设备驱动注册的字符设备抑或是总线设备,都会汇总到/sys/devices中,那为什么在已经有了字符设备、我们可以编写驱动了的情况下还有总线设备驱动呢?答案就是分离和复用的思想,总线设备驱动中,bus里面有dev和drv两个链表,当我们注册dev和drv时,需要指定bus和name,通过bus可以把dev/drv注册到bus的链表中,而通过name可以在同一个bus中将设备和驱动配对起来。原创 2023-10-14 13:14:34 · 62 阅读 · 1 评论 -
IO模型之异步IO
异步IO的实现主要是通过linux的信号机制。框架:字符设备驱动框架。原创 2023-10-13 16:20:48 · 71 阅读 · 0 评论 -
IO模型之阻塞模型
框架:字符设备驱动框架IO顾名思义就是输入输出,对于linux驱动而言,输入输出就是file_operations里的read和write操作。至于模型,这个词听起来牛批,其实就是io读写的不同模式,比如非阻塞io,从应用程序的角度(驱动是服务于应用的),无论有没有read到数据,都会返回一个值,程序不会卡在原地;而阻塞io,就是应用程序,没有read到数据就会卡在原地不动(后面我们会知道其实是这个应用程序的read所对应的驱动被吊起来了,既不进行下去,也不返回,造成了应用程序卡在那里的情况~)原创 2023-10-13 10:15:18 · 47 阅读 · 0 评论 -
传统方式和设备树方式获取中断
再瞄一眼,按顺序是CON,DAT,PUD,DRV寄存器,也就是说~基地址+0是CON,基地址+1是DAT,基地址+2是PUD,基地址+3是DRV。这个比较麻烦,不熟悉板级驱动的还真不太好搞,这个可以去参考讯为的手册,我记得他有讲过。在/kernel/arch/arm/boot/dts/exynos4412-itop-elite.dts中搜索关键词”gpx1“或者“Home”"key"可见果然有别的地方占用了,把home里面的内容都注释掉即可,我们自己的驱动就不会报错了。这就是GPX1寄存器的物理地址了,原创 2023-10-12 20:59:20 · 73 阅读 · 0 评论 -
驱动模块insmod时传参进模块
代码思想:在驱动模块四件套基础上--定义承接参数--接收参数--打印出来只能传字符串类型(charp)和整数类型。原创 2023-10-10 14:15:49 · 76 阅读 · 1 评论 -
完整的字符设备驱动
字符设备驱动是linux驱动最本质的模样,如输入子系统,其实现也是封装了些许字符设备驱动步骤而实现的。原创 2023-10-12 19:52:48 · 31 阅读 · 0 评论 -
驱动符号导出
3th_call_lchadd.h --声明导出函数,以便驱动模块源文件调用而不报错。3th_export_function.c --要生成导出函数的模块的源文件。3th_export_function.c --要生成导出函数的模块的源文件。3th_call_lchadd.c --普通的驱动模块源文件。先加载导出函数的驱动模块,再加载使用到导出函数的驱动模块,这样才能使用对应的函数。将以下两个文件都编译成xx.ko。原创 2023-10-10 14:37:29 · 35 阅读 · 1 评论 -
最简单的驱动模块
模块加载成功打印hello_init。原创 2023-10-10 13:28:27 · 31 阅读 · 2 评论 -
开发板ping的通PC,ping不通虚拟机ubuntu问题的解决
开发板ping的通PC,ping不通虚拟机ubuntu问题的解决原创 2023-01-25 22:51:12 · 3057 阅读 · 3 评论 -
讯为4412全能版 串口超级终端输入阻滞问题及解决
进入系统/uboot 时 串口助手能正常接收串口信息,但是发送串口信息则是有阻滞现象原创 2023-01-17 09:41:19 · 523 阅读 · 3 评论