自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(155)
  • 收藏
  • 关注

原创 正点原子安装buildroot构建根文件系统

在《第三篇 系统移植篇》我们最后讲解了如何使用 busybox 构建文件系统,busybox 仅仅 只是帮我们构建好了一些常用的命令和文件,像 lib 库、/etc 目录下的一些文件都需要我们自己 手动创建,而且 busybox 构建的根文件系统默认没有用户名和密码设置。在后续的实验中,我 们还要自己去移植一些第三方软件和库,比如 alsa、iperf、mplayer 等等。

2024-08-09 14:11:03 1111

原创 正点原子imx6ull-mini-Linux驱动之Linux IIO 驱动实验

IIO 全称是 Industrial I/O,翻译过来就是工业 I/O,大家不要看到“工业”两个字就觉得 IIO 是只用于工业领域的。大家一般在搜索 IIO 子系统的时候,会发现大多数讲的都是 ADC,这是 因为 IIO 就是为 ADC 类传感器准备的,当然了 DAC 也是可以的。大家常用的陀螺仪、加速度 计、电压/电流测量芯片、光照传感器、压力传感器等内部都是有个 ADC,内部 ADC 将原始的 模拟数据转换为数字量,然后通过其他的通信接口,比如 IIC、SPI 等传输给 SOC。

2024-08-08 17:56:55 1026

原创 正点原子imx6ull-mini-Linux驱动之Regmap API 实验

Linux 下大部分设备的驱动开发都是操作其内部寄存器,比如 I2C/SPI 设备的本质都是一样 的,通过 I2C/SPI 接口读写芯片内部寄存器。芯片内部寄存器也是同样的道理,比如 I.MX6ULL 的 PWM、定时器等外设初始化,最终都是要落到寄存器的设置上。Linux 下使用 i2c_transfer 来读写 I2C 设备中的寄存器,SPI 接口的话使用 spi_write/spi_read 等。

2024-08-08 13:35:22 664

原创 正点原子imx6ull-mini-Linux驱动之Linux PWM 驱动实验

在裸机篇我们已经学习过了如何使用 I.MX6ULL 的 PWM 外设来实现 LCD 的背光调节, 其实在 Linux 的 LCD 驱动实验我们也提到过 I.MX6ULL 的 PWM 背光调节,但是并没有专门的 去讲解 PWM 部分,本章我们就来学习一下 Linux 下的 PWM 驱动开发。

2024-08-08 10:35:42 1043

原创 正点原子imx6ull-mini-Linux驱动之Linux 网络驱动实验

本章节讨论的都是有线网络!提起网络,我们一般想到的硬件就是“网卡”,“网卡”这个概念最早从电脑领域传出来, 顾名思义就是能上网的卡。在电脑领域的“原始社会”,网卡是独立的硬件,如果电脑要上网就 得买个网卡插上去,类似现在的显卡一样。但是大家现在观察自己的笔记本或者台式机主板会 发现并没有类似显卡一样的网卡设备,原因是随着技术的不断发展,现在只需要一个芯片就可 以实现有线网卡功能,因此网卡芯片都直接放到了主板上。所以大家在接触嵌入式的时候听到 “网卡”这两个字,不要急着在开发板上找“卡”一样的东西。

2024-08-07 22:50:09 1119

原创 正点原子imx6ull-mini-Linux驱动之Linux 块设备驱动实验

块设备是针对存储设备的,比如 SD 卡、EMMC、NAND Flash、Nor Flash、SPI Flash、机 械硬盘、固态硬盘等。因此块设备驱动其实就是这些存储设备驱动,块设备驱动相比字符设备 驱动的主要区别如下:①、块设备只能以块为单位进行读写访问,块是 linux 虚拟文件系统(VFS)基本的数据传输 单位。字符设备是以字节为单位进行数据传输的,不需要缓冲。

2024-08-07 14:34:45 1091

原创 正点原子imx6ull-mini-Linux驱动之Linux USB 驱动实验

关于 USB 详细的协议内容请参考《USB2.0 协议中文版.pdf》和《USB3.0 协议中文版.pdf》, 这两份文档已经放到了开发板光盘中,存放在“4、参考资料” 中。USB 全称为 Universal Serial Bus,翻译过来就是通用串行总线。由英特尔与众多电脑公司 提出来,用于规范电脑与外部设备的连接与通讯。目前 USB 接口已经得到了大范围的应用,已 经是电脑、手机等终端设备的必配接口,甚至取代了大量的其他接口。

2024-08-06 19:38:09 832

原创 正点原子imx6ull-mini-Linux驱动之Linux CAN 驱动实验

I.MX6ULL 带有 CAN 控制器外设,叫做 FlexCAN,FlexCAN 符合 CAN2.0B 协议。FlexCAN 完全符合CAN协议,支持标准格式和扩展格式,支持64个消息缓冲。I.MX6ULL自带的FlexCAN 模块特性如下:①、支持 CAN2.0B 协议,数据帧和遥控帧支持标准和扩展两种格式,数据长度支持 0~8 字 节,可编程速度,最高 1Mbit/S。②、灵活的消息邮箱,最高支持 8 个字节。③、每个消息邮箱可以配置为接收或发送,都支持标准和扩展这两种格式的消息。

2024-08-06 16:55:57 1045

原创 正点原子imx6ull-mini-Linux驱动之Linux 音频驱动实验

处理器要想“听到”外界的声音必须要把外界的声音转化为自己能够理解的“语言”,处理 器能理解的就是 0 和 1,也就是二进制数据。所以我们需要先把外界的声音转换为处理器能理 解的 0 和 1,在信号处理领域,外界的声音是模拟信号,处理器能理解的是数字信号,因此这 里就涉及到一个模拟信号转换为数字信号的过程,而完成这个功能的就是 ADC 芯片。

2024-08-06 13:10:45 866

原创 关于正点原子imx6ull-mini在写触摸驱动时,一直挂载不上驱动,就是没有一些信息反馈

如果是你设备树的东西配置好后,驱动也编译通过,那你的问题八成就是在驱动里的设备树节点名字搞错了,极有可能是多打了一个空格。找了俩小时才找到问题所在。

2024-08-06 00:16:11 231

原创 正点原子imx6ull-mini-Linux驱动之Linux 多点电容触摸屏实验(24)

电容触摸驱动的基本原理我们已经在《第二十八章 多点电容触摸屏实验》中进行了详细的 讲解,回顾一下几个重要的知识点:①、电容触摸屏是 IIC 接口的,需要触摸 IC,以正点原子的 ATK7016 为例,其所使用的触 摸屏控制 IC 为 FT5426,因此所谓的电容触摸驱动就是 IIC 设备驱动。②、触摸 IC 提供了中断信号引脚(INT),可以通过中断来获取触摸信息。③、电容触摸屏得到的是触摸位置绝对信息以及触摸屏是否有按下。

2024-08-05 18:29:05 1135

原创 正点原子imx6ull-mini-Linux驱动之Linux RS232/485/GPS 驱动实验(23)

串口是很常用的一个外设,在 Linux 下通常通过串口和其他设备或传感器进行通信,根据 电平的不同,串口分为 TTL 和 RS232。不管是什么样的接口电平,其驱动程序都是一样的通 过外接 RS485 这样的芯片就可以将串口转换为 RS485 信号,正点原子的 I.MX6U-ALPHA 开发 板就是这么做的。对于正点原子的 I.MX6U-ALPHA 开发板而言,RS232、RS485 以及 GPS 模 块接口通通连接到了 I.MX6U 的 UART3 接口上。

2024-08-05 13:43:09 926

原创 正点原子imx6ull-mini-Linux驱动之Linux SPI 驱动实验(22)

SPI 驱动框架和 I2C 很类似,都分为主机控制器驱动和设备驱动,主机控制器也就是 SOC 的 SPI 控制器接口。比如在裸机篇中的《第二十七章 SPI 实验》,我们编写了 bsp_spi.c 和 bsp_spi.h 这两个文件,这两个文件是 I.MX6U 的 SPI 控制器驱动,我们编写好 SPI 控制器驱动以后就可 以直接使用了,不管是什么 SPI 设备,SPI 控制器部分的驱动都是一样,我们的重点就落在了 种类繁多的 SPI 设备驱动。

2024-08-05 00:34:15 694

原创 正点原子imx6ull-mini-Linux驱动之Linux I2C 驱动实验(21)

回想一下我们在裸机篇中是怎么编写 AP3216C 驱动的,我们编写了四个文件:bsp_i2c.c、 bsp_i2c.h、bsp_ap3216c.c 和 bsp_ap3216c.h。其中前两个是 I.MX6U 的 IIC 接口驱动,后两个文 件是 AP3216C 这个 I2C 设备驱动文件。相当于有两部分驱动:①、I2C 主机驱动。②、I2C 设备驱动。对于 I2C 主机驱动,一旦编写完成就不需要再做修改,其他的 I2C 设备直接调用主机驱动 提供的 API 函数完成读写操作即可。

2024-08-04 15:54:24 944

原创 正点原子imx6ull-mini-Linux驱动之Linux RTC 驱动实验(20)

RTC 设备驱动是一个标准的字符设备驱动,应用程序通过 open、release、read、write 和 ioctl 等函数完成对 RTC 设备的操作,关于 RTC 硬件原理部分我们已经在裸机篇中的第二十五章进 行了详细的讲解。Linux 内核将 RTC 设备抽象为 rtc_device 结构体因此 RTC 设备驱动就是申请并初始化 rtc_device,最后将 rtc_device 注册到 Linux 内核里面,这样 Linux 内核就有一个 RTC 设备的。105 {/* 设备 */

2024-08-04 13:58:03 927

原创 正点原子imx6ull-mini-Linux驱动之Linux LCD 驱动实验(19)

LCD 是很常用的一个外设,在裸机篇中我们讲解了如何编写 LCD 裸机驱动,在 Linux 下 LCD 的使用更加广泛,在搭配 QT 这样的 GUI 库下可以制作出非常精美的 UI 界面。本章我们 就来学习一下如何在 Linux 下驱动 LCD 屏幕。

2024-08-03 23:02:18 1225

原创 正点原子imx6ull-mini-Linux驱动之Linux INPUT 子系统实验(18)

input 就是输入的意思,因此 input 子系统就是管理输入的子系统,和 pinctrl、gpio 子系统 一样,都是 Linux 内核针对某一类设备而创建的框架。比如按键输入、键盘、鼠标、触摸屏等 等这些都属于输入设备,不同的输入设备所代表的含义不同,按键和键盘就是代表按键信息, 鼠标和触摸屏代表坐标信息,因此在应用层的处理就不同,对于驱动编写者而言不需要去关心 应用层的事情,我们只需要按照要求上报这些输入事件即可。

2024-08-03 16:23:33 865

原创 正点原子imx6ull-mini-Linux驱动之Linux MISC 驱动实验(17)

所有的MISC 设备驱动的主设备号都为 10,不同的设备使用不同的从设备号。随着 Linux 字符设备驱动的不断增加,设备号变得越来越紧张,尤其是主设备号,MISC 设备驱动就用于解 决此问题。MISC 设备会自动创建 cdev,不需要像我们以前那样手动创建,因此采用 MISC 设 备驱动可以简化字符设备驱动的编写。/* 子设备号 *//* 设备名字 *//* 设备操作集 */67 };

2024-08-03 14:50:52 747

原创 正点原子imx6ull-mini-Linux驱动之Linux 自带的 LED 灯驱动实验(16)

LED 灯驱动文件为/drivers/leds/leds-gpio.c,大家可以打开/drivers/leds/Makefile 这个文件, 找到如下所示内容:第 24 行,如果定义了 CONFIG_LEDS_GPIO 的话就会编译 leds-gpio.c 这个文件,在上一小 节我们选择将 LED 驱动编译进 Linux 内核,在.config 文件中就会有“CONFIG_LEDS_GPIO=y” 这一行,因此 leds-gpio.c 驱动文件就会被编译。

2024-08-03 13:35:27 1104

原创 正点原子imx6ull-mini-Linux驱动之设备树下的 platform 驱动编写(15)

platform 驱动框架分为总线、设备和驱动,其中总线不需要我们这些驱动程序员去管理,这 个是 Linux 内核提供的,我们在编写驱动的时候只要关注于设备和驱动的具体实现即可。在没 有设备树的 Linux 内核下,我们需要分别编写并注册 platform_device 和 platform_driver,分别代 表设备和驱动。在使用设备树的时候,设备的描述被放到了设备树中,因此 platform_device 就 不需要我们去编写了,我们只需要实现 platform_driver 即可。

2024-08-03 11:58:22 799

原创 正点原子imx6ull-mini-Linux驱动之platform设备驱动实验(14)

前面我们讲了设备驱动的分离,并且引出了总线(bus)、驱动(driver)和设备(device)模型,比 如 I2C、SPI、USB 等总线。但是在 SOC 中有些外设是没有总线这个概念的,但是又要使用总 线、驱动和设备模型该怎么办呢?为了解决此问题,Linux 提出了 platform 这个虚拟总线,相应 的就有 platform_driver 和 platform_device。

2024-08-03 00:31:08 826

原创 正点原子imx6ull-mini-Linux驱动之异步通知实验(13)

我们首先来回顾一下“中断”,中断是处理器提供的一种异步机制,我们配置好中断以后就 可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数, 在中断服务函数中做具体的处理。比如我们在裸机篇里面编写的 GPIO 按键中断实验,我们通 过按键去开关蜂鸣器,采用中断以后处理器就不需要时刻的去查看按键有没有被按下,因为按 键按下以后会自动触发中断。同样的,

2024-08-02 22:30:35 605

原创 正点原子imx6ull-mini-Linux驱动之阻塞IO和非阻塞IO实验(12)

这里的“IO”并不是我们学习 STM32 或者其他单片机的时候所说的“GPIO”(也就是引脚)。这里的 IO 指的是 Input/Output,也就是输入/输出,是应用程序对驱动设备的输入/输出操作。当 应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程 序对应的线程挂起,直到设备资源可以获取为止。对于非阻塞 IO,应用程序对应的线程不会挂 起,它要么一直轮询等待,直到设备资源可以使用,要么就直接放弃。

2024-08-01 20:36:20 785

原创 正点原子imx6ull-mini-Linux驱动之中断实验(11)

先来回顾一下裸机实验里面中断的处理方法:①、使能中断,初始化相应的寄存器。②、注册中断服务函数,也就是向 irqTable 数组的指定标号处写入中断服务函数②、中断发生以后进入 IRQ 中断服务函数,在 IRQ 中断服务函数在数组 irqTable 里面查找 具体的中断处理函数,找到以后执行相应的中断处理函数。#define IMX6UIRQ_CNT 1 /* 设备号个数 */#define IMX6UIRQ_NAME "imx6uirq" /* 名字 */

2024-08-01 15:06:23 706

原创 正点原子imx6ull-mini-Linux驱动之timer(10)

学习过 UCOS 或 FreeRTOS 的同学应该知道,UCOS 或 FreeRTOS 是需要一个硬件定时器 提供系统时钟,一般使用 Systick 作为系统时钟源。

2024-08-01 01:05:11 1010

原创 正点原子imx6ull-mini-Linux驱动之按键输入实验(9)

define KEY_CNT 1 /* 设备号个数 */#define KEY_NAME "key" /* 名字 *//* 定义按键值 */#define KEY0VALUE 0XF0 /* 按键值 */#define INVAKEY 0X00 /* 无效的按键值 *//* 定义按键值 */

2024-07-31 20:05:16 1072

原创 正点原子imx6ull-mini-Linux驱动之Linux 并发与竞争实验(8)

define GPIOLED_CNT 1 /* 设备号个数 */#define GPIOLED_NAME "gpioled" /* 名字 */#define LEDOFF 0 /* 关灯 */#define LEDON 1 /* 开灯 */

2024-07-31 15:31:45 625

原创 正点原子imx6ull-mini-Linux驱动之并发与竞争(7)

并发就是多个“用户”同时访问同一个共享资源,比如你们公司有一台打印机,你们公司 的所有人都可以使用。现在小李和小王要同时使用这一台打印机,都要打印一份文件。我叫小李电话:123456工号:16我叫小王电话:678910工号:20这两份文档肯定是各自打印出来的,不能相互影响。我叫小王电话:123456工号:20可以看出,小王打印出来的文档中电话号码错误了,变成小李的了,这是绝对不允许的。如 果有多人同时向打印机发送了多份文档,打印机必须保证一次只能打印一份文档。

2024-07-31 00:00:57 1025

原创 正点原子imx6ull-mini-Linux驱动之beep(6)

define BEEP_CNT 1 /* 设备号个数 */#define BEEP_NAME "beep" /* 名字 */#define BEEPOFF 0 /* 关蜂鸣器 */#define BEEPON 1 /* 开蜂鸣器 */

2024-07-30 20:02:50 908

原创 正点原子imx6ull-mini-Linux驱动之pinctrl 和 gpio 子系统(5)

上一小节讲解了 pinctrl 子系统,pinctrl 子系统重点是设置 PIN(有的 SOC 叫做 PAD)的复用 和电气属性,如果 pinctrl 子系统将一个 PIN 复用为 GPIO 的话,那么接下来就要用到 gpio 子系 统了。gpio 子系统顾名思义,就是用于初始化 GPIO 并且提供相应的 API 函数,比如设置 GPIO 为输入输出,读取 GPIO 的值等。

2024-07-30 17:28:51 1098

原创 正点原子imx6ull-mini-Linux设备树下的LED驱动实验(4)

宏 NEWCHRLED_CNT 表示设备数量,在申请设备号或者向 Linux 内核添加字 符设备的时候需要设置设备数量,一般我们一个驱动一个设备,所以这个宏为 1。宏 NEWCHRLED_NAME 表示设备名字,本实验的设备名为“dtsled”,为了 方便管理,所有使用到设备名字的地方统一使用此宏,当驱动加载成功以后就生成 /dev/dtsled 这个设备文件。dtsled.c 中 包含了处理设备树的代码#define DTSLED_CNT 1 /* 设备号个数 */

2024-07-30 00:33:08 1097

原创 正点原子imx6ull-mini-Linux驱动LED(新字符设备驱动)(3)

宏 NEWCHRLED_CNT 表示设备数量,在申请设备号或者向 Linux 内核添加字 符设备的时候需要设置设备数量,一般我们一个驱动一个设备,所以这个宏为 1。宏 NEWCHRLED_NAME 表示设备名字,本实验的设备名为“newchrdev”,为了 方便管理,所有使用到设备名字的地方统一使用此宏,当驱动加载成功以后就生成 /dev/newchrled 这个设备文件。#define NEWCHRLED_CNT 1 /* 设备号个数 */

2024-07-29 15:39:30 1042

原创 正点原子imx6ull-mini的linux驱动之LED(2)

define LED_MAJOR 200 /* 主设备号 */#define LED_NAME "led" /* 设备名字 */#define LEDOFF 0 /* 关灯 */#define LEDON 1 /* 开灯 */

2024-07-28 20:42:28 851

原创 正点原子imx6ull-mini第一个字符驱动设备编写(1)

define CHRDEVBASE_MAJOR 200 /* 主设备号 */#define CHRDEVBASE_NAME "chrdevbase" /* 设备名 *//* 读缓冲区 *//* 写缓冲区 */"};数组 usrdata 是测试 APP 要向 chrdevbase 设备写入的数据。"};

2024-07-28 16:19:45 735

原创 正点原子imx6ull-mini-linux字符驱动模板(0)

file_operations 结构体就是设备的具体操作函数,我们定义了 file_operations结构体类型的变量test_fops,但是还没对其进行初始化,也就是初始化其中的open、 release、read 和 write 等具体的设备操作函数。一般字符设备的注册在驱动模块的入口函数 xxx_init 中进行,字符设备的注销在驱动模块 的出口函数 xxx_exit 中进行。字符设备注册一般放在入库函数内,且注册函数包含注册设备号,注册设备名,与一个file_operations 类型指针。

2024-07-27 23:32:03 713

原创 正点原子imx6ull-mini移植文件系统

上一节移植的网络驱动,我去ifconfig eth0 up看并不是SMSC,而是gen PHY,用原子的zImage依旧存在这个问题,所以我暂且认为这并不是我造成的错误。那就接着用通用驱动呗。

2024-07-26 14:55:41 594

原创 正点原子imx6ull-mini开发板移植linux内核全过程

linux内核的移植跟uboot很像,配置defconfig或者经过图形化界面配置。然后就是设备树的依赖dbs文件的各种修改,像时钟、emmc8线、网络驱动修改。最麻烦的就是网络驱动,设计很多个文件,其实就是那两个IO口的倒腾,然后就是硬软复位问题,LAN8720A必须要软复位,软复位就是操作其内部寄存器,硬复位就是芯片的一个专门用来复位的引脚,像单片机的RST脚。总共修改了对应IO的时钟、属性、驱动。

2024-07-25 20:41:32 1283

原创 Kconfig:249: ‘endmenu‘ in different file than ‘menu‘Kconfig:242: location of the ‘menu‘

错误1:在最后一行endmenu后面加一个空行。

2024-07-24 15:58:18 151

原创 关于正点原子的imx6ull-mini板子在移植uboot的时候ping不通的问题,找了那麽多教程都在说设置有问题,没有具体解决

/修改因为原子是有nand版本的,所以使用emmc版本的伙伴直接跳过带nand的宏定义,有兴趣的可以自己看看,我暂时没兴趣。检查的时候我发现了重要的一点,因为板子教程出来都是19年了,我现在的mini板子是2.2,因为所以我不用去改这个地址。整体要操作的基本都在board里,还有配置默认设置编译defconfig,然后就是include里的h头文件80%的selient什么的错误,肯定是你跟defconfig相关的名字错了,至于在哪,要你自己去找了。

2024-07-23 15:13:03 1066

原创 make[1]: *** 没有规则可制作目标“board/freescale/mx6ull_alientek_emmc/mx6ull_alientek_emmc.o”,由“board/freescal

这个问题纯属是粗心大意导致的,我重新从头弄了两遍,一直没编译通过。然后我去找配置,配置的也对。哎,后面仔细一看,这个c文件的名字不对,还是建议复制文件名字的时候直接copy吧,这样起码不会缺。

2024-07-21 16:15:15 164

用STM32C8T6最小系统板做一个循迹避障蓝牙小车

分为上下两张10*10PCB,一个是电机的驱动板,一个是其他

2023-12-11

用STM32C8T6最小系统板做一个循迹避障蓝牙小车

分为上下两张10*10PCB,一个是电机的驱动板,一个是其他

2023-12-11

用STM32C8T6最小系统板做一个循迹避障蓝牙小车

用STM32C8T6最小系统板做一个循迹避障蓝牙小车

2023-11-01

用STM32C8T6最小系统板做一个循迹避障蓝牙小车

用STM32C8T6最小系统板做一个循迹避障蓝牙小车

2023-11-01

用STM32C8T6最小系统板做一个循迹避障蓝牙小车

用STM32C8T6最小系统板做一个循迹避障蓝牙小车

2023-11-01

用STM32C8T6最小系统板做一个循迹避障蓝牙小车

用STM32C8T6最小系统板做一个循迹避障蓝牙小车

2023-11-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除