网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

linux驱动通过uboot的变量实现掉电记忆

时间:2023-07-04 19:17

人气:

作者:admin

标签:   通过  驱动  Linux    Uboot 

导读:起因 今天项目有个新需求就是让屏幕亮度在上电以后保持上次最后设置的值 我们的项目屏幕的初始化是在kernel里而不是uboot,kernel的驱动的加载是在根文件系统之前,所以我们无法从配...

起因

今天项目有个新需求就是让屏幕亮度在上电以后保持上次最后设置的值

我们的项目屏幕的初始化是在kernel里而不是uboot,kernel的驱动的加载是在根文件系统之前,所以我们无法从配置文件中读取亮度。

首先大家能想到的就是让让他存储到内核能读取到的rom中去,到底哪里合适的,方便读写

经过查资料,发现uboot的环境变量的更改是直接保存到rom中,区别于kernel的环境变量保存到rom中。而且我们知道kernel启动后会读取uboot传入的bootargs,那说明kernel就有对应的函数去读。

接下来就说明下接口的调用

使用

首先是对bootargs的一些操作

我是在bootargs添加一个backlight,他的属性值等于另外一个参数,这样做的话就可以减少bootargs的变动

backlight=20
#set kernel cmdline if boot.img or recovery.img has no cmdline we will use this
setargs_nand=setenv bootargs console=${console} root=${nand_root} rootwait init=${init} rdinit=${rdinit} loglevel=${loglevel}  earlyprintk=${earlyprintk} initcall_debug=${initcall_debug}  loglevel=${loglevel} partitions=${partitions} cma=${cma} gpt=1 backlight=${backlight}
setargs_mmc=setenv bootargs console=${console} root=${mmc_root} rootwait init=${init} rdinit=${rdinit} loglevel=${loglevel} earlyprintk=${earlyprintk} initcall_debug=${initcall_debug} loglevel=${loglevel} partitions=${partitions} cma=${cma} gpt=1 backlight=${backlight}

在驱动中使用的函数是__setup(str, fn)​

__setup宏在定义如下:

/*
 * Only for really core code.  See moduleparam.h for the normal way.
 *
 * Force the alignment so the compiler doesn't space elements of the
 * obs_kernel_param "array" too far apart in .init.setup.
 */
#define __setup_param(str, unique_id, fn, early)			
	static const char __setup_str_##unique_id[] __initconst		
		__aligned(1) = str; 					
	static struct obs_kernel_param __setup_##unique_id		
		__used __section(.init.setup)				
		__attribute__((aligned((sizeof(long)))))		
		= { __setup_str_##unique_id, fn, early }

#define __setup(str, fn)						
	__setup_param(str, fn, fn, 0)

第一个参数是bootargs的属性,第二个参数是要把属性值作为参数的函数的指针,说白了就是函数

函数的要求是 static int __init​类型,下面是我使用的时候的一个demo

kstrtoint是用于将读取到的值从字符数字转换成数值

kstrtoint和标准的c库有些去别,请注意看!!!

第一个参数是要被转化的字符串,第二个参数是保存的进制,第三个参数才是int类型的数据的地址

static int __init get_env_backlight(char * backlight)
{

	kstrtoint(backlight, 10, &backlight_value);
	// printk("%s:num:%dn",__FUNCTION__,backlight_value);
	return 0;
}

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信