如何讓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是系統啟動的時候執行的一段程式,這段程式一般存放在nand flash中或nor flash中。我們所說的nand flash啟動或nor flash啟動主要是涉及到一段搬移**。這段搬移**的功能是u-boot自己把自己搬移到記憶體中執行。如下是nor flash啟動中的這段搬移**(這裡以s3c2410為例)
relocate: /* relocate u-boot to ram */
adr r0, _start /* r0 <- current position of code */
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 <- size of armboot */
add r2, r0, r2 /* r2 <- source end address */
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 flash啟動或nar flash啟動。這樣u boot就只能在nand flash或nor flash。那麼我們如何讓我們的u boot在nand flash或nor flash都能使用。首先,我們說說u boot,u ...
U boot如何啟動核心
本文 我們用的u boot已經改的面目全非,不過核心還是完全相同的,換了個面目而已。開源的好處,想改就改來玩玩。不過流程還是人家的。u boot通過bootm命令來啟動核心,這個命令的處理函式是do bootm,這個函式處理的是uboot mkimage製作的映像,如果正好這個映像是核心,那麼它就會...
uboot如何啟動核心
uboot的本質是乙個裸機程式,作業系統核心本質也是裸機程式。區別就是作業系統執行起來後,在軟體上分為核心層和應用層,分層後兩層的許可權不同,記憶體訪問和裝置操作的管理更加精細 核心可以隨便訪問各種硬體,而應用程式只能被限制地訪問硬體和記憶體位址 直觀來看,uboot的映象是uboot.bin,li...