uboot移植文档.doc

上传人:hw****26 文档编号:3553043 上传时间:2019-06-04 格式:DOC 页数:10 大小:55.50KB
下载 相关 举报
uboot移植文档.doc_第1页
第1页 / 共10页
uboot移植文档.doc_第2页
第2页 / 共10页
uboot移植文档.doc_第3页
第3页 / 共10页
uboot移植文档.doc_第4页
第4页 / 共10页
uboot移植文档.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、以前一直在用 vivi,很精简很方便,源码很好懂,想改什么就改什么,但是功能差了点,所以移植个 uboot 来跑跑,uboot 很好很强大,但是想搞清它的机制有点困难,先移植个最简单的试试,还没有增加对 yaffs 的支持和 usb 下载,遇到一些小问题也都解决了。我用的 2440 开发板,取名为 TX2440。解压 U-BOOT-1.1.6,进入 U-BOOT 目录,修改 Makefile:在 smdk2410_config : unconfig$(MKCONFIG) $(:_config=) arm arm920t smdk2410 NULL s3c24x0加上TX2440_config

2、: unconfig$(MKCONFIG) $(:_config=) arm arm920t TX2440 NULL s3c24x0各项的意思如下:arm: CPU 的架构(ARCH)arm920t: CPU 的类型(CPU),其对应于 cpu/arm920t 子目录。TX2440: 开发板的型号(BOARD),对应于 board/TX2440 目录。NULL: 开发者/或经销商(vender)。s3c24x0: 片上系统(SOC)。在第 128 行:ifeq ($(ARCH),arm)CROSS_COMPILE = arm-linux-指定交叉编译器,我使用的是 3.4.1,这里也可以写绝对

3、路径修改完 Makefile 后,在 board 目录下,新建自己的开发板目录 TX2440,把smdk2410 目录下的所有文件拷到 TX2440,把 smdk2410.c 改为 TX2440.c。修改该目录下的 Makefile,把 smdk2410.o 改为 TX2410.o。COBJS := TX2440.o flash.o将 board 目录下所有文件夹全部删除,只留 TX2440在 include/configs 目录下创建板子的配置头文件,把 smdk2410.h 改名为TX2440.h,再把所有的文件全部删除,只留 TX2440.h测试能否编译成功:执行 make TX2440

4、_config出现 make: execvp: /mkconfig: 权限不够查看 mkconfig 的权限,发现没有可执行权限,用 chmod 764 mkconfig 加上权限然后再 make,成功后可出现 Configuring for TX2440 board.修改 SDRAM 配置,在 board/TX2440/lowlevel_init.S 中,检查#define B6_BWSCON (DW32) 位宽为 32把 B1_BWSCON 改为(DW16) B5_BWSCON 改为(DW8)根据 HCLK 设置 SDRAM 的刷新参数,主要是 REFCNT 寄存器,开发板 HCLK 为1

5、00M将 #define REFCNT 0x1113 改为 #define REFCNT 0x4f4增加对 S3C2440 的支持,2440 的时钟计算公式、NAND 操作和 2410 不太一样。对于 2440 开发板,将 FCLK 设为 400MHz,分频比为FCLK:HCLK:PCLK=1:4:8。修改 board/TX2440/TX2440.c 中的 board_init 函数/* S3C2440: Mpll,Upll = (2*m * Fin) / (p * 2s) * m = M (the value for divider M)+ 8, p = P (the value for d

6、ivider P) + 2*/#define S3C2440_MPLL_400MHZ (0x7fGPACON = 0x007FFFFF;gpio-GPBCON = 0x00044555;gpio-GPBUP = 0x000007FF;gpio-GPCCON = 0xAAAAAAAA;gpio-GPCUP = 0x0000FFFF;gpio-GPDCON = 0xAAAAAAAA;gpio-GPDUP = 0x0000FFFF;gpio-GPECON = 0xAAAAAAAA;gpio-GPEUP = 0x0000FFFF;gpio-GPFCON = 0x000055AA;gpio-GPFUP

7、= 0x000000FF;gpio-GPGCON = 0xFF95FFBA;gpio-GPGUP = 0x0000FFFF;gpio-GPHCON = 0x002AFAAA;gpio-GPHUP = 0x000007FF;/*support both of S3C2410 and S3C2440*/if (gpio-GSTATUS1 = 0x32410000) | (gpio-GSTATUS1 = 0x32410002)/*FCLK:HCLK:PCLK = 1:2:4*/clk_power-CLKDIVN = S3C2410_CLKDIV;/* change to asynchronous b

8、us mod */_asm_( “mrc p15, 0, r1, c1, c0, 0/n“ /* read ctrl register */ “orr r1, r1, #0xc0000000/n“ /* Asynchronous */ “mcr p15, 0, r1, c1, c0, 0/n“ /* write ctrl register */ :“r1“);/* to reduce PLL lock time, adjust the LOCKTIME register */clk_power-LOCKTIME = 0xFFFFFF;/* configure MPLL */clk_power-

9、MPLLCON = S3C2410_MPLL_200MHZ;/* some delay between MPLL and UPLL */delay (4000);/* configure UPLL */clk_power-UPLLCON = S3C2410_UPLL_48MHZ;/* some delay between MPLL and UPLL */delay (8000);/* arch number of SMDK2410-Board */gd-bd-bi_arch_number = MACH_TYPE_SMDK2410;else/* FCLK:HCLK:PCLK = 1:4:8 */

10、clk_power-CLKDIVN = S3C2440_CLKDIV;/* change to asynchronous bus mod */_asm_( “mrc p15, 0, r1, c1, c0, 0/n“ /* read ctrl register */ “orr r1, r1, #0xc0000000/n“ /* Asynchronous */ “mcr p15, 0, r1, c1, c0, 0/n“ /* write ctrl register */ :“r1“);/* to reduce PLL lock time, adjust the LOCKTIME register

11、*/clk_power-LOCKTIME = 0xFFFFFF;/* configure MPLL */clk_power-MPLLCON = S3C2440_MPLL_400MHZ;/* some delay between MPLL and UPLL */delay (4000);/* configure UPLL */clk_power-UPLLCON = S3C2440_UPLL_48MHZ;/* some delay between MPLL and UPLL */delay (8000);/* arch number of SMDK2440-Board */gd-bd-bi_arc

12、h_number = MACH_TYPE_S3C2440;/* adress of boot parameters */gd-bd-bi_boot_params = 0x30000100;icache_enable();dcache_enable();return 0;在 cpu/arm920t/s3c24X0/speed.c 中修改:在程序开头增加一行 DECLARE_GLOBAL_DATA_PTR;,这样才可以使用 gd 变量修改 get_PLLCLK 函数:static ulong get_PLLCLK(int pllreg)S3C24X0_CLOCK_POWER * const clk

13、_power = S3C24X0_GetBase_CLOCK_POWER();ulong r, m, p, s;if (pllreg = MPLL)r = clk_power-MPLLCON;else if (pllreg = UPLL)r = clk_power-UPLLCON;elsehang();m = (r p = (r s = r /* support both of S3C2410 and S3C2440 */if (gd-bd-bi_arch_number = MACH_TYPE_SMDK2410)return(CONFIG_SYS_CLK_FREQ * m) / (p bd-b

14、i_arch_number = MACH_TYPE_SMDK2410)return(clk_power-CLKDIVN elseclkdiv = clk_power-CLKDIVN;camdiv = clk_power-CAMDIVN;/* work out clock scalings */switch (clkdiv break;case S3C2440_CLKDIVN_HDIVN_2:hdiv = 2;break;case S3C2440_CLKDIVN_HDIVN_4_8:hdiv = (camdiv break;case S3C2440_CLKDIVN_HDIVN_3_6:hdiv

15、= (camdiv break;return get_FCLK() / hdiv;/* return PCLK frequency */ulong get_PCLK(void)S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();unsigned long clkdiv;unsigned long camdiv;int hdiv = 1;/* support both of S3C2410 and S3C2440 */if (gd-bd-bi_arch_number = MACH_TYPE_SMDK2410)

16、return(clk_power-CLKDIVN else clkdiv = clk_power-CLKDIVN;camdiv = clk_power-CAMDIVN;/* work out clock scalings */switch (clkdiv break;case S3C2440_CLKDIVN_HDIVN_2:hdiv = 2;break;case S3C2440_CLKDIVN_HDIVN_4_8:hdiv = (camdiv break;case S3C2440_CLKDIVN_HDIVN_3_6:hdiv = (camdiv break;return get_FCLK()

17、/ hdiv / (clkdiv 重新执行 make TX2440_config make all 生成 u-boot.bin,由于还没有增加NAND Flash 的支持,所以可烧入 NOR Flash 中运行在 make all 时会出现错误:没有 CAMDIVN这个要在 include/s3c24x0.h 中定义, 在 129 行 S3C24X0_CLOCK_POWER 结构体中增加:S3C24X0_REG32 CAMDIVN; /* for s3c2440*/支持 NAND Flash首先在配置文件 include/configs/TX2440.h 的宏 CONFIG_COMMANDS

18、中增加CFG_CMD_NAND (大概在 82 行)编译,出现 nand.c 的错误和警告解决:在 include/configs/TX2440.h 的最后面增加 3 个宏:/*NAND flash settings*/#define CFG_NAND_BASE 0 /无实际意义:基地址,在 board_nand_init 中重新定义#define CFG_MAX_NAND_DEVICE 1 /NAND Flash 设备数目为 1#define NAND_MAX_CHIPS 1 /每个 NAND 设备由 1 个 NADN 芯片组成修改配置文件后再编译,只有一个错误了“board_nand_in

19、it”函数未定义board_nand_init 需要自己编写,在 cpu/arm920t/s3c24x0 下新建nand_flash.c编写之前,需要针对 S3C2440 NAND Flash 定义一些数据结构和函数在 include/s3c24x0.h 中增加 S3C2440_NAND 数据结构(168 行)/* NAND FLASH (see S3C2440 manual chapter 6) */typedef struct S3C24X0_REG32 NFCONF;S3C24X0_REG32 NFCONT;S3C24X0_REG32 NFCMD;S3C24X0_REG32 NFADDR

20、;S3C24X0_REG32 NFDATA;S3C24X0_REG32 NFMECCD0;S3C24X0_REG32 NFMECCD1;S3C24X0_REG32 NFSECCD;S3C24X0_REG32 NFSTAT;S3C24X0_REG32 NFESTAT0;S3C24X0_REG32 NFESTAT1;S3C24X0_REG32 NFMECC0;S3C24X0_REG32 NFMECC1;S3C24X0_REG32 NFSECC;S3C24X0_REG32 NFSBLK;S3C24X0_REG32 NFEBLK; /*_attribute_(_packed_)*/ S3C2440_N

21、AND;在 include/s3c2410.h 中仿照 S3C2410_GetBase_NAND 函数(96 行)定义 2440 的函数:static inline S3C2440_NAND * const S3C2440_GetBase_NAND(void)return (S3C2440_NAND * const)S3C2410_NAND_BASE;在 cpu/arm920t/s3c24x0/nand_flash.c 中添加代码,是从 Linux-2.6.13 中/drivers/mtd/nand/s3c2410.c 中移植过来的,代码略。修改 cpu/arm920t/s3c24x0/Mak

22、efile:COBJS = 加上一项 nand_flash.o编译后生成 uboot 镜像,但这里注意,现在还不支持 NAND FLASH 启动,只能烧到 NOR FLASH 中。要支持 NAND FLASH 启动,要修改 cpu/arm920t/start.S,还要编写 nand 启动函数,这里先不考虑,复制现成的代码过来,以后再说。支持网卡芯片 DM9000在 driver 下,有网卡驱动 DM9000x.c 和 DM9000x.hDM9000 接在 BANK4,位宽 16在 include/configs/TX2440.h 中设置网卡基地址:在 56 行处,将 CS8900 的定义改成:

23、#define CONFIG_DRIVER_DM9000 1#define CONFIG_DM9000_BASE 0x20000300#define DM9000_IO CONFIG_DM9000_BASE#define DM9000_DATA (CONFIG_DM9000_BASE + 4)#define CONFIG_DM9000_USE_16BIT在 drivers 目录下,只留 nand nand_legacy dm9000x.c dm9000x.h Makefile其他文件全部删除,修改 Makefile: COBJS = dm9000x.o修改顶层目录的 Makefile:将 20

24、9 行的内容LIBS += drivers/sk98lin/libsk98lin.a 删除可以将顶层目录下没用的 lib_x 文件夹删除,只留 lib_arm lib_generic编译可生成支持网卡的 uboot设置 Linux 启动参数在 77 行处,加两个宏定义:/* for tag(s) to transfer message to kernel*/#define CONFIG_SETUP_MEMORY_TAGS 1#define CONFIG_CMDLINE_TAG 1在#include 后面的一些启动参数修改如下:/*自启动前延时 3 秒*/#define CONFIG_BOOTD

25、ELAY 3/*默认的命令行参数*/#define CONFIG_BOOTARGS “noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0“/*默认的网络设置*/#define CONFIG_ETHADDR 08:00:3e:26:0a:5b #define CONFIG_NETMASK 255.255.255.0#define CONFIG_IPADDR 192.168.220.6#define CONFIG_SERVERIP 192.168.220.19/*#define CONFIG_BOOTFILE “elinos-lart“ */*自动启动命令*/#define CONFIG_BOOTCOMMAND “nboot 0x32000000 0 0x50000; bootm 0x32000000“这个是 uboot 的命令提示符,可修改#define CFG_PROMPT “TX2440“ /* Monitor Command Prompt */

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。