[ZLG-ARM] U-boot-1.3.4移植详解(for mini2440)

[复制链接]
 楼主| reeper 发表于 2009-4-9 15:16 | 显示全部楼层 |阅读模式
一、移植准备:修改Makefile文件,在U-Boot中建立自己的开发板文件(以友善之臂的sbc2410x为基础)。<br />1&nbsp;解压u-boot-1.3.4,并进入u-boot目录,修改Makefile文件,添加开发板的配置选项。&nbsp;tar&nbsp;-xjvf&nbsp;u-boot-1.3.4.tar.bz2&nbsp;<br />cd&nbsp;u-boot-1.3.4<br />vi&nbsp;Makefile<br /><br /><br />in&nbsp;Makefile:<br /><br />#为mini2440建立配置项<br /><br />smdk2410_config&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;unconfig<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@$(MKCONFIG)&nbsp;$(@:_config=)&nbsp;arm&nbsp;arm920t&nbsp;smdk2410&nbsp;NULL&nbsp;s3c24x0<br /><br />mini2440_config&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;unconfig<br />&nbsp;&nbsp;&nbsp;&nbsp;@$(MKCONFIG)&nbsp;$(@:_config=)&nbsp;arm&nbsp;arm920t&nbsp;mini2440&nbsp;tekkamanninja&nbsp;s3c24x0<br /><br /><br /><br />各项的意思如下:<br />arm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;CPU的架构(ARCH)<br />arm920t&nbsp;:&nbsp;CPU的类型(CPU),其对应于cpu/arm920t子目录。<br />mini2440:&nbsp;开发板的型号(BOARD),对应于board/tekkamanninja/mini2440目录。<br />tekkamanninja:&nbsp;开发者/或经销商(vender)。<br />s3c24x0&nbsp;:&nbsp;片上系统(SOC)。&nbsp;<br /><br /><br />同时在“ifndef&nbsp;CROSS_COMPILE&nbsp;”之前加上自己交叉编译器的路径,比如我使用crosstool-0.43制作的基于2.6.27.4内核和gcc-4.1.1-glibc-2.3.2的ARM9TDMI交叉编译器,则:<br />CROSS_COMPILE=arm-9tdmi-linux-gnu-<br /><br /><br />别忘了在环境变量PATH中加上你的编译器路径!!!!<br /><br />特别注意:&nbsp;在u-boot1.3.3及以上版本Makefile有一定的变化,使得对于24x0处理器从nand启动的遇到问题。也就是网上有人说的:无法运行过lowlevel_init。其实这个问题是由于编译器将我们自己添加的用于nandboot的子函数nand_read_ll放到了4K之后造成的(到这不理解的话,请仔细看看24x0处理器nandboot原理)。我是在运行失败后,利用mini2440的4个LED调试发现u-boot根本没有完成自我拷贝,然后看了uboot根目录下的System.map文件就可知道原因。<br /><br />解决办法其实很简单:<br />将__LIBS&nbsp;:=&nbsp;$(subst&nbsp;$(obj),,$(LIBS))&nbsp;$(subst&nbsp;$(obj),,$(LIBBOARD))<br />改为__LIBS&nbsp;:=&nbsp;$(subst&nbsp;$(obj),,$(LIBBOARD))&nbsp;$(subst&nbsp;$(obj),,$(LIBS))<br /><br /><br /><br /><br />2&nbsp;在/board子目录中建立自己的开发板mini2440目录<br />由于我在上一步板子的开发者/或经销商(vender)中填了&nbsp;tekkamanninja&nbsp;,所以开发板mini2440目录一定要建在/board子目录中的tekkamanninja目录下&nbsp;,否则编译会出错。&nbsp;cd&nbsp;board<br />mkdir&nbsp;tekkamanninja&nbsp;tekkamanninja/mini2440<br />cp&nbsp;-arf&nbsp;sbc2410x/*&nbsp;tekkamanninja/mini2440/<br />cd&nbsp;tekkamanninja/mini2440/<br />mv&nbsp;sbc2410x.c&nbsp;mini2440.c<br /><br /><br /><br />还要记得修改自己的开发板mini2440目录下的Makefile文件,不然编译时会出错:<br /><br /><br />vi&nbsp;Makefile<br /><br /><br /><br />in&nbsp;Makefile:&nbsp;COBJS&nbsp;:=&nbsp;mini2440.o&nbsp;flash.o<br /><br /><br /><br />3&nbsp;在include/configs/中建立配置头文件<br />cd&nbsp;../../..<br />cp&nbsp;include/configs/sbc2410x.h&nbsp;include/configs/mini2440.h<br /><br /><br /><br />4&nbsp;测试编译能否成功<br />make&nbsp;mini2440_config<br />Configuring&nbsp;for&nbsp;mini2440&nbsp;board...<br />make<br /><br />测试编译成功后继续。&nbsp;&nbsp;可能出现的问题:<br />&nbsp;&nbsp;(1)&nbsp;如果出现:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$&nbsp;make&nbsp;mini2440_config<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Makefile:xxxx:&nbsp;***&nbsp;遗漏分隔符&nbsp;。&nbsp;停止。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;请在U-boot的根目录下的Makefile的<br />&nbsp;&nbsp;&nbsp;@$(MKCONFIG)&nbsp;$(@:_config=)&nbsp;arm&nbsp;arm920t&nbsp;mini2440&nbsp;tekkamanninja)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前加上“Tab”键&nbsp;<br /><br /><br /><br /><br />--------------------------------------------------------------------------------<br /><br /><br />二、修改U-Boot中的文件,以同时匹配2440和2410。<br />1&nbsp;修改/cpu/arm920t/start.S<br />(1)删除AT91RM9200使用的LED代码。<br />#include&nbsp;<br />#include&nbsp;<br />#if&nbsp;defined(CONFIG_AT91RM9200DK)<br />#include&nbsp;/*这是针对AT91RM9200DK开发板的。对于mini2440也有4个LED指示灯,我用来指示程序用行的进度。*/<br />#endif<br />......<br />/*<br />*&nbsp;the&nbsp;actual&nbsp;start&nbsp;code<br />*/<br /><br />start_code:<br />&nbsp;&nbsp;&nbsp;&nbsp;/*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;set&nbsp;the&nbsp;cpu&nbsp;to&nbsp;SVC32&nbsp;mode<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;mrs&nbsp;r0,cpsr<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;r0,r0,#0x1f<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;r0,r0,#0xd3<br />&nbsp;&nbsp;&nbsp;&nbsp;msr&nbsp;cpsr,r0<br />#if&nbsp;defined(CONFIG_AT91RM9200DK)<br />&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;coloured_LED_init<br />&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;red_LED_on<br />#endif<br /><br /><br /><br />(2)修改寄存器地址定义&nbsp;<br />#if&nbsp;defined(CONFIG_S3C2400)&nbsp;||&nbsp;defined(CONFIG_S3C2410)||&nbsp;defined(CONFIG_S3C2440)<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;turn&nbsp;off&nbsp;the&nbsp;watchdog&nbsp;*/<br /><br />#if&nbsp;defined(CONFIG_S3C2400)<br />#define&nbsp;pWTCON&nbsp;0x15300000<br />#define&nbsp;INTMSK&nbsp;0x14400008&nbsp;/*&nbsp;Interupt-Controller&nbsp;base&nbsp;addresses&nbsp;*/<br />#define&nbsp;CLKDIVN&nbsp;0x14800014&nbsp;/*&nbsp;clock&nbsp;divisor&nbsp;register&nbsp;*/<br />#else<br />#define&nbsp;pWTCON&nbsp;0x53000000<br />#define&nbsp;INTMSK&nbsp;0x4A000008&nbsp;/*&nbsp;Interupt-Controller&nbsp;base&nbsp;addresses&nbsp;*/<br />#define&nbsp;INTSUBMSK&nbsp;0x4A00001C<br />#define&nbsp;CLKDIVN&nbsp;0x4C000014&nbsp;/*&nbsp;clock&nbsp;divisor&nbsp;register&nbsp;*/<br />#endif<br />#define&nbsp;CLK_CTL_BASE&nbsp;0x4C000000&nbsp;/*&nbsp;tekkaman&nbsp;*/<br />#define&nbsp;MDIV_405&nbsp;0x7f&nbsp;&lt&lt&nbsp;12&nbsp;/*&nbsp;tekkaman&nbsp;*/<br />#define&nbsp;PSDIV_405&nbsp;0x21&nbsp;/*&nbsp;tekkaman&nbsp;*/<br />#define&nbsp;MDIV_200&nbsp;0xa1&nbsp;&lt&lt&nbsp;12&nbsp;/*&nbsp;tekkaman&nbsp;*/<br />#define&nbsp;PSDIV_200&nbsp;0x31&nbsp;/*&nbsp;tekkaman&nbsp;*/<br /><br /><br /><br />(3)修改中断禁止部分<br />#if&nbsp;defined(CONFIG_S3C2410)<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r1,&nbsp;=0x7ff&nbsp;/*根据2410芯片手册,INTSUBMSK有11位可用*/<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,&nbsp;=INTSUBMSK<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r1,&nbsp;[r0]<br />#endif<br />#if&nbsp;defined(CONFIG_S3C2440)<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r1,&nbsp;=0x7fff&nbsp;/*根据2440芯片手册,INTSUBMSK有15位可用*/<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,&nbsp;=INTSUBMSK<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r1,&nbsp;[r0]<br />#endif<br /><br /><br /><br />(4)修改时钟设置(2440的主频为405MHz。)<br />#&nbsp;if&nbsp;defined(CONFIG_S3C2440)<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;FCLK:HCLKCLK&nbsp;=&nbsp;1:4:8&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,&nbsp;=CLKDIVN<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r1,&nbsp;#5<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r1,&nbsp;[r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mrc&nbsp;p15,&nbsp;0,&nbsp;r1,&nbsp;c1,&nbsp;c0,&nbsp;0&nbsp;/*read&nbsp;ctrl&nbsp;register&nbsp;tekkaman*/<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;r1,&nbsp;r1,&nbsp;#0xc0000000&nbsp;/*Asynchronous&nbsp;tekkaman*/<br />&nbsp;&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,&nbsp;0,&nbsp;r1,&nbsp;c1,&nbsp;c0,&nbsp;0&nbsp;/*write&nbsp;ctrl&nbsp;register&nbsp;tekkaman*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*now,&nbsp;CPU&nbsp;clock&nbsp;is&nbsp;405.00&nbsp;Mhz&nbsp;tekkaman*/<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r1,&nbsp;#CLK_CTL_BASE&nbsp;/*&nbsp;tekkaman*/<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r2,&nbsp;#MDIV_405&nbsp;/*&nbsp;mpll_405mhz&nbsp;tekkaman*/<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;r2,&nbsp;r2,&nbsp;#PSDIV_405&nbsp;/*&nbsp;mpll_405mhz&nbsp;tekkaman*/<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r2,&nbsp;[r1,&nbsp;#0x04]&nbsp;/*&nbsp;MPLLCON&nbsp;tekkaman&nbsp;*/<br /><br />#else<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;FCLK:HCLKCLK&nbsp;=&nbsp;1:2:4&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;default&nbsp;FCLK&nbsp;is&nbsp;12&nbsp;MHz&nbsp;!&nbsp;在这里U-Boot有一个错误:以为默认时钟为120MHz。其实如果没有添加以下设置FCLK的语句,芯片内部的PLL是无效的,即FCLK为12MHz。S3C24x0的芯片手册说得很明白。我一开始没有注意到这一点,是&nbsp;CalmArrow提醒了我并和我讨论过,他也做过实验证实了这点。在这里对CalmArrow表示感谢和敬意!*/<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,&nbsp;=CLKDIVN<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r1,&nbsp;#3<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r1,&nbsp;[r0]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mrc&nbsp;p15,&nbsp;0,&nbsp;r1,&nbsp;c1,&nbsp;c0,&nbsp;0&nbsp;/*read&nbsp;ctrl&nbsp;register&nbsp;tekkaman*/<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;r1,&nbsp;r1,&nbsp;#0xc0000000&nbsp;/*Asynchronous&nbsp;tekkaman*/<br />&nbsp;&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,&nbsp;0,&nbsp;r1,&nbsp;c1,&nbsp;c0,&nbsp;0&nbsp;/*write&nbsp;ctrl&nbsp;register&nbsp;tekkaman*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*now,&nbsp;CPU&nbsp;clock&nbsp;is&nbsp;202.8&nbsp;Mhz&nbsp;tekkaman*/<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r1,&nbsp;#CLK_CTL_BASE&nbsp;/*&nbsp;tekkaman*/<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r2,&nbsp;#MDIV_200&nbsp;/*&nbsp;mpll_200mhz&nbsp;tekkaman*/<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;r2,&nbsp;r2,&nbsp;#PSDIV_200&nbsp;/*&nbsp;mpll_200mhz&nbsp;tekkaman*/<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r2,&nbsp;[r1,&nbsp;#0x04]&nbsp;<br /><br />#&nbsp;endif<br />#endif&nbsp;/*&nbsp;CONFIG_S3C2400&nbsp;||&nbsp;CONFIG_S3C2410||&nbsp;CONFIG_S3C2440&nbsp;*/<br /><br /><br /><br />(5)将从Flash启动改成从NAND&nbsp;Flash启动。<br />在以下U-Boot的重定向语句段(作用是将u-boot的源代码从nor&nbsp;flash到sdram中):&nbsp;#ifndef&nbsp;CONFIG_AT91RM9200<br /><br />#ifndef&nbsp;CONFIG_SKIP_RELOCATE_UBOOT<br />relocate:&nbsp;/*&nbsp;relocate&nbsp;U-Boot&nbsp;to&nbsp;RAM&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;adr&nbsp;r0,&nbsp;_start&nbsp;/*&nbsp;r0&nbsp;&lt-&nbsp;current&nbsp;position&nbsp;of&nbsp;code&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r1,&nbsp;_TEXT_BASE&nbsp;/*&nbsp;test&nbsp;if&nbsp;we&nbsp;run&nbsp;from&nbsp;flash&nbsp;or&nbsp;RAM&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;r0,&nbsp;r1&nbsp;/*&nbsp;don't&nbsp;reloc&nbsp;during&nbsp;debug&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;stack_setup<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r2,&nbsp;_armboot_start<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r3,&nbsp;_bss_start<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;r2,&nbsp;r3,&nbsp;r2&nbsp;/*&nbsp;r2&nbsp;&lt-&nbsp;size&nbsp;of&nbsp;armboot&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;r2,&nbsp;r0,&nbsp;r2&nbsp;/*&nbsp;r2&nbsp;&lt-&nbsp;source&nbsp;end&nbsp;address*/<br /><br />copy_loop:<br />&nbsp;&nbsp;&nbsp;&nbsp;ldmia&nbsp;{r3-r10}&nbsp;/*&nbsp;copy&nbsp;from&nbsp;source&nbsp;address&nbsp;[r0]&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;stmia&nbsp;{r3-r10}&nbsp;/*&nbsp;copy&nbsp;to&nbsp;target&nbsp;address&nbsp;[r1]&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;r0,&nbsp;r2&nbsp;/*&nbsp;until&nbsp;source&nbsp;end&nbsp;addreee&nbsp;[r2]&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;ble&nbsp;copy_loop<br />#endif&nbsp;/*&nbsp;CONFIG_SKIP_RELOCATE_UBOOT&nbsp;*/<br />#endif<br /><br /><br /><br />的前面添加上以下的nand&nbsp;boot代码:&nbsp;#ifdef&nbsp;CONFIG_S3C2440_NAND_BOOT<br /><br />#define&nbsp;NAND_CTL_BASE&nbsp;0x4E000000<br />/*&nbsp;Offset&nbsp;*/<br />#define&nbsp;oNFCONF&nbsp;0x00<br />#define&nbsp;oNFCONT&nbsp;0x04<br />#define&nbsp;oNFCMD&nbsp;0x08<br />#define&nbsp;oNFSTAT&nbsp;0x20<br />#define&nbsp;LENGTH_UBOOT&nbsp;0x40000<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;reset&nbsp;NAND<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;#NAND_CTL_BASE<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;=(&nbsp;(7&lt&lt12)|(7&lt&lt8)|(7&lt&lt4)|(0&lt&lt0)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONF]<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONF]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;=(&nbsp;(1&lt&lt4)|(0&lt&lt1)|(1&lt&lt0)&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;Active&nbsp;low&nbsp;CE&nbsp;Control&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONT]<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONT]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;=(0x6)&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;RnB&nbsp;Clear<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFSTAT]<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFSTAT]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;#0xff&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;RESET&nbsp;command<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCMD]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;#0&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;wait<br />nand1:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;r3,&nbsp;#0x1<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;#0xa<br />&nbsp;&nbsp;&nbsp;&nbsp;blt&nbsp;&nbsp;&nbsp;&nbsp;nand1<br /><br />nand2:<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFSTAT]&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;wait&nbsp;ready<br />&nbsp;&nbsp;&nbsp;&nbsp;tst&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;#0x4<br />&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;&nbsp;&nbsp;nand2<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONT]<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r2,&nbsp;#0x2&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;Flash&nbsp;Memory&nbsp;Chip&nbsp;Disable<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONT]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;get&nbsp;read&nbsp;to&nbsp;call&nbsp;C&nbsp;functions&nbsp;(for&nbsp;nand_read())<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;sp,&nbsp;DW_STACK_START&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;setup&nbsp;stack&nbsp;pointer<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;fp,&nbsp;#0&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;no&nbsp;previous&nbsp;frame,&nbsp;so&nbsp;fp=0<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;copy&nbsp;U-Boot&nbsp;to&nbsp;RAM<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=TEXT_BASE<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;#0x0<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;#LENGTH_UBOOT<br />&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;nand_read_ll<br />&nbsp;&nbsp;&nbsp;&nbsp;tst&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;#0x0<br />&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;&nbsp;&nbsp;ok_nand_read<br /><br />bad_nand_read:<br />loop2:<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;loop2&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;infinite&nbsp;loop<br /><br /><br />ok_nand_read:<br />&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;verify<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;#0<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;=TEXT_BASE<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;#0x400&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;4&nbsp;bytes&nbsp;*&nbsp;1024&nbsp;=&nbsp;4K-bytes<br />go_next:<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;[r0],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r4,&nbsp;[r1],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;teq&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;r4<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;&nbsp;&nbsp;&nbsp;notmatch<br />&nbsp;&nbsp;&nbsp;&nbsp;subs&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r2,&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;&nbsp;&nbsp;stack_setup<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;&nbsp;&nbsp;&nbsp;go_next<br /><br />notmatch:<br />loop3:<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;loop3&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;infinite&nbsp;loop<br /><br />#endif<br /><br />#ifdef&nbsp;&nbsp;&nbsp;&nbsp;CONFIG_S3C2410_NAND_BOOT<br /><br />#define&nbsp;NAND_CTL_BASE&nbsp;0x4E000000<br />/*&nbsp;Offset&nbsp;*/<br />#define&nbsp;oNFCONF&nbsp;0x00<br />#define&nbsp;oNFCMD&nbsp;0x04<br />#define&nbsp;oNFSTAT&nbsp;0x10<br />#define&nbsp;LENGTH_UBOOT&nbsp;0x40000<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;reset&nbsp;NAND<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;#NAND_CTL_BASE<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;=0xf830&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;initial&nbsp;value<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONF]<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONF]<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r2,&nbsp;#0x800&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;enable&nbsp;chip<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONF]<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;#0xff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;RESET&nbsp;command<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCMD]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;#0&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;wait<br />nand1:<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;r3,&nbsp;#0x1<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;#0xa<br />&nbsp;&nbsp;&nbsp;&nbsp;blt&nbsp;&nbsp;&nbsp;&nbsp;nand1<br /><br />nand2:<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFSTAT]&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;wait&nbsp;ready<br />&nbsp;&nbsp;&nbsp;&nbsp;tst&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;#0x1<br />&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;&nbsp;&nbsp;nand2<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONF]<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r2,&nbsp;#0x800&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;disable&nbsp;chip<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oNFCONF]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;get&nbsp;read&nbsp;to&nbsp;call&nbsp;C&nbsp;functions&nbsp;(for&nbsp;nand_read())<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;sp,&nbsp;DW_STACK_START&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;setup&nbsp;stack&nbsp;pointer<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;fp,&nbsp;#0&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;no&nbsp;previous&nbsp;frame,&nbsp;so&nbsp;fp=0<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;copy&nbsp;U-Boot&nbsp;to&nbsp;RAM<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=TEXT_BASE<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;#0x0<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;#LENGTH_UBOOT<br />&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;nand_read_ll<br />&nbsp;&nbsp;&nbsp;&nbsp;tst&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;#0x0<br />&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;&nbsp;&nbsp;ok_nand_read<br /><br />bad_nand_read:<br />loop2:<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;loop2&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;infinite&nbsp;loop<br /><br /><br />ok_nand_read:<br />&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;verify<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;#0<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;=TEXT_BASE<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;#0x400&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;4&nbsp;bytes&nbsp;*&nbsp;1024&nbsp;=&nbsp;4K-bytes<br />go_next:<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;[r0],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r4,&nbsp;[r1],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;teq&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;r4<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;&nbsp;&nbsp;&nbsp;notmatch<br />&nbsp;&nbsp;&nbsp;&nbsp;subs&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r2,&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;&nbsp;&nbsp;stack_setup<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;&nbsp;&nbsp;&nbsp;go_next<br /><br />notmatch:<br />loop3:<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;loop3&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;infinite&nbsp;loop<br /><br />#endif<br /><br /><br /><br />在“ldr&nbsp;&nbsp;&nbsp;&nbsp;pc,&nbsp;_start_armboot”之前加入:<br /><br />#if&nbsp;defined(CONFIG_MINI2440_LED)<br />#define&nbsp;GPIO_CTL_BASE&nbsp;0x56000000<br />#define&nbsp;oGPIO_B&nbsp;0x10<br />#define&nbsp;oGPIO_CON&nbsp;0x0<br />/*&nbsp;R/W,&nbsp;Configures&nbsp;the&nbsp;pins&nbsp;of&nbsp;the&nbsp;port&nbsp;*/<br />#define&nbsp;oGPIO_DAT&nbsp;0x4<br />#define&nbsp;oGPIO_UP&nbsp;0x8<br />/*&nbsp;R/W,&nbsp;Pull-up&nbsp;disable&nbsp;register&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;#GPIO_CTL_BASE<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;r1,&nbsp;#oGPIO_B<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;=0x295551<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oGPIO_CON]<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;#0xff<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oGPIO_UP]<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;=0x1c1<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1,&nbsp;#oGPIO_DAT]<br />#endif<br /><br /><br /><br />&nbsp;&nbsp;修改目的:如果看到只有LED1亮了,并响起蜂鸣器,说明U-Boot的第一阶段已完成!(针对mini2440,若不是这块开发板的,必须修改或不添加)&nbsp;<br /><br /><br />在&nbsp;“&nbsp;&nbsp;_start_armboot:&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;start_armboot&nbsp;&nbsp;”&nbsp;后加入:&nbsp;#define&nbsp;STACK_BASE&nbsp;0x33f00000<br />#define&nbsp;STACK_SIZE&nbsp;0x10000<br />&nbsp;&nbsp;&nbsp;&nbsp;.align&nbsp;&nbsp;&nbsp;&nbsp;2<br />DW_STACK_START:&nbsp;&nbsp;&nbsp;&nbsp;.word&nbsp;&nbsp;&nbsp;&nbsp;STACK_BASE+STACK_SIZE-4&nbsp;<br /><br /><br /><br />2&nbsp;&nbsp;在board/tekkamaninija/mini2440加入NAND&nbsp;Flash读取函数(start.S中需要的nand_read_ll函数)文件nand_read.c<br />nand_read.c:&nbsp;#include&nbsp;<br /><br />#define&nbsp;__REGb(x)&nbsp;(*(volatile&nbsp;unsigned&nbsp;char&nbsp;*)(x))<br />#define&nbsp;__REGi(x)&nbsp;(*(volatile&nbsp;unsigned&nbsp;int&nbsp;*)(x))<br />#define&nbsp;NF_BASE&nbsp;0x4e000000<br />#define&nbsp;NFCONF&nbsp;__REGi(NF_BASE&nbsp;+&nbsp;0x0)<br /><br />#if&nbsp;defined(CONFIG_S3C2440)<br /><br />#define&nbsp;NFCONT&nbsp;__REGi(NF_BASE&nbsp;+&nbsp;0x4)<br />#define&nbsp;NFCMD&nbsp;__REGb(NF_BASE&nbsp;+&nbsp;0x8)<br />#define&nbsp;NFADDR&nbsp;__REGb(NF_BASE&nbsp;+&nbsp;0xC)<br />#define&nbsp;NFDATA&nbsp;__REGb(NF_BASE&nbsp;+&nbsp;0x10)<br />#define&nbsp;NFSTAT&nbsp;__REGb(NF_BASE&nbsp;+&nbsp;0x20)<br /><br />#define&nbsp;NAND_CHIP_ENABLE&nbsp;(NFCONT&nbsp;&=&nbsp;~(1&lt&lt1))<br />#define&nbsp;NAND_CHIP_DISABLE&nbsp;(NFCONT&nbsp;|=&nbsp;(1&lt&lt1))<br />#define&nbsp;NAND_CLEAR_RB&nbsp;(NFSTAT&nbsp;|=&nbsp;(1&lt&lt2))<br />#define&nbsp;NAND_DETECT_RB&nbsp;{&nbsp;while(!&nbsp;(NFSTAT&(1&lt&lt2)));}<br /><br />/*&nbsp;low&nbsp;level&nbsp;nand&nbsp;read&nbsp;function&nbsp;*/<br />int<br />nand_read_ll(unsigned&nbsp;char&nbsp;*buf,&nbsp;unsigned&nbsp;long&nbsp;start_addr,&nbsp;int&nbsp;size)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((start_addr&nbsp;&&nbsp;NAND_BLOCK_MASK)&nbsp;||&nbsp;(size&nbsp;&&nbsp;NAND_BLOCK_MASK))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;invalid&nbsp;alignment&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;NAND_CHIP_ENABLE;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=start_addr;&nbsp;i&nbsp;&lt&nbsp;(start_addr&nbsp;+&nbsp;size);)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;READ0&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NAND_CLEAR_RB;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NFCMD&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Write&nbsp;Address&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NFADDR&nbsp;=&nbsp;i&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NFADDR&nbsp;=&nbsp;(i&nbsp;&gt&gt&nbsp;9)&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NFADDR&nbsp;=&nbsp;(i&nbsp;&gt&gt&nbsp;17)&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NFADDR&nbsp;=&nbsp;(i&nbsp;&gt&gt&nbsp;25)&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NAND_DETECT_RB;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;&nbsp;j&nbsp;&lt&nbsp;NAND_SECTOR_SIZE;&nbsp;j++,&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*buf&nbsp;=&nbsp;(NFDATA&nbsp;&&nbsp;0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;NAND_CHIP_DISABLE;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}&nbsp;<br />#endif<br /><br />#if&nbsp;defined(CONFIG_S3C2410)<br /><br />#define&nbsp;NFCMD&nbsp;__REGb(NF_BASE&nbsp;+&nbsp;0x4)<br />#define&nbsp;NFADDR&nbsp;__REGb(NF_BASE&nbsp;+&nbsp;0x8)<br />#define&nbsp;NFDATA&nbsp;__REGb(NF_BASE&nbsp;+&nbsp;0xc)<br />#define&nbsp;NFSTAT&nbsp;__REGb(NF_BASE&nbsp;+&nbsp;0x10)<br />#define&nbsp;BUSY&nbsp;1<br /><br />inline&nbsp;void&nbsp;wait_idle(void)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!(NFSTAT&nbsp;&&nbsp;BUSY))<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt10;&nbsp;i++);<br />}<br />/*&nbsp;low&nbsp;level&nbsp;nand&nbsp;read&nbsp;function&nbsp;*/<br />int<br />nand_read_ll(unsigned&nbsp;char&nbsp;*buf,&nbsp;unsigned&nbsp;long&nbsp;start_addr,&nbsp;int&nbsp;size)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((start_addr&nbsp;&&nbsp;NAND_BLOCK_MASK)&nbsp;||&nbsp;(size&nbsp;&&nbsp;NAND_BLOCK_MASK))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;invalid&nbsp;alignment&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;chip&nbsp;Enable&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;NFCONF&nbsp;&=&nbsp;~0x800;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;&nbsp;i&lt10;&nbsp;i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=start_addr;&nbsp;i&nbsp;&lt&nbsp;(start_addr&nbsp;+&nbsp;size);)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;READ0&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;NFCMD&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Write&nbsp;Address&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;NFADDR&nbsp;=&nbsp;i&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;NFADDR&nbsp;=&nbsp;(i&nbsp;&gt&gt&nbsp;9)&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;NFADDR&nbsp;=&nbsp;(i&nbsp;&gt&gt&nbsp;17)&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;NFADDR&nbsp;=&nbsp;(i&nbsp;&gt&gt&nbsp;25)&nbsp;&&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;wait_idle();<br />&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;&nbsp;j&nbsp;&lt&nbsp;NAND_SECTOR_SIZE;&nbsp;j++,&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;*buf&nbsp;=&nbsp;(NFDATA&nbsp;&&nbsp;0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;buf++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;chip&nbsp;Disable&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;NFCONF&nbsp;|=&nbsp;0x800;&nbsp;/*&nbsp;chip&nbsp;disable&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br />#endif<br /><br /><br /><br />顺便修改board/tekkamanninja/mini2440/Makefile文件,将nand_read.c编译进u-boot。<br />OBJS&nbsp;:=&nbsp;mini2440.o&nbsp;nand_read.o&nbsp;flash.o<br /><br /><br /><br />3&nbsp;修改board/tekkamanninja/mini2440/lowlevel_init.S文件<br />/*&nbsp;REFRESH&nbsp;parameter&nbsp;*/<br />#define&nbsp;REFEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x1&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Refresh&nbsp;enable&nbsp;*/<br />#define&nbsp;TREFMD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;CBR(CAS&nbsp;before&nbsp;RAS)/Auto&nbsp;refresh&nbsp;*/<br />#define&nbsp;Trc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x3&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;7clk&nbsp;*/<br />#define&nbsp;Tchr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x2&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;3clk&nbsp;*/<br /><br />#if&nbsp;defined(CONFIG_S3C2440)<br />#define&nbsp;Trp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x2&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;4clk&nbsp;*/<br />#define&nbsp;REFCNT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1012<br />#else<br />#define&nbsp;Trp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;2clk&nbsp;*/<br />#define&nbsp;REFCNT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0459<br />#endif<br /><br /><br />4&nbsp;修改/board/tekkamanninja/mini2440/mini2440.c<br />修改其对GPIO和PLL的配置(请参阅开发板的硬件说明和芯片手册);并针对LCD显示部分和nand&nbsp;flash驱动添加相应的代码:&nbsp;......<br />#include&nbsp;<br />#include&nbsp;<br />#include&nbsp;<br /><br />#if&nbsp;defined(CONFIG_CMD_NAND)<br />#include&nbsp;<br />#endif<br /><br />DECLARE_GLOBAL_DATA_PTR;<br /><br />#define&nbsp;FCLK_SPEED&nbsp;1<br /><br />#if&nbsp;FCLK_SPEED==0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Fout&nbsp;=&nbsp;203MHz,&nbsp;Fin&nbsp;=&nbsp;12MHz&nbsp;for&nbsp;Audio&nbsp;*/<br />#define&nbsp;M_MDIV&nbsp;&nbsp;&nbsp;&nbsp;0xC3<br />#define&nbsp;M_PDIV&nbsp;&nbsp;&nbsp;&nbsp;0x4<br />#define&nbsp;M_SDIV&nbsp;&nbsp;&nbsp;&nbsp;0x1<br />#elif&nbsp;FCLK_SPEED==1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Fout&nbsp;=&nbsp;202.8MHz&nbsp;*/<br /><br />#if&nbsp;defined(CONFIG_S3C2410)<br />/*&nbsp;Fout&nbsp;=&nbsp;202.8MHz&nbsp;*/<br />#define&nbsp;M_MDIV&nbsp;&nbsp;&nbsp;&nbsp;0xA1<br />#define&nbsp;M_PDIV&nbsp;&nbsp;&nbsp;&nbsp;0x3<br />#define&nbsp;M_SDIV&nbsp;&nbsp;&nbsp;&nbsp;0x1<br />#endif<br /><br />#if&nbsp;defined(CONFIG_S3C2440)<br />/*&nbsp;Fout&nbsp;=&nbsp;405MHz&nbsp;*/<br />#define&nbsp;M_MDIV&nbsp;0x7f&nbsp;&nbsp;&nbsp;&nbsp;<br />#define&nbsp;M_PDIV&nbsp;0x2<br />#define&nbsp;M_SDIV&nbsp;0x1<br />#endif<br />#endif<br /><br />#define&nbsp;USB_CLOCK&nbsp;1<br /><br />#if&nbsp;USB_CLOCK==0<br />#define&nbsp;U_M_MDIV&nbsp;&nbsp;&nbsp;&nbsp;0xA1<br />#define&nbsp;U_M_PDIV&nbsp;&nbsp;&nbsp;&nbsp;0x3<br />#define&nbsp;U_M_SDIV&nbsp;&nbsp;&nbsp;&nbsp;0x1<br />#elif&nbsp;USB_CLOCK==1<br /><br />#if&nbsp;defined(CONFIG_S3C2410)<br />#define&nbsp;U_M_MDIV&nbsp;&nbsp;&nbsp;&nbsp;0x48<br />#define&nbsp;U_M_PDIV&nbsp;&nbsp;&nbsp;&nbsp;0x3<br />#endif<br /><br />#if&nbsp;defined(CONFIG_S3C2440)<br />#define&nbsp;U_M_MDIV&nbsp;0x38<br />#define&nbsp;U_M_PDIV&nbsp;0x2<br />#endif<br /><br />#define&nbsp;U_M_SDIV&nbsp;&nbsp;&nbsp;&nbsp;0x2<br />#endif<br />......<br /><br /><br /><br />为连接LED和蜂鸣器的GPIO修改配置寄存器:<br /><br />int&nbsp;board_init&nbsp;(void):<br /><br />......<br /><br />#if&nbsp;defined(CONFIG_MINI2440)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;gpio-&gtGPBCON&nbsp;=&nbsp;0x00295551;<br />#else<br />&nbsp;&nbsp;&nbsp;&nbsp;gpio-&gtGPBCON&nbsp;=&nbsp;0x00044556;<br />#endif<br />......<br /><br /><br /><br />为引导linux&nbsp;内核,修改开发板的类型代码:<br /><br />int&nbsp;board_init&nbsp;(void):<br /><br /><br />......<br /><br />#if&nbsp;defined(CONFIG_S3C2410)<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;arch&nbsp;number&nbsp;of&nbsp;SMDK2410-Board&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;gd-&gtbd-&gtbi_arch_number&nbsp;=&nbsp;MACH_TYPE_SMDK2410;<br />#endif<br /><br />#if&nbsp;defined(CONFIG_S3C2440)<br />/*&nbsp;arch&nbsp;number&nbsp;of&nbsp;S3C2440-Board&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;gd-&gtbd-&gtbi_arch_number&nbsp;=&nbsp;MACH_TYPE_S3C2440&nbsp;;<br />#endif<br /><br />......<br /><br /><br /><br />为使int&nbsp;board_init&nbsp;(void)设置完成后,LED1和LED2同时亮起,蜂鸣器继续鸣叫,在int&nbsp;board_init&nbsp;(void)的最后添加:&nbsp;......<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;icache_enable();<br />&nbsp;&nbsp;&nbsp;&nbsp;dcache_enable();<br />#if&nbsp;&nbsp;&nbsp;&nbsp;defined(CONFIG_MINI2440_LED)<br />&nbsp;&nbsp;&nbsp;&nbsp;gpio-&gtGPBDAT&nbsp;=&nbsp;0x00000181;<br />#endif<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br /><br /><br /><br /><br /><br />针对LCD显示部分,在int&nbsp;board_init&nbsp;(void)函数后添加2440的LCD控制器的初始化代码:&nbsp;#define&nbsp;MVAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0)<br />#define&nbsp;MVAL_USED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0=each&nbsp;frame&nbsp;1=rate&nbsp;by&nbsp;MVAL<br />#define&nbsp;INVVDEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//0=normal&nbsp;1=inverted<br />#define&nbsp;BSWP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte&nbsp;swap&nbsp;control<br />#define&nbsp;HWSWP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Half&nbsp;word&nbsp;swap&nbsp;control<br /><br /><br />//TFT&nbsp;240320<br />#define&nbsp;LCD_XSIZE_TFT_240320&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(240)&nbsp;&nbsp;&nbsp;&nbsp;<br />#define&nbsp;LCD_YSIZE_TFT_240320&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(320)<br /><br />//TFT240320<br />#define&nbsp;HOZVAL_TFT_240320&nbsp;&nbsp;&nbsp;&nbsp;(LCD_XSIZE_TFT_240320-1)<br />#define&nbsp;LINEVAL_TFT_240320&nbsp;&nbsp;&nbsp;&nbsp;(LCD_YSIZE_TFT_240320-1)<br /><br />//Timing&nbsp;parameter&nbsp;for&nbsp;NEC3.5'<br /><br />#define&nbsp;VBPD_240320&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />#define&nbsp;VFPD_240320&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(10)<br />#define&nbsp;VSPW_240320&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)<br /><br />#define&nbsp;HBPD_240320&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(5)<br />#define&nbsp;HFPD_240320&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)<br />#define&nbsp;HSPW_240320&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(36)<br /><br />#define&nbsp;CLKVAL_TFT_240320&nbsp;&nbsp;&nbsp;&nbsp;(3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//FCLK=101.25MHz,HCLK=50.625MHz,VCLK=6.33MHz<br /><br /><br />void&nbsp;board_video_init(GraphicDevice&nbsp;*pGD)&nbsp;<br />{&nbsp;<br />S3C24X0_LCD&nbsp;*&nbsp;const&nbsp;lcd&nbsp;=&nbsp;S3C24X0_GetBase_LCD();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />/*&nbsp;FIXME:&nbsp;select&nbsp;LCM&nbsp;type&nbsp;by&nbsp;env&nbsp;variable&nbsp;*/&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Configuration&nbsp;for&nbsp;GTA01&nbsp;LCM&nbsp;on&nbsp;QT2410&nbsp;*/&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd-&gtLCDCON1&nbsp;=&nbsp;0x00000378;&nbsp;/*&nbsp;CLKVAL=4,&nbsp;BPPMODE=16bpp,&nbsp;TFT,&nbsp;ENVID=0&nbsp;*/&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd-&gtLCDCON2&nbsp;=&nbsp;(VBPD_240320&lt&lt24)|(LINEVAL_TFT_240320&lt&lt14)|(VFPD_240320&lt&lt6)|(VSPW_240320);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd-&gtLCDCON3&nbsp;=&nbsp;(HBPD_240320&lt&lt19)|(HOZVAL_TFT_240320&lt&lt8)|(HFPD_240320);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd-&gtLCDCON4&nbsp;=&nbsp;(MVAL&lt&lt8)|(HSPW_240320);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd-&gtLCDCON5&nbsp;=&nbsp;0x00000f09;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;lcd-&gtLPCSEL&nbsp;=&nbsp;0x00000000;&nbsp;<br />}<br /><br /><br /><br />为nand&nbsp;flash驱动屏蔽相应的代码,因为此次使用的是u-boot从Linux移植来的代码,而不是原来的nand_legacy驱动:&nbsp;#if&nbsp;0<br />#if&nbsp;defined(CONFIG_CMD_NAND)<br />extern&nbsp;ulong&nbsp;nand_probe(ulong&nbsp;physadr);<br /><br />static&nbsp;inline&nbsp;void&nbsp;NF_Reset(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NF_SetCE(NFCE_LOW);<br />&nbsp;&nbsp;&nbsp;&nbsp;NF_Cmd(0xFF);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;reset&nbsp;command&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;10;&nbsp;i++);&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;tWB&nbsp;=&nbsp;100ns.&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;NF_WaitRB();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;wait&nbsp;200~500us;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;NF_SetCE(NFCE_HIGH);<br />}<br /><br />static&nbsp;inline&nbsp;void&nbsp;NF_Init(void)<br />{<br />#if&nbsp;1<br />#define&nbsp;TACLS&nbsp;0<br />#define&nbsp;TWRPH0&nbsp;3<br />#define&nbsp;TWRPH1&nbsp;0<br />#else<br />#define&nbsp;TACLS&nbsp;0<br />#define&nbsp;TWRPH0&nbsp;4<br />#define&nbsp;TWRPH1&nbsp;2<br />#endif<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NF_Conf((1&lt&lt15)|(0&lt&lt14)|(0&lt&lt13)|(1&lt&lt12)|(1&lt&lt11)|(TACLS&lt&lt8)|(TWRPH0&lt&lt4)|(TWRPH1&lt&lt0));<br />&nbsp;&nbsp;&nbsp;&nbsp;/*nand-&gtNFCONF&nbsp;=&nbsp;(1&lt&lt15)|(1&lt&lt14)|(1&lt&lt13)|(1&lt&lt12)|(1&lt&lt11)|(TACLS&lt&lt8)|(TWRPH0&lt&lt4)|(TWRPH1&lt&lt0);&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;1&nbsp;1&nbsp;1&nbsp;1,&nbsp;1&nbsp;xxx,&nbsp;r&nbsp;xxx,&nbsp;r&nbsp;xxx&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;En&nbsp;512B&nbsp;4step&nbsp;ECCR&nbsp;nFCE=H&nbsp;tACLS&nbsp;tWRPH0&nbsp;tWRPH1&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NF_Reset();<br />}<br /><br />void&nbsp;nand_init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;S3C2410_NAND&nbsp;*&nbsp;const&nbsp;nand&nbsp;=&nbsp;S3C2410_GetBase_NAND();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;NF_Init();<br />#ifdef&nbsp;DEBUG<br />&nbsp;&nbsp;&nbsp;&nbsp;printf('NAND&nbsp;flash&nbsp;probing&nbsp;at&nbsp;0x%.8lX<br />',&nbsp;(ulong)nand);<br />#endif<br />&nbsp;&nbsp;&nbsp;&nbsp;printf&nbsp;('%4lu&nbsp;MB<br />',&nbsp;nand_probe((ulong)nand)&nbsp;&gt&gt&nbsp;20);<br />}<br />#endif<br /><br />#endif<br />&nbsp;<br /> &nbsp;<br />
zcying 发表于 2009-4-9 15:17 | 显示全部楼层

u-boot功能很强大。现在基本不用vivi了

  
胡刚 发表于 2009-4-14 15:54 | 显示全部楼层

学习,感谢!

  
acertm 发表于 2009-5-18 14:08 | 显示全部楼层

2440的?

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

139

主题

185

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部