0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

大胆11 2023-07-04 19:17 次阅读

起因

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

我们的项目屏幕的初始化是在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;
}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10991

    浏览量

    206736
  • Linux系统
    +关注

    关注

    4

    文章

    567

    浏览量

    26914
  • Uboot
    +关注

    关注

    4

    文章

    123

    浏览量

    27873
  • Linux驱动
    +关注

    关注

    0

    文章

    43

    浏览量

    9881
  • 掉电记忆
    +关注

    关注

    0

    文章

    3

    浏览量

    2057
收藏 人收藏

    评论

    相关推荐

    【4412嵌入式开发板学习笔记】认识uboot

    uboot实现刷机必须能驱动iNand,譬如uboot要在刷机时LCD上显示进度条就必须能驱动LCD,譬如
    发表于 06-01 15:00

    搞嵌入式的,为啥要有uboot

    一些任务必须让这些硬件工作。譬如uboot实现刷机必须能驱动iNand,譬如uboot要在刷机时LCD上显示进度条就必须能驱动LCD,譬如
    发表于 10-25 17:19

    请问linuxuboot怎么实现u***下载?

    linuxuboot怎么实现u***下载,u***下载命令有哪些?编译UBOOT需要修改哪些配置?
    发表于 10-31 05:20

    STC单片机的掉电记忆功能如何去掉?

    我看了例程,没怎么看懂,谁做过掉电记忆功能这块啊
    发表于 05-08 02:20

    zynq arm移植ubootLinux,使用setenv设置环境变量,显示无这个指令

    最近在学习zynq的Linux开发,在移植ubootLinux内核设置环境变量时报的错误,没有这个指令,网上搜了很多都没有解决办法,有没有人知道啊,求教。
    发表于 08-29 22:29

    uboot lds 文件说明

    linuxuboot lds 文件说明
    发表于 11-02 11:02 0次下载

    HL配套C实验例程密码锁(掉电记忆密码)

    HL配套C实验例程密码锁(掉电记忆密码),配合开发板学习效果更好。
    发表于 04-11 17:04 7次下载

    Linux运行期间升级Linux系 统Uboot+kernel+Rootfs

    Linux运行期间升级Linux系 统Uboot+kernel+Rootfs
    发表于 10-30 08:43 5次下载
    在<b class='flag-5'>Linux</b>运行期间升级<b class='flag-5'>Linux</b>系 统<b class='flag-5'>Uboot</b>+kernel+Rootfs

    UBOOT命令总结

    分享到: 很好的UBOOT命令总结,起步时就是看的这篇东西,熟悉了以后就用?看自带帮助就行:) Printenv 打印环境变量Uboot》 printenv baudrate=115200
    发表于 11-08 10:24 18次下载

    你了解Embeded linux中的Uboot参数与内核?

    uboot环境变量:bootdelay、bootcmd、bootargs等参数,键与值用0x3d,即“=”隔开,两参数之间用0x00,即\0隔开
    发表于 05-15 14:16 1580次阅读
    你了解Embeded <b class='flag-5'>linux</b>中的<b class='flag-5'>Uboot</b>参数与内核?

    linux内核中percpu变量实现

    不会相互影响,所以也就不会有各种多线程问题。 正确的使用thread local变量,能极大的简化多线程开发。所以不管是c/c++/rust,还是java/c#等,都内置了对thread local变量的支持。 但你知道吗,不仅是在编程语言中,在
    的头像 发表于 01-04 13:39 1683次阅读

    嵌入式Linux环境变量分区制作

    嵌入式Linux环境变量分区制作嵌入式环境变量分区准备一个存放环境变量的文本文件制作环境变量的工具制作环境
    发表于 11-02 10:35 8次下载
    嵌入式<b class='flag-5'>Linux</b>环境<b class='flag-5'>变量</b>分区制作

    嵌入式linux学习 Day1 uboot基础

    嵌入式linux学习 Day1 uboot基础
    发表于 12-05 20:51 7次下载
    嵌入式<b class='flag-5'>linux</b>学习 Day1 <b class='flag-5'>uboot</b>基础

    通过env命令来查看Linux系统当前的环境变量

    Linux 系统中,环境变量是用来定义系统运行环境的一些参数,常见的环境变量有HOME,SHELL,PATH等等。
    的头像 发表于 01-18 16:10 2004次阅读

    记录一下uboot编译的问题

    前几天编译uboot时遇到一些问题,先记录一下,linux嵌入式开发还是蛮意思的,要想玩的溜,就必须掌握最基本的uboot、kernel移植、适配、裁剪。
    的头像 发表于 07-21 16:05 529次阅读
    记录一下<b class='flag-5'>uboot</b>编译的问题