有誰知道從用戶空間安裝U-boot版本的方法嗎?有fw_printenv命令可以訪問U-boot的環境變量,但不提供版本。從用戶空間獲取U-boot的版本
回答
沒有定義的方式來做到這一點。一旦Linux啓動,u-boot不再運行,並且它的RAM被回收供Linux使用。 Linux甚至不知道u-boot。它也不必由u-boot啓動。
如果你真的想這樣做,唯一的方法就是將u-boot版本添加到內核的命令行中,編寫代碼來掃描u-boot映像在flash中的版本,厲害。
在我的設備UBOOT自動創建包含其版本「版本」環境變量:
U-Boot > printenv
baudrate=115200
ethact=FEC ETHERNET
ethaddr=24-db-ad-00-00-08
bootdelay=3
bootcmd=bootm fc080000 - fc060000
bootargs=console=ttyCPM0,115200n8 rdinit=/sbin/init
stdin=serial
stdout=serial
stderr=serial
ver=U-Boot 2009.03-svn9684 (Mar 08 2010 - 17:08:32)
Environment size: 253/131068 bytes
U-Boot >
我不使用fw_printenv,但我想,這個變量被傳承下去爲好。也許你的系統中已經有類似的東西了?
UPDATE(2012/5/23): 我添加fw_printenv到我的Linux映像,可以確認的是我看到「版本」變量:
[[email protected] /]# fw_printenv
baudrate=115200
ethact=FEC ETHERNET
ethaddr=24-db-ad-00-00-08
stdin=serial
stdout=serial
stderr=serial
ver=U-Boot 2009.03-svn9684 (Mar 11 2010 - 09:43:08)
bootcmd=bootm fc080000 - fc060000
bootdelay=3
bootargs=console=ttyCPM0,115200n8 rdinit=/sbin/init panic=10 mem=32m
[[email protected] /]#
這個「工作正常」,直到你更新你的U-Boot。在那一刻之後,除非你改變了一些環境變量並且從U-Boot提示符中說'保存',否則你將以這種方式得到你的舊版U-Boot的版本。 這是因爲fw_printenv提供對存儲環境的訪問,而不是當前的(您的新U-Boot將放置其版本)。 解決方案是讓你的U-Boot檢查'ver'的存儲值和當前值是否有差異,如果是,則重新刷新環境,但這可能會帶來一些不良影響。 – 2014-09-16 08:15:58
你不能依靠fw_printenv如果您想知道u-boot版本。
fw_printenv只是查找printenv分區並轉儲其數據。所以對於普通變量來說是可以的,但對於「ver」變量來說是不正確的,這個變量是動態變量,並且它的值在引導時由u-boot初始化。 u-boot退出後,此變量的值不會保留,除非您手動將其保存到環境中。
例如,我的船上,如果我打印 「版本」 從u-boot提示符變量:
U-Boot > printenv ver
ver=U-Boot 2009.11-00393-g5ca9497-dirty (Nov 26 2012 - 11:08:44)
這是u-boot的真實版,從u-boot的本身來。
現在,如果我啓動我的主板和使用fw_printenv:
[email protected] # fw_printenv | grep ver=
ver=U-Boot 2009.11-00323-gbcc6e0e (Sep 21 2012 - 11:07:19)
正如你所看到的,這是不同的。因爲我碰巧在我的環境中定義了一個「ver」變量。它不符合真正的u-boot版本。
當然,我可以回到u-boot,使用「saveenv」更新環境中的「ver」值。然後這兩個值會匹配。但是,在更換u-boot之後,我應該始終更新環境。
所以,我的結論是,使用fw_printenv來獲得u-boot版本絕對不是一個好主意。
嘗試讀取uboot的版本是這樣的:
查找uboot的分區,如。爲MTD設備:
執行cat/proc/MTD
尋找/ dev/mtd5:
貓的/ dev/mtd5 | hexdump都-C -n 64
如果的U-boot位於mtd0,你可以得到的版本信息如下:
[email protected]:/proc# strings /dev/mtd0 | grep U-Boot
U-Boot 1.1.4-g1c8343c8-dirty (Feb 28 2014 - 13:56:54)
U-Boot
Now running in RAM - U-Boot at: %08lx
我已經使用了類似的版本,將grep擴展爲更加精確一些,例如'U-Boot [0-9] * \。[0-9] *。* \\(Build。*)'回報較少。如果您對閃存設備上的u-boot映像的位置有一個大致的瞭解,可以對此進行優化。如果你知道事實是它在第一兆字節,你可以使用dd來抽取數據的第一個兆字節,然後在其上運行字符串以節省處理時間。 – synthesizerpatel 2014-11-08 01:38:48
謝謝。使用dd來節省處理時間。 – 2016-10-27 02:02:43
的alternative solution是直接從U-Boot的閱讀版本二進制文件(甚至可以嵌入到包含其他二進制文件的圖像文件中,例如第一階段引導加載程序),例如mmcblk0boot0
爲分區(設備mmcblk0
)的引導程序位於:
sudo grep -a --null-data U-Boot /dev/mmcblk0boot0
網站不會備註:工作不僅爲Arch Linux的,但如Ubuntu也是如此。
- 1. 獲取用戶Android版本
- 2. 如何轉換設備型號UBOOT驅動程序使用它的舊版本的uboot像UBOOT 2010
- 3. 獲取用戶簽到(版本> = 2.0)
- 4. Google Drive iOS SDK:獲取用戶空間
- 5. TeamCity:從VCS獲取版本
- 6. 從UIWebView獲取Safari版本
- 7. 從RTC獲取GIT版本
- 8. 從distutils獲取版本setup.py
- 9. 字符串類型從'空間'獲取用戶的輸入
- 10. 如何從用戶獲取應用程序版本號?
- 11. 獲取用戶的本地時間
- 12. 如何接取並從用戶空間
- 13. 從登錄ID(Windows XP和更高版本)獲取用戶SID
- 14. 從Azure AD獲取用戶B2C:此API版本不支持
- 15. 我可以從用戶代理獲取Mac OS版本嗎?
- 16. 部署SNAPSHOT版本 - 獲取(時間戳)的版本號
- 17. 從perf獲取用戶空間堆棧信息
- 18. 如何從Linux內核空間獲取用戶名
- 19. 內核模塊從用戶空間獲取數據
- 20. 獲取用戶本地時間
- 21. 獲取當前客戶端Silverlight版本?
- 22. JTOpen用戶空間讀取
- 23. 如何從基於時間的tfs獲取特定版本?
- 24. 從Python調用名稱空間獲取本地人
- 25. 如何從php獲取mongodb的版本
- 26. 從命令行獲取TCL的版本?
- 27. 如何從VSIX獲取SSMS的版本
- 28. 從OWL本體獲取基本名稱空間
- 29. 如何從用戶空間
- 30. 從哪裏做的UBOOT獲取有關閃光的信息,RTC,在UBOOT /內核開發RAM
如果沒有明確的方法來做到這一點,有可靠的方法從您啓動的閃存中提取數據。完成這個任務的一個防彈方法是將你的u-boot版本傳給內核(uboot = blah),然後讀取/ proc。如果你想確保你知道你啓動的是哪個版本,而不僅僅是閃存上的內容。 – synthesizerpatel 2014-11-08 01:40:42