![](https://i-blog.csdnimg.cn/direct/440c24cc705d457e9c19c517c81690c3.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
开发指南8MM
文章平均质量分 91
手册
北京迅为
让学习更简单,让开发更容易
展开
-
【北京迅为】《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 · 315 阅读 · 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 · 409 阅读 · 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 · 555 阅读 · 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 · 694 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十二章 定时器按键消抖实验
在上图中,t1 时刻按键被按下,但是由于抖动的原因,直到 t2 时刻才稳定下来,t1 到t2 这段时间就是抖动。我们可以借助定时器来实现消抖,按键采用中断驱动方式,当按键按下以后触发按键中断,在按键中断中开启一个定时器,定时周期为 10ms,当定时时间到了以后就会触发定时器中断,最后在定时器中断处理函数中读取按键的值,如果按键值还是按下状态那就表示这是一次有效的按键。在上图中,按键没有按下的时候按键值为 1,当按键在 t1 时刻按键被按下以后按键值就变为 0,这是最理想的状态。程序源码在网盘资料“原创 2024-07-27 17:35:08 · 1021 阅读 · 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 · 526 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十章 中断下文之工作队列
优点是不会受到其他工作的影响。Linux系统在启动期间会创建内核线程,该线程创建以后就处于sleep状态,然后这个线程会一直去队列里面读,看看有没有任务,如果有就执行,如果没有就休眠。需要注意的是,如果调度完工作,并不会马上执行,只是加到了共享的工作队列里面去,等轮到他才会执行。和 tasklet 一样,工作也是需要调度才能运行的,工作的调度函数为 schedule_work,函数原型如下所。尽管工作队列的实现机制非常复杂,但是我们使用工作队列其实就是在这个流水线上添加自己的物料,然后等待执行即可。原创 2024-07-27 14:51:28 · 601 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十九章 等待队列
举个例子,比如说我现在去食堂打饭,阿姨和我说现在没有饭,你需要等一会,等我做好了我再叫你,那么我当前不能获得资源,我被阻塞在这儿了,那么等待队列就是让我们阻塞在这儿,然后等特定的事件发生以后,再继续运行。举个例子来说,比如说阿姨和你说现在没饭,你需要在旁边等一会,等我做好了我再叫你,如果说阿姨做完了不叫你,你又睡着了,那么你今天是不是吃不上饭了,所以说在我们阻塞访问的时候不能获得资源的进程,将进入休眠状态,他将cpu的资源全部让给别的进程,必须保证有一个地方可以唤醒休眠进程,否则的话将会长睡不醒。原创 2024-07-26 17:50:06 · 648 阅读 · 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 · 1035 阅读 · 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 · 654 阅读 · 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 · 821 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十五章 Pinctrl和GPIO子系统实验
适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、第55章我们学习了在设备树下的平台总线模型,当匹配成功以后会在设备树文件中拿资源,然后我们再进行相关的操作。本章节我们要编写pinctrl子系统和GPIO子系统,我们可以在以前代码的基础上进行编写,框架并没有变,我们也是让驱动和设备进行匹配,匹配成功之后将相关的操作,唯一变的地方是之前使用的寄存器操作我们的GPIO,现在我们换成了GPIO子系统提供的API函数来操作我们的GPIO,比原来的方法更先进了一些。原创 2024-07-25 16:37:52 · 613 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十四章 Pinctrl 子系统和 GPIO 子系统
GPIO 子系统在之前的内核中也是存在的,但是 pinctrl 子系统的加入 GPIO 子系统也是有很大的改变。之前我们控制一个GPIO可以直接来操作我们的寄存器,还有一种方法是使用SOC厂家实现的配置函数,例如三星的配置函数为s3c_gpio_cfgpin等,这样带来的问题就是各家有各家的接口函数与实现方式,不但内核的代码复用率低而且开发者很难记住这么多的函数,如果要使用多种平台的话背函数都是很麻烦的,所以在引入设备树后对GPIO子系统进行了大的改造,使用设备树来实现并提供统一的接口。原创 2024-07-25 14:04:04 · 991 阅读 · 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 · 915 阅读 · 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 · 781 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十一章 添加设备树节点
在上一章节已经对 DTS 的语法做了比较详细的介绍,在本节中根据前面讲解的语法,从头到尾编写一个小型的设备树文件。在实际产品的开发过程中,我们不需要从头编写一个 dts 设备树文件,一般都是使用 soc 厂商提供的 dts 文件,我们只需要根据自己的实际情况修改添加自己的内容即可。由上图可知,我们验证的两个结论完全正确,已经可以查看到覆盖掉的compatible属性显示“test1234”,可以查到status属性的状态为“okay”。添加完保存文件并退出,接下来编译设备树文件。原创 2024-07-23 17:30:00 · 969 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十章 Linux设备树
通过这些框架,我们可以很容易编写驱动代码,但是,当我们用这个框架非常熟练的时候,我们就会发现虽然这个方法很简单,但是非常不容易扩展,当我们有很多很多相似设备的时候,如果我们都是按照这个框架来完成,那就要写很多遍这个流程,但是多个相似设备之间真正有差异的地方只有框架的初始化硬件的部分,其他步骤的代码基本都是一样的。当我们找一个节点的时候,我们必须书写完整的节点路径,如果我们的节点名很长,那么我们在引用的时候就十分不方便,所以,设备树允许我们用下面的形式为节点标注引用(起别名)。在代码中的节点是什么样子的呢。原创 2024-07-23 15:20:01 · 913 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十九章 平台总线总结回顾
通过这个框图,我们可以掌握平台总线模型和杂项设备和字符设备之间的关系,我们来看下图的左上角,平台总线模型分为两个部分,第一部分是driver部分,放的是和驱动相关的代码;平台总线模型将驱动分为driver和device,那么就可以提高驱动代码的重用性了,而且也可以大量减少重复性代码,这个也是平台总线模型的优点,并且linux系统都将驱动挂载到总线上是很方便管理的。如果你不了解平台总线模型这个概念,那么等你以后自己学习linux内核源码是看不懂的,所以我们要了解平台总线的概念。【粉丝群】258811263。原创 2024-07-23 15:02:36 · 417 阅读 · 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 · 880 阅读 · 3 评论 -
【北京迅为】《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 · 437 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十六章 自动创建设备节点
这样,加载模块的时候,用户空间中的udev会自动响应device_create,去/sysfs下寻找对应的类从而创建设备节点。Linux 驱动实验中,当我们通过 insmod 命令加载模块后,还需要通过 mknod 命令来手动创建设备节点,这样使用起来太麻烦了,并且不可能每个设备都去这样操作,Linux 系统的存在就是为了方便使用,所以我们来看一下如何实现自动创建设备节点,当加载模块时,在/dev 目录下自动创建相应的设备文件。46.3章节在46.2章节的基础上,编写创建设备的驱动程序,并编译为驱动模块。原创 2024-07-22 16:50:45 · 1051 阅读 · 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 · 977 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十四章 注册字符设备号
从本章节开始我们开始学习字符设备驱动,我们学习字符设备是围绕与杂项设备的不同点来学习的,在杂项设备的基础上,我们很容易学会字符设备。杂项设备的主设备号是固定的,固定为10,那么我们要学习的字符类设备就需要自己或者系统来给我们分配了。次设备号起始地址,alloc_chrdev_region 可以申请一段连续的多个设备号,这些设备号的主设备号一样,但是次设备号不同,次设备号以 baseminor 为起始地址地址开始递增。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。原创 2024-07-22 15:50:21 · 765 阅读 · 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 · 1077 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十二章 LED驱动实验
我们已经学会了杂项设备驱动编写的基本流程,其实需求已经完成了一半了,我们已经注册了杂项设备,并生成了设备节点。接下来我们要完成控制LED的逻辑操作,那么控制LED就涉及到了对寄存器的操作,但是对寄存器的操作我们是不能直接访问的,因为linux不能直接访问我们的物理地址,需要把物理地址先映射成虚拟地址,我们完成这一步转换需要用到ioremap函数。”,因为我们的内核里面已经的驱动了,像复用关系的寄存器,电气属性的寄存器,就可以不用设置了,直接设置数据寄存器和方向寄存器就可以了。原创 2024-07-22 15:08:49 · 1124 阅读 · 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 · 1189 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十章 Linux用户层和内核层
设备驱动程序(device driver),简称驱动程序(driver),是一个允许高级(High level)计算机软件(computer software)与硬件(hardware)交互的程序,这种程序建立了一个硬件与硬件,或硬件与软件沟通的界面,经由主板上的总线(bus)或其它沟通子系统(subsystem)与硬件形成连接的机制,这样的机制使得硬件设备(device)上的数据交换成为可能。文件对应的操作有打开,关闭,读写,那么设备节点也可以看成一个文件,那么设备节点对应的操作有打开,关闭,读写。原创 2024-07-22 14:13:32 · 831 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十九章 Linux MISC驱动
misc 的意思是混合的杂项的,所以 misc 设备驱动也叫做杂项设备驱动,当我们板子上的某个设备没有办法分类时,就可以用 misc 设备驱动。设备号包含主设备号和次设备号,设备号是计算机识别设备的一种方式,主设备号相同的就被视为同一类设备,主设备号在Linux系统里面是唯一的,次设备号不一定唯一。所有的 misc 设备驱动的主设备号都为 10,不同的设备使用不同的从设备号。通过39.1章节的学习,我们已经把杂项设备的基本概念搞懂了,在本实验中,使用 misc 设备驱动的方式来编写最简单的杂项设备的驱动。原创 2024-07-22 11:15:29 · 703 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十八章 驱动模块编译进内核
该宏,就是写出到配置文件中的那个宏,对于写makefile的人来说,往往也是利用此相关的宏,在makefile中,实现对应的不同的控制。Kconfig相当于菜单,我们要把驱动编译到内核,要先改Kconfig,然后我们要把驱动添加到菜单里面,添加好了之后,我们才可以通过make menuconfig图形化配置来修改我们的.config。menuconfig中的每一行的选项,都有一个用特殊颜色标记出来的字母,很明显,此字母,就是该行的快捷字母。注意:此类快捷字母,一般都是大写的,且是大小写区分的。原创 2024-07-22 10:52:56 · 1163 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十七章 Linux内核模块
模块本身不被编译入内核映像,从而控制了内核的大小。为了使读者初步建立对模块的感性认识,在第36.3章节我们已经写了一个最简单的驱动helloworld,那么这个章节将来学习怎么将我们写的驱动编译成驱动文件。我们来解释一下makefile的第一行,-m意思是把我们的驱动编译成模块,那么生成的中间文件的名字一般是和驱动C文件同名,这里是helloworld.o。”章节,此后的章节,我们也是通过nfs的方式往开发板传输文件,以后便不再赘述,大家也可以使用U盘的方式拷贝到开发板,但是为了方便调试,最好使用nfs。原创 2024-07-22 09:46:40 · 718 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十六章 Linux驱动初探
Linux设备驱动会以内核模块的形式出现,因为linux内核的整体架构就非常庞大,包含的组件也非常多,如果把所有的功能都编译到linux内核中会使得内核非常臃肿,为了解决这个问题,更方便地新增和删除功能,linux提供了这样的机制,这种机制被称为模块。单片机开发包括:程序设计(PC端软件编程),程序送往执行(将编程好的软件下载到单片机,需要编程器或者下载线),单片机系统的设计(硬件上设计你需要的任务的执行机构,如控制开关,温度检测,红外传输等等,都是根据你的所需,然后在选择对应的硬件器件)。原创 2024-07-19 16:26:34 · 1009 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十五章 进程间通信
我们通常通过信号来解决多个进程对同一资源的访问竞争的问题,使在任一时刻只能有一个执行线程访问代码的临界区域,也可以说它是协调进程间的对同一资源的访问权,也就是用于同步进程的。最简单的信号量是只能取0和1的变量,这也是信号量最常见的一种形式,叫做二进制信号量。本章以常用的管道(包括有名管道和无名管道),System V IPC(消息队列,共享内存,信号灯),套接字(UNIX域套接字和网络套接字)为例来说明Linux进程通信常用的方法,本文档中介绍的只是一小部分,如果想深入了解可以去翻看专业的书籍。原创 2024-07-19 16:03:41 · 564 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十四章 进程基础
创建新进程的那个进程称为父进程,新进程称为子进程,父进程和子进程拥有相同的代码段数据段,有各自独立的地址空间。进程指正在运行的程序,如下图示,是资源分配的最小单位,可以通过“ps ”或“top”等命令查看正在运行的进程,线程是系统的最小调度单位,一个进程可以拥有多个线程,同一进程里的线程可以共享此进程的同一资源。所有的进程都是由其他进程创建(除了pid为0号的idle进程),pid号为1的init进程是系统启动后运行的第一个进程,是所有进程的父进程,init进程会初始化一部分系统服务,创建其他进程。原创 2024-07-18 15:37:49 · 820 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十三章 库的制作与使用
动态库(动态库也叫共享库)在程序编译的时候不会被链接到目标代码里面,而是在程序运行的时候被载入的。把我们的动态库所在的路径加到环境变量里面去,比如我们动态库所在的路径为/home/test,我们就可以这样添加,但是这种方法只在当前设置的窗口有效。在动态库使用是,系统会默认去/lib,/usr/lib目录下去查找动态函数库,如果我们使用的库不在里面,就会提示错误。修改ubuntu下的配置文件/etc/ld.so.conf,我们在这个配置文件里面加入动态库所在的位置,然后使用命令ldconfig更新目录。原创 2024-07-17 17:50:08 · 881 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十二章 目录IO
适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\0。iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\0。原创 2024-07-17 17:36:56 · 898 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第二篇 Linux系统编程篇-第三十一章 文件IO和标准IO
文件IO是直接调用内核提供的系统调用函数,头文件是unistd.h,标准IO是间接调用系统调用函数,头文件是stdio.h,文件IO是依赖于Linux操作系统的,标准IO是不依赖操作系统的,所以在任何的操作系统下,使用标准IO,也就是C库函数操作文件的方法都是相同的。iTOP-i.MX8MM开发板\02-i.MX8MM开发板网盘资料汇总(不含光盘内容)\嵌入式Linux开发指南(iTOP-i.MX8MM)手册配套资料\1.系统编程例程\系统编程配套程序\linux\0。,通过缓冲区操作文件,带缓存机制。原创 2024-07-17 17:24:58 · 991 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第三十章 控制GPIO高低电平
sys/class/gpio/gpiochipX (X为0,1,2.....)目录下保存系统中 GPIO 寄存器的信息,包括每个寄存器控制引脚的起始编号base, 寄存器名称, 引脚总数。在文件系统的/sys目录下给用户提供了许多接口,比如在/sys下面的bus目录,这个目录下放置的都是和总线相关的,比如I2C,usb等。//设置GPIO方向为输出。其中,/sys/class/gpio/sys/class/gpio/export 用于通知系统需要导出控制的 GPIO 引脚编号。原创 2024-07-15 16:35:10 · 661 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第二十九章 NFS服务器的搭建和使用
然后我们再进到共享目录看一下,在这个目录下有一个 helloworld.c文件,现在是在 ubuntu上操作的,然后在超级终端上看一下,这里是把共享的目录挂载到了 mnt 上,进到 /mnt目录下,ls看一下,在这里就可以看到ubuntu的helloworld.c文件了,我们来运行下,是可以运行成功的,所以说使用nfs,我们可以很方便地把 ubuntu上的文件拷贝到开发板。NFS是Network File System 的缩写,它可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。原创 2024-07-12 13:42:24 · 930 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第二十八章 借助U盘或TF卡拷贝程序到开发板上
适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、第一步,我们要把U盘或者TF卡连接到虚拟机VM,我们可以点击VM里“虚拟机”这个选项,选择“可移动设备”,然后选择“Unknown Mass Storage ”,连接(断开与主机的连接),()里是断开与主机的连接,这就是说我们选上这个选项之后,他会把我们的U盘或者TF卡与windows电脑连接断开,然后把它们连接到ubuntu上,我们点一下,连接成功以后,ubuntu会弹出来U盘或者TF卡里面的存储的界面。原创 2024-07-12 10:59:17 · 659 阅读 · 0 评论 -
【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第二十七章 交叉编译器的安装和使用
适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、因为我们使用 ARM 的编译器编译完了之后,是把我们的可执行程序放到开发板上来运行,而不是在PC上运行的,这个过程大家可以把它理解成交叉,然后再和我们的编译器结合起来就叫做交叉编译器。我们写了linux上第一个c程序 heollo world ,是使用gcc 编译器进行代码的编译,编译得到的可执行文件只能在X86结构的PC上运行,不能在开发板上运行,如果要在arm开发板上运行,则需要交叉编译这个C程序。原创 2024-07-11 17:45:22 · 729 阅读 · 0 评论