
Linux
文章平均质量分 89
ZHONGCAI0901
学习、总结、分享,加油!!!
展开
-
【I2C】Linux使用GPIO模拟I2C
在Linux项目中,如果出现硬件硬件I2C不够用的情况下,我们就可以通过GPIO模拟I2C来解决。Lnux内核的i2c-gpio是使用GPIO模拟I2C协议的驱动,在内核中已经实现了,我们要做的只需要配置2个GPIO(SDA和SCL)即可。i2c-gpioi2c-gpio.c解析设备树中的引脚配置信息提供GPIO SDA和SCL引脚配置接口。向I2C Core注册一个adapter提供I2C通信时的算法,然后通过i2c-gpio.c提供GPIO配置接口来收发数据。注册成功后,原创 2023-06-12 17:05:40 · 6479 阅读 · 0 评论 -
【I2C】Linux I2C子系统分析
是根据Soc的I2C硬件寄存器来实现read、write通信的方法,适配器需要通过i2c_algorithm提供的通信函数来产生对应的访问时序。就是i2c标准总线设备驱动模型中的驱动部分,它主要是现实该I2C设备具体初始化、操作函数接口等的实现,等待app程序的对该I2C设备实现业务上面的逻辑。新的adapter将根据总线number添加到I2C Core的全局变量i2c_adapter_idr中,为以后get对应的adapter做准备。这里主要是在I2C总线下,注册一个i2c adapter类型的设备。原创 2023-06-02 15:22:34 · 1314 阅读 · 0 评论 -
【Bus】编写一个Demo虚拟的总线-设备-驱动模型
Linux平台为了驱动的可重用性,虚拟了很多的虚拟总线。很经典的就是platform总线,只要platform device和platform driver的名字匹配就调用driver的probe函数。在分析内核源码时,经常会遇到各种总线。为了方便和加深理解,本篇文章写了一个虚拟Demo总线来加深对总线模型的理解。下面是总线-设备-驱动模型。原创 2023-04-29 12:38:39 · 1422 阅读 · 1 评论 -
【I2C】通用驱动i2c-dev分析
前面分析i2c-tool测试工具就是基于驱动来实现的。i2c-dev驱动在加载时会遍历所有的I2C总线()上所有注册的adapter/dev/i2c-0/dev/i2c-1/dev/i2c-2等。应用程序通过open打开对应的i2c字符设备,通过ioctl来收发数据。原创 2023-04-01 17:26:32 · 3784 阅读 · 0 评论 -
【I2C】基于/dev/i2c-x应用层读写I2C设备
本测试程序主要是参考中的,为了方便以后使用,在这里做一个记录。其实它主要是基于驱动创建的/dev/i2c-x字符设备来操作I2C设备。原创 2023-03-25 17:40:28 · 3587 阅读 · 0 评论 -
【I2C】基于Linux移植i2c-tool工具
SMBus是基于I2C协议的,SMBus要求更严格,SMBus是I2C协议的子集。:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。:强制模式,即使驱动程序已经注册该设备,也允许用户从寄存器读取/写入寄存器。,不再询问用户确认。,不再询问用户确认。原创 2023-03-23 17:51:41 · 3899 阅读 · 0 评论 -
【Linux】虚拟Pinctrl Demo驱动(二) -- Debug FS之Pinctrl分析
我们在调试Pinctrl子系统时,会使用到。在目录下就会有pinctrl目录,如果该目录下没有任何目录或文件,说明debugfs功能没有被打开。原创 2022-10-07 07:48:38 · 1997 阅读 · 0 评论 -
【Linux】虚拟Pinctrl Demo驱动(一)-- Demo Code
为了更进一步了解Linux的Pinctrl子系统,这里编写一个虚拟的Pinctrl Demo驱动。下面是编写的内容文件列表:下面是在加载驱动和驱动后的运行效果:下面主要是分析,只是驱动模板什么都没有做。之所以需要驱动,是在设备树中引用了里面的。驱动加载probe时,就调用Pinctrl子系统。原创 2022-10-04 10:58:11 · 939 阅读 · 0 评论 -
【Linux】基于IMX6ULL平台Pinctrl架构分析总结(二)-- Client Device使用过程
1. 前言在上一篇文章已经介绍了Pinctrl子系统中Pin Controller注册过程《【Linux】基于IMX6ULL平台Pinctrl架构分析总结(一)-- Pin Controller注册过程》,本篇文章主要是介绍Client Device是如何设置Pin的状态。在Device Tree中,Pinctrl主要分为2个部分:Pin Controller和Clinet Device。Device可能会有多个状态,不同的状态下,Pin的状态的作用可能不相同。I2C1 Client Device只有一个原创 2022-04-10 16:29:38 · 1636 阅读 · 1 评论 -
【Linux】基于IMX6ULL平台Pinctrl架构分析总结(一)-- Pin Controller注册过程
1. 前言在许多soc内部都包含有pin控制器,通过pin控制器的寄存器,我们可以配置一个或者一组引脚的功能和特性。通过pinctrl子系统来设置引脚的复用、配置,可以将IO复用成GPIO、I2C等其它功能。本篇文章主要是基于IMX6ULL平台来分析Pin Controller子系统整个注册过程。整个pinctrl子系统比较核心的结构体是struct pinctrl_dev,后面会详细一步步介绍它整个构造过程。下面是经过分析总结的图,如下:2....原创 2022-04-09 09:49:43 · 1859 阅读 · 0 评论 -
【Linux】常见问题汇总(一)
文章目录问题一:/sys/kernel/debug/下没有任何文件问题一:/sys/kernel/debug/下没有任何文件问题现象:在linux的debugfs中,/sys/kernel/debug/目录下面没有发现任何文件。解决办法:查看config是否有配置CONFIG_DEBUG_FS注意:虽然上面定义了CONFIG_DEBUG_FS,但是此时/sys/kernel/debug/目录还是没有任何文件。需要将debugfs挂载到这个目录下,2种方法:方法一:运行如下命令,手动挂载到原创 2022-03-06 08:55:43 · 4170 阅读 · 0 评论 -
【Linux】基于busybox移植rootfs根文件系统
文章目录1. 前言2. 下载Busybox3. 编译Busybox4. 向rootfs根文件系统添加lib库5. 根文件系统初步测试6. 完善rootfs根文件系统7. 根文件系统最终测试8. 移植过程错误汇总1. 前言我们所熟悉的Linux主要由三部分组成:uboot、Linux Kernel、rootfs(根文件系统)。uboot启动后会加载Linux Kernel,然后Kernel再来挂载rootfs文件系统,进入文件系统后,我们才可以运行我们的应用程序,对不同的设备进行操作。本篇文章主要是介绍通原创 2022-01-17 14:50:45 · 2141 阅读 · 0 评论 -
【Linux】Linux5.4.70内核定时器的使用
文章目录1. 定时器简介2. Timer相关API介绍3. Timer时间单位4. Timer Demo测试验证5. 定时器内部机制简单分析6. 参考资料1. 定时器简介本篇文章介绍内核定时器是基于内核Linux5.4.70版本,它是内核用来控制再未来某个时间点(基于jiffies)调度执行某个函数的一种机制,代码实现位于include/linux/timer.h和kernel/time/timer.c文件中。定时器数据结构,如下:struct timer_list { /* * All fi原创 2021-09-26 21:50:29 · 6859 阅读 · 3 评论 -
【Linux】内核中休眠与唤醒的使用(wait_event、wake_up)
文章目录1. 前言2. 休眠和唤醒内核函数介绍3. 使用休眠与唤醒的驱动框架4. 编写测试程序1. 前言在wait_event_interruptible()函数中会将当前进程的状态设置成TASK_INTERRUPTIBLE,然后调用schedule(),它会将位于TASK_INTERRUPTIBLE状态的进程从run queue队列中删除。从run queue队列中删除的结果是,当前这个进程将不再参与调度,除非通过其他将这个进程重新放入run queue队列中,wake_up()函数就是这个作用。由原创 2021-09-19 20:53:51 · 13590 阅读 · 6 评论 -
【Linux】编写一个Linux按键中断Demo
文章目录1. 前言2. 硬件介绍3. 编写按键驱动程序4. 配置设备树5. 烧录验证6. 工程代码下载地址1. 前言在内核里面实现了按键驱动,drivers/input/keyboard/gpio_keys.c,我们可以参考它来学着写一个按键中断程序。2. 硬件介绍通过下面的硬件我们可以知道按键检测GPIO默认是高电平,如果按键被按下就变成低电平。所以,我们可以配置GPIO为中断模式,检测KEY是否被按下。3. 编写按键驱动程序在设备树中添加按键使用的引脚,如下:imx_gpio_keys原创 2021-09-09 20:58:14 · 1607 阅读 · 1 评论 -
【Linux】编写一个简单Linux驱动Demo -- 控制LED
文章目录1. 前言2. 设备树和platform_driver的匹配3. 编译led driver4. 编译led app5. 测试验证6. 测试demo完整工程1. 前言本篇文章主要是介绍在linux平台上,如何编写一个简单的Driver来控制LED的亮灭。我们通过DeviceTree来定义硬件资源,和Driver匹配成功之后可以拿到硬件资源控制硬件GPIO。下面是APP、Driver和硬件的架构,如下:2. 设备树和platform_driver的匹配设备树节点是根据platform_driv原创 2021-08-22 12:00:50 · 1575 阅读 · 0 评论 -
【Linux】QT5移植到Linux ARM
文章目录1. 前言2. tslib-1.22的移植2.1 tslib官方源码下载2.2 交叉编译tslib源码3. QT5.15.2的移植3.1 QT5.15.2官方源码下载3.2 交叉编译QT1. 前言QT 是一种跨平台 C++图形用户界面应用程序开发框架。它既可以开发 GUI 程序,也可用于开发非 GUI 程序,比如控制台工具和服务器。在嵌入式 Linux 系统上,移植QT时通常需要支持tslisb,它是开源并常用的触摸屏库。下面会通过2个部分来介绍整个移植过程:tslisb移植和qt移植。2.原创 2021-07-27 16:03:53 · 6534 阅读 · 2 评论 -
【Linux】基于IMX6ULL移植Buildroot
文章目录1. Buildroot 简介2. 获取 buildroot 源码3. 编译环境配置4. 通过buildroot编译imx6ull5. 修改默认配置适配imx6ull uboot1. Buildroot 简介Buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系原创 2021-07-15 18:06:54 · 3788 阅读 · 1 评论 -
【Linux】imx6ull Kernel 源码下载和编译环境配置
文章目录1. 获取 ARM 官方交叉编译工具链2. 在IMX官网下载IMX6ULL相关资料3. 下载源码和编译kernel4. 编译验证kernel5. 相关文章1. 获取 ARM 官方交叉编译工具链在ubuntu linux环境下编译imx6ull Kernel源码时,需要安装对应版本的交叉编译工具链。IMX6ULL的CPU是 32bit ARM v7架构并支持硬件浮点,所以下载 AArch32版本工具链后缀为gnueabihf,地址如下:https://developer.arm.com/tool原创 2021-07-13 17:42:42 · 4265 阅读 · 2 评论 -
【Linux】ubuntu20.04搭建编译环境
1.新安装的系统创建ROOT用户创建root用户:sudo passwd root //会让你输入当前用户密码。输入按下回车输入两次root密码`切换到root用户:su root //提示输入root密码。输入即可运行结果如下:2.创建一个新用户创建新用户:sudo adduser benjamin // 创建新用户benjamin,设置新用户密码(输入2次),然后一直回车输入Y切换到新用户:su benjamin运行结果如下:将新用户赋予管理员的权限:sudo ad原创 2021-05-09 16:19:05 · 5380 阅读 · 4 评论