0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

linux驅(qū)動通過uboot的變量實現(xiàn)掉電記憶

大膽11 ? 2023-07-04 19:17 ? 次閱讀

起因

今天項目有個新需求就是讓屏幕亮度在上電以后保持上次最后設(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;
}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 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
收藏 人收藏

    評論

    相關(guān)推薦

    linux驅(qū)動開發(fā)_文件系統(tǒng)本地掛載

    介紹Linux開發(fā)根文件系統(tǒng)掛載、NFS文件系統(tǒng)配置,UBOOT環(huán)境變量配置,完成文件系統(tǒng)啟動。
    的頭像 發(fā)表于 09-17 15:52 ?1481次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>驅(qū)動</b>開發(fā)_文件系統(tǒng)本地掛載

    請問linuxuboot怎么實現(xiàn)u***下載?

    linuxuboot怎么實現(xiàn)u***下載,u***下載命令有哪些?編譯UBOOT需要修改哪些配置?
    發(fā)表于 10-31 05:20

    STC單片機的掉電記憶功能如何去掉?

    我看了例程,沒怎么看懂,誰做過掉電記憶功能這塊啊
    發(fā)表于 05-08 02:20

    zynq arm移植ubootLinux,使用setenv設(shè)置環(huán)境變量,顯示無這個指令

    最近在學(xué)習(xí)zynq的Linux開發(fā),在移植ubootLinux內(nèi)核設(shè)置環(huán)境變量時報的錯誤,沒有這個指令,網(wǎng)上搜了很多都沒有解決辦法,有沒有人知道啊,求教。
    發(fā)表于 08-29 22:29

    uboot lds 文件說明

    linuxuboot lds 文件說明
    發(fā)表于 11-02 11:02 ?0次下載

    基于HL開發(fā)板的密碼鎖掉電記憶密碼

    掉電記憶功能是:數(shù)碼設(shè)備突然非正常關(guān)機后,再開機時數(shù)碼設(shè)備可以從關(guān)機前正在運行的程序處接著運行。不用從頭開始。
    發(fā)表于 09-01 14:06 ?2次下載
    基于HL開發(fā)板的密碼鎖<b class='flag-5'>掉電</b><b class='flag-5'>記憶</b>密碼

    Linux運行期間升級Linux系 統(tǒng)Uboot+kernel+Rootfs

    Linux運行期間升級Linux系 統(tǒng)Uboot+kernel+Rootfs
    發(fā)表于 10-30 08:43 ?5次下載
    在<b class='flag-5'>Linux</b>運行期間升級<b class='flag-5'>Linux</b>系 統(tǒng)<b class='flag-5'>Uboot</b>+kernel+Rootfs

    UBOOT命令總結(jié)

    分享到: 很好的UBOOT命令總結(jié),起步時就是看的這篇東西,熟悉了以后就用?看自帶幫助就行:) Printenv 打印環(huán)境變量。 Uboot》 printenv baudrate=115200
    發(fā)表于 11-08 10:24 ?18次下載

    基于ARM9和NANDFlash對ubootLinux內(nèi)核進行修改

    本文針對嵌入式Linux操作系統(tǒng)提出了一種新的更新機制,并且基于ARM9微處理器和NANDFlash存儲器,對ubootLinux內(nèi)核進行修改,實現(xiàn)了對嵌入式
    發(fā)表于 04-07 11:00 ?2799次閱讀
    基于ARM9和NANDFlash對<b class='flag-5'>uboot</b>和<b class='flag-5'>Linux</b>內(nèi)核進行修改

    linux內(nèi)核中percpu變量實現(xiàn)

    不會相互影響,所以也就不會有各種多線程問題。 正確的使用thread local變量,能極大的簡化多線程開發(fā)。所以不管是c/c++/rust,還是java/c#等,都內(nèi)置了對thread local變量的支持。 但你知道嗎,不僅是在編程語言中,在
    的頭像 發(fā)表于 01-04 13:39 ?1964次閱讀

    嵌入式Linux環(huán)境變量分區(qū)制作

    嵌入式Linux環(huán)境變量分區(qū)制作嵌入式環(huán)境變量分區(qū)準(zhǔn)備一個存放環(huán)境變量的文本文件制作環(huán)境變量的工具制作環(huán)境
    發(fā)表于 11-02 10:35 ?8次下載
    嵌入式<b class='flag-5'>Linux</b>環(huán)境<b class='flag-5'>變量</b>分區(qū)制作

    嵌入式linux學(xué)習(xí) Day1 uboot基礎(chǔ)

    嵌入式linux學(xué)習(xí) Day1 uboot基礎(chǔ)
    發(fā)表于 12-05 20:51 ?7次下載
    嵌入式<b class='flag-5'>linux</b>學(xué)習(xí) Day1 <b class='flag-5'>uboot</b>基礎(chǔ)

    LINUX環(huán)境變量總結(jié)

    Linux是一個多用戶的操作系統(tǒng)。多用戶意味著每個用戶登錄系統(tǒng)后,都有自己專用的運行環(huán)境。而這個環(huán)境是由一組變量所定義,這組變量被稱為環(huán)境變量。用戶可以對自己的環(huán)境
    發(fā)表于 01-29 10:55 ?441次閱讀

    基于51單片機的密碼鎖(掉電記憶密碼)例程源代碼

    基于51單片機的密碼鎖(掉電記憶密碼)例程源代碼
    發(fā)表于 05-16 11:13 ?25次下載

    Linux環(huán)境變量配置方法

    Linux上環(huán)境變量配置分為設(shè)置永久變量和臨時變量兩種。環(huán)境變量設(shè)置方法同時要考慮環(huán)境Shell類型,不同類型的SHELL設(shè)置臨時
    的頭像 發(fā)表于 10-23 13:39 ?169次閱讀