Linux驱动
文章平均质量分 57
介绍Linux驱动相关内容
路过的小熊~
有限的时间做有用的事
展开
-
Linux之buildroot配置
Linux之buildroot配置的一个实例转载 2022-07-17 12:06:14 · 1555 阅读 · 0 评论 -
linux驱动之内核信号量使用
linux驱动之信号量使用转载 2022-07-16 23:10:25 · 324 阅读 · 0 评论 -
linux 使用buildroot制作文件系统
buildroot工具构建根文件系统原创 2022-07-16 19:31:05 · 745 阅读 · 0 评论 -
arm linux 启动时间的一些优化项汇总
本文主要讲述嵌入式Linux启动时间优化的一些选项原创 2022-07-01 10:59:09 · 1097 阅读 · 0 评论 -
Linux 设备树详解dts
设备树详解在Linux3.x版本后,arch/arm/plat-xxx和arch/arm/mach-xxx中,描述板级细节的代码(比如platform_device、i2c_board_info等)被大量取消,取而代之的是设备树,其目录位于arch/arm/boot/dts1.设备树的组成1个dts文件+n个dtsi文件,它们编译而成的dtb文件就是真正的设备树soc厂商会把soc公共的特性和多块开发板公用的特性提炼为dtsi,而dts则负责描述某个具体的产品(开发板)的特性。dts直接或间接的包转载 2022-04-03 19:21:55 · 2121 阅读 · 0 评论 -
linux内核调试技巧 dump_stack()
linux内核提供函数dump_stack()来跟踪函数的调用过程,原理是通过打印当前cpu的堆栈的调用函数来显示当前的上下文环境与调用关系;例:创建一个混杂设备,并定义read函数。在read中加入dump_stack(),显示read调用关系。结果如下:<1>[ 950.351269] --------------[fyl] dump_stack start----------------[ 1560.465491] CPU: 0 PID: 2759 Comm: cat Taint转载 2022-03-19 16:42:01 · 4921 阅读 · 1 评论 -
Linux驱动之PWM驱动实现
PWM是设备中常用的一种驱动接口,学习它有助于更好的适用各类型的产品。转载 2022-03-06 15:35:51 · 1781 阅读 · 0 评论 -
Linux 驱动编写之ADC驱动编写配置
简介纯粹的 ADC 驱动也是 IIO 驱动框架,如果需要自己编写ADC驱动,其实就是按照IIO的驱动框架进行相关实现。IMX6ULL 的ADC驱动设备树配置I.MX6ULL 有 2 个 ADC,但是对应一个 ADC 控制器。目前使用GPIO1_IO01 这个ADC1 的通道 1 引脚来进行配置。关 于 I.MX6ULL 的 ADC 节 点 更 为 详 细 的 信 息 请 参 考 对 应 的 绑 定 文 档 :Documentation/devicetree/bindings/iio/adc/vf6原创 2022-03-06 11:49:15 · 4059 阅读 · 2 评论 -
Linux驱动编写之PWM驱动配置
简介I.MX6ULL 有 8 路 PWM 输出,因此对应 8 个 PWM 控制器,所有在设备树下就有 8 个PWM 控制器节点。而 GPIO1_IO08 就是 PWM1 的输出引脚,所以这里是基于IMX6ULL PWM1 的驱动。设备树配置pinctrl_pwm1: pwm1grp { fsl,pins = < MX6UL_PAD_GPIO1_IO08__PWM1_OUT 0x110b0 >;};&pwm1 { pinctrl-names = "defaul原创 2022-03-05 21:29:43 · 3209 阅读 · 0 评论 -
Linux驱动之串口驱动配置
1、 UART3 IO 节点创建UART3 用到了 UART3_TXD 和 UART3_RXD 这两个 IO,因此要先在 iomuxc 中创建 UART3对应的 pinctrl 子节点,在 iomuxc 中添加如下内容:pinctrl_uart3: uart3grp {fsl,pins = <MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0X1b0b1MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0X1b0b1 >; };原创 2022-02-27 19:33:26 · 2680 阅读 · 0 评论 -
linux内核里的字符串转换 ,链表操作常用函数(收藏备用)
1.对双向链表的具体操作如下:list_add ———向链表添加一个条目 list_add_tail ———添加一个条目到链表尾部 __list_del_entry ———从链表中删除相应的条目 list_replace———用新条目替换旧条目 list_del_init———从链表中删除条目后重新初始化 list_move———从一个链表中删除并加入为另一个链表的头部 list_move_tail———从一个列表中删除并加入为另一个链表的尾部 list_is_last———测转载 2022-02-27 15:35:37 · 639 阅读 · 0 评论 -
wpa_supplicant 常用操作及其wpa_cli无法运行的原因Could not connect to wpa_supplicant
简介wpa_supplicant是一个连接、配置WiFi的工具,它主要包含wpa_supplicant与wpa_cli两个程序。 可以通过wpa_cli来进行WiFi的配置与连接,前提要保证wpa_supplicant正常启动。相当于wpa_supplicant 是服务端,wpa_cli 是客户端。安装wpa_supplicant 依赖于 openssl , libnl , 需要提前进行安装。安装方法ARM-Linux平台下,在上篇文章已经介绍。1. 启动wpa_supplicant应用wpa原创 2022-02-26 21:32:10 · 7726 阅读 · 0 评论 -
Linux wifi驱动之三方库 ---wpa_supplicant 移植
1 libopenssl移植wpa_supplicant 依赖于 libopenssl,因此需要先移植 libopenssl,首先获取openssl-1.1.1-stable-SNAP-20190915.tar.gz压缩包,拷贝到Ubuntu系统下并解压,得到openssl-1.1.1-stable-SNAP-20190915文件夹,然后在新建一个名为“libopenssl”的文件夹,用于存放 libopenssl 的编译结果。进入到解压出来的 openssl-1.1.1-stable-SNAP-2019转载 2022-02-26 21:22:07 · 2791 阅读 · 0 评论 -
Linux驱动开发--函数文档查询地址
查询地址https://www.kernel.org/doc/html/原创 2022-02-24 16:03:11 · 471 阅读 · 0 评论 -
imx6ull 非阻塞IO调试问题记录
现象原因wait_queue_head_t r_wait; //定义等待队列头缺乏 对等待队列头初始化解决init_waitqueue_head(&imx6uirq.r_wait); //初始化等待队列头原创 2022-02-19 16:50:29 · 138 阅读 · 0 评论 -
Linux设备驱动---阻塞IO与非阻塞IO驱动
简介阻塞和非阻塞 IO 是 Linux 驱动开发里面很常见的两种设备访问模式,在编写驱动的时候一定要考虑到阻塞和非阻塞。本章我们就来学习一下阻塞和非阻塞 IO,以及如何在驱动程序中处理阻塞与非阻塞,如何在驱动程序使用等待队列和 poll 机制。阻塞IO驱动编写当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起,直到设备资源可以获取为止。交互原理应用程序调用 read 函数从设备中读取数据,当设备不可用或数据未准备好的时候就会进入到休眠态。等原创 2022-02-17 23:24:50 · 123 阅读 · 0 评论 -
Linux驱动编写---键盘input子系统
输入子系统是Linux 字符设备驱动的常见框架之一原创 2022-02-16 22:46:37 · 511 阅读 · 0 评论 -
Linux设备驱动之 --混杂设备驱动
混杂设备驱动是Linux常用的字符驱动模型之一原创 2022-02-16 22:01:17 · 463 阅读 · 0 评论 -
Linux sdk编译之通用makefile编写-------(SDK提供头文件和库)
编写模块如下:#以下是指定编译器路径#CC = /opt/armv6/codesourcery/bin/arm-none-linux-gnueabi-gccCC = /opt/gcc-sigmastar-9.1.0-2020.07-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc#以下是指定编译需要的头文件CFLAGS = -g -Wall -O0 -I/home/user/share/ssd212/project/release/i原创 2022-02-14 14:40:09 · 758 阅读 · 0 评论 -
linux设备驱动之 按键中断编写
信息描述部分#define IMX6UIRQ_CNT 1 /* 设备号个数 */#define IMX6UIRQ_NAME "imx6uirq" /* 名字 */#define KEY0VALUE 0X01 /* KEY0按键值 */#define INVAKEY 0XFF /* 无效的按键值 */#define KEY_NUM 1 /* 按键数量 *//* 中断IO描述结构体 */struct irq_keydesc { int gpio;原创 2022-02-13 22:32:10 · 68 阅读 · 0 评论 -
Linux驱动编写问题---note: previous declaration of ‘irq_exit’ was here
出现问题如下:错误原因自定义名称和系统变量名称重合,需要更改自定义变量名称,即可。解决方法如下:static void __exit imx6ullirq_exit(void){}原创 2022-02-13 20:52:23 · 1544 阅读 · 0 评论 -
Linux 驱动编程之定时器和自旋锁的使用
Linux驱动之自旋锁和定时器的常规使用原创 2022-02-13 18:28:30 · 482 阅读 · 0 评论 -
Linux 驱动编写之error: incompatible type for argument问题
出现以下类似情景问题代码如下:init_timer(timerdev.timer);timerdev.timer.function = timer_function;timerdev.timer.data = (unsigned long)&timerdev;发现是传参错误;加入取地址符即可。原创 2022-02-13 17:48:49 · 4162 阅读 · 0 评论 -
Linux 驱动编写之error: function declaration isn’t a prototype问题
1.问题情况如下所示:2. 解决方法如下:Linux驱动编写函数时,当没有形参时,应传入void类型数据。static int led_init(void){ int ret = 0; return ret; }原创 2022-02-13 16:32:06 · 601 阅读 · 0 评论 -
在Linux中使用vscode编写linux驱动代码自动补全的json配置
需要自动补全得需要设置vscode的全局includePath配置默认的情况下includePath 在 c_cpp_properties.json 中设置,也就是工程目录下的一些头文件设置,如果你是只需要在工程目录下找到这些依赖的话,只需配置c_cpp_properties.json文件即可。(这个文件可以自己在.vscode中创建)例如:{ "configurations": [ { "name": "Linux", "includePath原创 2022-02-13 13:17:19 · 1543 阅读 · 0 评论 -
echo 写设备节点后无限循环调用linux驱动下的write函数
背景使用cat和echo 分别实现查看设备节点内的输出信息和向节点传入内容.现象一直在打印printk内的信息.解决把return 0 改为返回收到用户空间的实际字节数。原创 2022-02-13 12:45:47 · 689 阅读 · 0 评论 -
Linux设备属性节点读写操作----cat 、echo
1. 具体实现代码如下:// drv_attr.c#include <linux/module.h>#include <linux/init.h>#include <linux/platform_device.h>#include <linux/gpio.h>#include <linux/delay.h>#include <linux/regulator/consumer.h>#include <sound/so原创 2022-02-12 20:19:41 · 1699 阅读 · 0 评论 -
linux 、QT和windows 延时函数的使用
应用程序:#include <syswait.h>usleep(n) //n微秒Sleep(n)//n毫秒sleep(n)//n秒驱动程序:#include <linux/delay.h>mdelay(n) //milliseconds 其实现#ifdef notdef#define mdelay(n) ({unsigned long msec=(n); while (msec–) udelay(1000);})#else#define mdelay(n) (原创 2022-01-28 14:21:08 · 3439 阅读 · 0 评论 -
Linux 字符设备驱动之GPIO操作
GPIO字符设备驱动模型是Linux驱动常见驱动模型之一。主要用来对GPIO的输入IO读取和输出IO进行高低电平控制。原创 2022-01-17 23:12:37 · 1439 阅读 · 0 评论 -
Linux 驱动之LCD程序调试
加载自定义的LCD驱动程序的前后,执行“ls /dev/fb*”发现多了一个/dev/fb0这个节点,此节点正是LCD节点,并且发现加载前LCD是黑的,加载后LCD被点亮了~执行“echo sadjason > /dev/tty1”指令发现LCD上显示了“sadjason”字样执行“cat etc/inittab > /dev/tty1”指令发现inittab内容被显示在LCD中来点高级的修改etc/inittab,添加一条“tty1::askfirst:-/bin/sh”,如下:.原创 2022-01-15 23:18:29 · 348 阅读 · 0 评论 -
samba实现ubuntu和windows进行文件共享
1. 安装sambasudo apt-get install samba2.创建需要共享的目录mkdir /home/user/share// 由于Windows下的文件夹需可读可写可执行,需更改权限为777sudo chmod 777 /home/user/share3.配置sambasudo vim /etc/samba/smb.conf[share]path = /home/user/sharepublic = yeswritable = yesvalid users =原创 2022-01-13 15:03:53 · 740 阅读 · 0 评论 -
开源网络多协议文件传输库libcurl使用问题
报错1/usr/bin/ld: 找不到 -lcurl解决方法如下:将指定目录路径中的库文件转移到:/usr/local/lib原创 2022-01-10 16:10:44 · 464 阅读 · 0 评论 -
迅为i.MX6ULL开发板移植Gdb+Gdbserver调试
因为有很多小伙伴是从单片机转过来的,用惯了单片机使用JLINk来调试程序,换到Linux非常不习惯。确实是如此,如果能在Linux上能设置断点,单步调试,查看变量,那就再好不过了。那么接下来将教大家怎么在arm板上调试应用代码的方法。首先,了解下基本的思路:采用这种方式进行远程调试,目标系统必须包括gdbserver程序,宿主机也必须安装gdb程序。一般Linux发行版中都有一个可以运行的gdb,但我们不能直接使用该发行版中的gdb来做远程调试,而要获取gdb的源代码包,针对arm平台做一个简单的配置原创 2022-01-07 13:48:54 · 271 阅读 · 0 评论 -
Windows和Ubuntu文件传输之Fillezilla的使用
1.下载软件下载连接地址为:https://filezilla-project.org/2.ubuntu端配置插件安装sudo apt-get install openssh-server3.Filezilla配置4. 连接并传输文件1.建立连接2. 选择指定文件上传原创 2021-12-31 11:52:18 · 806 阅读 · 0 评论 -
常用Linux命令汇总
1. grep查找含有指定字符串的所有文件在当前目录下的多级目录中对文本进行递归搜索: 查找"text"字符串,可以这样:grep -rn "text" *: 表示当前目录所有文件,也可以是某个文件名-r 是递归查找-n 是显示行号-R 查找所有文件包含子目录-i 忽略大小写在多个文件中查找:grep "match_pattern" file_1 file_2 file_3 ...搜索多个文件并查找匹配文本在哪些文件中:grep -l "text" file1 fi原创 2021-12-29 17:27:18 · 5104 阅读 · 0 评论 -
使用MfgTool工具进行系统烧写
简介MfgTool 工具是 NXP 提供的专门用于给 I.MX 系列 CPU 烧写系统的软件,可以在 NXP 官网下载到此软件在 Windows 下使用,对于我们来说太友好了。工具准备目前使用的是从正点原子拿来的Mfgtool工具,将此压缩包进行解压,解压完成以后会出现一个名为 L4.1.15_2.0.0-ga_mfg-tools 的文件夹,进入此文件夹,此文件夹的内容如图所示:从图可以看出,有两个.txt 文件和两个.gz 压缩包。 .txt 文档就不去看了,重点是这两个.gz 压缩包,这两原创 2021-12-28 11:21:14 · 2741 阅读 · 0 评论 -
Linux使用busybox构建文件系统
准备工作1.打开busybox官网从官网地址下载busybox源码,官网地址为: https://busybox.net/2.选择版本下载3.解压缩使用如下命令创建名为 rootfs 的子目录:mkdir rootfs创建好的 rootfs 子目录就用来存放我们的根文件系统了。将 busybox-1.29.0.tar.bz2 发送到 Ubuntu 中,存放位置大家随便选择。然后使用如下命令将其解压:tar -vxjf busybox-1.29.0.tar.bz2解压完成以后进入原创 2021-12-27 16:36:02 · 1629 阅读 · 0 评论 -
Linux 内核源码工程目录分析
准备在分析 Linux 之前一定要先在 Ubuntu 中编译一下 Linux,因为编译过程会生成一些文件,而生成的这些恰恰是分析Linux 不可或缺的文件。编译完成以后使用 tar 压缩命令对其进行压缩并使用 Filezilla 软件将压缩后的 uboot 源码拷贝到 Windows 下。目录分析内核中重要的文件夹或文件的含义如下所示:文件夹arch 架构相关目录。block 块设备相关目录。crypto 加密相关目录。Documentation 文档相关目录。drivers 驱动相关目原创 2021-12-26 17:30:43 · 428 阅读 · 0 评论 -
Linux nfs环境搭建
搭建NFS(网络文件系统),用于开发板与PC Linux之间文件传输,便于开发调试。一、网络准备由于NFS是网络文件系统,是使用网络进行通讯的,最终要实现客户端能访问服务端,所以必须先确保两者的网络是互通的。1、确保PC Linux与开发板的网络是在同一个网段内如PC Linux与开发板都连接在同一个路由器或热点。例:将PC Linux与开发板连接到同一个WiFi,分别查看两者的IP。PC Linux IP地址:开发板IP地址:所以可知PC Linux与开发板是连接到同一个WiFi,都原创 2021-12-25 10:38:36 · 630 阅读 · 0 评论 -
imx6ull linux 内核编译
简介imx6ull是NXP一款基于ARM Cortex A7内核的低功耗高性能且低成本的的一款处理器。NXP 会从 https://www.kernel.org 下载某个版本的 Linux 内核,然后将其移植到自己的 CPU上,测试成功以后就会将其开放给 NXP 的 CPU 开发者。开发者下载 NXP 提供的 Linux 内核,然后将其移植到自己的产品上。编译前准备编译内核之前需要先在 ubuntu 上安装 lzop 库,否则内核编译会失败!命令如下:sudo apt-get install原创 2021-12-25 09:43:27 · 1878 阅读 · 0 评论