<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lishing6的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lishing6</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lishing6]]></copyright><item><title><![CDATA[Linux系统镜像构建（3）：根文件系统]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/146005918</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/146005918</guid><author>lishing6</author><pubDate>Tue, 04 Mar 2025 11:47:25 +0800</pubDate><description><![CDATA[bin目录该目录下的命令可以被root与一般账号所使用，由于这些命令在挂接其它文件系统之前就可以使用，所以/bin目录必须和根文件系统在同一个分区中。/bin目录下常用的命令有：cat、chgrp、chmod、cp、ls、sh、kill、mount、umount、mkdir等。我们之后在利用Busybox制作根文件系统时，在生成的bin目录下，可以看到一些可执行的文件，也就是可用的一些命令。/sbin 目录。]]></description><category></category></item><item><title><![CDATA[Linux系统镜像构建（2）：linux内核的编译与烧录]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/145093899</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/145093899</guid><author>lishing6</author><pubDate>Mon, 03 Mar 2025 17:09:15 +0800</pubDate><description><![CDATA[芬兰人Linus最早开发，是类Unix系统，但不是Unix，实现了Unix的API（具体实现和Unix可能不同）而Linux使用GPLv2开源协议。]]></description><category></category></item><item><title><![CDATA[Linux系统镜像构建（1）：uboot编译烧录与移植]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/144953078</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/144953078</guid><author>lishing6</author><pubDate>Sun, 12 Jan 2025 15:24:57 +0800</pubDate><description><![CDATA[uboot是从FADSROM、8xxROM、PPCBOOT逐步发展演化而来的。uboot发展至今，已经可以实现非常多的功能， 在操作系统方面，它不仅支持嵌入式Linux系统的引导，还支持NetBSD,VxWorks, QNX, RTEMS, ARTOS, LynxOS, Android等嵌入式操作系统的引导。在CPU架构方面， uboot支持PowerPC、MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（18）：linux驱动并发与竞态]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/144929168</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/144929168</guid><author>lishing6</author><pubDate>Sat, 04 Jan 2025 23:08:52 +0800</pubDate><description><![CDATA[原子操作分为整型原子操作和位原子操作。使用方法非常类似，本小节介绍分别 介绍整型原子操作和位原子操作的函数（确切的说某些是宏定义）。测试实验仅 用整型原子操作，读者可自行使用位原子操作实现,实验源码位于“//atomic_t类型结构体} atomic_t;参数i： 设置整型原子变量的初始值atomic_t类型： 暂且称为“整型原子类型”，我们用它定义整型原子变量。//返回增加后的结果//返回减少后的结果参数v：要设置的整型原子变量的指针（地址）。i: 要进行加/减操作的大小返回值。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（17）：输入子系统–电阻触摸驱动实验]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/144873320</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/144873320</guid><author>lishing6</author><pubDate>Sat, 04 Jan 2025 13:48:18 +0800</pubDate><description><![CDATA[触摸屏系统由三个部分组成，它们分别是TSC控制器、TSC_ANA、ADC。其中，TSC控制器是整个系统的核心， 负责为 TSC_ANA 和 ADC 提供控制信号，实现电阻屏的触摸检测和触点坐标测量；TSC_ANA根据TSC控制器 提供的信号负责向电阻屏的 X+、X-、Y+、Y- 四根线提供正负电压；ADC则根据TSC控制器的坐标转换信号负责采集触点x轴和y轴的电压，并进行坐标值转换。TSC控制器、TSC_ANA、ADC三个模块协同工作，形成一个触摸屏系统。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（16）：输入子系统–电容触摸驱动实验]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/144479520</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/144479520</guid><author>lishing6</author><pubDate>Wed, 01 Jan 2025 20:15:35 +0800</pubDate><description><![CDATA[有关电容触摸的基础知识内容可以参考野火STM32相关教程，这里只介绍电容触摸驱动的相关内容。本章配套源码、设备树以及更新固件位于“~/embed_linux_driver_tutorial_imx6_code/linux_driver/touch_scream_GTxxx”目录下。触摸面板通过双面胶粘在显示屏上，他们在硬件上没有关联，通常情况下我们会设置触摸面板的“分辨率”与显示屏的分辨率一致。触摸芯片自动完成触摸信息的采集和处理，我们要做的就是配置触摸芯片、读取触点坐标。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（15）：Framebuffer子系统–LCD驱动实验]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/144443468</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/144443468</guid><author>lishing6</author><pubDate>Sun, 15 Dec 2024 01:09:13 +0800</pubDate><description><![CDATA[Framebuffer子系统为用户空间操作显示设备提供了统一的接口，屏蔽了底层硬件之间的差异，用户只需要操作一块内存缓冲区即可把需要的图像显示到LCD设备上。主要实现字符设备的创建，为不同的显示设备提供文件通用处理接口；同时创建graphics设备类，占据主设备号29。主要提供显示设备的时序、显存、像素格式等硬件信息，实现显示设备的私有文件接口，并创建显示设备文件/dev/fbx(x=0~n)暴露给用户空间。硬件设备层的代码需要驱动开发人员根据具体的显示设备提供给内核。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（14）：PWM子系统–pwm波形输出实验]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/144411571</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/144411571</guid><author>lishing6</author><pubDate>Fri, 13 Dec 2024 00:43:25 +0800</pubDate><description><![CDATA[在i.mx6中pwm子系统使用的是PWM外设，共有8个。有关PWM外设的介绍可以参考imx6ull参考手册的章节， 这里不再介绍。使用了PWM子系统后和具体硬件相关的内容芯片厂商已经写好了， 我们唯一要做的就是在设备树（或者是设备树插件）中声明使用的引脚。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（13）：输入子系统–按键输入实验]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/144387174</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/144387174</guid><author>lishing6</author><pubDate>Wed, 11 Dec 2024 22:05:55 +0800</pubDate><description><![CDATA[linux为了统一各个输入设备，将输入子系统分为了Drivers（驱动层）、Input Core（输入子系统核心层）、 handlers（事件处理层）三部分。Drivers主要实现对硬件设备的读写访问，设置中断，并将硬件产生的事件转为Input Core定义的规范提交给Handlers;Input Core起到承上启下的作用，为Drivers提供了规范及接口，并通知Handlers对事件进行处理;]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（12）：中断子系统–按键中断实验]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/144346272</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/144346272</guid><author>lishing6</author><pubDate>Mon, 09 Dec 2024 22:21:31 +0800</pubDate><description><![CDATA[让我们先来了解一下设备树是如何描述整个中断系统信息的。由于“全局中断”的特殊性，通常情况下载关闭之前要使用local_irq_save保存当前中断状态， 开启之后使用local_irq_restore宏恢复关闭之前的状态。flags是一个unsigned long 类型的数据。了解了以上函数的作用，我们就可以编写中断的驱动程序了， 如有遗漏的内容我们将会在代码介绍中，驱动程序介绍如下。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（11）：SPI子系统–OLED屏和CAN实验]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/144259937</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/144259937</guid><author>lishing6</author><pubDate>Sun, 08 Dec 2024 21:16:00 +0800</pubDate><description><![CDATA[spi_bus_type 总线定义，会在spi总线注册时使用。.match函数指针，设定了spi设备和spi驱动的匹配规则，具体如下spi_match_device。在oled驱动中我们使用ecspi1，可以通过IMX6ul的芯片手册查到，ecspi使用到的引脚如下。在我们实验中ecspi1使用CSI_DATA04-CSI_DATA07，oled屏和ecspi引脚对应入下。SPI_OLED显示屏功能说明引脚引出位置（排针）MOSIMOSI引脚CN5排针 IO4.27 脚未使用。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（10）：I2C子系统–mpu6050驱动实验]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/144122122</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/144122122</guid><author>lishing6</author><pubDate>Sun, 01 Dec 2024 21:54:20 +0800</pubDate><description><![CDATA[本节实验使用到 EBF6ULL-PRO 开发板上的 MPU6050。MPU6050是一款运动处理传感器，它集成了3轴MEMS陀螺仪，3轴MEMS加速度计。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（9）：pinctrl子系统和gpio子系统--led实验]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/143855688</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/143855688</guid><author>lishing6</author><pubDate>Wed, 20 Nov 2024 00:17:57 +0800</pubDate><description><![CDATA[首先我们在内核源码/arch/arm/boot/dts/imx6ull.dtsi文件中查找iomuxc节点，可以看到如下定义修饰的是与平台驱动做匹配的名字,这里则是与pinctrl子系统的平台驱动做匹配。表示的是引脚配置寄存器的基地址。imx6ull.dtsi这个文件是芯片厂商官方将芯片的通用的部分单独提出来的一些设备树配置。在iomuxc节点中汇总了所需引脚的配置信息，pinctrl子系统存储使用着iomux节点信息。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（8）：使用设备树插件实现RGB灯驱动]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/143836153</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/143836153</guid><author>lishing6</author><pubDate>Sun, 17 Nov 2024 20:23:14 +0800</pubDate><description><![CDATA[本节实验使用到 EBF6ULL-PRO 开发板。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（7）：使用设备树实现RGB 灯驱动]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/143809381</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/143809381</guid><author>lishing6</author><pubDate>Sat, 16 Nov 2024 12:47:53 +0800</pubDate><description><![CDATA[注册平台驱动时会用到平台设备结构体，在平台设备结构体主要作用是指定平台驱动的.probe函数、指定与平台驱动匹配的平台设备， 使用了设备树后就是指定与平台驱动匹配的设备树节点。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（6）：Linux设备树]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/143755861</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/143755861</guid><author>lishing6</author><pubDate>Fri, 15 Nov 2024 18:24:22 +0800</pubDate><description><![CDATA[设备树的作用就是描述一个硬件平台的硬件资源。这个“设备树”可以被bootloader(uboot)传递到内核， 内核可以从设备树中获取硬件信息。设备树描述硬件资源时有两个特点。第一，以“树状”结构描述硬件资源。例如本地总线为树的“主干”在设备树里面称为“根节点”， 挂载到本地总线的IIC总线、SPI总线、UART总线为树的“枝干”在设备树里称为“根节点的子节点”， IIC 总线下的IIC设备不止一个，这些“枝干”又可以再分。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（5）：平台设备驱动]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/143698273</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/143698273</guid><author>lishing6</author><pubDate>Tue, 12 Nov 2024 21:07:31 +0800</pubDate><description><![CDATA[本节实验使用到 EBF6ULL-PRO 开发板上的 RGB 彩灯我们需要将字符设备中的硬件信息提取出来，独立成一份代码，将其作为平台设备，注册到内核中。点亮LED灯，需要控制与LED灯相关的寄存器， 包括GPIO时钟寄存器，IO配置寄存器，IO数据寄存器等，这里的资源，实际上就是寄存器地址，可以使用IORESOURCE_MEM进行处理；除了这些之外，还需要提供一些寄存器的偏移量，我们可以利用平台设备的私有数据进行管理。#define CCM_CCGR1 0x020C406C //时钟控制寄存器。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（4）：Linux的设备模型]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/143681421</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/143681421</guid><author>lishing6</author><pubDate>Mon, 11 Nov 2024 23:49:49 +0800</pubDate><description><![CDATA[无无if(!return 1;return 0;第11-15行：定义了一个名为xbus的总线总线结构体中最重要的一个成员，便是match回调函数，这个函数负责总线下的设备以及驱动匹配， 没有这个函数，设备与驱动便不可以进行匹配。第1-9行：我们使用字符串比较的方式，通过对比驱动以及设备的名字来确定是否匹配，如果相同，则说明匹配成功，返回1；反之，则返回0。第1行：声明了外部的总线变量xbus。第3-6行：编写release函数，防止卸载模块时会报错。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（3）：字符设备驱动]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/143262330</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/143262330</guid><author>lishing6</author><pubDate>Thu, 31 Oct 2024 00:51:20 +0800</pubDate><description><![CDATA[本节实验使用到 EBF6ULL-PRO 开发板。本节实验使用到 EBF6ULL-PRO 开发板上。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发（2）：内核模块详解]]></title><link>https://blog.youkuaiyun.com/lishing6/article/details/143249641</link><guid>https://blog.youkuaiyun.com/lishing6/article/details/143249641</guid><author>lishing6</author><pubDate>Sat, 26 Oct 2024 21:55:26 +0800</pubDate><description><![CDATA[参数的类型，目前内核支持的参数类型有byte，short，ushort，int，uint，long，ulong，charp，bool，invbool。如果要将一个模块加载到内核中，insmod是最简单的办法， insmod+模块完整路径就能达到目的，前提是你的模块不依赖其他模块，还要注意需要sudo权限。以上代码中，包含了内核模块的加载、卸载函数的声明，还列举了module.h文件中的部分宏定义，这部分宏定义， 有的是可有可无的，但是MODULE_LICENSE这个是指定该内核模块的许可证，是必须要有的。]]></description><category></category></item></channel></rss>