凉开水白菜
有嵌入式arm及qt软件开发方面三年经验,嵌入式qt领域专家,csdn/掘金平台优质作者,擅长嵌入式软硬件项目方案设计,qt界面开发,单片机程序设计等。
展开
-
【ARM】Linux内核驱动之I2C线驱动,读取MPU6050驱动
i2c总线其实和platform总线的内容非常像,本质上i2c总线模型也是基于platform总线模型编写而来,本章内容可以结合platform那章的内容联合观看可以更加容易理解;i2c_board_info用于建立列出i2c设备的信息表,描述i2c相关的资源,其中 type 和 addr 这两个成员变量是必须要设置的, 一个是 I2C 设备的名字, 一个是 I2C 设备的器件地址;int irq;原创 2023-10-02 03:21:47 · 245 阅读 · 0 评论 -
【ARM】使用模板编写dht11温湿度linux驱动程序
在上一章节我们编写了一个Linux驱动模板,我们通过上一章节的内容一步步的完成我们的DHT11的驱动程序,并再熟悉一下我们的驱动程序模板,首先我们需要复制上一章节的驱动代码一份;原创 2023-09-09 21:27:36 · 238 阅读 · 0 评论 -
【ARM】Linux内核驱动之模板
一、初始化部分 register_chrdev_func1、platform总线注册2、Of_MATCH_COMPATILBLE 设备树compatilble属性3、ID_TABLE_COMPATILBLE id_table compatilble属性4、通过两个匹配属性进入probe函数获取设备树信息5、probe函数注册字符,当insmod方式注册驱动如带有设备号参数则采用静态注册,当未传入设备号采用动态分配。原创 2023-09-09 21:26:56 · 166 阅读 · 0 评论 -
【ARM】Linux内核驱动之定时器
在linux系统中定时器分为软定时和硬件定时器。硬件定时器一般指的是CPU的一种底层寄存器,它负责按照固定时间频率产生中断信号,形成信号源,也就和单片机的tim定时器是一样的。然后软件定时器是基于硬件提供的信号源,系统就可以按照信号中断来计数,计数在固定频率下对应固定的时间,根据预设的时间参数即可产生定时中断信号。1.创建定时器结构体2.初始化定时器结构体3.定时器结构体数据绑定4.将定时器结构体添加到执行列表需要注意定时器执行完后就停止了所以我们需要在服务函数重新启用并修改超时时间。原创 2023-08-31 02:19:30 · 291 阅读 · 0 评论 -
【ARM】Linux内核驱动之中断
Linux中使用中断非常的简单,只需要申请中断,注册相应的中断处理函数即可;自定义工作队列就是将工作项放入到自己定义的工作队列中执行,共享队列是由内核管理的全局工作队列,自定义工作队列是由内核或驱动程序创建的特定工作队列,用于处理特定的任务。和共享工作队列代码不同的是我们需要手动创建一个工作队列,然后再将工作项放入到工作队列中,在中断上文中调度我们创建的工作队列;// 工作队列。原创 2023-08-30 00:49:03 · 175 阅读 · 0 评论 -
【ARM】Linux内核驱动之platform总线驱动
该驱动是基于前面的杂项设备进行增加的,该驱动和前面的模板只是替换了杂项设备注册的位置,当设备树和platform总线匹配上的时候执行probe函数的时候再进行和我们之前杂项设备同样的注册流程,使用该驱动模板需要注意在设备树中添加devicetree_platform_of_match中的匹配属性compatible ,相对于device和driver实际开发中我们的device习惯使用设备树生成,所以该种方式我放在了前面;原创 2023-08-16 15:09:20 · 140 阅读 · 0 评论 -
【ARM】使用Busybox构建根文件系统
BusyBox:嵌入式Linux的瑞士军刀BusyBox将许多常见UNIX实用程序的微小版本组合成一个小的可执行文件。它为您通常在GNU fileutils、shellutils等中找到的大多数实用程序提供了替代品。BusyBox中的实用程序通常比其全功能GNU同类程序有更少的选项;然而,所包含的选项提供了预期的功能,其行为与GNU对应项非常相似。BusyBox为任何小型或嵌入式系统提供了一个相当完整的环境。编写BusyBox时考虑了大小优化和有限的资源。原创 2022-10-18 17:05:15 · 2139 阅读 · 0 评论 -
【ARM】使用Buildroot构建根文件系统
Buildroot是一个简单、高效且易于使用的工具,用于通过交叉编译生成嵌入式Linux系统。原创 2022-10-26 14:13:45 · 1805 阅读 · 0 评论 -
【ARM】使用Ubuntu-base构建根文件系统
刚开始学习嵌入式Linux的时候肯定很多人都是使用的ubuntu装在虚拟机中来运行开发,其中最方便的工具肯定就是下载软件直接使用apt工具就可以完成下载,这种方便比buildroot和busybox都是不能比的,Ubuntu是 Linux 系统的一种,可以简单的将 Ubuntu 理解为一个根文件系统,因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发板上;原创 2022-10-27 16:58:52 · 2532 阅读 · 0 评论 -
【ARM】Linux内核驱动之字符设备驱动
本章节的内容为静态注册设备号、动态注册设备号、字符设备的注册、class自动创建节点,对于设备号的注册学习的时候可以学习两种方式,在实际开发中更加推荐使用动态注册的方式来使用避免设备号的冲突,字符设备的注册相对比较简单和杂项设备类似只是接口和结构体不同,对于字符设备是不会创建设备节点的,在Linux内核中提供了udev来帮助我们自动创建设备节点减少了不少麻烦;原创 2023-08-16 00:55:34 · 177 阅读 · 0 评论 -
【ARM】Linux内核驱动之杂项设备驱动
杂项设备是字符设备的一种,可以自动生成设备节点,最基础的设备驱动框架之一,对比字符设备的优点是代码简单且不占用设备号,对于一些简单的设备可以使用该框架;原创 2023-08-09 21:06:43 · 133 阅读 · 0 评论 -
【ARM】imx6ul移植kernel记录,恩智浦github提供的最新kernel(2023年7月31)
本文使用的芯片是imx6ul,移植目标完成对恩智浦github提供的最新uboot(2023年7月31)原创 2023-08-05 03:13:32 · 403 阅读 · 0 评论 -
【ARM】imx6ul移植u-boot记录,恩智浦github提供的最新uboot(2023年7月31)
本文使用的芯片是imx6ul,移植目标完成对恩智浦github提供的最新uboot(2023年7月31)原创 2023-08-04 16:09:34 · 427 阅读 · 0 评论 -
【ARM】Linux内核驱动之设备树的学习-长文
订阅的粉丝可通过PC端文末加我微信,可对文章的内容进行一对一答疑!描述硬件得文本文件,因为语法结构像树所以叫设备树通过DTC编译dts、dtsi文件编译出dtb文件所有的设备树文件都存在与下面的路径二、如何编译设备树?DTC编译器的源码路径,dtc文件夹下面的dtc执行文件就是我们的设备树编译器(要保证源码已经编译过一次)如果编译完成还是没有可能是内核版本太低没有引进设备树,或者是配置选项未勾选,可以在.confg文件中查看该选项最简单的设备树源码编译器编译指令/home/book/liche原创 2023-07-31 00:37:47 · 355 阅读 · 0 评论 -
【Kernel】驱动开发学习之Platform平台总线模型
平台总线模型也交platform总线模型,他是Linux虚拟出来的一条总线,他并不是真实的一条真实的电气总线;平台总线模型就是把原来的驱动C文件给分成了两个文件一个是device文件对应我们的设备文件,一个是driver文件对应我们的驱动文件,平台总线的优点有1)提高代码重用性2)减少重复性代码3)区分设备与驱动4)更方便管理我们的设备把稳定不变的驱动放在driver里面,需要做改动的设备部分放在device文件中;...原创 2022-07-22 00:30:58 · 671 阅读 · 0 评论 -
【ARM】新唐NUC977移植WK2124驱动
目前WK系列能实现SPI扩展uart的芯片包括WK2124、WK2204、WK2168、WK2132。目前WK2124、WK2204、WK2168能实现SPI扩展4路UART,WK2132能实现扩展2路UART。目前这几款芯片使用的都是相同的linux驱动。WK系列扩展的子通道的UART具备如下功能特点每个子通道UART的波特率、字长、校验格式可以独立设置,最高可以提供2Mbps的通信速率。https提取码ix73httpshttpshttps。......原创 2022-07-18 10:13:42 · 835 阅读 · 0 评论 -
【Kernel】驱动开发学习之字符设备
然后编译我们的驱动代码再通过上面的演示我们就可以看到字符设备注册成功了,但是这种方式存在一个问题就是我们要提前知道空闲的设备号才能进行注册,否则将会发生设备号冲突问题,这里就拿杂项设备驱动号来做申请尝试。这里需要注意的是我们动态申请的设备号是主设备号和次设备号已经合并了的,如果后续会使用到次设备号我们需要使用MAJOR、MINOR来单独提取申请到的主设备号和次设备号。//实际就是把文件操作集写给ops功能。fmt是设备名字,如果设置fmt=xxx的话,就会生成/dev/xxx这个设备文件。...原创 2022-07-17 02:20:39 · 374 阅读 · 0 评论 -
【ARM】迅为rk3568开发板lvds屏设置横屏显示
开发板:讯为rk3568根文件系统:buildroot系统:Linux这里我参考的是迅为资料中的09手册android系统和应用开发手册修改/kernel/arch/arm64/boot/dts/rockchip/topeet_rk3568_lcds.dtsi设备树这里的目录就是我们修改显示屏幕的目录,该目录下有两个设备树文件一个是屏幕的选择一个是屏幕的设置其中:logo,rotate = ;代表逆时针旋转 90 度,logo,rotate = ;代表逆时针旋转 180 度,l...原创 2022-06-19 01:32:35 · 3407 阅读 · 2 评论 -
【Linux】新唐NUC977编译第一个内核驱动程序Hello World
在新唐NUC977的Hello World内核驱动程序前言一、文件的编写二、内核的编译及烧录最后前言 相关简介: 1,增加驱动文件 hello.c 和对应的 Makefile、Kconfig 2,修改上一级的 Makefile 与 Kconfig 3,使用 Make menuconfig 进行配置 4,编译,烧录和运行完成目标: 创建一个 hello 的驱动,在开机的时候加载,并打印"Hello world"一、文件的编写接着上一章的LinuxBSP包,进入02.lin原创 2022-05-11 16:49:34 · 695 阅读 · 0 评论 -
【Kernel】驱动编译的两种方式:编译成模块、编译进内核(使用杂项设备驱动模板)
杂项设备的驱动是驱动开发中最简单最方便的,核心就是处理write信号和read信号做出对应的反应。如果需要将驱动编译成模块前提是有编译好的kernel,并且开发板是烧录的该版本的kernel,编译成模块我们只需要新建一个Makefile文件:然后我们只需要make就会生成.ko文件,然后将ko文件拷贝到开发板中,加载驱动使用insmod、卸载内核使用rmmod。驱动编译进内核如果要将驱动编译到内核中去则需要新建两个文件一个Makefile一个KconfigMakefileKconfig相关的Kc原创 2022-06-07 15:15:28 · 3404 阅读 · 0 评论