1、 这两句的含义,可参见韦东山编著的嵌入式Linux应用开发完全手册的bootloader部分-第15章,第249页u-boot配置过程。4.使用支持softfloat的交叉编译器:crosstools_3.4.1_soft(光盘附带)。5.编译测试 配置make jzy2440_config编译:make 具体u-boot编译,连接过程参看韦东山嵌入式Linux应用开发完全手册第254页。6.清除上次编译的结果:make mrproperu-boot1.1.6的移植(目标板TQ2440)4 .lds设置17:34 阅读43 评论0 (四).lds文件设置 注:蓝色部分为修改或者改动部分,红色部
2、分为jzy23注解。在board/jzy2440/u-boot.lds里修改:SECTIONS. = 0x00000000;. = ALIGN(4);.text : cpu/arm920t/start.o(.text) board/jzy2440/boot_init.o (.text)/添加这句 *(.text).rodata : *(.rodata) .data : *(.data) .got : *(.got) . = .;_u_boot_cmd_start = .;.u_boot_cmd : *(.u_boot_cmd) _u_boot_cmd_end = .;_bss_start =
3、.;.bss : *(.bss) _end = .;u-boot1.1.6的移植(目标板TQ2440)5代码重定向15:55 阅读81 评论0 (五) 代码重定向 start.S里修改:#ifndef CONFIG_SKIP_RELOCATE_UBOOTrelocate:/* relocate U-Boot to RAM */adrr0, _start/* r0 - current position of code (r0=0)ldrr1, _TEXT_BASE/* test if we run from flash or RAM(r1=0x33f80000 */cmp r0, r1 /*do
4、nt reloc during debugbeq clear_bss /*(原来为stack_setup)*/r2, _armboot_start /*(r2为_start的地址=0x3ff80000)*/r3, _bss_start /*(在连接文件中定义)*/subr2, r3, r2#if 1/*(增加)*/bl CopyCode2Ram/* r0: source, r1: dest, r2: size */ /*(跳转到CopyCode2Ram函数)*/#elseaddr2, r0, r2/ r2 - source end addresscopy_loop:ldmiar0!, r3-r
5、10/ copy from source address r0stmiar1!/ copy to target address r1r0, r2/ until source end addreee r2blecopy_loop#endif#endif/ CONFIG_SKIP_RELOCATE_UBOOT */2.在board/jzy2440/boot_init.c中与CopyCode2Ram()相关的函数与定义如下:#include s3c2410.h#define GSTATUS1 (*(volatile unsigned int *)0x560000B0)#define BUSY 1/
6、供外部调用的函数 */void nand_init_ll(void);int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size);/ NAND Flash操作的总入口, 它们将调用S3C2410或S3C2440的相应函数 */static void nand_reset(void);static void wait_idle(void);static void nand_select_chip(void);static void nand_deselect_chip(void);static void wri
7、te_cmd(int cmd);static void write_addr(unsigned int addr);static unsigned char read_data(void);/ S3C2410的NAND Flash处理函数 */static void s3c2410_nand_reset(void);static void s3c2410_wait_idle(void);static void s3c2410_nand_select_chip(void);static void s3c2410_nand_deselect_chip(void);static void s3c24
8、10_write_cmd(int cmd);static void s3c2410_write_addr(unsigned int addr);static unsigned char s3c2410_read_data(void);/ S3C2440的NAND Flash处理函数 */static void s3c2440_nand_reset(void);static void s3c2440_wait_idle(void);static void s3c2440_nand_select_chip(void);static void s3c2440_nand_deselect_chip(v
9、oid);static void s3c2440_write_cmd(int cmd);static void s3c2440_write_addr(unsigned int addr);static unsigned char s3c2440_read_data(void);/ S3C2410的NAND Flash操作函数 */ 复位 */static void s3c2410_nand_reset(void) s3c2410_nand_select_chip(); s3c2410_write_cmd(0xff); / 复位命令 s3c2410_wait_idle(); s3c2410_na
10、nd_deselect_chip();/ 等待NAND Flash就绪 */static void s3c2410_wait_idle(void) int i;S3C2410_NAND * s3c2410nand = (S3C2410_NAND *)0x4e000000; volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand-NFSTAT; while(!(*p & BUSY) for(i=0; iNFCONF &= (111);/ 取消片选信号 */static void s3c2410_nand_deselec
11、t_chip(void)NFCONF |= (1 9) & 17) & 25) &/ 读取数据 */static unsigned char s3c2410_read_data(void)NFDATA; return *p;/ S3C2440的NAND Flash操作函数 */static void s3c2440_nand_reset(void) s3c2440_nand_select_chip(); s3c2440_write_cmd(0xff); s3c2440_wait_idle(); s3c2440_nand_deselect_chip();static void s3c2440_w
12、ait_idle(void)S3C2440_NAND * s3c2440nand = (S3C2440_NAND *)0x4e000000;s3c2440nand-static void s3c2440_nand_select_chip(void) s3c2440nand-NFCONT &1);static void s3c2440_nand_deselect_chip(void)NFCONT |= (1static void s3c2440_write_cmd(int cmd)static void s3c2440_write_addr(unsigned int addr) */(不是8!)
13、*/static unsigned char s3c2440_read_data(void)/ 在第一次使用NAND Flash前,复位一下NAND Flash */static void nand_reset(void) / 判断是S3C2410还是S3C2440 */ if (GSTATUS1 = 0x32410000) | (GSTATUS1 = 0x32410002) s3c2410_nand_reset();else s3c2440_nand_reset();static void wait_idle(void)static void nand_select_chip(void)st
14、atic void nand_deselect_chip(void)static void write_cmd(int cmd) s3c2410_write_cmd(cmd); s3c2440_write_cmd(cmd);static void write_addr(unsigned int addr) s3c2410_write_addr(addr); s3c2440_write_addr(addr);static unsigned char read_data(void) return s3c2410_read_data(); return s3c2440_read_data();/ 初
15、始化NAND Flash */void nand_init_ll(void)#define TACLS 0#define TWRPH0 3#define TWRPH1 / 使能NAND Flash控制器, 初始化ECC, 禁止片选, 设置时序 */NFCONF = (115)|(112)|(111)|(TACLS8)|(TWRPH04)|(TWRPH10); else/ 设置时序 */NFCONF = (TACLS12)|(TWRPH08)|(TWRPH14);NFCONT = (14)|(11)|(1/ 复位NAND Flash */nand_reset();#define NAND_SEC
16、TOR_SIZE 512#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)/ 读函数 */int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size) int i, j; if (start_addr & NAND_BLOCK_MASK) | (size & NAND_BLOCK_MASK) return ; / 选中芯片 */ nand_select_chip(); for(i=start_addr; i (start_addr + size);) / 发出READ0命令 */
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1