【Linux驱动开发】设备树详解(三)设备树Kernel解析

​ ​ 活动地址:CSDN21天学习挑战赛 【Linux驱动开发】设备树详解(一)设备树基础介绍 【Linux驱动开发】设备树详解(二)设备树语法详解 【Linux驱动开发】设备树详解(三)设备树Kernel解析   个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 5、设备树的加载流程 我们知道,dts文件经过dtc工具编译为dtb,内核加载并解析dtb文件,最终获得设备树的信息。 那么Linux如何加载``d...

Linux远程调试工具——gdbserver

​ ​ 活动地址:CSDN21天学习挑战赛 个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 1、介绍 对于开发者来说,调试必不可少。 对于开发PC软件,通常系统已经继承了调试工具(比如Linux系统的GDB),或者IDE直接支持对程序的调试。 而对于开发嵌入式软件来说调试的手段比较有限,很多开发者仅有的调试手段依然是最原始的打印(我也是其中之一)。 当然除了打印调试之外还有通过gdb+gdbserver来...

【Linux驱动开发】设备树详解(二)设备树语法详解

​ 活动地址:CSDN21天学习挑战赛 【Linux驱动开发】设备树详解(一)设备树基础介绍 【Linux驱动开发】设备树详解(二)设备树语法详解 【Linux驱动开发】设备树详解(三)设备树Kernel解析   个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 4、设备树语法 dts文件是一种ASCII文本格式的设备树描述,它有以下几种特性: 每个设备树文件都有一个根节点,每个设备都是一个节点。 节点间可以嵌套,...

查看linux版本

发布时间:2022-09-23 LINUX驱动开发 LINUX
uname -a #显示电脑以及操作系统的相关信息 cat /proc/version #正在运行的内核版本,包括编译者信息,固件生成时间 cat /etc/issue #显示的是发行版本信息 lsb_release -a #查看Ubuntu版本号...

Linux 驱动开发 五十五:《gpio.txt》翻译

发布时间:2022-09-19 驱动开发 LINUX驱动开发 LINUX
NXP提供Linux源码,具体文档目录:\linux-imx-4.1.15\Documentation\devicetree\bindings\gpio\gpio.txt。 《gpio.txt》为设备指定 GPIO 信息。 一、gpios 属性 使用 GPIO 的 gpios 属性节点应该使用一个或多个属性来指定它们,每个属性都包含一个“gpio-list”: gpio-list ::= <single-gpio> [gpio-list]single-gpio ::= <gpio-...

Linux 驱动开发 五十四:《fsl,imx-pinctrl.txt》翻译

发布时间:2022-09-19 驱动开发 LINUX驱动开发 运维 LINUX
NXP提供Linux源码,具体文档目录:linux-imx-4.1.15\Documentation\devicetree\bindings\pinctrl\fsl,imx-pinctrl.txt。 适用于 i.MX 的飞思卡尔 IOMUX 控制器 (IOMUXC)。 IOMUX 控制器 (IOMUXC) 与 IOMUX 一起使 IC 能够将一个 PAD 共享给多个功能块。 共享是通过多路复用 PAD 输入/输出信号来完成的。 每个 PAD 最多有 8 个复用选项(称为 ALT 模式)。 由于不同的...

Linux 模块管理方法之 DKMS

本文将描述 DKMS 是什么、怎么用、有哪些问题。 一、DKMS 是什么 如果要问 Linux 内核模块如何发布、安装。脑回路的第一反应肯定是 make && insmod。 上述方法可以满足嵌入式场景,因为嵌入式产品的软件是整体发布,包括:内核、模块、软件等交付件。但是在 PC/服务器 领域,各个组件都是互相独立的,如果一个模块基于内核 A 编译并发布,那用户更改内核后,之前发布的内核模块就不能用了。 所以,DELL 发布了 DKMS,全称 Dynamic Kernel Module S...

Linux 驱动开发 五十七:《ioctl-decoding.txt》翻译

发布时间:2022-10-01 驱动开发 LINUX驱动开发 LINUX
文档路径:linux-imx-4.1.15\Documentation\ioctl\ioctl-decoding.txt。 要解码十六进制 IOCTL 代码: 大多数架构使用这种通用格式,但请检查 include/ARCH/ioctl.h 以了解具体情况,例如 powerpc 使用 3 位编码读/写和 13 位大小。 bits meaning31-30 00 - 无参数:使用 _IO 宏 10 - 读:_IOR 01 - 写:_IOW 11 - 读/写:_IOWR29-16 参数大小15-8 ...

Linux 驱动开发 五十六:《ioctl-number.txt》翻译

发布时间:2022-10-01 驱动开发 LINUX驱动开发 LINUX
文档目录:linux-imx-4.1.15\Documentation\ioctl\ioctl-number.txt。 如果要向内核添加新的 ioctl,则应使用 <linux/ioctl.h> 中定义的 _IO 宏: _IO:没有参数的 ioctl;_IOW:带有写入参数的 ioctl(copy_from_user);_IOR:带有读取参数的 ioctl(copy_to_user);_IOWR:具有写入和读取参数的 ioctl; “写”和“读”是从用户的角度来看的,就像系统调用“写”和“读”...

初识DMA(1)

发布时间:2022-10-11 网络 LINUX驱动开发 LINUX 服务器
前言 项目做多了,会看到很多关于DMA的操作,比如 音频数据传输。SPI数据传输(spi-oled屏幕,传输图像)。 之所以列举出上面两项,是想在之后的章节重点介绍一下。 关于DMA,其实就是数据的搬运(mem->mem, dev->mem, mem->dev)。感觉很简单,但是看代码后,发现linux提供的DMA接口并不是很简单,所以想通过一系列的文章,来打通DMA脉络,了解DMA api的使用以及背后的意义,从而在遇到DMA相关操作时,不会那么的陌生,并且很快的能融入开发当中。...

DMA controller driver & framework(3)

发布时间:2022-10-11 链表 LINUX驱动开发 数据结构
前言 本章要分析 全志的DMA controller 驱动(sunxi-dma.c),进一步看一下是如何一步一步的注册到DMA framework里的。 重要的数据结构 从上一节的软件构图中,可知,DMA framework 需要3个比较重要的数据结构: 一个DMA controller的抽象 struct dma_device 对应DMA物理通道的抽象 struct dma_chan 对应虚拟抽象的通道 struct virt_dma_chan 结构体的对应如下: 我们可以但看到, vchan0与v...

DMA框架图(2)

发布时间:2022-10-05 LINUX驱动开发 LINUX
框架分析图 之所以把整体的架构先贴出来,是为了以后好分析代码,在分析代码的过程中对着图看,理解上会更加清晰明了。 ...

DMA的应用示例(5)-DMA descriptor的赋值

发布时间:2022-10-12 链表 LINUX驱动开发 JAVA 数据结构
前言 之所以 把 对【DMA descriptor】的赋值单独拿出来写,是因为设计的知识点比较多,即。 sg_table 是如何传给 DMA engine的 DMA engine 是如何 生成 DMA descriptor 的(这里利用了 dma_pool) DMA传输用到的 DMA descriptor 首先,我们回顾一下,对于散列传输方式而言,假设想要DMA传输2组数据,那就必须要为DMA配置2个 DMA descriptor(因为每组数据的源与目的地都不一样)然后做成链表传给DMA 即:[desc...

DMA的应用示例(4)-前期准备

发布时间:2022-10-11 LINUX驱动开发 LINUX
全志的DMA test 程序分析 分析文件:sunxi_dma_test.c 首先测试驱动加载进去后,在/sys/下会有节点产生 /sys/class/sunxi_dma_test # cat help usage: echo id > test id for case DTC_MEMCPY_SINGLE_CHAN is 0 id for case DTC_MEMCPY_MULTI_CHAN is 1case description: DTC_M...

Linux 驱动开发 五十九:《common.txt》翻译

发布时间:2022-10-10 驱动开发 LINUX驱动开发 LINUX
文档:linux-imx-4.1.15\Documentation\devicetree\bindings\leds\common.txt。 常见 LED 灯属性。 LED和 flash LED设备提供与电流调节器相同的基本功能,但扩展了 LED 和 flash LED 的特定功能,如闪烁模式,flash 超时,flash 故障和外部 flash 闪光灯模式。 许多 LED 设备公开多个电流输出,可以连接到一个或多个分立的 LED 组件。由于连接的排列会影响 LED 设备初始化的方式,所以 LED ...

Linux 驱动开发 五十八:《leds-gpio.txt》翻译

发布时间:2022-10-10 驱动开发 LINUX驱动开发 LINUX
文档:linux-imx-4.1.15\Documentation\devicetree\bindings\leds\leds-gpio.txt。 LED 连接到 GPIO 线。 必须属性: compatible:必须是 gpio-leds。 每个 LED 表示为 gpio-leds 设备的子节点。每个节点的名称表示对应 LED 的名称。 LED 子节点属性: gpios:应指定 LED 的 GPIO,参见 Documentation/devicetree/bindings/gpio/gpio.tx...

DMA的执行(6)

发布时间:2022-11-19 LINUX驱动开发 LINUX 开发语言
前言 前面的几个章节对 DMA descriptor的赋值已经说的非常清楚了,接下来讲解最后一部分,DMA的执行。我们接着sunxi_dma_test.c 分析下去。 DMA传输开始 /*static void __dma_callback(void *dma_async_param){ chan_info *pinfo = (chan_info *)dma_async_param; wake_up_interruptible(&pinfo->dma_wq); atomic_set(&amp...

Linux 驱动开发 六十:《input.txt》翻译

发布时间:2022-10-15 驱动开发 LINUX驱动开发 运维 LINUX
文档路径:linux-imx-4.1.15\Documentation\input\input.txt。 一、介绍 这是一个驱动进程集合,旨在支持 Linux 下的所有输入设备。虽然它目前仅用于 USB 输入设备,但未来的使用(例如 2.5 / 2.6)预计将扩展到取代大多数现有的输入系统,这就是为什幺它位于 drivers/input/ 而不是 drivers/usb/ 中的原因。 输入驱动器的中心是输入模块,它必须在任何其他输入模块之前加载 - 它用作两组模块之间的通信方式: 1、设备驱动进程 ...

Linux 驱动开发 六十一:《gpio-keys.txt》翻译

发布时间:2022-10-15 驱动开发 LINUX驱动开发 LINUX
文档目录:linux-imx-4.1.15\Documentation\devicetree\bindings\input\gpio-keys.txt。 input/gpio_keys.c 键盘驱动进程的设备树绑定。 必需属性: compatible = gpio-keys; 可选属性: autorepeat:布尔值,启用 Linux 输入子系统的自动重复功能。 每个按钮(键)都表示为 “gpio-keys” 的一个子节点: 子节点属性: gpios:设备树 gpio 规范。interrupts:输...

Linux 驱动开发 六十三:《display-timing.txt》翻译

发布时间:2022-10-17 驱动开发 LINUX驱动开发 IMX6ULL
文档路径:linux-imx-4.1.15\Documentation\devicetree\bindings\video\display-timing.txt。 一、display-timings 节点 必须属性: 无 可选属性: native-mode:显示器的本机模式,如果提供多种模式。省略时,假定第一个节点是本机节点。 二、timing 子节点 必须属性: hactive, vactive:显示分辨率。hfront-porch, hback-porch, hsync-len:水平显示时序参数...

Linux 驱动开发 六十四:《pwm-backlight.txt》翻译

发布时间:2022-10-18 驱动开发 LINUX驱动开发 IMX6ULL
文档路径:linux-imx-4.1.15\Documentation\devicetree\bindings\video\backlight\pwm-backlight.txt。 PWM 背光绑定。 必须属性: compatible:必须为 “pwm-backlight”。pwms:OF 设备树 PWM 规范(参见 PWM 绑定[0])。brightness-levels:不同亮度级别的数组。通常,这些值的范围从 0 到 255,但从 0 开始的任何范围都可以。实际的亮度水平(PWM 占空比)将从...

Linux 驱动开发 六十二:《mxsfb.txt》翻译

发布时间:2022-10-17 驱动开发 LINUX驱动开发 LINUX IMX6ULL
文档路径:linux-imx-4.1.15\Documentation\devicetree\bindings\fb\mxsfb.txt。 一、飞思卡尔MXS液晶接口(LCDIF)。 必须属性: compatible:必须是 “fsl,<chip>-lcdif”。支持的芯片包括 imx23 和 imx28。reg:Lcdif 寄存器集的地址和长度。interrupts:Lcdif 中断。display:Phandle 用于显示节点(有关详细信息,请参见下文)。 二、display 节点:...

在Ubuntu中搭建嵌入式Linux开发环境

发布时间:2022-10-20 LINUX驱动开发 VSCODE LINUX UBUNTU
在Ubuntu中搭建嵌入式Linux开发环境 百问网已经制作好了完备的Ubuntu镜像,可以从这里下载: 链接:https://pan.baidu.com/s/1vw4VUV_Mvt0HXz8IC66ACg 提取码:iftb 我们也正在(2022.10.17开始)使用纯粹的Ubuntu环境开始教驱动入门,免费的,感兴趣者也加上面的群。 如果你使用我们的Ubuntu镜像,那么可以略过前面第1~6章的内容,直接从第7章开始看。 1. 安装基本开发工具 git clone https://e.coding.n...

一文彻底讲清Linux tty子系统架构及编程实例

【摘要】本文详细解读了linux系统下的tty子系统的深层次原理和架构,并参考了LDD3中的代码实例讲述了无硬件下实现一个简单的tty设备驱动模块的编写。对了解tty子系统及下部串口驱动模块的学习有较好的参考价值。 1、tty设备简介 tty一词源于Teletypes,或Teletypewriters,它是最早出现的一种终端设备,类似电传打字机,由Teletype公司生产。最初tty是指连接到Unix系统上的物理或者虚拟终端。终端是一种字符型设备,通常使用tty来统称各种类型的终端设备。随着时间的推移,当...

Linux驱动bug及解决方法记录

发布时间:2022-09-21 驱动开发 LINUX驱动开发 LINUX BUG
Linux驱动bug记录 前言 记录一下自己驱动开发遇到的bug以及解决方法,如有错误欢迎指正。 1. insmod加载错误 1.遇到 insmod: ERROR: could not insert module xxx.ko: File exists,一般是重复加载的问题,只需要 rmmod卸载掉,再重新insmod加载即可解决。 2.遇到 insmod: ERROR: could not insert module xxx.ko: Operation not permitted,一般...

rk平台 dd 命令的使用

发布时间:2022-10-25 LINUX驱动开发 RV1126 LINUX
前言:dd命令的作用在于将某个镜像覆盖到某个分区,也可以将某个分区的内容生成一个img 一、使用dd命令覆盖分区 应用场景:我们经常会遇到需要替换某个分区,但是又没有原来烧录的分区表,这个时候 dd 命令就派上用场了。 下面例子来说明这个命令的使用: 1、将要烧录的img push 到机器中。 2、这里以rk平台的为例,其他平台的可能有差异,需要根据平台差异做调整,另外emmc 和nand 路径也是有差异的。 这里以RV1126为例: 3、覆盖分区 if 是源文件的路径, of要覆盖的路径 dd if=...

在Windows使用VSCode搭建嵌入式Linux开发环境

发布时间:2022-10-27 LINUX驱动开发 WINDOWS VSCODE LINUX
在Windows使用VSCode搭建嵌入式Linux开发环境 百问网已经制作好了完备的Ubuntu镜像,可以从这里下载: 链接:https://pan.baidu.com/s/1vw4VUV_Mvt0HXz8IC66ACg 提取码:iftb 我们也正在(2022.10.17开始)使用纯粹的Ubuntu环境开始教驱动入门,免费的,感兴趣者也加上面的群。 1. Ubunt上的操作 1.1 安装基本开发工具 git clone https://e.coding.net/weidongshan/Developm...

Linux内存管理 —— DMA和一致性缓存(dma_alloc_coherent(),dma_map_sg())

发布时间:2022-10-29 缓存 LINUX驱动开发 DMA LINUX
1. 出现内存不一致的原因 CPU写内存的时候有两种方式: write through: CPU直接写内存,不经过cache。write back: CPU只写到cache中。cache的硬件使用LRU算法将cache里面的内容替换到内存。通常是这种方式。DMA可以完成从内存到外设直接进行数据搬移。但DMA不能访问CPU的cache,CPU在读内存的时候,如果cache命中则只是在cache去读,而不是从内存读,写内存的时候,也可能实际上没有写到内存,而只是直接写到了cache。 这样一来,如果DMA从将...

海思3559万能平台搭建:TCP客户端网口编程

发布时间:2022-11-02 LINUX驱动开发 海思3559 网口 LINUX
前言   日常开发除了串口还有网口也用来作为常用的协议收发端口,补充常见的网口编程 基本概念   该博客写的比较清晰了 https://www.cnblogs.com/luoxiao23/p/11545363.html#:~:text=Linux%E4%B8%AD%E7%9A%84%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E9%80%9A%E8%BF%87Socket%20%28%E5%A5%97%E6%8E%A5%E5%AD%97%29%E6%8E%A5%E5%8F%...

海思3559万能平台搭建:串口编程

发布时间:2022-11-01 LINUX驱动开发 海思3559 串口 LINUX
前言   平常的工作使用中,总是免不了要和串口打交道,协议的收发也经常通过串口来实现,海思3559下的串口和标准的linux下串口大同小异,可以参考之前zynq的串口编程,也可以直接阅读本文 使能串口   最直接的方式就是将设备树中对应uart的status修改为 status = “okay”。海思实际加载的串口驱动是PL011,menuconfig查看配置Device Drivers > Character devices > Serial drivers中的ARM AMBA PL011 ...

【RK3399】2.制作ubuntu20.04 roomfs

firefly自带的文件系统,由于缺少一些基本功能模块,因此,我们可以自己手动制作一个ubuntu20.04的文件系统。 下载Ubuntu根文件系统 http://cdimage.ubuntu.com/ubuntu-base/releases/ 安装虚拟机 apt-get install qemu-user-static 解压 mkdir ubuntu-rootfstar -xpf ubuntu-base-20.04.5-base-arm64.tar.gz -C ubuntu-rootfs 复制一下虚拟...

Linux并发与竞争

发布时间:2022-11-04 驱动开发 LINUX驱动开发 LINUX 操作系统
前言         Linux系统是个多任务的操作系统,会存在多个任务同时访问同一片内存区域的情况,造成内存数据混乱,严重的话可能会导致系统崩溃;因此我们需要针对这一现象做处理。         产生并发的主要原因有:①最基本的原因是多线程并发访问;②抢占式并发访问;③中断程序并发访问;④多核CPU间并发访问。         并发访问产生对临界区(即共享数据段)的竞争关系,所以对于临界区要保证只能有一个线程访问。 1.原子操作 1.1 概念         原子操作就是指不能再进一步分割的操作 ,一般...

linux 驱动开发之platform设备驱动一(4)

发布时间:2022-09-20 驱动开发 LINUX驱动开发 LINUX RK3399-LINUX
前言         Linux 设备和驱动通常都需要挂接在一种总线上,例如PCI、USB、I2C、SPI 等的设备存在真实的总线,这自然不是问题,但是SOC上的外设控制器、挂接在SoC内存空间的外设等却不依附于此类总线。基于这一背景,linux形成了一种虚拟的总线,称为platform 总线,相应的设备称为platform_device,而驱动成为platform_driver。         platform总线的出现提高了代码的重用性、实现了设备与驱动的分离,增强了可移植性。之前的驱动开发是把驱动...

Linux驱动开发之i2c框架讲解到例程

发布时间:2022-11-17 驱动开发 LINUX驱动开发 RK3399-LINUX
前言         本篇章在rk3399平台上,基于设备树的i2c驱动开发。i2c直接使用硬件i2c总线,体系结构分为3部分:I2C 核心、I2C 总线驱动和I2C 设备驱动。I2C 核心(i2c-core.c)提供了I2C 总线驱动和设备驱动的注册、注销方法等。我们主要了解Linux中i2c的基本框架,分为i2c主机驱动开发和i2c设备驱动开发。主机驱动一般由芯片原厂开发,通常需要我们做的就是针对具体某个设备的设备驱动开发,硬件设备信息通过设备树描述。 1. i2c主机驱动框架 1.1 结构体描述 ...

驱动开发基础

发布时间:2022-11-28 LINUX驱动开发 物联网
1、Hello驱动 我们应用程序使用open函数的时候,会调用内核的sys_open函数,然后接下来 1、然后打开普通文件的话会使用文件系统操作硬件, 2、要是打开驱动文件,会使用驱动程序对应的drv_open函数 怎么写驱动程序 我们驱动对应的drv_open等函数写好了,存放在file_operation结构体中 将结构体告诉内核,也就是将结构体通过一个函数注册到内核中(注册的时候会设定主设备号,可自己设定也可以系统分配) 将结构体存放到一个对应的数组中,根据主设备号来存放查找 Lin...

麦子-linux字符设备驱动初探

发布时间:2022-11-18 LINUX驱动开发 物联网
字符驱动的联系 框架  软件支持:驱动 驱动类型 1、字符驱动(每次读取一个字节) 2、块驱动(每次读取多个字节) 3、网络设备驱动(协议栈) 设备号dev_t 内核中使用类型dev_t来描述设备号,就是一个硬件设备的身份证,其本质就是一个unsigned  int  32 位整数 要是同一种类别设备,前12位就是一样的,但后20位不同 设备号注册 驱动创建设备号,然后调用下面的函数向内核注册  设备信息描述结构体  设备行为描述结构体  注册函数      当执行insmod  就会...

麦子-linux驱动策略与框架

发布时间:2022-11-18 LINUX驱动开发 LINUX
一、linux内核同步和互斥 信号量(进程与进程)  当进程A执行共享资源先加锁执行down表示占用资源,进程B想执行就会被dowm,导致陷入睡眠 当进程A行完了就会up释放资源,我们其他线程执行这个共享资源就不会被dowm睡眠 自旋锁(进程与其他内核代码比如中断) 中断的时候 不能睡眠 二、驱动中的阻塞和唤醒 阻塞就是操作之后必须要得到想要的结果,不然就会一直等待(在驱动中就是睡眠) 非阻塞就是操作之后就会立即返回 open的时候指定是那种状态,后序对文件读、写就会执行这种操作 三、linu...

Linux 驱动开发 六十六:多点触控(MT)协议

发布时间:2022-11-19 LINUX驱动开发 LINUX 触摸屏
文档路径:Documentation\input\multi-touch-protocol.txt。 一、介绍 为了充分利用新的多点触摸和多用户设备的功能,需要一种从多个触摸点(即与设备表面直接接触的对象)报告详细数据的方法。本文档描述了多触摸(MT)协议,该协议允许内核驱动程序报告任意数量的触摸点的详细信息。 根据硬件的功能,协议分为两种类型。对于处理不可跟踪触摸点(类型 A)的设备,协议描述了如何将所有触摸点的原始数据发送给接收方。对于能够跟踪可识别触摸点(类型 B)的设备,协议描述了如何通过事件槽发...

驱动常用函数

发布时间:2022-11-21 LINUX驱动开发 LINUX
1、注册设备驱动 major = register_chrdev(0, 100ask_led, &led_fops) 1、0表示动态分配设备号 2、100ask_led是字符驱动的名字 3、led_fops是该驱动可以使用的操作函数结构体 2、删除设备驱动 unregister_chrdev(major, 100ask_led);//删除主设备号、删除驱动名字 3、创建出/dev/myled设备节点 led_class = class_create(THIS_MODULE, myled);//o...

linux内核操作

发布时间:2022-11-18 LINUX驱动开发 LINUX
1. 编译内核 1.1 环境安装 sudo apt-get install lib32c-dev //主要用于内核编译中对mkfs_ext4 文件系统的生成sudo apt-get install lib32stdc++6 1.2 编译方法 ./mk -k 1.3 编译输出 Kernel: arch/arm/boot/Image is ready --->生成内核的映像image Kernel: arch/arm/boot/zImage is ready --->默认生成z...

平台总线驱动和设备树匹配

发布时间:2022-11-21 LINUX驱动开发 运维 LINUX 服务器
平台总线介绍 总线代表着同类设备需要共同遵循的工作时序,不同的总线对于物理电平的要求是不一样的,对于每个比特的电平维持宽度也是不一样的,总线上传递的命令也会有自己的格式约束。 在Linux系统中总线可分为两种, 1、一种是实际存在的总线(例如I2C、SPI、USB等总线)。 2、另一种是虚拟存在的总线(platform总线)。 1.linux 设备驱动程序的演变  1.1 硬件资源和驱动写在同一个文件里 简单不易扩展,需重新编译,不同的引脚要写不同的驱动。 1.2 总线...

驱动程序的演变

发布时间:2022-12-03 LINUX驱动开发 LINUX
最简单的驱动程序 一、驱动的硬件操作函数 二、file_operation结构体管理硬件操作函数 三、入口函数, 1、注册file_opeation到内核数组中去 2、将物理地址转换虚拟地址 3、设备节点自动创建函数 四、出口函数 1、撤销地址转换 2、销毁设备节点 分层思想 一、leddrv.c    硬件操作函数以及它的上司file_operation结构体   入口函数,       1、注册file_opeation到内核数组中去       2、设备节点自动创建函数   出口函数       ...

【RK3399】1.RK3399开发板基础配置

最近在小黄鱼入手了一个RK3399的开发板,RK的芯片我也是第一次使用。FireFly配套提供了完善的教程,可以在他们的WIKI上找到。上面有的内容就不在本文叙述了,大家可以参考教程https://wiki.t-firefly.com/zh_CN/Firefly-RK3399/linux_compile_gpt.html 这篇文章主要如何对板子做一些基础的配置。 开发环境: FireFly-RK3399 VMware Workstation 16 ubuntu18.04 ubuntu18.04配置...

驱动中的c语言难点

发布时间:2022-12-01 C++ LINUX驱动开发 开发语言 C语言
一、指针 结构体指针 是一种指向一个结构体的指针 struct led_operations *p_led_opr; //创建指向led_operations结构体的指针 函数指针函数指针 的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针 //int (*p)(int a, int b); //也可以使用这种方式定义函数指针其中int为返回值,*p作为一个整体,代表的是指向该函数的指针,args为形参列表。其中p被称为函数指针变量 二、数据类型 %s  用来输出一个字符串...