小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

關(guān)于s3c6410的SD卡啟動(dòng)

 guitarhua 2012-05-28

關(guān)于s3c6410的SD卡啟動(dòng)

分類(lèi): Embedded System 421人閱讀 評(píng)論(1) 收藏 舉報(bào)
      要研究裸機(jī)程序的編寫(xiě),必須要有一個(gè)“全裸”的環(huán)境。友善提供的superboot可以提供執(zhí)行用戶(hù)自定義程序的能力,但其實(shí)這樣運(yùn)行的程序環(huán)境還是依賴(lài) 于superboot的, 那些內(nèi)存初始化、時(shí)鐘初始化,串口初始化等工作都已經(jīng)由superboot做了。tiny6410支持nandflash和sd卡啟動(dòng)兩種模 式,nandflash的燒寫(xiě)還是依賴(lài)superboot,所以比較簡(jiǎn)便的方法是通過(guò)sd卡啟動(dòng),superboot本身也是通過(guò)sd卡啟動(dòng)的。
      從網(wǎng)上搜了一下這方面的資料,主要參考文章來(lái)來(lái)去去就幾篇, 三星的S3C6410_Internal_Rom_Booting.pdf是一份比較有用的資料,當(dāng)然還有其中一些文章也比較有用,例如djyos的sd 卡啟動(dòng)試驗(yàn)。這些文章描述s3c6410的要點(diǎn)總結(jié)如下:
      (1) s3c6410啟動(dòng)過(guò)程分成BL0, BL1, BL2幾個(gè)階段, 其中BL0是固化在s3c6410內(nèi)部的IROM中的, 該段程序根據(jù)所選擇的啟動(dòng)模式從存儲(chǔ)介質(zhì)加載BL1. s3c6410支持從多種存儲(chǔ)介質(zhì)中啟動(dòng),nandflash, sd卡,sdhc卡,OneNand, MoviNand.... BL1和BL2存儲(chǔ)于這些存儲(chǔ)介質(zhì)中。這里我主要關(guān)注sd和sdhc卡.
      (2) BL0在加載BL1前已經(jīng)做了很多工作,sd控制器初始化,關(guān)閉看門(mén)狗等。
      (3) 對(duì)于sd卡, BL1位于 (totalSector - 18) 的扇區(qū);對(duì)于sdhc卡,BL1位于(totalSector-1042)的扇區(qū)。BL1由BL0加載到 0x0C000000處運(yùn)行,大小為8K.
       
  
   
      知道了上面幾點(diǎn),就可以制作sd啟動(dòng)卡了,可以將所編寫(xiě)的裸機(jī)程序放到BL1的位置。下面編寫(xiě)一個(gè)最簡(jiǎn)單的點(diǎn)燈程序(LED1~LED4全亮):
///// led.s:
       .text
       .code 32
       .global _start
       _start:
           ldr r0,=0x7f008800
           ldr r1,=0x11111111
           str r1,[r0]
           ldr r0,=0x7f008808
           ldr r2,=0xff0f
           str r2,[r0]
       loop:
           b loop

//// makefile:       

      CC=arm-linux-gcc
      LD=arm-linux-ld
      OBJCOPY=arm-linux-objcopy
      CFLAG=-c
      LDFLAG=-e _start -Ttext 0x0c000000

      led.bin: led 
          $(OBJCOPY) -O binary $< $@

      led: led.o
           $(LD) $(LDFLAG) $? -o $@

      led.o:led.s           $(CC) $(CFLAG) $< -o $@

      clean:
            rm *.o
            rm led
            rm led.bin

      下面要將led.bin寫(xiě)入BL1.使用的是2G的sd卡,所以應(yīng)該寫(xiě)到 -512 * 18處。網(wǎng)上的文章都說(shuō)用WinHex寫(xiě)入,我使用的是linux環(huán)境,沒(méi)有WinHex可用,不過(guò)其實(shí)dd命令就可以對(duì)絕對(duì)磁盤(pán)扇區(qū)做讀寫(xiě)。還有一個(gè)問(wèn) 題就是要知道sd卡的大小, 用fdisk命令就可以了:
 $ sudo fdisk -l /dev/sdb

Disk /dev/sdb: 2059 MB, 2059403264 bytes
207 heads, 37 sectors/track, 525 cylinders
Units = cylinders of 7659 * 512 = 3921408 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb2a60e0e

Device Boot Start End Blocks Id System
/dev/sdb1 1 525 2010469 b W95 FAT32

      所以要寫(xiě)入的地址為 2059403264 - 18 * 512 = 2059394048
      然后用dd命令寫(xiě)入led.bin :
      $ sudo dd if=./led.bin of=/dev/sdb seek=2059394048 bs=1
      至此一張可啟動(dòng)的sd卡就完成了,插入tiny6410, 選擇sd卡啟動(dòng)模式,就可以看到板子啟動(dòng)時(shí)4燈全亮。
      注:友善宣稱(chēng)它提供的SDFlasher.exe可以不論sd和sdhc卡都可以支持,從而優(yōu)于三星提供的IROM_Flushing_Tool, 三星的要選擇是sd還是sdhc。其實(shí)原理很簡(jiǎn)單,SDFlasher.exe寫(xiě)入時(shí)不論是-18扇區(qū)還是-1042扇區(qū)都寫(xiě)入。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多