ImageVerifierCode 换一换
格式:DOCX , 页数:57 ,大小:1.01MB ,
资源ID:4877458      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4877458.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(uboot移植.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

uboot移植.docx

1、uboot移植交叉编译器:4.3.2一、建立自己的开发项目并测试编译目前u-boot对很多cpu直接支持,比如smdk2400、smdk2410、smdk6400,但是没有smdk6410,由于smdk6400与smdk6410硬件资源相近,所以我们选择smdk6400为参照,建立自己的开发项目。1、下载源码、解压从网上ftp:/ftp.denx.de/pub/u-boot/下载u-boot-2010.03.tar.bz2,之所以选择此版本,是因为此版本与三星提供的u-boot.1.1.6相近,降低移植的难度。2、进入board/samsun目录下,会发现有smdk6400文件夹,建立新文件夹

2、smdk6410,并将smdk6400里的所有文件复制到smdk6410中,进入smdk6410文件夹将smdk6400.c更名为smdk6410.c,并且打开此文件,将里面的6400全部改为6410。打开Makfile,将里面的6400改为6410。结束推出到u-boot-2010.03根目录。3、进入到nand_spl/board/sansung/,复制smdk6400,并黏贴,将副本smdk6400更名为smdk6410,更改Makefile文件,将里面的6400全部改成6410。4、进入到 include/configs/ 复制smdk6400.h,并将副本改为smdk6410.h。5

3、、进入到u-boot-2010.03根目录,打开Makefile,将CROSS_COMPILE ?=改成为CROSS_COMPILE ?=arm-linux-,然后搜索6400,会跳转到如下图所示然后复制所有以上代码,并且将6400改成6410,如下图然后运行make smdk6410_config 然后在运行make,若通过则说明此次移植第一步基本成功,但是编译出来的u-boot.bin尚不能用,还要继续深入工作。二、修改启动代码1、首先修改cpu/arm1176/start.s,修改后的代码如下,.globl _start_start: b reset#ifndef CONFIG_NAND

4、_SPL ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq ldr pc, _fiq_undefined_instruction: .word undefined_instruction_software_interrupt: .word software_interrupt_prefetch_abort: .word prefetch_abort_data_abort: .wo

5、rd data_abort_not_used: .word not_used_irq: .word irq_fiq: .word fiq_pad: .word 0x12345678 /* now 16*4=64 */#else . = _start + 64#endif.global _end_vect_end_vect: .balignl 16,0xdeadbeef/* Startup Code (reset vector)* do important init only if we dont start from memory!* setup Memory and board specif

6、ic bits prior to relocation.* relocate armboot to ram* setup stack*/_TEXT_BASE: .word TEXT_BASE/* Below variable is very important because we use MMU in U-Boot.* Without it, we cannot run code correctly before MMU is ON.* by scsuh.*/_TEXT_PHY_BASE: .word CONFIG_SYS_PHY_UBOOT_BASE.globl _armboot_star

7、t_armboot_start: .word _start/* These are defined in the board-specific linker script.*/.globl _bss_start_bss_start: .word _bss_start.globl _bss_end_bss_end: .word _end/* the actual reset code*/reset: /* * set the cpu to SVC32 mode */ mrs r0, cpsr bic r0, r0, #0x1f orr r0, r0, #0xd3 msr cpsr, r0/* C

8、PU_init_critical registers* setup important registers* setup memory timing*/ /* * we do sys-critical inits only at reboot, * not when booting from ram! */cpu_init_crit: /* * When booting from NAND - it has definitely been a reset, so, no need * to flush caches and disable the MMU */ /* * flush v4 I/

9、D caches */ mov r0, #0 mcr p15, 0, r0, c7, c7, 0 /* flush v3/v4 cache */ mcr p15, 0, r0, c8, c7, 0 /* flush v4 TLB */ /* * disable MMU stuff and caches */ mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #0x00002300 clear bits 13, 9:8 (-V- -RS) bic r0, r0, #0x00000087 clear bits 7, 2:0 (B- -CAM) orr r0, r0, #0

10、x00000002 set bit 2 (A) Align orr r0, r0, #0x00001000 set bit 12 (I) I-Cache mcr p15, 0, r0, c1, c0, 0 /* Peri port setup */ ldr r0, =0x70000000 orr r0, r0, #0x13 mcr p15,0,r0,c15,c2,4 256M (0x70000000 - 0x7fffffff) /* * Go setup Memory and board specific bits prior to relocation. */ bl lowlevel_ini

11、t /* go setup pll,mux,memory */ /* when we already run in ram, we dont need to relocate U-Boot. * and actually, memory controller must be configured before U-Boot * is running in ram. */ ldr r0, =0xff000fff bic r1, pc, r0 /* r0 - current base addr of code */ ldr r2, _TEXT_BASE /* r1 - original base

12、addr in ram */ bic r2, r2, r0 /* r0 - current base addr of code */ cmp r1, r2 /* compare r0, r1 */ beq after_copy /* r0 = r1 then skip flash copy */#ifdef CONFIG_BOOT_NAND mov r0, #0x1000 bl copy_from_nand#endifafter_copy:#ifdef CONFIG_ENABLE_MMUenable_mmu: /* enable domain access */ ldr r5, =0x0000

13、ffff mcr p15, 0, r5, c3, c0, 0 /* load domain access register */ /* Set the TTB register */ ldr r0, _mmu_table_base ldr r1, =CONFIG_SYS_PHY_UBOOT_BASE ldr r2, =0xfff00000 bic r0, r0, r2 orr r1, r0, r1 mcr p15, 0, r1, c2, c0, 0 /* Enable the MMU */mmu_on: mrc p15, 0, r0, c1, c0, 0 orr r0, r0, #1 /* S

14、et CR_M to enable MMU */ mcr p15, 0, r0, c1, c0, 0 nop nop nop nop#endifskip_hw_init: /* Set up the stack */stack_setup:#ifdef CONFIG_MEMORY_UPPER_CODE ldr sp, =(CONFIG_SYS_UBOOT_BASE + CONFIG_SYS_UBOOT_SIZE - 0xc)#else ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */ sub r0, r0, #CONFIG_SYS_

15、MALLOC_LEN /* malloc area */ sub r0, r0, #CONFIG_SYS_GBL_DATA_SIZE/* bdinfo */#ifdef CONFIG_USE_IRQ sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)#endif sub sp, r0, #12 /* leave 3 words for abort-stack */#endifclear_bss: ldr r0, _bss_start /* find start of bss segment */ ldr r1, _bss_end /

16、* stop here */ mov r2, #0 /* clear */clbss_l: str r2, r0 /* clear loop. */ add r0, r0, #4 cmp r0, r1 ble clbss_l ldr pc, _start_armboot_start_armboot: .word start_armboot#ifdef CONFIG_ENABLE_MMU_mmu_table_base: .word mmu_table#endif/* copy U-Boot to SDRAM and jump to ram (from NAND or OneNAND)* r0:

17、size to be compared* Load 1st 2blocks to RAM because U-boots size is larger than 1block(128k) size*/ .globl copy_from_nandcopy_from_nand: mov r10, lr /* save return address */ mov r9, r0 /* get ready to call C functions */ ldr sp, _TEXT_PHY_BASE /* setup temp stack pointer */ sub sp, sp, #12 mov fp,

18、 #0 /* no previous frame, so fp=0 */ mov r9, #0x1000 bl copy_uboot_to_ram /此函数需要添加,稍后说明。3: tst r0, #0x0 bne copy_failed ldr r0, =0x0c000000 ldr r1, _TEXT_PHY_BASE1: ldr r3, r0, #4 ldr r4, r1, #4 teq r3, r4 bne compare_failed /* not matched */ subs r9, r9, #4 bne 1b4: mov lr, r10 /* all is OK */ mov

19、pc, lrcopy_failed: nop /* copy from nand failed */ b copy_failedcompare_failed: nop /* compare failed */ b compare_failed/* we assume that cache operation is done before. (eg. cleanup_before_linux()* actually, we dont need to do anything about cache if not use d-cache in* U-Boot. So, in this functio

20、n we clean only MMU. by scsuh* void theLastJump(void *kernel, int arch_num, uint boot_params);*/#ifdef CONFIG_ENABLE_MMU .globl theLastJumptheLastJump: mov r9, r0 ldr r3, =0xfff00000 ldr r4, _TEXT_PHY_BASE adr r5, phy_last_jump bic r5, r5, r3 orr r5, r5, r4 mov pc, r5phy_last_jump: /* * disable MMU

21、stuff */ mrc p15, 0, r0, c1, c0, 0 bic r0, r0, #0x00002300 /* clear bits 13, 9:8 (-V- -RS) */ bic r0, r0, #0x00000087 /* clear bits 7, 2:0 (B- -CAM) */ orr r0, r0, #0x00000002 /* set bit 2 (A) Align */ orr r0, r0, #0x00001000 /* set bit 12 (I) I-Cache */ mcr p15, 0, r0, c1, c0, 0 mcr p15, 0, r0, c8,

22、 c7, 0 /* flush v4 TLB */ mov r0, #0 mov pc, r9#endif/* Interrupt handling*/ IRQ stack frame.#define S_FRAME_SIZE 72#define S_OLD_R0 68#define S_PSR 64#define S_PC 60#define S_LR 56#define S_SP 52#define S_IP 48#define S_FP 44#define S_R10 40#define S_R9 36#define S_R8 32#define S_R7 28#define S_R6

23、24#define S_R5 20#define S_R4 16#define S_R3 12#define S_R2 8#define S_R1 4#define S_R0 0#define MODE_SVC 0x13#define I_BIT 0x80/* use bad_save_user_regs for abort/prefetch/undef/swi .*/ .macro bad_save_user_regs /* carve out a frame on current user stack */ sub sp, sp, #S_FRAME_SIZE /* Save user re

24、gisters (now in svc mode) r0-r12 */ stmia sp, r0 - r12 ldr r2, _armboot_start sub r2, r2, #(CONFIG_SYS_MALLOC_LEN) /* set base 2 words into abort stack */ sub r2, r2, #(CONFIG_SYS_GBL_DATA_SIZE+8) /* get values for aborted pc and cpsr (into parm regs) */ ldmia r2, r2 - r3 /* grab pointer to old stac

25、k */ add r0, sp, #S_FRAME_SIZE add r5, sp, #S_SP mov r1, lr /* save sp_SVC, lr_SVC, pc, cpsr */ stmia r5, r0 - r3 /* save current stack into r0 (param register) */ mov r0, sp save current stack into r0 (param register) .endm .macro irq_save_user_regs sub sp, sp, #S_FRAME_SIZE stmia sp, r0 - r12 Call

26、ing r0-r12 add r8, sp, #S_PC ! R8 NEEDS to be saved ! a reserved stack spot would be good. stmdb r8, sp, lr Calling SP, LR str lr, r8, #0 Save calling PC mrs r6, spsr str r6, r8, #4 Save CPSR str r0, r8, #8 Save OLD_R0 mov r0, sp .endm .macro irq_restore_user_regs ldmia sp, r0 - lr Calling r0 - lr m

27、ov r0, r0 ldr lr, sp, #S_PC Get PC add sp, sp, #S_FRAME_SIZE subs pc, lr, #4 return & move spsr_svc into cpsr .endm .macro get_bad_stack /* setup our mode stack (enter in banked mode) */ ldr r13, _armboot_start /* move past malloc pool */ sub r13, r13, #(CONFIG_SYS_MALLOC_LEN) /* move to reserved a

28、couple spots for abort stack */ sub r13, r13, #(CONFIG_SYS_GBL_DATA_SIZE + 8) /* save caller lr in position 0 of saved stack */ str lr, r13 /* get the spsr */ mrs lr, spsr /* save spsr in position 1 of saved stack */ str lr, r13, #4 /* prepare SVC-Mode */ mov r13, #MODE_SVC msr spsr_c, r13 /* switch modes, make sure moves will execute */ msr spsr, r13 /* captu

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1