Ubuntu18.04添加开机加载校准数据服务[2/2]--传感器校准数据加载实战

平台:展锐T760 系统:Ubuntu18.04 接近传感器同处理器i2c连接
背景:在Ubuntu18.04开机时刻将存储在prodnv分区中校准文件加载到驱动对应的节点,满足传感器功能需求

1.编写Unit配置文件

路径:/rootfs/lib/systemd/system/sensor_calidata_init.service
内容:

[Unit]
Description=sensor cali data init

[Service]
ExecStart=/usr/bin/sensor_calidata_init.sh
Type=oneshot

[Install]
WantedBy=multi-user.target

以上关键字意义在上篇博客中已经说明,这里主要说明开机加载的脚本文件

2.添加一个链接文件

在etc/systemd/system/multi-user.target.wants/路径下执行:
ln -s sensor_calidata_init.service /lib/systemd/system/sensor_calidata_init.service
不链接,开机不会去执行该服务。添加链接服务:
将链接后的文件保存到根文件系统/etc/systemd/system/multi-user.target.wants/路径下。
路径:/etc/systemd/system/multi-user.target.wants/sensor_calidata_init.service
内容:

	/lib/systemd/system/sensor_calidata_init.service

添加链接文件等同于:systemctl enable sensor_calidata_init.service

3.开机执行的脚本文件

说明:读取/etc/productinfo/ps_cali_data中依次将值写入节点中。
内容:

#!/bin/bash

LOG_FILE_PATH="/var/log/sensor_cali_data_init.txt"
sudo sh -c "echo '' > $LOG_FILE_PATH"
sudo chmod 666 $LOG_FILE_PATH

num=1

IIO_DEVICE="/sys/bus/iio/devices/iio:device"
SENSOR_CALI_FILE="/etc/productinfo/ps_cali_data"
DEVICE_ID=-1

logger()
{
	local TIME_NOW=`date`
	echo "[sensor cali data][$TIME_NOW]$*" >> $LOG_FILE_PATH
}

# 检查校准文件或驱动节点是否存在
function check_existence() {
  local path="$1"

  if [ -e "$path" ]; then
	return 0  # 存在
  else
	return 1  # 不存在
  fi
}

function process_calibration_data() {
  while IFS='=' read -r key value; do
	case "$key" in
	  unblock)
		echo "$value" > "$PS_CALI_UNLOCK"
		;;
	  far)
		echo "$value" > "$PS_CALI_FAR"
		;;
	  near)
		echo "$value" > "$PS_CALI_NEAR"
		;;
	esac
  done < "$SENSOR_CALI_FILE"
  logger "____sensor cali read data success ...."
}

logger "____start sensor cali data init ...."

while [[ "num" -eq 1 ]];
do
  sleep 2

  # 查询接近传感器设备编号
  for (( i=0; i<3; i++ ))
  do
	sname=`cat $IIO_DEVICE$i/"name"`
	if [ "$sname" == "ltr569" ];then
	  DEVICE_ID=$i
	  logger "____read proximity iio:device number $i ...."
	  break;
	fi
  done

  if [ $DEVICE_ID == -1 ];then
	logger "____read proximity iio:device number fail ...."
	num=0
	continue
  fi

  PS_CALI_UNLOCK="$IIO_DEVICE$DEVICE_ID/ps_cali_unblock"
  PS_CALI_FAR="$IIO_DEVICE$DEVICE_ID/ps_cali_far"
  PS_CALI_NEAR="$IIO_DEVICE$DEVICE_ID/ps_cali_near"

  logger "____start sensor cali data enter ...."
  # 检查所有文件节点是否存在
  if check_existence "$SENSOR_CALI_FILE" && check_existence "$PS_CALI_UNLOCK" \
	&& check_existence "$PS_CALI_FAR" && check_existence "$PS_CALI_NEAR"; then
	# 向传感器节点写入校准数据
	process_calibration_data
  else
	logger "____sensor cali data file or sensor cali node not exist ...."
  fi

  num=0
done
logger "____start sensor cali data end ...."

4.开机调试需要经常用到的指令

$ sudo systemctl start apache.service
# 立即停止一个服务
$ sudo systemctl stop apache.service
# 重启一个服务
$ sudo systemctl restart apache.service
# 杀死一个服务的所有子进程
$ sudo systemctl kill apache.service
# 重新加载一个服务的配置文件
$ sudo systemctl reload apache.service
# 重载所有修改过的配置文件
$ sudo systemctl daemon-reload
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值