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占用两个字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值