起因
今天項目有個新需求就是讓屏幕亮度在上電以后保持上次最后設(shè)置的值
我們的項目屏幕的初始化是在kernel里而不是uboot,kernel的驅(qū)動的加載是在根文件系統(tǒng)之前,所以我們無法從配置文件中讀取亮度。
首先大家能想到的就是讓讓他存儲到內(nèi)核能讀取到的rom中去,到底哪里合適的,方便讀寫
經(jīng)過查資料,發(fā)現(xiàn)uboot的環(huán)境變量的更改是直接保存到rom中,區(qū)別于kernel的環(huán)境變量保存到rom中。而且我們知道kernel啟動后會讀取uboot傳入的bootargs,那說明kernel就有對應(yīng)的函數(shù)去讀。
接下來就說明下接口的調(diào)用
使用
首先是對bootargs的一些操作
我是在bootargs添加一個backlight,他的屬性值等于另外一個參數(shù),這樣做的話就可以減少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}
在驅(qū)動中使用的函數(shù)是__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)
第一個參數(shù)是bootargs的屬性,第二個參數(shù)是要把屬性值作為參數(shù)的函數(shù)的指針,說白了就是函數(shù)
函數(shù)的要求是 static int __init?類型,下面是我使用的時候的一個demo
kstrtoint是用于將讀取到的值從字符數(shù)字轉(zhuǎn)換成數(shù)值
kstrtoint和標(biāo)準(zhǔn)的c庫有些去別,請注意看!?。?/p>
第一個參數(shù)是要被轉(zhuǎn)化的字符串,第二個參數(shù)是保存的進制,第三個參數(shù)才是int類型的數(shù)據(jù)的地址
static int __init get_env_backlight(char * backlight)
{
kstrtoint(backlight, 10, &backlight_value);
// printk("%s:num:%dn",__FUNCTION__,backlight_value);
return 0;
}
-
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209498 -
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
593瀏覽量
27397 -
Uboot
+關(guān)注
關(guān)注
4文章
125瀏覽量
28231 -
Linux驅(qū)動
+關(guān)注
關(guān)注
0文章
43瀏覽量
9965 -
掉電記憶
+關(guān)注
關(guān)注
0文章
3瀏覽量
2084
發(fā)布評論請先 登錄
相關(guān)推薦
評論