Mculover666
CSDN博客专家,微信公众号mculover666,凭借与生俱来的热爱专注于嵌入式领域,在自己折腾的同时,以文字的方式分享所玩、所思、所想、所悟,作为一个技术人,我们一起前进~
展开
-
全志H3系统移植 | 移植主线最新uboot 2023.04和kernel 6.1.11到Nanopi NEO开发板
NULL原创 2023-02-15 20:29:14 · 1771 阅读 · 0 评论 -
全志H3快速上手 | NanoPi NEO开发板快速上手
NanoPi开发板快速上手原创 2023-02-05 23:22:51 · 1488 阅读 · 1 评论 -
i.MX6ULL系统移植 | 基于 ubuntu base 20.04 构建根文件系统
ubuntu 本身支持linux的网络底层设置命令:ifconfig,route,ip 等命令,但为了让网络设置更加简单,Debian 提供了一个标准的高级网络设置工具,包含 ifup 和ifdown 程序和 /etc/network/interfaces 文件。ethtool 用于查看和修改网络设备(以太网)的驱动参数和硬件设置,可以根据需要更改以太网卡的参数,包括自动协商、速度、双工和局域网唤醒等参数。htop是top的升级版,允许用户监视系统上运行的进程及其完整的命令行。(2)安装一些必备的软件包。原创 2022-10-15 22:23:52 · 705 阅读 · 0 评论 -
i.MX6ULL系统移植 | 命令行更新emmc的内核和设备树固件
Linux内核在运行的时候被加载到内存中,所以在内核运行的时候,完全可以做到更新emmc中存放的固件,然后重新启动即可。原创 2022-10-04 15:31:36 · 1577 阅读 · 0 评论 -
i.MX6ULL应用移植 | 移植libevdev和evtest工具到imx6ull开发板
libevdev提供了evdev设备的封装层,它将处理evdev设备时的常见任务移动到库中,并为调用方提供库接口,从而避免错误的ioctls等。原创 2022-09-27 10:23:01 · 1031 阅读 · 0 评论 -
imx6ull应用开发 | 移植libdrm到imx6ull开发板(2.4.113)
这里我下载最新的2.4.113版本2. 安装ninja安装依赖re2c:下载ninja:编译ninja:安装ninja:检查ninja:创建交叉编译配置文件cross_file.cfg编译配置编译四、移植到开发板编译产物:将该文件夹打包,传到开发板上,在开发板上执行:尝试执行modetest,看看是否可以检测到屏幕:测试屏幕显示:原创 2022-09-23 13:06:23 · 501 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 37 - FT5426电容触摸屏幕调试并修复驱动问题(基于linux 5.4.32内核)
NULL原创 2022-09-23 09:37:03 · 848 阅读 · 0 评论 -
i.MX6ULL系统移植 | 移植 linux主线5.4.32内核
NULL原创 2022-09-22 17:15:22 · 1616 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 36 - 注册spilcd为framebuffer设备并使用lvgl测试
获取更简洁清爽的阅读体验,请移步我的个人博客网站:i.MX6ULL驱动开发 | 36 - 注册spilcd为framebuffer设备并使用lvgl测试。i.MX6ULL驱动开发 | 34 - 基于SPI框架驱动spi lcd(st7789) (mculover666.cn)i.MX6ULL驱动开发 | 35 - NXP LCD控制器Framebuffer驱动浅读 (mculover666.cn)2. 设置fb_info参数设置的时候需要注意,linux下面每个像素点是32位,ARGB888格式,常用原创 2022-09-08 18:10:20 · 500 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 35 - NXP LCD控制器Framebuffer驱动浅读
获取更简洁清爽的阅读体验,请移步我的个人博客网站:i.MX6ULL驱动开发 | 35 - NXP LCD控制器Framebuffer驱动浅读。Framebuffer为帧缓存,或者也可以叫做显存,开辟于RAM中。如下图所示,LCD控制器周而复始的从Framebuffer中逐一取出每个像素的颜色值并发送给LCD,所以用户只需要操作Framebuffer即可。基于Framebuffer的显示系统整体架构如下图:Framebuffer框架整体架构如下图:imx6ull开发板的lcdif节点描述如下:NXP原厂的描原创 2022-09-08 17:16:00 · 798 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 34 - 基于SPI框架驱动spi lcd(st7789)
获取更干净清爽的阅读体验,可以访问我的个人博客网站:i.MX6ULL驱动开发 | 34 - 基于SPI框架驱动spi lcd(st7789)。(1)编写spi驱动框架,检查probe是否可以正常挂载;(2)在probe设备中,解析设备树gpio信息、屏幕参数信息;(3)操作gpio,检查背光控制是否正常(4)基于linux spi框架适配spi写接口,看lcd_init是否正常pinctrl节点如下:三、驱动调试中遇到的问题1. lcd_init初始化之后屏幕没反应1.1. 问题分析该问题是由于S原创 2022-09-07 17:18:13 · 1178 阅读 · 2 评论 -
i.MX6ULL应用移植 | 移植lvgl到imx6ull(基于framebuffer)
2. 下载子仓库修改子模块路径。(1)修改 .gitmodules 文件(2)修改 .git/config 文件(3)删除 .git/modules目录下已有的 submodule文件夹(4)删除工程的根目录下submodule文件夹(5)更新子仓库二、修改配置文件1. 复制配置文件2. 修改lv_driver驱动文件修改Makefile:3. 编译编译出的可执行为demo:原创 2022-09-04 16:19:53 · 1383 阅读 · 1 评论 -
i.MX6ULL应用移植 | 基于ubuntu base 16.04搭建python3.9+pip3环境
基于ubuntu base 16.04构建的根文件系统。原创 2022-09-03 17:31:24 · 741 阅读 · 0 评论 -
以太网PHY芯片LAN8720A芯片研究
LAN8720A/LAN8720Ai是一个低功耗的可变I/O电压的10/100M PHY收发器,符合IEEE 802.3-2005标准,支持通过RMII接口与以太网MAC通信。LAN8720A/LAN8720Ai实现自动协商,自动确定最佳可能的速度和双工操作模式。HP Auto-MDIX支持允许使用直接连接或交叉局域网电缆。LAN8720A/LAN8720Ai既支持IEEE 802.3-2005标准,又支持厂商特有的注册功能。但是,操作不需要访问寄存器。初始配置可以通过“配置带”中描述的配置引脚选择。...原创 2022-08-08 19:59:06 · 5757 阅读 · 1 评论 -
i.MX6ULL驱动开发 | 33 - NXP原厂网络设备驱动浅读(LAN8720 PHY)
在该发送函数中,上层的数据通过skb传入,首先对skb进行判断,是否为GSO数据,如果是则使用fec_enet_txq_submit_tso发送,如果不是则使用fec_enet_txq_submit_skb发送。mdio用于和外接的PHY芯片通信,和实际开发板上外接的PHY芯片有关,兼容性是"ethernet-phy-ieee802.3-c22",根据该兼容性找到对应的绑定文档为。可以看到,如果PHY设备与PHY驱动匹配,则使用指定的PHY驱动,如果不匹配则使用Linux内核自带的通用PHY驱动。.....原创 2022-07-29 16:23:25 · 1190 阅读 · 3 评论 -
i.MX6ULL驱动开发 | 32 - 手动编写一个虚拟网卡设备
,,,)(,,,,1,1)(,,,,)(,,,,,)这两个宏底层调用的函数都是。原创 2022-07-28 17:05:33 · 534 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 31 - Linux内核网络设备驱动框架
net_device结构体在内核中指代一个网络设备,定义在,是一个非常大的结构体,包含网络设备的属性描述和操作接口,其中一些关键的成员如下。Linux在轮询处理机制和中断处理机制的基础上,提出了一种高效的网络处理技术NAPI。NAPI的核心思想是不全部采用中断来读取网络数据,而是采用中断来唤醒数据接收服务程序,在接收服务程序中采用poll的方法来轮询处理数据。提高短数据包的接收效率,减少中断处理的时间。...原创 2022-07-26 17:24:27 · 807 阅读 · 1 评论 -
i.MX6ULL驱动开发 | 30 - 使用EC20 4G网卡(移植移远GobiNet驱动)
EC20在Linux下的驱动架构:默认插上之后没有出来ttyUSB设备,需要在内核中添加EC20的USB设备信息。修改文件。(1)option_ids数组添加EC20 ID信息(3)修改 option_probe 函数,添加EC20相关代码(Use GobiNet or QMI WWAN)(4)修改 option_1port_device 结构体,加入休眠后唤醒接口编辑文件。修改 usb_wwan_setup_urb 函数,添加零包处理代码:编译内核,检查下有无编译错误。2. 配置Linux原创 2022-07-12 17:30:06 · 1178 阅读 · 0 评论 -
i.MX6ULL应用移植 | 移植wpa_supplicant到Linux开发板(2.7版本)
wpa_supplicant 是跨平台的 WPA 请求者程序(supplicant),支持 WEP、WPA 和 WPA2(IEEE 802.11i).。可以在桌面、笔记本、嵌入式系统中使用。wpa_supplicant 是在客户端使用的 IEEE 802.1X/WPA 组件,支持与 WPA Authenticator 的交互,控制漫游和无线驱动的IEEE 802.11 验证和关联。参考这篇文章:i.MX6ULL应用移植 | 移植OpenSSH 8.9到Linux开发板(zlib、openssl、openss原创 2022-07-12 10:23:59 · 542 阅读 · 0 评论 -
i.MX6ULL应用移植 | 移植wireless tools到Linux开发板(29 version)
官网:https://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html。wireless tools是操作WIFI的工具集合,包括以下工具:解压:修改Makeifle:编译:编译出可执行文件和库:查看可执行文件的类型:拷贝可执行文件到:拷贝库文件到:4. 测试(1)测试前确保无线网卡驱动正常:打开网卡:(2)测试命令是否可以正常执行:(3)搜索wifi热点至此,wireless tools移植完成。...原创 2022-07-11 14:14:08 · 479 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 29 - 使用USB WIFI网卡(RTL8188EU)
插到电脑上看下型号是Realtek RTL8188EU版本:使用正点原子资料包中的源码:根据正点原子教程描述,linux内核自带的驱动经过测试不稳定,所以手动添加驱动源码。修改文件,注释掉RTL8192CU相关的配置内容:修改文件,注释掉RTL8192CU的驱动源码:至此,Linux内核自带的RTL8192CU/8188CU驱动的源码屏蔽完成。(1)拷贝整个realtek目录到linux内核源码的drivers/net/wireless目录下,此目录中存放着把所有的WIFI驱动文件:(2)修原创 2022-07-10 22:22:51 · 2199 阅读 · 0 评论 -
i.MX6ULL应用移植 | 移植tslib到Linux开发板(1.22)
tslib的github仓库为:https://github.com/libts/tslib。下载最新发布的tag,为1.22版本:(1)解压源码:解压后的文件如图:(2)修改tslib源码所属用户:(3)安装需要的工具(4)交叉编译tslib创建编译目录:配置编译:(5)编译查看编译目录及可执行文件的类型,确保交叉编译成功:(6)拷贝到根文件系统将整个tslib编译文件夹的内容拷贝到开发板根文件系统的/usr/local目录下:烧录根文件系统到开发板中。打开/etc/ts.con原创 2022-07-09 15:39:40 · 552 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 28 - 使用FT5426多点电容触摸
input子系统下的多点触摸协议称为MT协议,其文档为:Documentation/input/multitouch-protocol.txt。MT协议被分为两种类型,取决于硬件的兼容性:触摸点的信息通过一系列的ABS_MT事件上报给Linux内核,定义在文件中:其中最常用的是:FT5x06系列是单芯片电容触摸板控制器IC,内部带有一个8bit的MCU,支持2.8’‘到8.9’‘的触摸屏,区别如下:其内部框图如下:与主控制器的连接示意图如下:串行接口支持I2C(最大400KHz)和SPI,I2原创 2022-07-09 12:58:04 · 989 阅读 · 0 评论 -
i.MX6ULL应用移植 | 移植ALSA到Linux开发板(alsa-lib、alsa-utils 1.2.7版本)
alsa-utils工具通过调用到alsa-lib库来对ALSA框架下的声卡进行操作。下载地址:http://www.alsa-project.org/files/pub/lib/alsa-lib-1.2.7.1.tar.bz2(1)创建alsa-lib存放的目录需要在开发板和ubunut中创建一个路径和名字一样的目录,为/usr/share/arm-alsa。在ubuntu中创建:在开发板根文件系统中创建:(2)解压alsa-lib源码(3)配置编译其中用来设置install的路径,用于设置als原创 2022-07-08 15:08:02 · 597 阅读 · 1 评论 -
i.MX6ULL驱动开发 | 27 - 使用WM8960 CODEC播放音频
WM8960是欧胜公司(wolfson)的一款低功耗、高质量的立体声音频编解码芯片。其内部集成D类喇叭功放,每个通道可以驱动一个1W喇叭(8Ω),内部集成3个立体声输入源,可以灵活配置,拥有一路完整的麦克风接口。WM8960内部ADC和DAC都为24位,主要特性如下:(1)WM8960输入接口此部分是WM8960提供的输入接口,作为立体声音频输入源,一共提供了三路,分别是LINPUT1/RINPUT1、LINPUT2/RINPUT2、LINPUT3/RINPUT3。(2)WM8960输出接口此部分是WM8原创 2022-07-07 20:59:40 · 1438 阅读 · 1 评论 -
i.MX6ULL驱动开发 | 26 - Linux内核的RTC驱动
查看Linux内核启动时与RTC相关的日志:(1)查看当前时间:(2)设置当前时间使用此命令设置时间到RTC外设,有纽扣电池的情况下,时间掉电不丢失。RTC设备驱动是一个标准的字符驱动设备,应用程序通过open、release、read、write和ioctl接口完成对RTC设备的操作。Linux内核将RTC设备抽象为rtc_device结构体,因此RTC设备驱动就是申请并初始化rtc_device,最后将rtc_device注册到Linux内核里面,这样内核中就有了一个rtc设备节点。rtc_d原创 2022-07-03 15:12:26 · 496 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 25 - 基于Linux自带的KEY驱动检测按键
Linux内核已经集成了采用 platform 框架编写的KEY驱动·,无需我们自己编写,只要按照要求在设备树文件中添加相应的LED节点即可。(1)在内核源码目录中,打开 menuconfig 进行配置:(2)打开KEY驱动配置项按下可以打开此选项的帮助信息:可以看到,如果此选项打开,文件中就会开启LEDS_GPIO:配置改动后,重新编译内核,下载到开发板。在文档中。(1)需要的属性(2)描述Each button (key) is represented as a sub-node of “g原创 2022-07-03 11:49:43 · 696 阅读 · 1 评论 -
i.MX6ULL驱动开发 | 24 - 基于platform平台驱动模型点亮LED
编写驱动模块源码:编写Makefile:编译:二、编写platform驱动框架添加platform驱动框架:三、编写字符设备驱动四、编写LED驱动和i.MX6ULL驱动开发 | 08 -基于pinctrl子系统和gpio子系统点亮LED一样。查看platform总线是否注册:查看总线设备是否注册(因为有设备树节点的描述):注意,这里驱动加载的时候,内核会去匹配对应的设备,所以设备树节点描述的兼容性要与驱动中的兼容性一致:查看设备节点:运行测试程序,可以看到led闪烁:...原创 2022-07-02 22:24:15 · 411 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 23 - Linux下的设备与驱动分离——platform总线
在嵌入式开发中,无论处理器如何更换,外设模块的操作都是一致的,比如有三个不同的平台都要驱动MPU6050传感器,最简单的方法是针对每个平台都写一份驱动:显然这种处理方式太low了,MPU6050都是使用I2C接口操作的,对于不同的平台,只是I2C操作方式不一样,所以这里可以将I2C接口抽象出来,给不同的平台用自己的库函数适配:这样多种平台就可以共用同一份MPU6050驱动:在Linux内核中,一般SOC的主机控制器驱动已经由半导体厂家写好了,比如这里imx6ull的i2c控制器驱动已经由NXP写好了原创 2022-07-02 17:57:11 · 501 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 22 - 使用PCF8574扩展gpio
一、PCF8574PCF8574是一个 8 bit IO扩展芯片,使用两线I2C通信接口,提供了8位准双向的IO口(P0-P7),包括具有高电流驱动能力的锁存输出,用于直接驱动led。每个准双向I/O都可以用作输入或输出,而无需使用数据方向控制信号。 上电时,所有IO的电平默认是高电平。1. 引脚描述引脚图如下:引脚描述如下:2. 功能描述I2C从机地址如下:二、Linux内核中自带的驱动Linux对于IO扩展芯片的驱动在drivers/gpio/路径下,比如对于PCF8574芯片,原创 2022-04-27 20:26:12 · 1975 阅读 · 7 评论 -
Linux下使用cfdisk工具格式化U盘/SD卡的方法
一、删除原有分区插入SD卡/U盘,使用fdisk查看是否识别:sudo fdisk -l可以看到u盘已挂载,先卸载:sudo umount /dev/sdb1接着使用cfdisk工具进行分区:sudo cfdisk /dev/sdb删除U盘上的原有分区:二、创建新分区点击[New],这里创建一个分区即可:接着调整分区类型:可以看到提示:最后选择[Write],写入分区表:至此,重新分区完成。三、格式化新分区sudo mkdosfs /dev/sdb1重新原创 2022-04-25 21:47:42 · 1371 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 21 - 按键驱动使用 input 子系统上报事件
本系列文章所编写的驱动源码仓库,欢迎Star:https://github.com/Mculover666/linux_driver_study。一、编写驱动1. 编写模块#include <linux/module.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/of.h>#include <linux/of_gpio.h>#include &.原创 2022-04-22 15:33:08 · 1091 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 20 - Linux input 子系统
一、input子系统概述1. 什么是input子系统input子系统是管理输入的子系统,和pinctrl、gpio子系统一样,都是Linux内核针对某一类设备创建的框架。2. input子系统的作用输入设备都是典型的字符设备,比如按键、鼠标、键盘、触摸屏等。这些设备的工作机理是底层在按键、触摸等动作发生时产生一个中断,或者通过软件定时器去查询时间,然后CPU通过SPI、I2C等总线读取键值、坐标等数据,并将它们放入一个缓冲区,由驱动模块管理这些缓冲区,通过驱动的read接口就可以让用户读取键值、坐原创 2022-04-21 19:38:01 · 369 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 19 - Linux内核定时器的编程方法与使用示例
一、Linux内核定时器编程Linux内核中,在时钟中断发生后会唤醒 TIMER_SOFTIRQ 软中断,运行当前处理器上到期的所有定时器。在linux设备驱动编程中,可以利用Linux内核中提供的一组函数或数据结构来完成定时器触发工作或者完成周期性的事务,并且不用关心具体的软件定时器究竟对应怎样的内核和硬件行为。1. timer_listLinux内核使用 timer_list 来表示内核定时器,定义在文件 include/linux/timer.h 中。struct timer_list {原创 2022-04-20 17:33:20 · 1143 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 18 - 使用中断方式检测按键
一、按键原理图正点原子alpha开发板板载了两个按键,一个复位按键,一个用户按键,用户按键原理图如下:按键KEY0连接到UART1_CTS引脚,并有上拉电阻。二、在设备树中添加节点1. 设置引脚功能及电气属性找到 iomuxc 节点,添加按键引脚复用:pinctrl_key0: key0grp { fsl,pins = < MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0xF080 >;};2. 添加key0节点在根节点下添加key0节点:/原创 2022-04-20 10:40:08 · 787 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 17 - Linux中断机制及使用方法(tasklet、workqueue、软中断)
Linux内核提供了完善的中断框架,使用时只需要申请中断,注册相应的中断处理函数即可,非常方便。一、Linux中断处理程序架构为了在中断执行时间尽量短和中断处理需完成的工作量尽量大之间找到一个平衡点,Linux将中断处理程序分解为两个半部:顶半部(Top Half)和底半部(Bottom Half),也称为上半部和下半部。上半部用于完成尽量少的比较紧急的功能,它往往只是简单的读取寄存器中的中断状态,并在清除中断标志后就就进行“登记中断”的工作。“登记中断”意味着将下半部处理程序挂到该设备的下半部执行原创 2022-04-18 20:25:00 · 702 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 16 - 基于 UART 驱动框架发送/接收串口数据
i.MX6ULL在SOC级别的UART外设驱动已经由原厂编写好了,我们只需要在设备树中添加对应的节点即可使用。一、在设备树添加节点1. 设置UART3引脚在iomucx节点中添加uart3子节点:pinctrl_uart3: uart3grp { fsl,pins = < MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0x1b0b1 MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0x1b0b1 >;};检查一下原创 2022-04-13 16:06:01 · 726 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 15 - Linux UART 驱动框架
Linux UART 驱动框架比较简单,不需要设备驱动,只需要UART设备驱动即可。一、Linux UART驱动框架1. uart_driver结构体Linux将 UART 驱动抽象为 uart_driver结构体,定义在include/linux/serial_core.h文件中,如下:struct uart_driver { struct module *owner; const char *driver_name; const char *dev_name; int maj原创 2022-04-13 14:19:16 · 2249 阅读 · 1 评论 -
i.MX6ULL驱动开发 | 14 - 基于 Linux SPI 驱动框架读取ICM-20608传感器
本系列文章驱动源码仓库,欢迎Star~https://github.com/Mculover666/linux_driver_study。一、ICM206081. 简介InvenSense 的 ICM-20608 是一款 6 轴运动跟踪器件(MEMS传感器),也是 MPU-6500 的后续产品,集成了3轴加速度计和3轴陀螺仪。相比以前的 6 轴器件,Invensense 的 ICM 20608 具有更低的功耗和噪声并采用更薄的封装。 该器件为陀螺仪提供了一种占空比工作模式,相比以前的 6 .原创 2022-04-12 16:10:35 · 1242 阅读 · 0 评论 -
i.MX6ULL驱动开发 | 13 - Linux SPI 驱动框架
Linux SPI 驱动框架分为两部分:SPI总线控制器驱动:SOC的 SPI 控制器外设驱动SPI设备驱动:基于SPI总线控制器驱动编写,针对具体的SPI从机设备一、SPI总线控制器驱动基于platform平台驱动框架,Linux内核将SOC的SPI外设主机功能抽象为 spi_master 结构体。spi_master 结构体定义在include/linux/spi/spi.h文件中,如下:/** * struct spi_master - interface to SPI master原创 2022-04-11 15:15:36 · 1402 阅读 · 0 评论