imx6ul linux读取DS18B20温度

2024-05-14 22:32

本文主要是介绍imx6ul linux读取DS18B20温度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

imx6ul linux读取DS18B20温度

首先尝试加载模块

root@imx6ulevk:~# modprobe w1-gpio
modprobe: FATAL: Module w1-gpio not found in directory /lib/modules/4.1.15-2.1.0+g30278ab

imx6ul 内核默认没有开启W1的内核选项所以没有这个模块。

1.驱动源码

源码目录:~/freescale/linux-imx/drivers/w1
w1-gpio.c是单总线的IO操作方法,用于模拟单总线时序;
w1_therm.c是DS18B20的寄存器操作方法,和IO时序无关;
可以将驱动结构看成是将“w1_therm”挂接到“w1-gpio”总线上,由w1-gpio控制w1_therm工作。

2.编译模块

开启内核选项

wujun@wj-vBox:~/freescale/linux-imx$ make menuconfig
CONFIG_W1=m
CONFIG_W1_CON=y
CONFIG_W1_MASTER_GPIO=m
CONFIG_W1_SLAVE_THERM=m

编译

wujun@wj-vBox:~/freescale/linux-imx$ make modules
CC [M] drivers/w1/w1.o
CC [M] drivers/w1/w1_int.o
CC [M] drivers/w1/w1_family.o
CC [M] drivers/w1/w1_netlink.o
CC [M] drivers/w1/w1_io.o
LD [M] drivers/w1/wire.o
CC [M] drivers/w1/masters/w1-gpio.o
CC [M] drivers/w1/slaves/w1_therm.o
Building modules, stage 2.
MODPOST 70 modules
CC drivers/w1/masters/w1-gpio.mod.o
LD [M] drivers/w1/masters/w1-gpio.ko
CC drivers/w1/slaves/w1_therm.mod.o
LD [M] drivers/w1/slaves/w1_therm.ko
CC drivers/w1/wire.mod.o
LD [M] drivers/w1/wire.ko

拷贝出内核模块到tftp共享目录

wujun@wj-vBox:~/freescale/linux-imx$ cp drivers/w1/wire.ko ~/share-doc/
wujun@wj-vBox:~/freescale/linux-imx$ cp drivers/w1/masters/w1-gpio.ko ~/share-doc/
wujun@wj-vBox:~/freescale/linux-imx$ cp drivers/w1/slaves/w1_therm.ko ~/share-doc/

把下面三个内核模块放在EVB /lib/modules/4.1.15-2.1.0+g30278ab/kernel路径下.
./drivers/w1/wire.ko
./drivers/w1/masters/w1-gpio.ko
.drivers/w1/slaves/w1_therm.ko

这种情况下还是不能用modprobe加载的,只能用insmod手动加载。因为没有生成依赖文件。
可以用make modules_install命令,这个命令会把模块都放到/lib/modules下,需要超级用户权限。
查看生成的模块依赖文件的内容。
在虚拟机/lib/modules/4.1.15-00158-g30278ab/modules.dep
61:kernel/drivers/w1/masters/w1-gpio.ko: kernel/drivers/w1/wire.ko
62:kernel/drivers/w1/slaves/w1_therm.ko: kernel/drivers/w1/wire.ko
63:kernel/drivers/w1/wire.ko:

可以看到w1-gpio.ko和w1_therm.ko依赖wire.ko.
wire.ko不依赖其他的模块.

3.加载模块

我这边暂时使用手动加载的方式,不更新模块了。

root@imx6ulevk:~# insmod /lib/modules/4.1.15-2.1.0+g30278ab/kernel/drivers/w1/wire.ko
Driver for 1-wire Dallas network protocol.
root@imx6ulevk:~# insmod /lib/modules/4.1.15-2.1.0+g30278ab/kernel/drivers/w1/masters/w1-gpio.ko
root@imx6ulevk:~# lsmod
Module Size Used by
w1_gpio 3113 0
wire 28158 1 w1_gpio
root@imx6ulevk:/sys/bus/w1# ls
devices drivers drivers_autoprobe drivers_probe uevent

device下没有文件。应该是DTS里没有定义IO的原因。

4.根据驱动修改dts

查找驱动要查找的节点名称

wujun@wj-vBox:~/freescale/linux-imx/drivers/w1$ grep -rn “compatible” .
./masters/w1-gpio.c:72: { .compatible = “w1-gpio” },

新增文件arch/arm/boot/dts/imx6ul-14×14-evk-w1.dts
#include “imx6ul-14×14-evk.dts”
/ {
onewire@0 {
compatible = “w1-gpio”;
gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;
linux,open-drain;
pinctrl-names = “default”;
pinctrl-0 = <&pinctrl_onewire>;
status = “okay”;
};
};

修改文件arch/arm/boot/dts/imx6ul-14×14-evk.dts

pinctrl_onewire: onewire@0 {
fsl,pins = <
MX6UL_PAD_GPIO1_IO00__GPIO1_IO00 0x4001b8b0

;
};

重新编译内核,拷贝出编译结果,实际上可以只编译dtbs.

wujun@wj-vBox:~/freescale/linux-imx$ cp arch/arm/boot/zImage ~/share-doc/
wujun@wj-vBox:~/freescale/linux-imx$ cp arch/arm/boot/dts/imx6ul-14×14-evk-w1.dtb ~/share-doc/

5.uboot下载内核

tftp 0x81000000 zImage;tftp 0x81A00000 imx6ul-14×14-evk-w1.dtb;bootz 0x81000000 – 0x81A00000;

上传模块到文件系统
root@imx6ulevk:/lib/modules/4.1.15-2.1.0+g30278ab/kernel/drivers/w1# ls
masters slaves wire.ko

6.加载模块


root@imx6ulevk:~# insmod /lib/modules/4.1.15-2.1.0+g30278ab/kernel/drivers/w1/wire.ko
Driver for 1-wire Dallas network protocol.
root@imx6ulevk:~# insmod /lib/modules/4.1.15-2.1.0+g30278ab/kernel/drivers/w1/masters/w1-gpio.ko
root@imx6ulevk:~# insmod /lib/modules/4.1.15-2.1.0+g30278ab/kernel/drivers/w1/slaves/w1_therm.ko
root@imx6ulevk:~# lsmod
Module Size Used by
w1_therm 3493 0
w1_gpio 3113 0
wire 28158 2 w1_gpio,w1_therm

查看内核log
[ 42.363031] Driver for 1-wire Dallas network protocol.
[ 49.544609] w1_master_driver w1_bus_master1: Family 28 for 28.04170349c8ff.20 is not registered.
[ 49.621696] ci_hdrc ci_hdrc.0: there is a vbus glitch
查看设备
root@imx6ulevk:~# ls -l /sys/bus/w1/devices/
total 0
lrwxrwxrwx 1 root root 0 Jan 1 00:09 w1_bus_master1 -> ../../../devices/w1_bus_master1

接入DS18B20后可以看到有个新的设备
root@imx6ulevk:~# ls /sys/bus/w1/devices/
28-04170349c8ff w1_bus_master1

7.查看温度


root@imx6ulevk:~# cat /sys/bus/w1/devices/28-04170349c8ff/w1_slave
bf 01 4b 46 7f ff 0c 10 61 : crc=61 YES
bf 01 4b 46 7f ff 0c 10 61 t=27937

8.用脚本读取温度

root@imx6ulevk:~/rd_temp# ./rd_temp.sh
e1 01 4b 46 7f ff 0c 10 c5 ; 01-01-1970-00:15:15 ; 30.062
e1 01 4b 46 7f ff 0c 10 c5 ; 01-01-1970-00:15:18 ; 30.062
e0 01 4b 46 7f ff 0c 10 86 ; 01-01-1970-00:15:22 ; 30.000
e0 01 4b 46 7f ff 0c 10 86 ; 01-01-1970-00:15:26 ; 30.000
df 01 4b 46 7f ff 0c 10 80 ; 01-01-1970-00:15:30 ; 29.937
df 01 4b 46 7f ff 0c 10 80 ; 01-01-1970-00:15:34 ; 29.937
de 01 4b 46 7f ff 0c 10 c3 ; 01-01-1970-00:15:37 ; 29.937
de 01 4b 46 7f ff 0c 10 c3 ; 01-01-1970-00:15:41 ; 29.875

这篇关于imx6ul linux读取DS18B20温度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990038

相关文章

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window