大佬們 請問下uboot怎么設定內核的啟動地址呢? 因為有的內核燒在0x800000這個地址,有的內核燒在0x200000這個地址,肯定得告訴uboot從哪啟動內核吧,現在uboot編譯好了怎么告訴uboot從哪啟動內核呢??
uj5u.com熱心網友回復:
你應該搞錯了一點,燒錄地址和運行地址是兩個概念。 燒錄地址是寫入FLASH(ROM)介質的片上偏移地址,比如NandFlash 或NorFlash上的一個磁區位置。運行地址,一般是RAM中的位置;如果FLASH支持片上運行,也可以是FLASH的地址,但不多見。一般SoC運行uboot后, uboot就會負責初始化RAM芯片, 然后把內核從FLASH磁區里面copy到記憶體某個位置ADDR,然后呼叫bootm ADDR引導內核并移交CPU控制權。uj5u.com熱心網友回復:
我只到你說的 我現在迷惑的是uboot把內核從flash里copy出來,uboot怎么知道從flash的哪個位置copy內核呢??
假如有兩個板子用的是相同版本的uboot,但是啟動時一個板子uboot從flash0x20000的位置把內核copy出來,另一個是從flash0x1000000的位置把內核copy出來,這個uboot是怎么做到的呢?怎么設定uboot拷貝內核的地址?肯定可以設定
uj5u.com熱心網友回復:
你說的這個地址是FLASH里面的偏移值地址, 一般是uboot里面配置的FLASH磁區表決定的,比如uboot+ENV+KERNL+ROOTFS,這4個磁區,大小和位置就固定好了。 最新uboot支持DTB,磁區可以在.dts檔案里面定義。你說的那種情況很少,如果要做到,也不是沒辦法, 但需要根據一個特征值來選擇不同的磁區表,比如FLASH大小、某個硬體上GPIO的默認值。
uj5u.com熱心網友回復:
不知道能不能麻煩您把uboot配置flash磁區表的相關代碼的具體位置(路徑 目錄)告訴我下 我看下代碼 謝謝了
uj5u.com熱心網友回復:
最終加載內核的地方, 是這個bootcmdstatic char default_environment[] = {
....
#ifdef CONFIG_BOOTCOMMAND
"bootcmd=" CONFIG_BOOTCOMMAND "\0"
#endif
.....
CONFIG_BOOTCOMMAND 類似: "nand read 0x50008000 0x100000 0x500000;bootz 0x50008000"、
0x100000 就是 FLASH 的偏移地址 , 0x500000是FLASH上的磁區大小
至于其他磁區的讀寫情況, 也是類似這樣的命令去做, 磁區表也是以此為基礎由自己專案中額外做的,uboot默認代碼是沒有的。
uj5u.com熱心網友回復:
嗯嗯 謝謝你大佬
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/42924.html
標籤:UNIX文化
