
开发指南8MM
文章平均质量分 92
手册
北京迅为
让学习更简单,让开发更容易
展开
-
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第六篇 嵌入式GUI开发篇-第八十六章 Qt for Android
适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、点击run,看是不是发现了我们的手机或者开发板,设备管理器里有没有出现Android Device,如果没有发现,需要检查下adb驱动是不是正常的,用驱动精灵检查一下驱动是否正常,还有手机或者开发板的usb允许调试是不是打开了,手机的usb的调试在开发者模式里面。2.安装sdk和ndk,直接解压即可,解压的路径不要有中文路径。识别到开发板或者手机以后,点击run开始编译,注意,此时电脑一定要保持联网状态,不联网是不行的。原创 2024-08-20 17:13:34 · 844 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第五篇 文件系统构建篇-第八十章 busybox文件系统构建
Linux启动时,第一个必须挂载的是根文件系统;在NXP原厂的BSP包中,提供的文件系统为yocto文件系统,yocto文件系统集成度高,开发很容易,但是集成度高利于开发,不利于我们学习,所以在制作文件系统这里,我们选用busybox,因为busybox文件系统集成度很低,而且非常精简,在后面移植其他东西的时候我们可以学习到很多细节。Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。原创 2024-08-16 13:38:42 · 1103 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第五篇 文件系统构建篇-第七十九章 Ubuntu20文件系统
H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、Ubuntu 官方针对不同的 CPU 架构提供相应的 ubuntu base 根文件系统,有 amd64(64 位 X86)、 armhf、i386(32 位 X86)、 powerpc、 ppc64el 等系统的。然后按照编译章节,编译镜像,然后烧写镜像即可。原创 2024-08-15 16:44:18 · 823 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第五篇 文件系统构建篇-第七十八章 离线构建Yocto系统
四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、我们将fsl-image-qt5-validation-imx-imx8mmevk-20210715012231.rootfs.tar.bz2文件拷贝到Linux源码的rootfs目录下进行编译。此过程时间较长,请耐心等待,会有十几个小时,与网速,电脑配置,虚拟机配置有关,原创 2024-08-15 15:54:46 · 601 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第五篇 文件系统构建篇-第七十七章 Yocto文件系统在线构建
四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。事实上,Yocto Project是全球最大的开源项目之一,以此为基础而开发的通用创建系统,可帮助开发人员避免从零开始,转而把时间和资源集中于开发差异化Linux设备,从而实现投资回报最大化。虽然市面上有数百种可用的嵌入式Linux发行版,但每个版本都是高度定制的,这导致了大量的重复工作,很多开发人员创建了大同小异的Linux版本,再基于其开发自己的增值特性和功能。原创 2024-08-15 13:26:44 · 1012 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第五篇 文件系统构建篇-第七十六章 增加功能后烧写测试
四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、可以看到挂载成功,需要卸载的话只需要退出/mnt文件夹,使用命令“umount.nfs /mnt”即可,如下图。原创 2024-08-14 17:54:20 · 1032 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第五篇 文件系统构建篇-第七十五章 优化配置buildroot
上一小节我们配置的buildroot是仅供简单运行测试的版本,我们在使用开发板运行自己程序时可能需要文件系统提供一些第三方的库文件和软件,例如alsa-lib、alsa-utils,mplayer,opencv等等。ALSA 的主要特性包括:高效地支持从消费类入门级声卡到专业级音频设备所有类型的音频接口,完全模块化的设计, 支持对称多处理(SMP)和线程安全,对 OSS 的向后兼容,以及提供了用户空间的 alsa-lib 库来简化应用程序的开发。需要使用 aplay等命令,请参考如下配置进行配置。原创 2024-08-12 14:18:59 · 1023 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第五篇 文件系统构建篇-第七十四章 buildroot构建文件系统
Buildroot 是一组 Makefile 和 Patch 文件,用来简化和自动化为嵌入式系统建造一个完整和可引导的 Linux 环境的过程,特别是在使用交叉编译来允许在单一的基于 Linux 的开发系统上为多个目标平台进行建 造的时候。Buildroot 可以自动建造所需要的交叉编译工具链,创建根文件系统,编译一个 Linux 内核映像, 并为目标嵌入式系统生成引导装载器,它还可以进行这些独立步骤的任何组合。例如可以独立的使用已经安 装好的交叉编译工具链,而只用 Buildroot 创建根文件系统。原创 2024-08-05 17:30:51 · 903 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第四篇 嵌入式Linux系统移植篇-第七十三章内核添加网卡驱动
比如我们的4412开发板,三星的4412处理器内部并没有MAC控制器,而是搭载了一个DM9621芯片。上述代码中的pinctrl_fec1是网卡信息的pinctrl信息,其实在/home/topeet/bsp_kernel_imx/bsp_kernel_imx/linux-imx/arch/arm64/boot/dts/freescale/itop8mm-evk.dts设备树文件中已经存在了,在iomuxc节点下,然后我们需要添加的是网卡芯片的复位引脚信息。但是在外围电路中,有一个叫网卡的芯片。原创 2024-08-01 14:01:34 · 1176 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第四篇 嵌入式Linux系统移植篇-第七十二章 内核配置屏幕驱动
显示完一行后会发出Hsync信号,然后电子枪会关闭,然后很快移动到屏幕的左边,hsync信号结束之后便可以显示新的一行数据,电子枪会打开,那么hsync信号结束到开始之间会插入一段延时,这个延时就是hbp,同理,vbp也是这样的道理,HBP HFP VBP VFP就是导致黑边的原因,这四个值的具体值得查阅LCD数据手册。我们把屏幕想象成一幅画,显示的过程其实就是用笔在不同的像素点画上不同的颜色,这根笔按照从左到右,从上到下的顺序画每个像素点,当画完最后一个像素点,一幅画也就画好了。原创 2024-08-01 09:54:49 · 769 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第四篇 嵌入式Linux系统移植篇-第七十一章内核基础配置
修改/home/topeet/bsp_kernel_imx/bsp_kernel_imx/linux-imx/arch/arm64/boot/dts/freescale/itop8mm-evk.dts设备树文件,在根目录下添加gpio-keys节点。如上图所示,/dev/ttymxc0,/dev/ttymxc1,/dev/ttymxc2分别是串口1 串口2 串口3。在上面小节配置完毕,保存修改,然后重新打开一个终端,输入以下命令,将默认的配置文件写入到.config文件。原创 2024-07-31 09:59:44 · 878 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第四篇 嵌入式Linux系统移植篇-第六十九章uboot移植
1 首先在默认的uboot设备树中进行配置,打开/home/topeet/bsp_kernel_imx/bsp_kernel_imx/uboot-imx/arch/arm/dts/fsl-imx8mm-evk.dts文件,将默认的电源管理芯片注释掉,替换为pca9450。接下来我们需要在uboot源码中配置好电源管理芯片。在第六十七章的内容里面,我们编译生成了flash.bin文件,在生成flash.bin文件的过程中,我们是手动输入命令生成的,但是为了加快测试速度,我们本章节要编写一个自动化脚本。原创 2024-07-30 16:34:07 · 969 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第四篇 嵌入式Linux系统移植篇-第六十八章u-boot图形化配置
其中boot类型俩的值有俩种,也就是y和n,也就是说,如果我们使用了这个类型,在make menuconfig对应的选项中我们可以选择y和n,tristate的值类型有三种,分别是y,n,m。按“M”为将相应的代码编译为模块,菜单前显示“<M>”。Uboot中的Kconfig语法与内核中的Kconfig语法类似,所以在学习完驱动的教程以后,我们再来看这个语法会发现十分的简单,同样,uboot中的Kconfig语法我们也不用特别的去深入研究,我们只要掌握到可以自行往uboot中添加自己的配置即可。原创 2024-07-30 15:35:16 · 666 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第四篇 嵌入式Linux系统移植篇-第六十七章 Uboot编译及移植
因为我们要在对应的平台上来运行uboot,那么这个uboot是不是就要对这个平台支持的非常全面呢,因为uboot本身就是裸机代码,所以想要对某一个平台支持的非常全面,就要对这个平台非常熟悉,比如i.MX 8M Mini,那就要对i.MX 8M Mini这个芯片非常熟悉,那谁对这个芯片非常熟悉呢,当然是半导体厂家呀,所以,uboot官网里面的原汁原味的uboot是给半导体厂家准备的,比如RK,NXP等等。uboot 中的环境变量是可以修改的,有专门的命令来修改环境变量的值。所以也可以用mmc命令来操作。原创 2024-07-30 13:48:38 · 1072 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十六章 电容屏触摸驱动实验
在上面这些众多的 ABS_MT 事件中,我们最常用的就是 ABS_MT_SLOT 、 ABS_MT_POSITION_X 、ABS_MT_POSITION_Y 和 ABS_MT_TRACKING_ID。我们自己写一个触摸芯片ft5x06的驱动,实际上这个驱动也是可以在触摸芯片ft5426上来使用的,这两个触摸芯片是兼容的,通过这个触摸驱动实验,我们可以将以前学习过的知识进行框架的搭建,对以前学习的知识进行复习。ABS_MT_POSITION_X 和 ABS_MT_POSITION_Y。原创 2024-07-29 17:50:29 · 797 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十五章 Linux I2C驱动实验
采用互电容的方法,在配合的相互的电容式触摸面板,它支持真正的多点触摸功能。因为我们以前的方法也是需要熟悉的,我们只有学会以前的方法,才能够更好的理解现在的这种设备树的方法,而且有些老的版本还是使用低版本的内核,比如说kernel3.0。因为我们现在使用的是设备树的源码,所以要在设备树文件去掉触摸的设备节点,打开设备树源码/home/topeet/linux/linux-imx/arch/arm64/boot/dts/freescale/itop8mm-evk-7.0.dts,注释掉如下图所示的内容。原创 2024-07-29 17:23:46 · 1100 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十四章 Linux I2C驱动
I2C 总线驱动的重点是 I2C 适配器驱动,主要涉及到两个结构体:i2c_adapter 和 i2c_algorithm。关于 Linux 下 I2C 设备驱动的编写流程就讲解到这里,重点就是 i2c_msg 的构建和i2c_transfer 函数的调用,接下来我们就编写 AP3216C 这个 I2C 设备的 Linux 驱动。在平台文件中找到许多类似的 I2C 设备,在平台文件中不仅有 I2C 设备,还有其他许多不同类型的设备,而且设备越多,越显得平台文件非常混乱,所以就产生了设备树文件。原创 2024-07-29 16:06:39 · 1012 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十三章 输入子系统实验
在 input 设备驱动中申请、注册完成 input_dev 结构体后,还不能正常使用 input 子系统,因为 input 设备是输入一些信息,但是 Linux 内核还不清楚输入的信息表示什么意思,有什么作用,所以我们需要驱动获取到具体的输入值,或者说输入事件,然后将输入事件上报给 Linux 内核。申请完 input_dev 结构体后,需要进行初始化,根据自己的设备来指定事件类型和事件值,比如按键设备的事件类型是 evbit,事件值是 keybit。从上图可知TYPE的类型为0001,即EV_KEY;原创 2024-07-29 15:08:35 · 1119 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十二章 定时器按键消抖实验
在上图中,t1 时刻按键被按下,但是由于抖动的原因,直到 t2 时刻才稳定下来,t1 到t2 这段时间就是抖动。我们可以借助定时器来实现消抖,按键采用中断驱动方式,当按键按下以后触发按键中断,在按键中断中开启一个定时器,定时周期为 10ms,当定时时间到了以后就会触发定时器中断,最后在定时器中断处理函数中读取按键的值,如果按键值还是按下状态那就表示这是一次有效的按键。在上图中,按键没有按下的时候按键值为 1,当按键在 t1 时刻按键被按下以后按键值就变为 0,这是最理想的状态。程序源码在网盘资料“原创 2024-07-27 17:35:08 · 1182 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十一章 Linux内核定时器
比如我们现在需要定义一个周期为 2 秒的定时器,那么这个定时器的超时时间就是 jiffies+(2*HZ),因此 expires=jiffies+(2*HZ)。体系结构不同,HZ 的值也不同。因为一秒内时钟中断的次数等于 Hz,所以 jiffes 一秒内增加的值也就为 Hz,系统运行时间以秒为单位计算,就等于 jiffes/Hz。定时器是我们最常用到的功能,一般用来完成定时功能,本章我们就来学习一下 Linux 内核提供的定时器 API 函数,通过这些定时器 API 函数我们可以完成很多要求定时的应用。原创 2024-07-27 15:41:15 · 666 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十章 中断下文之工作队列
优点是不会受到其他工作的影响。Linux系统在启动期间会创建内核线程,该线程创建以后就处于sleep状态,然后这个线程会一直去队列里面读,看看有没有任务,如果有就执行,如果没有就休眠。需要注意的是,如果调度完工作,并不会马上执行,只是加到了共享的工作队列里面去,等轮到他才会执行。和 tasklet 一样,工作也是需要调度才能运行的,工作的调度函数为 schedule_work,函数原型如下所。尽管工作队列的实现机制非常复杂,但是我们使用工作队列其实就是在这个流水线上添加自己的物料,然后等待执行即可。原创 2024-07-27 14:51:28 · 878 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十九章 等待队列
举个例子,比如说我现在去食堂打饭,阿姨和我说现在没有饭,你需要等一会,等我做好了我再叫你,那么我当前不能获得资源,我被阻塞在这儿了,那么等待队列就是让我们阻塞在这儿,然后等特定的事件发生以后,再继续运行。举个例子来说,比如说阿姨和你说现在没饭,你需要在旁边等一会,等我做好了我再叫你,如果说阿姨做完了不叫你,你又睡着了,那么你今天是不是吃不上饭了,所以说在我们阻塞访问的时候不能获得资源的进程,将进入休眠状态,他将cpu的资源全部让给别的进程,必须保证有一个地方可以唤醒休眠进程,否则的话将会长睡不醒。原创 2024-07-26 17:50:06 · 760 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十八章 中断下文之tasklet
tasklet 采用无差别的队列机制,有中断时才执行,免去了循环查表之苦,tasklet 机制的优点:无类型数量限制,效率高,无需循环查表,支持 SMP 机制,一种特定类型的 tasklet只能运行在一个 CPU 上,不能并行,只能串行执行。如果要使用 tasklet,必须先定义一个 tasklet,然后使用 tasklet_init 函数初始化 tasklet,taskled_init 函。为了提高中断处理数量,顺道改。如上图所示,和我们预期结果是一样的,先打印start,再打印end,再打印0-99。原创 2024-07-26 17:09:57 · 1178 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十七章 Linux中断实验
i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT、4G模块、CAN、RS485等接口一应俱全。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。系统支持Android9.0原创 2024-07-26 15:05:28 · 773 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十六章 设备驱动IO控制
适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、在前面章节中我们使用GPIO函数来操作GPIO的,在使用GPIO函数之前是使用寄存器来进行操作的,我们使用GPIO函数操作GPIO比直接使用寄存器来操作GPIO进一步升级了。我们现在有了ioctl函数,内核已经把工作的任务给我们区分了,定义命令就不再使用read和write函数了,而是使用ioctl函数,因为ioctl函数的任务就是对我们的工作参数进行设置和查询,write和read函数专注于数据传输。原创 2024-07-25 17:33:25 · 919 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十五章 Pinctrl和GPIO子系统实验
适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、第55章我们学习了在设备树下的平台总线模型,当匹配成功以后会在设备树文件中拿资源,然后我们再进行相关的操作。本章节我们要编写pinctrl子系统和GPIO子系统,我们可以在以前代码的基础上进行编写,框架并没有变,我们也是让驱动和设备进行匹配,匹配成功之后将相关的操作,唯一变的地方是之前使用的寄存器操作我们的GPIO,现在我们换成了GPIO子系统提供的API函数来操作我们的GPIO,比原来的方法更先进了一些。原创 2024-07-25 16:37:52 · 742 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十四章 Pinctrl 子系统和 GPIO 子系统
GPIO 子系统在之前的内核中也是存在的,但是 pinctrl 子系统的加入 GPIO 子系统也是有很大的改变。之前我们控制一个GPIO可以直接来操作我们的寄存器,还有一种方法是使用SOC厂家实现的配置函数,例如三星的配置函数为s3c_gpio_cfgpin等,这样带来的问题就是各家有各家的接口函数与实现方式,不但内核的代码复用率低而且开发者很难记住这么多的函数,如果要使用多种平台的话背函数都是很麻烦的,所以在引入设备树后对GPIO子系统进行了大的改造,使用设备树来实现并提供统一的接口。原创 2024-07-25 14:04:04 · 1136 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十三章 设备树下的platform驱动
传统的方法就是把我们的驱动分为两个部分,第一部分是device.c,第二部分是driver.c,当device.c和driver.c匹配成功以后,进入probe函数后就可以获取硬件资源了,然后可以注册杂项设备,注册字符设备。在编写驱动以前,有一个地方需要注意一下,我们在加载driver.ko之前,一定要在开发板上已经成功地添加了test的节点,你可以在linux系统里面查看到你添加的节点,查看节点方法请参考51.1 查看设备树节点方法章节,添加自定义节点请参考51.2添加自定义节点章节。原创 2024-07-25 10:23:07 · 1060 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十二章 设备树常用of函数
iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\2.驱动程序例程\010-设备树常用OF函数。iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\2.驱动程序例程\010-设备树常用OF函数。设备树描述了设备的详细信息,这些信息包括数字类型的、字符串类型的、数组类型的,我们在编写驱动的时候。原创 2024-07-24 15:37:22 · 885 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十一章 添加设备树节点
在上一章节已经对 DTS 的语法做了比较详细的介绍,在本节中根据前面讲解的语法,从头到尾编写一个小型的设备树文件。在实际产品的开发过程中,我们不需要从头编写一个 dts 设备树文件,一般都是使用 soc 厂商提供的 dts 文件,我们只需要根据自己的实际情况修改添加自己的内容即可。由上图可知,我们验证的两个结论完全正确,已经可以查看到覆盖掉的compatible属性显示“test1234”,可以查到status属性的状态为“okay”。添加完保存文件并退出,接下来编译设备树文件。原创 2024-07-23 17:30:00 · 1092 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十章 Linux设备树
通过这些框架,我们可以很容易编写驱动代码,但是,当我们用这个框架非常熟练的时候,我们就会发现虽然这个方法很简单,但是非常不容易扩展,当我们有很多很多相似设备的时候,如果我们都是按照这个框架来完成,那就要写很多遍这个流程,但是多个相似设备之间真正有差异的地方只有框架的初始化硬件的部分,其他步骤的代码基本都是一样的。当我们找一个节点的时候,我们必须书写完整的节点路径,如果我们的节点名很长,那么我们在引用的时候就十分不方便,所以,设备树允许我们用下面的形式为节点标注引用(起别名)。在代码中的节点是什么样子的呢。原创 2024-07-23 15:20:01 · 1108 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十九章 平台总线总结回顾
通过这个框图,我们可以掌握平台总线模型和杂项设备和字符设备之间的关系,我们来看下图的左上角,平台总线模型分为两个部分,第一部分是driver部分,放的是和驱动相关的代码;平台总线模型将驱动分为driver和device,那么就可以提高驱动代码的重用性了,而且也可以大量减少重复性代码,这个也是平台总线模型的优点,并且linux系统都将驱动挂载到总线上是很方便管理的。如果你不了解平台总线模型这个概念,那么等你以后自己学习linux内核源码是看不懂的,所以我们要了解平台总线的概念。【粉丝群】258811263。原创 2024-07-23 15:02:36 · 467 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十八章 Platform 设备驱动
e -- 终于遇到八字匹配的了,那结婚呗,结完婚,男方就向女方交代,我有多少存款,我的房子在哪,钱放在哪等等( struct resource *resource),女方说好啊,于是去房子里拿钱,去给男方买菜啦,给自己买衣服、化妆品、首饰啊等等(int (*probe)(struct platform_device *) 匹配成功后驱动执行的第一个函数),当然如果男的跟小三跑了(设备卸载),女方也不会继续待下去的( int (*remove)(struct platform_device *))。原创 2024-07-23 13:48:24 · 1054 阅读 · 4 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十七章 字符设备和杂项设备总结回顾
如下图三所示,左边是应用层,应用层执行read()write()后会触发file_operation结构体中的xxx_open(),xxx_read(),xxx_write()函数,这几个函数都是操作硬件设备的,这样就实现了应用层操作硬件设备的流程。如果让你点灯,让蜂鸣器响,你会做吗?始化、添加和删除cdev结构体,申请和释放设备号,以及填充file_operations结构体中的操作函数,实现file_operations结构体中的read()、write()和ioctl()等函数是驱动设计的主体工作。原创 2024-07-23 09:52:50 · 490 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十六章 自动创建设备节点
这样,加载模块的时候,用户空间中的udev会自动响应device_create,去/sysfs下寻找对应的类从而创建设备节点。Linux 驱动实验中,当我们通过 insmod 命令加载模块后,还需要通过 mknod 命令来手动创建设备节点,这样使用起来太麻烦了,并且不可能每个设备都去这样操作,Linux 系统的存在就是为了方便使用,所以我们来看一下如何实现自动创建设备节点,当加载模块时,在/dev 目录下自动创建相应的设备文件。46.3章节在46.2章节的基础上,编写创建设备的驱动程序,并编译为驱动模块。原创 2024-07-22 16:50:45 · 1118 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十五章 注册字符类设备
cdev_add()函数和cdev_del()函数分别向系统添加和删除一个cdev,完成字符设备的注册和注销。对cdev_add()的调用通常发生在字符设备驱动模块加载函数中,而对cdev_del()函数的调用则通常发生在字符设备驱动模块卸载函数中。cdev结构体的dev_t成员定义了设备号,为32位,其中12位为主设备号,20位为次设备号。cdev_init()函数用于初始化cdev的成员,并建立cdev和file_operations之间的连接。在整个Linux设备驱动的学习中,字符设备驱动较为基础。原创 2024-07-22 16:35:19 · 1043 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十四章 注册字符设备号
从本章节开始我们开始学习字符设备驱动,我们学习字符设备是围绕与杂项设备的不同点来学习的,在杂项设备的基础上,我们很容易学会字符设备。杂项设备的主设备号是固定的,固定为10,那么我们要学习的字符类设备就需要自己或者系统来给我们分配了。次设备号起始地址,alloc_chrdev_region 可以申请一段连续的多个设备号,这些设备号的主设备号一样,但是次设备号不同,次设备号以 baseminor 为起始地址地址开始递增。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。原创 2024-07-22 15:50:21 · 826 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十三章 驱动模块传参
再下来三位为不同组用户权限。在编写应用程序的时候,我们可以给main函数传递参数,比如void main(int argc,char *argv[]),这个功能大家用起来已经很熟练了。iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\2.驱动程序例程\05-驱动模块传参。如上图所示,查看到变量a的读写权限为-r,意为可读,驱动程序里面设置的变量a的权限为S_IRUSR,意为可读,所以变量a传参成功。原创 2024-07-22 15:20:51 · 1163 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十二章 LED驱动实验
我们已经学会了杂项设备驱动编写的基本流程,其实需求已经完成了一半了,我们已经注册了杂项设备,并生成了设备节点。接下来我们要完成控制LED的逻辑操作,那么控制LED就涉及到了对寄存器的操作,但是对寄存器的操作我们是不能直接访问的,因为linux不能直接访问我们的物理地址,需要把物理地址先映射成虚拟地址,我们完成这一步转换需要用到ioremap函数。”,因为我们的内核里面已经的驱动了,像复用关系的寄存器,电气属性的寄存器,就可以不用设置了,直接设置数据寄存器和方向寄存器就可以了。原创 2024-07-22 15:08:49 · 1269 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十一章 物理地址与虚拟地址
H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。般分布为0~3GB(即PAGE_OFFSET,在0x86中它等于0xC0000000),这样,剩下的3~4GB为内核空间,如下图所示。负责映射,它并不会跟着进程改变,是固定的。内核空间的虚拟地址到物理地址映射是被所有进程共享的,内核的虚拟空间独立于其他程序。统的每个用户进程分配独立的内存空间并保证用户空间不能访问内核空间的地址,为操作系统的虚拟内存。原创 2024-07-22 14:16:58 · 1266 阅读 · 0 评论