如何讓U boot實現Nand Nor 雙啟動

2021-05-22 05:02:11 字數 1926 閱讀 5793

華清遠見嵌入式學院

講師。在做u-boot移植的時候,多數人使用的是nand flash啟動或nar flash啟動。這樣u-boot就只能在nand flash或nor flash。那麼我們如何讓我們的u-boot在nand flash或nor flash都能使用。

首先,我們說說u-boot,u-boot是系統啟動的時候執行的一段程式,這段程式一般存放在nand flash中或nor flash中。我們所說的nand flash啟動或nor flash啟動主要是涉及到一段搬移**。這段搬移**的功能是u-boot自己把自己搬移到記憶體中執行。如下是nor flash啟動中的這段搬移**(這裡以s3c2410為例)

relocate:                        /* relocate u-boot to ram */

adr r0, _start        /* r0

ldr r1, _text_base        /* test if we run from flash or ram */

cmp r0, r1                        /* don't reloc during debug */

beq stack_setup

ldr r2, _armboot_start

ldr r3, _bss_start

sub r2, r3, r2                /* r2

add r2, r0, r2                /* r2

copy_loop:

ldmia r0!,                 /* copy from source address [r0] */

stmia r1!,                 /* copy to target address [r1] */

cmp r0, r2                /* until source end addreee [r2] */

ble copy_loop

#endif        /* config_skip_relocate_uboot */

#endif

上面這段**就是把u-boot搬移到記憶體。而不同的啟動方式區別也就在這段**上,如果我們這裡是nand flash啟動的話我們也需要寫相同功能的**,不同的是對於nand的操作和nor的操作是完全不同的,選擇nor flash啟動是將nor flash對映到片選0上也就是0x0位址而選擇nand flash啟動則是將cpu的片內ram(4k)對映到0位址,通過nand flash控制器操作nand flash。至於如何操作nand flash這裡就不多說了。我們這裡討論如何實現nand 和 nor雙啟動。下面我們看看這兩種啟動的對映關係。

我們在看下暫存器bwscon:

通過上圖我們可以發現,我們可以通過判斷bwscon的第2位和地3位的值判斷是nor flash啟動還是nand flash啟動。所以我們可以新增如下**。

# define bwscon        0x48000000

ldr r0,=bwscon

ldr r0,[r0]

ands r0,r0,#6

beq nand_boot

//nar 搬移**

nand_boot:

//nand 搬移**

//有了上面這段**,就可以實現雙啟動了,只要再適當的新增對應的功能我們的uboot就完成了。

如何讓U boot實現Nand Nor 雙啟動

如何讓u boot實現nand nor 雙啟動 在做u boot移植的時候,多數人使用的是nand flash啟動或nar flash啟動。這樣u boot就只能在nand flash或nor flash。那麼我們如何讓我們的u boot在nand flash或nor flash都能使用。首先,我們...

U boot如何啟動核心

本文 我們用的u boot已經改的面目全非,不過核心還是完全相同的,換了個面目而已。開源的好處,想改就改來玩玩。不過流程還是人家的。u boot通過bootm命令來啟動核心,這個命令的處理函式是do bootm,這個函式處理的是uboot mkimage製作的映像,如果正好這個映像是核心,那麼它就會...

uboot如何啟動核心

uboot的本質是乙個裸機程式,作業系統核心本質也是裸機程式。區別就是作業系統執行起來後,在軟體上分為核心層和應用層,分層後兩層的許可權不同,記憶體訪問和裝置操作的管理更加精細 核心可以隨便訪問各種硬體,而應用程式只能被限制地訪問硬體和記憶體位址 直觀來看,uboot的映象是uboot.bin,li...