![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
IMX6ULL
文章平均质量分 80
IMX6ULL
anieoo
这个作者很懒,什么都没留下…
展开
-
嵌入式ARM移植sqlite3
平台: 处理器:I.MX6ULL 内核:linux-4.1.15。进入安装目录,拷贝库文件。④sqlite3测试。原创 2023-01-07 12:49:32 · 964 阅读 · 0 评论 -
嵌入式ARM移植boa服务器
将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下。②将boa源码目录下的boa.conf拷贝到根文件系统/etc/boa目录下,平台: 处理器:I.MX6ULL 内核:linux-4.1.15。在开发板根目录下创建/etc/boa文件夹。先下载boa服务器源码,执行以下命令。① src/compat.h文件。③修改配置文件boa.conf。② src/log.c文件。③src/boa.c文件。4.进入src目录编译。5.Boa服务器配置。6.boa服务器测试。原创 2023-01-06 22:10:04 · 642 阅读 · 0 评论 -
构建Buildroot根文件系统(I.MX6ULL)
构建的根文件系统只有一些常用的命令和文件。不仅集成了 busybox,而且还集成了各种常见的第三方库和软件。原创 2022-08-04 16:45:24 · 1463 阅读 · 0 评论 -
Linux驱动_块设备驱动
块设备是Linux驱动三大设备之一。与字符设备有很大的区别。块设备是针对存储设备的,比如 SD 卡、 EMMC、 NAND Flash、 Nor Flash、 SPI Flash、机械硬盘、固态硬盘等。因此块设备驱动其实就是这些存储设备驱动。一、块设备和字符设备的区别摘自Linux驱动设备开发详解(宋宝华)二、块设备驱动结构1、block_device_operations block_device_operations是和file_operation...原创 2022-05-31 17:04:44 · 1232 阅读 · 0 评论 -
10.5 内核定时器编程
和Linux中断一样,内核定时器的编程只需要调用内核提供的API函数。内核在时钟中断发生以后会检查各定时器是否到期,到期后将会把其绑定的定时器处理函数放到底半部执行。 内核定时器本质上还是依赖硬件定时器实现。一、定时器API函数1、timer_list结构体在Linux内核中,如果需要使用一个定时器,则必须先定义一个timer_list结构体,结构体对应如下:struct timer_list { /* * All fields that change...原创 2022-05-21 19:09:46 · 463 阅读 · 1 评论 -
Linux驱动_互斥体
上节回顾:Linux驱动_并发与竞争_anieoo的博客-CSDN博客上节回顾:Linux驱动_信号量_anieoo的博客-CSDN博客将信号量的值设置为 1 就可以使用信号量进行互斥访问了,虽然可以通过信号量实现互斥,但是 Linux 提供了一个比信号量更专业的机制来进行互斥,它就是互斥体—mutex。互斥访问表示一次只有一个线程可以访问共享资源,不能递归申请互斥体。完整实验代码:#include <linux/kernel.h>#include <...原创 2022-03-27 21:30:19 · 897 阅读 · 0 评论 -
Linux驱动_异步通知
Linux应用通常有三种方式查询设备驱动是否可以访问,分别是:阻塞式、非阻塞式和异步通知。异步通知: “信号”为此应运而生,信号类似于我们硬件上使用的“中断”,只不过信号是软件层次上的。算是在软件层次上对中断的一种模拟,驱动可以通过主动向应用程序发送信号的方式来报告自己可以访问了,应用程序获取到信号以后就可以从驱动设备中读取或者写入数据了。整个过程就相当于应用程序收到了驱动发送过来了的一个中断,然后应用程序去响应这个中断,在整个处理过程中应用程序并没有去查询驱动设备是否可以访问,一切都是由驱动设.原创 2022-02-16 11:38:41 · 648 阅读 · 0 评论 -
Linux驱动_pinctrl子系统和gpio子系统(LED)
目录前言一、修改设备树文件 (1)添加pinctrl节点(2)添加led设备节点 (3)检查LED对应pin脚是否被使用 (4)启动系统二、详细驱动程序三、测试前言inctrl子系统和gpio子系统_anieoo的博客-CSDN博客一、修改设备树文件 (1)添加pinctrl节点 打开imx6ull-alientek-emmc.dts文件,在 iomuxc 节点的...原创 2022-01-25 15:01:07 · 1406 阅读 · 0 评论 -
Linux内核定时器
Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、对于驱动编写者来说最常用的就是定时器。硬件定时器提供时钟源,时钟源的频率可以设置, 设置好以后就周期性的产生定时中断,系统使用定时中断来计时。中断周期性产生的频率就是系统频率,也叫做节拍率(tick rate)(有的资料也叫系统频率)。 Liunx系统的节拍率可以在编译Linux内核的时候通过图形化界面设置。路径如下:通过make configuration命令可以进行图形化配置。-> ...原创 2022-02-02 18:57:49 · 4845 阅读 · 0 评论 -
Linux驱动_原子操作
上节回顾:Linux驱动_并发与竞争_anieoo的博客-CSDN博客之前学习了原子操作指的是由多步操作组成的一个操作。如果该操作不能原子地执行,则要么执行完所有步骤,要么一步也不执行,不可能只执行所有步骤的一个子集。本节实验我们利用原子变量模拟原子操作,通过此实验可以实现在一个驱动被应用占用的过程中,如果另一个驱动再次访问就会返回错误。步骤如下: ①在驱动的入口函数中中定义一个原子变量:atomic_set(&gpioled.l...原创 2022-03-22 16:41:51 · 1956 阅读 · 0 评论 -
Linux驱动_非阻塞式IO
上一节学习了阻塞式IO驱动的编写,而应用程序对驱动设备的输入/输出操作还有另一种方式。即非阻塞式IO。一、非阻塞式IO应用程序使用非阻塞访问方式从设备读取数据,当设备不可用或数据未准备好的时候会立即向内核返回一个错误码,表示数据读取失败。应用程序会再次重新读取数据,这样一直往复循环,直到数据读取成功。二、轮询如果用户应用程序以非阻塞的方式访问设备,设备驱动程序就要提供非阻塞的处理方式,也就是轮询。 poll、 epoll 和 select 可以用于处理轮询...原创 2022-02-13 00:06:12 · 330 阅读 · 0 评论 -
Linux驱动_阻塞式IO实验
在上一章 Linux 中断实验中,我们直接在应用程序中通过 read 函数不断的读取按键状态,当按键有效的时候就打印出按键值。这种方法有个缺点,那就是 imx6uirqApp 这个测试应用程序拥有很高的 CPU 占用率。一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as np import pandas as pd i...原创 2022-02-12 22:18:10 · 650 阅读 · 0 评论 -
Linux驱动_INPUT子系统
按键、鼠标、键盘、触摸屏等都属于输入设备, Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设备,只是在此基础上套上了 input 框架,用户只需要负责上报输入事件,比如按键值、坐标等信息, input 核心层负责处理这些事件。 input子系统框架如图所示:这三个层的分工如下:驱动层:输入设备的具体驱动程序,比如按键驱动程序,向内核层报告输入内容。核心层:承上启下...原创 2022-02-24 12:55:03 · 1078 阅读 · 2 评论 -
Linux驱动_Platform平台驱动
在Linux操作系统中,驱动程序占用了Linux内核代码量的大头,如果不进行管理,将会造成数量庞大的结果。因此引入了驱动的分离。 上图所示就是驱动的分离,相当于驱动使用标准方法去获取到设备信息(比如从设备树中获取到设备信息),然后根据获取到的设备信息来初始化设备。 这样就相当于驱动只负责驱动,设备只负责设备,想办法将两者进行匹配即可。这个就是 Linux 中的总线(bus)、驱动(driver)和设备(device)模型,也就是常说的驱动分离。总线就是驱动和设备信息的月老...原创 2022-02-19 22:26:56 · 4432 阅读 · 0 评论 -
Linux驱动_中断
裸机实验里面中断的处理方法:①、使能中断,初始化相应的寄存器。②、注册中断服务函数,也就是向 irqTable 数组的指定标号处写入中断服务函数②、中断发生以后进入 IRQ 中断服务函数,在 IRQ 中断服务函数在数组 irqTable 里面查找具体的中断处理函数,找到以后执行相应的中断处理函数。Linux 内核提供了完善的中断框架,我们只需要申请中断,然后注册中断处理函数即可,使用非常方便,不需要一系列复杂的寄存器配置。一、中...原创 2022-02-02 20:04:37 · 3056 阅读 · 0 评论 -
Linux驱动_按键输入
一、修改设备树文件 (1)添加pinctrl节点打开imx6ull-alientek-emmc.dts文件,在 iomuxc 节点的 imx6ul-evk 子节点下创建一个名为“pinctrl_key”的子节点,节点内容如下所示: ##该节点的作用是设置电气属性(2)添加Key设备节点在根节点“/”下创建 Key按键节点,节点内容如下:(3)启动系统Linux系...原创 2022-03-22 20:29:39 · 271 阅读 · 0 评论 -
Linux驱动_设备树下LED驱动
前言 学习完设备树基础知识后,完成设备树下LED驱动实验一、修改设备树文件 在设备书根/节点下添加子节点led信息: alphaled { #address-cells = <1>; #size-cells = <1>; status = "okay"; reg = < 0X020C406C 0X04 /*CCM_CCGR1_BASE*/ 0X020E0068 0X04 /*SW_MUX_GPIO......原创 2022-01-20 22:39:36 · 602 阅读 · 0 评论 -
Linux驱动_spi驱动(ICM20608)
参考:Linux SPI 驱动分析(1)— 结构框架_StephenZhou-CSDN博客_linux spi驱动Linux SPI 驱动分析(2)— 框架层源码分析_StephenZhou-CSDN博客_spi_message_initSPI驱动的框架和源码分析,可以在参考博客中查看。驱动编写测试 : 原理图如下所示: LINUX下的SPI主机驱动已经由SOC厂商编写好了,比如I.MX6ULL的SPI主机驱动由NXP官方编写好了,我们编写设备驱动的...原创 2022-03-13 12:01:14 · 5524 阅读 · 0 评论 -
Linux驱动_自旋锁
上节回顾:Linux驱动_并发与竞争_anieoo的博客-CSDN博客上节回顾:Linux驱动_原子操作_anieoo的博客-CSDN博客 为什么需要使用自旋锁:原子操作只能对整形变量或者位进行保护,但是,在实际的使用环境中怎么可能只有整形变量或位这么简单的临界区。例如结构体的保护,就无法使用原子操作进行保护,因此就需要使用自旋锁!!实验步骤:在原子操作实验中实现了一次只能有一个应用程序访问 LED 灯,本节我们使用自旋锁来实现此功能。在使用自旋锁之前,先...原创 2022-03-22 17:28:14 · 530 阅读 · 0 评论 -
Linux驱动_Beep蜂鸣器
目录前言一、修改设备树文件 (1)添加pinctrl节点(2)添加led设备节点(3)检查Beep对应pin脚是否被使用(4)启动系统二、详细驱动程序三、详细应用程序四、测试总结前言 Beep蜂鸣器驱动和Led驱动类似,并无区别,当做是对引入pinctrl子系统和gpio子系统的复习。一、修改设备树文件 (1)添加pinctrl节点打开imx...原创 2022-01-25 17:13:43 · 2061 阅读 · 0 评论 -
Linux驱动_i2c驱动(ap3216c)
三、驱动编写测试1、修改设备树从原理图中可以看出,UART4_RXD作为I2C1_SDA,UART4_TXD作为I2C1_SCL。因此需要修改对应的pinctrl节点信息,使管脚复用为I2C1功能 。修改后结果如下:随后在设备树i2c1接口上添加AP3216C设备节点信息,添加结束后如下:其中@后面的“1e”是 ap3216c 的器件地址,compatible属性用于驱动和设备的匹配,reg属性也用来保存ap3216c的器件地址。 ...原创 2022-02-27 11:23:21 · 4208 阅读 · 2 评论 -
Linux驱动_并发与竞争
前言Linux是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。这些任务可能会相互覆盖这段内存中的数据,造成内存数据混乱。针对这个问题必须要做处理,严重的话可能会导致系统崩溃。 Linux产生并发的原因主要由一下几种: ① 多线程并发访问, Linux 是多任务(线程)的系统,所以多线程访问是最基本的原因。...原创 2022-01-28 20:49:36 · 1557 阅读 · 0 评论 -
Linux驱动_信号量
上节回顾:Linux驱动_并发与竞争_anieoo的博客-CSDN博客信号量的特点:①、因为信号量可以使等待资源线程进入休眠状态,因此适用于那些占用资源比较久的场合。②、因此信号量不能用于中断中,因为信号量会引起休眠,中断不能休眠。③、如果共享资源的持有时间比较短,那就不适合使用信号量了,因为频繁的休眠、切换线程引起的开销要远大于信号量带来的那点优势。实验步骤: ①在驱动的入口函数中初始化信号量为1。 ②应...原创 2022-03-27 21:13:32 · 1027 阅读 · 0 评论 -
Linux驱动_字符型驱动框架流程分析
文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言学习掌握字符型驱动框架搭建一、字符设备驱动简介字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,例如LED、按键、IIC、SPI等。 字符型驱动通常加载在/dev/xxx下形成一个文件,例如/dev/led是led的驱动文件。 用户处于用户空间,驱动处于内核空............原创 2022-01-14 10:28:52 · 933 阅读 · 2 评论 -
Linux驱动_Misc杂项驱动
MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动,他的作用就是解决Linux系统设备号紧缺的问题。所有的MISC设备驱动的主设备号都为10,不同的设备使用不同的从设备号!一、为什么使用MISCMISC 设备会自动创建 cdev,不需要像我们以前那样手动创建,因此采用 MISC 设备驱动可以简化字符设备驱动的编写,可以省去以下函数:alloc_chrdev_region() /*申请设备号*/cdev_ini...原创 2022-02-20 19:51:28 · 956 阅读 · 0 评论 -
Linux驱动_LED驱动
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结一、地址映射 1、在裸机实验的时候操作LED等外设实际上是操作相应外设的寄存器。 2、linux下驱动开发最终要操作的也是寄存器,然而在Linux环境下不能直接对寄存器的物理地址进行操作。比如LED寄存器的地址为0x01010101,在裸机开发环境下可以直接对该地址进行赋值,而Lin......原创 2022-01-16 22:49:45 · 1440 阅读 · 0 评论 -
Linux驱动_多点电容触摸
一丶Linux下多点电容触摸驱动框架① 电容触摸屏IC是FT5426,为IIC协议芯片,因此需要编写IIC驱动② 触摸IC会发出中断信号,并在中断服务函数中上报信息,因此需要编写中断框架③ 触摸屏向Linux内核上报的信息都属于Input子系统,因此需要编写Input子系统框架④ 上报的信息需要满足Input子系统的多点电容触摸协议二、多点电容触摸协议在Documentation/input/multitouch-protocol.txt。 MT...原创 2022-04-21 18:06:02 · 952 阅读 · 1 评论 -
Linux驱动_新LED驱动
一、新字符驱动原理 1、以前的字符驱动使用register_chedev注册字符设备,需要手动指定主设备号 2、新版字符型驱动有两种方式注册字符设备:alloc_chrdev_region(自动申请设备号)和register_chrdev_region(手动申请主设备号)。两种申请方式的...原创 2022-01-18 20:09:23 · 1288 阅读 · 0 评论