娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

u-boot-2011.03在mini2440/micro2440上的移植 支持Nand Flash啟動

發(fā)布者:MysticGarden最新更新時間:2024-07-01 來源: elecfans關(guān)鍵字:u-boot  mini2440  micro2440  移植  Nand  Flash啟動 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

7.1 創(chuàng)建nand_read.c

【注意】
程序只能用于讀取2K/頁的Nand。本人的Micro2440上的Nand Flash為256M,型號為K9F2G08
 

[www.linuxidc.com@linuxidc u-boot-2011.06]$ touch board/samsung/micro2440/nand_read.c
[www.linuxidc.com@linuxidc u-boot-2011.06]$ cat> board/samsung/micro2440/nand_read.c

 

#define rNFCONF  (*(volatile unsigned *)0x4E000000)
#define rNFCONT  (*(volatile unsigned *)0x4E000004)
#define rNFCMD  (*(volatile unsigned *)0x4E000008)
#define rNFADDR  (*(volatile unsigned *)0x4E00000C)
#define rNFDATA8 (*(volatile unsigned char*)0x4E000010)
#define rNFSTAT  (*(volatile unsigned *)0x4E000020)

#define CMD_READ1   0x00            /* 頁讀命令周期1 */
#define CMD_READ2   0x30            /* 頁讀命令周期2 */
#define CMD_RESET   0xFF          /* 復(fù)位    */

#define NF_CMD(cmd)   {rNFCMD=(cmd);}     /* 寫命令   */
#define NF_ADDR(addr)  {rNFADDR=(addr);}    /* 寫地址   */
#define NF_RDDATA8()  (rNFDATA8)         /* 讀8位數(shù)據(jù)  */
#define NF_nFCE_L()   {rNFCONT&=~(1<<1);}    /* 片選使能   */
#define NF_nFCE_H()   {rNFCONT|=(1<<1);}    /* 片選禁用   */
#define NF_WAITRB()      {while(!(rNFSTAT&(1<<1)));}  /* 等待就緒   */
#define NF_CLEAR_RB()     {rNFSTAT |= (1<<2);}   /* 清除就緒/忙位 */
#define NF_DETECT_RB()     {while(!(rNFSTAT&(1<<2)));}  /* 等待就緒   */

#define TACLS  1
#define TWRPH0  2
#define TWRPH1  1

void delay(int i)
{
 while(i-->0);
}

void Nand_Init(void)
{
 rNFCONF = (TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4)|(0<<0); 
 rNFCONT = (1<<4)|(1<<1)|(1<<0);
}

static void Nand_Reset(void)
{
 NF_nFCE_L();      /* 片選使能   */
 NF_CLEAR_RB();      /* 清除就緒/忙位  */
 NF_CMD(CMD_RESET);     /* 寫復(fù)位命令  */
 NF_DETECT_RB();      /* 等待就緒   */
 NF_nFCE_H();      /* 片選禁用   */
}

unsigned char Nand_ReadPage(const int page, unsigned char * const buffer)
{
 int i;
 
 Nand_Reset();
 
 NF_nFCE_L();
 NF_CLEAR_RB();

 NF_CMD(CMD_READ1); 
 NF_ADDR(0x0);
 NF_ADDR(0x0);
 NF_ADDR(page&0xff);
 NF_ADDR((page>>8)&0xff);
 NF_ADDR((page>>16)&0xff);
 NF_CMD(CMD_READ2); 
  
 NF_DETECT_RB();

 for (i = 0; i < 2048; i++) 
 {
  buffer[i] =  NF_RDDATA8();
 }
 
 NF_nFCE_H();
}

int nand_read(int start_page, int read_pages, unsigned char *buffer)
{
 int i;

 Nand_Init();
 for(i=0; i {
  Nand_ReadPage(start_page, buffer + 2048*i);
  start_page++;
 }
 return 0;
}

 

7.2 board/samsung/micro2440/Makefile

COBJS := micro2440.o flash.o nand_read.o

 

7.3 arch/arm/cpu/arm920t/u-boot.lds

 .text :
 {
  arch/arm/cpu/arm920t/start.o (.text)
  board/samsung/micro2440/libmicro2440.o    (.text)
  *(.text)
 }

 

【說明】

如果是在RAM中運(yùn)行,一定要刪去board/samsung/micro2440/libmicro2440.o    (.text),否則在RAM中也不能運(yùn)行。原因尚不理解,需要閱讀代碼

 

7.4 arch/arm/cpu/arm920t/start.S

下面紅色部分是添加的部分,黑色的代碼用于定位。

#ifndef CONFIG_SKIP_LOWLEVEL_INIT
    bl cpu_init_crit
#endif

 

#ifdef CONFIG_S3C2440_NAND_BOOT
    ldr sp, =0x30008000
    ldr r0, =0x0;
    ldr r1, _end_ofs
    mov r1, r1, LSR #11
    add r1, r1, #1
    ldr r2, =(CONFIG_SYS_TEXT_BASE)
    bl nand_read
    ldr pc, =relocations
#endif
......
......
copy_loop:
ldmia r0!, {r9-r10} /* copy from source address [r0] */
stmia r1!, {r9-r10} /* copy to target address [r1] */
cmp r0, r2 /* until source end address [r2] */
blo copy_loop

#ifdef CONFIG_S3C2440_NAND_BOOT
relocations:
    ldr r6, =CONFIG_SYS_TEXT_BASE
#endif

#ifndef CONFIG_PRELOADER
/*
* fix .rel.dyn relocations
*/
......
......
clbss_l:str r2, [r0] /* clear loop... */
add r0, r0, #4
cmp r0, r1
bne clbss_l

bl coloured_LED_init
bl red_LED_on
#endif

#ifdef CONFIG_S3C2440_NAND_BOOT
    ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
    bic sp, sp, #7 /* 8-byte alignment for ABI compliance */
    ldr r0,=0x00000000
   ldr pc, =board_init_f
#endif

/*
* We are done. Do not return, instead branch to second part of board
* initialization, now running from RAM.
*/
#ifdef CONFIG_NAND_SPL

 

7.5 include/configs/micro2440.h

#define CONFIG_S3C2440_NAND_BOOT
/* #define CONFIG_SKIP_LOWLEVEL_INIT */

【說明】
由于要在Nand Flash中運(yùn)行,所以需要注釋掉#define CONFIG_SKIP_LOWLEVEL_INIT

7.6 arch/arm/lib/board.c

void board_init_f (ulong bootflag)
{
    ......

    gd->mon_len = _bss_end_ofs + 0x100000; /* why */

    ...... 

這里的修改參考了bscbem的日志:http://www.linuxidc.com/Linux/2011-02/32772p4.htm

如果有讀者想了解原理請參考這個日志。

 


    /* relocate_code (addr_sp, id, addr); */
#ifdef CONFIG_S3C2440_NAND_BOOT /*add by wzc*/ 
    __asm__ __volatile__('mov sp,%0'::'r'(addr_sp):'sp');/*add by wzc*/ 
    board_init_r(id, addr); 
#else 
    relocate_code (addr_sp, id, addr); 
    /* NOTREACHED - relocate_code() does not return */ 
#endif
}
【說明】
至于gd->mon_len = _bss_end_ofs + 0x100000;我也不理解,需要閱讀源代碼才能解釋。

7.7 下載到Nand Flash

 到這里應(yīng)該就可以從Nand Flash啟動了。


關(guān)鍵字:u-boot  mini2440  micro2440  移植  Nand  Flash啟動 引用地址:u-boot-2011.03在mini2440/micro2440上的移植 支持Nand Flash啟動

上一篇:u-boot-2011.03在mini2440/micro2440上的移植 支持yaffs下載
下一篇:u-boot-2011.03在mini2440/micro2440上的移植 結(jié)束語及資源下載

推薦閱讀最新更新時間:2025-04-23 18:11

u-boot移植(二)---修改前工作:代碼流程分析1
一、代碼執(zhí)行總體流程圖 1.1 代碼路徑  U-boot.lds (archarmcpu) vectors.S (archarmlib) start.S (archarmcpuarm920t) lowlevel_init.S (boardsamsungjz2440) crt0.S (archarmlib) relocate.S (archarmlib) Board_init.c (commoninit) Board_f.c (common) Jz2440.h (includeconfigs) Generic-asm-offsets.h (includegenerated) 1.2 啟動代碼流
[單片機(jī)]
u-boot移植之一 uboot-2015.04 Makefile分析
本文以smdk2410為例子說明uboot的生成過程 一 uboot生成 uboot生成步驟如下: make smdk2410_defconfig make all 二 uboot生成分析之make smdk2410_defconfig 主Makefile有如下定義: %config: scripts_basic outputmakefile FORCE $(Q)$(MAKE) $(build)=scripts/kconfig $@ 注:u-boot-2015.04的配置與編譯仿照linux重新設(shè)計,很多宏展開與linux相同,不再重新說明。 (1)目標(biāo) %config,即smdk2410_defconfig (2)依賴 (2
[單片機(jī)]
at91sam9260 OpenWRT u-boot移植
1. 直接在make menuconfig中選擇編譯at91sam9260ek平臺的u-boot,燒寫到開發(fā)板后效果 **U-Boot 2010.06-dirty (Jun 28 2017 - 09:14:34) DRAM: 64 MiB NAND: 1024 MiB *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial Net: macb0 macb0: Starting autonegotiation...** ==警告,u-boot環(huán)境變量校驗失敗,并且一段時間后啟動重啟(懷疑看門狗打開,但沒
[單片機(jī)]
TQ2440 學(xué)習(xí)筆記—— 29、移植U-BootU-Boot 的編譯、鏈接過程】
U-Boot 的編譯、鏈接過程 配置完后,執(zhí)行” make all“即可編譯,從Makefile 中可以了解 U-Boot 使用了哪些文件、哪個文件首先執(zhí)行、可執(zhí)行文件占用的內(nèi)存情況。 先確定用到哪些文件,下面所示為Makefile 中與ARM 相關(guān)的部分。 第117、164 行用于包含其他的config.mk 文件,第117行所要包含文件的就是上面的配置過程中制作出來的 include/config.mk文件, 其中定義了 ARCH、CPU、BOARD、SOC等4個變量的值為arm、arm920t、EmbedSky、s3c24x0。 第164行包含頂層目錄的config.mk 文件,它們根據(jù)上面4個變量的值確定
[單片機(jī)]
TQ2440 學(xué)習(xí)筆記—— 29、<font color='red'>移植</font><font color='red'>U-Boot</font>【<font color='red'>U-Boot</font> 的編譯、鏈接過程】
基于S3C2410A的嵌入式系統(tǒng)的U-Boot移植
0 引 言 ARM嵌入式處理器已被廣泛應(yīng)用于消費(fèi)電子產(chǎn)品、無線通信、網(wǎng)絡(luò)通信和工業(yè)控制等領(lǐng)域。其中,ARM9的芯片更是以其低價格、低功耗、高性能在手持設(shè)備中占據(jù)著重要市場。在嵌入式操作系統(tǒng)中,Linux,Vxworks,WinCE三足鼎立,其中Linux由于其開源性、穩(wěn)定性、安全性、可裁減性更是一支獨(dú)放。在嵌入式系統(tǒng)中,如何實現(xiàn)在ARM9平臺下Linux操作系統(tǒng)的引導(dǎo)工作是嵌入式技術(shù)開發(fā)的重要環(huán)節(jié)。 1 嵌入式系統(tǒng)的軟件組成 1.1 系統(tǒng)的軟件組成 嵌入式的軟件系統(tǒng)主要由Bootloader、操作系統(tǒng)、文件系統(tǒng)、應(yīng)用程序等組成。其中,Bootloader是介于硬件和操作系統(tǒng)之間的一層,其作用就好像PC機(jī)中的BIOS。系統(tǒng)加電運(yùn)
[單片機(jī)]
基于S3C2410A的嵌入式系統(tǒng)的<font color='red'>U-Boot</font><font color='red'>移植</font>
U-BOOT啟動流程及移植
摘要:嵌入式系統(tǒng)一般沒有通用的bootloader,u-boot是功能強(qiáng)大的bootloader開發(fā)軟件,但相對也比較復(fù)雜。文中對u-boot的啟動流程作了介紹,詳細(xì)給出了u-boot在S3C44B0開發(fā)板上的移植方法和步驟。 關(guān)鍵詞:bootloader;u-boot;嵌入式系統(tǒng);移植;S3C44B0 1 Bootloader及u-boot簡介 Bootloader 代碼是芯片復(fù)位后進(jìn)入操作系統(tǒng)之前執(zhí)行的一段代碼,主要用于完成由硬件啟動到操作系統(tǒng)啟動的過渡,從而為操作系統(tǒng)提供基本的運(yùn)行環(huán)境,如初始化CPU、 堆棧、存儲器系統(tǒng)等。Bootloader 代碼與CPU 芯片的內(nèi)核結(jié)構(gòu)、具體型號、應(yīng)用系統(tǒng)的配置及使用的操作系統(tǒng)等
[嵌入式]
Linux-2.6.32.2內(nèi)核在mini2440上的移植(四)---根文件系統(tǒng)制作(3)
移植環(huán)境 1,主機(jī)環(huán)境:VMare下CentOS 5.5 ,1G內(nèi)存。 2,集成開發(fā)環(huán)境:Elipse IDE 3,編譯編譯環(huán)境:arm-linux-gcc v4.4.3,arm-none-linux-gnueabi-gcc v4.5.1。 4,開發(fā)板:mini2440,2M nor flash,128M nand flash。 5,u-boot版本:u-boot-2009.08 6,linux 版本:linux-2.6.32.2 7,參考文章: 嵌入式linux應(yīng)用開發(fā)完全手冊,韋東山,編著。 Mini2440 之Linux 移植開發(fā)實戰(zhàn)指南 制作linux下根文件系統(tǒng) 系統(tǒng)啟動掛載根文件系統(tǒng)時Kernel panic
[單片機(jī)]
u-boot之ARM920T的start.S分析
cpu/arm920t/start.S程序步驟大致有以下幾個 1、設(shè)置中斷向量表 2、設(shè)置CPU模式為SVC32 mode并且關(guān)閉IRQ與FIQ中斷 3、關(guān)閉看門狗 4、屏蔽所有中斷 5、判斷程序是否在RAM中運(yùn)行如果不是的話則先關(guān)閉MMU再則需要初始化RAM。 6、設(shè)置堆棧準(zhǔn)備在C函數(shù)中運(yùn)行了 7、 跳轉(zhuǎn)到C函數(shù)clock_init初始化系統(tǒng)時鐘 8、跳轉(zhuǎn)到C函數(shù)CopyCode2Ram將代碼拷貝到RAM中 9、清零BSS段 10、跳轉(zhuǎn)到_start_armboot運(yùn)行,此時代碼已經(jīng)在RAM中運(yùn)行了 11、IRQ中斷與FIQ中斷發(fā)生后的上下文處理 1、cpu/arm920t/sta
[單片機(jī)]
<font color='red'>u-boot</font>之ARM920T的start.S分析
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 中牟县| 永平县| 灵丘县| 巴林左旗| 定边县| 西乌珠穆沁旗| 古田县| 新源县| 治县。| 同心县| 图们市| 筠连县| 布尔津县| 龙口市| 晴隆县| 阿尔山市| 垦利县| 柳江县| 桑日县| 西城区| 嫩江县| 沂南县| 武冈市| 平远县| 桑植县| 内乡县| 株洲县| 共和县| 探索| 冀州市| 普陀区| 德令哈市| 邹平县| 寻乌县| 灵璧县| 广水市| 屏南县| 东丽区| 梅州市| 闽清县| 平陆县|