u-boot-2012.04移植

发布时间:2024-07-26  

开发平台:x86 redhat5.5
目标平台:SMDK6410

注意:

    该文档是移植完成之后的总结,所以并非按照真正的移植步骤所写, 只做参考
    修改完成后运行make进行编译,把编译生成的u-boot-nand.bin烧写到nand的0-0x40000后即可切换为nand启动方式来运行
    在uboot启动后手动添加环境变量
    [zhangsan@nand]# set ipaddr 192.168.1.20
    [zhangsan@nand]# set serverip 192.168.1.254
    [zhangsan@nand]# set ethaddr 11:22:33:44:55:66
    这些变量也可在smdk6400.h中以宏的方式定义
    经测试,nand、tftp等命令都好用,如有问题请发邮箱:
    lizhiyong_beyond@163.com

以下为文件中修改的部分

一、修改u-boot-2012.04/arch/arm/cpu/arm1176/start.S
    在132行添加如下,目的是找到命令段
    132 .global uboot_cmd_start
    133 uboot_cmd_start:
    134         .word __u_boot_cmd_start - _start
    135 .global uboot_cmd_end
    136 uboot_cmd_end:
    137         .word __u_boot_cmd_end - _start

    注释掉386行,如下
    @add     lr, lr, r9

二、修改u-boot-2012.04/arch/arm/lib/board.c
    在373到375行之间添加如下
    372         addr -= gd->mon_len;
    373         //myself
    374         addr = 0x57e00000;
    375         //myself
    376         addr &= ~(4096 - 1);
    
    把530到532行修改如下,因为该开发板没有NOR    
    530                 puts("0K");
    531                 //puts(failed);
    532                 //hang();

 
三、修改u-boot-2012.04/arch/arm/lib/eabi_compat.c
    注释掉第17行如下,该问题以后再解决
    14int raise (int signum)
     15 {
     16 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_
    LIBCOMMON_SUPPORT)
     17 //      printf("raise: Signal # %d caughtn", signum)    ;
     18 #endif
     19         return 0;
     20 }

四、修改u-boot-2012.04/board/samsung/smdk6400/lowlevel_init.S
    把第54到63行删除
    在第54行到66行添加如下
    这段代码的目的在于测试程序是否能执行到此,如果能则开发板的四个led都亮
    55         ldr     r0, =0x7f008820
    56         ldr     r1, [r0]
    57         ldr     r2, =0xffff
    58         bic     r1, r1, r2
    59         orr     r1, r1, #0x11
    60         orr     r1, r1, #0x1100
    61         str     r1, [r0]
    62         /* LED ALL ON */
    63         ldr     r1, =0x7f008824
    64         ldr     r2, [r1]
    65         bic     r2, r2, #0xf
    66         str     r1, [r2]

 
五、修改u-boot-2012.04/board/samsung/smdk6400/smdk6400.c
    把board_eth_init函数修改如下,目的在于把DM9000网卡替换CS8900网卡
    126 int board_eth_init(bd_t *bis)
    127 {
    128         int rc = 0;
    129 #ifdef CONFIG_DM9000
    130         rc = dm9000_initialize(bis);
    131 #endif
    132 #ifdef CONFIG_CS8900
    133         rc = cs8900_initialize(0, CONFIG_CS8900_BASE)    ;
    134 #endif
    135         return rc;
    136 }

六、修改u-boot-2012.04/board/samsung/smdk6400/smdk6400_nand_spl.c
    把board_init_f函数修改如下
    33 void board_init_f(unsigned long bootflag)
     34 {
     35 //      relocate_code(CONFIG_SYS_TEXT_BASE - TOTAL_MA    LLOC_LEN, NULL,
     36 //                      CONFIG_SYS_TEXT_BASE);
     37         relocate_code(0x2000, NULL, CONFIG_SYS_TEXT_B    ASE);
     38 }

七、修改u-boot-2012.04/common/command.c
    修改find_cmd函数如下,目的在于寻找命令段
    138 cmd_tbl_t *find_cmd (const char *cmd)
    139 {
    140         int start, end;
    141         int text_start;
    142 //      int len = &__u_boot_cmd_end - &__u_boot_cmd_start;
    143         __asm__ __volatile__(
    144                 "ldr r0, =uboot_cmd_startn"
    145                 "ldr %0, [r0]n"
    146                 "ldr r0, =uboot_cmd_endn"
    147                 "ldr %1, [r0]n"
    148                 "ldr %2, =_startn"
    149                 :"=&r"(start), "=&r"(end), "=&r"(text_start)
    150                 :
    151                 :"r0"
    152         );
    153         return find_cmd_tbl(cmd, start + text_start, (end - start) /
    sizeof(cmd_tbl_t));
    154 //      return find_cmd_tbl(cmd, &__u_boot_cmd_start, len);
    155 }

八、修改u-boot-2012.04/include/configs/smdk6400.h
    把81到83行注释掉,目的是取消CS8900网卡
    添加85到90行如下,目的是添加DM9000网卡支持
    81 //#define CONFIG_CS8900     /* we have a CS8900 on-board    */
     82 //#define CONFIG_CS8900_BASE            0x18800300
     83 //#define CONFIG_CS8900_BUS16 /* follow the Linux driver      */
     84
     85 #define CONFIG_DM9000
     86 #define CONFIG_DRIVER_DM9000
     87 #define CONFIG_DM9000_BASE 0X18000000
     88 #define DM9000_IO CONFIG_DM9000_BASE
     89 #define DM9000_DATA (CONFIG_DM9000_BASE + 4)
     90 #define CONFIG_DM9000_BUS16
    
    在114行到117行添加如下,目的在于打开网络支持和ping命令
    114 //mysefl
    115 #define CONFIG_CMD_NET
    116 #define CONFIG_CMD_PING
    117 //myself
 
    把164行修改如下,目的在于修改uboot的shell名字
    164 #define CONFIG_SYS_PROMPT "[zhangsan@nand]# "


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>