EXPERIMENT / 配套代码

README.md

← 返回文章
# CT1820B 教程配套代码

适用:BA4K / Hi3516CV610,Linux 5.10.221 厂商内核,独立供电。
驱动和 Temperature.cpp、Temperature.h 为项目 2026-10-12 源码快照。
read_temperature.cpp 与 build-module.sh 为教程补充。
不包含厂商 SDK、工具链、内核、板级完整 DTS、固件或数据手册。

## 构建用户态示例

在本目录执行,按本机位置设置工具链前缀:

```sh
export CROSS_COMPILE=/absolute/path/to/arm-linux-musleabi-
"${CROSS_COMPILE}g++" -std=c++17 -Wall -Wextra -Werror \
    -DCONFIG_SENSOR_CT1820B -I. Temperature.cpp read_temperature.cpp \
    -o read_temperature
```

将 read_temperature 复制到具有匹配 musl 运行库的目标板,加载驱动并等待发现设备后执行:

```sh
./read_temperature
```

必须恰好存在一个 /sys/bus/w1/devices/28-*/temperature。失败输出负 errno,退出码 1。
主机可以使用 g++ 编译做语法检查,但没有真实节点时不能验证硬件测温。

## 构建内核模块

KERNEL_DIR 必须是完成构建且与板端运行内核匹配的源码树,含 .config、生成头和 Module.symvers。
内核需启用 CONFIG_W1=m、CONFIG_W1_MASTER_GPIO=m,并关闭 CONFIG_W1_SLAVE_THERM。

```sh
export KERNEL_DIR=/absolute/path/to/built/linux
export CROSS_COMPILE=/absolute/path/to/arm-linux-musleabi-
bash build-module.sh
```

脚本先执行内核 modules 构建以生成 W1 导出符号,再编译 ct1820b.ko。
wire.ko 与 w1-gpio.ko 从同一内核的 drivers/w1/ 与 drivers/w1/masters/ 获取。
完整项目仍优先使用项目根目录下 bash SDK/Build.sh l 和 bash SDK/Build.sh temperature。

ct1820b-board.dtsi 只展示本板温度相关配置;合入已有 DTS 时避免重复节点和标签。
其他板卡必须重新确认 GPIO、地址单元和 pinmux 寄存器。

## 板端加载

确认内核、设备树已更新且未加载旧模块后,在三个模块所在目录执行:

```sh
insmod wire.ko
insmod ct1820b.ko
insmod w1-gpio.ko
ls /sys/bus/w1/devices/
cat /sys/bus/w1/devices/28-*/temperature
```

更新前停止读取者,依次卸载 w1_gpio、ct1820b、wire。wire 若有其他使用者,不应强制卸载。
不使用 insmod -f,不让 w1_therm 同时占用 0x28 家族。

## 验证范围

历史记录:2026-10-10 板端 30 次读取成功,26625~26687 毫摄氏度;不是精度校准。
应用接口原项目记录了主机测试和交叉编译通过,应用接口上板测试尚未完成。
本次教程配套代码的检查结果见 verification.md。