linux获取cpu温度控制风扇频率

思路:底层驱动端创建线程不通过上层控制获取cpu温度模拟pwm控制风扇频率

主要函数:

kthread_run();线程创建函数

filp_open();底层用于打开文件

get_fs();取得当前的地址访问限制值

set_fs();设置当前的地址访问限制值,其宏值有两个KERNEL_DS设置为内核空间,USER_DS设置为用户空间

vfs_read();底层用于读取底层文件

filp_close();关闭文件



#define OPEN_FILE_NAME "/sys/devices/virtual/thermal/thermal_zone4/temp"
static int thread_func(void *data)
{

	unsigned char buf[12];
	unsigned char temp[2];
	int wendu;
	int ret,i=0;
	int count=0;
	
	struct file *fd;
	mm_segment_t fs;
	loff_t pos; 
	
	printk("fan_pwm:proc start \n");
	while(1)
	{
        。。。
        //风扇频率只列出了其中一个

		gpio_set_value(fan_devp->pin_no,0);
		msleep(4);
		gpio_set_value(fan_devp->pin_no,1);
		msleep(1);
           
        。。。
        
        //读取文件步骤
		fd = filp_open(OPEN_FILE_NAME, O_RDONLY, 0);
		fs = get_fs();
		set_fs(KERNEL_DS);
		pos = 0;temp[0] = 0;temp[1] = 0;
		ret = vfs_read(fd, temp, 2*sizeof(char), &pos);
		filp_close(fd,NULL);
		set_fs(fs);

        。。。	

	}//while(1)
	return 0;
}


static int myfan_probe(struct platform_device *dev)
{
	
	。。。

	kthread_run(thread_func, NULL,"fan_pwm");
	return 0;
}



cpu获取方法不唯一,上述文件代码系统存放温度的文件是以字符形式存放的,例如当前唯独为35,存放方式为0x33 0x35占用两个字节

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

Amrzs_hp

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值