uboot移植记录之一
发布时间:2020-12-15 06:26:54 所属栏目:百科 来源:网络整理
导读:uboot移植记录之一 uboot整个移植过程我们可以分为三个阶段: 一,移植可以从Nor flash启动的uboot 这个阶段是移植一个最简单的uboot,可以烧在Nor flash内运行. 二,移植支持Nand flash驱动的uboot 加入Nand flash驱动的支持,可以在uboot命令行下操作Nand flas
uboot移植记录之一
uboot整个移植过程我们可以分为三个阶段: 一,移植可以从Nor flash启动的uboot 这个阶段是移植一个最简单的uboot,可以烧在Nor flash内运行. 二,移植支持Nand flash驱动的uboot 加入Nand flash驱动的支持,可以在uboot命令行下操作Nand flash.但还未能从Nand flash启动,只能在Nor flash内运行. 三,sans-serif; font-size:14px; line-height:20px">可以烧录在Nand flash,并设置从Nand flash启动运行uboot. 分三个阶段进行移植,可以对整个uboot的移植过程及原理更加清晰明了,同时降低了发现问题时解决问题的困难度和解决范围. 首先介绍移植可以从Nor flash启动的uboot. 这个阶段相对简单一点,是移植一个最简单的uboot,可以烧在Nor flash内运行.不需要修改太多的东西。步骤如下: 测试一下默认的smdk2410_config配置能否在你的板子上正常运行 1.编译uboot1.1.4 #make smdk2410_config #make ARCH=arm? 注:编译针对arm的平台时,uboot默认使用arm-linux-gcc编译,若交叉编译器名字不一样,需要自行在Makefile里修改。 会出现两个错误. 错误信息一: cc1: Invalid option `abi=apcs-gnu' make[1]: *** [hello_world.o] Error 1 make[1]: Leaving directory `/root/u-boot-1.1.4/examples' make: *** [examples] Error 2 解决办法: 出错的文件是/cpu/arm920t/下的config.mk: 将 PLATform_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) 改成: 错误信息二: make[1]: *** No rule to make target `hello_world.srec',needed by `all'.??Stop. make[1]: Leaving directory `/work/src/u-boot-1.1.4/examples' 解决方法: 打开 examples/Makefile? ? 把example文件夹下的Makefile中的 第126行? %.srec: % 改成 %.srec: %.o? 第129行的? %.bin: % 改成 %.bin: %.o? 2.若编译成功,则会在uboot源码下产生u-boot.bin文件。将这个文件烧录到nor flash。 注意: 默认u-boot的smdk2410_config是不支持nandflash的,只能在nor flash内运行,所以只能烧录到nor flash内运行。如果烧录到nandflash下是不能运行的。 3.参考开发板资料,设置好跳线,从nor flash启动。 启动信息如下: U-Boot 1.1.4 (Dec 30 2007 - 23:25:02) U-Boot code: 33F80000 -> 33F9696C BSS: -> 33F9AC58 RAM Configuration: Bank #0: 30000000 64 MB *** Warning - bad CRC,using default environment Flash: 512 kB In: serial Out: serial Err: serial 发现有3个问题: 1) 启动时开发板蜂鸣器一直在响。 怀疑是我的开发板蜂鸣器对应的GPIO口和smdk2410的GPIO口地址不对应,从而导致启动时误赋了值,一直在响。 2) Warning - bad CRC,sans-serif; font-size:14px; line-height:20px">这个问题是因为第一次使用uboot时没有设置过变量,设置保存一下就不会在出现了。 3) Flash: 512 kB 我的板子Nor flash是1MB的,而这里显示512KB 4.下面进行uboot源码修改 这里主要根据开发板硬件的实际情况,基于smdk2410的源码进行修改(主要是配置文件include/configs/smdk2410.h),并解决如上碰到的问题1和3。 若对硬件板子的情况不是太了解,可以参考2410的datasheet以及开发板供应商提供的硬件资料。 从我开发板uboot第一次启动的情况来看,问题不是太大。 首先修改include/configs/smdk2410.h。里面包含了很多对目标板设置的宏。 smdk2410.h的内容和要修改的地方如下: #define CONFIG_BOOTDELAY 3 /*#define CONFIG_BOOTARGS "root=ramfs devfs=mount console=ttySA0,9600" */ #define CONFIG_ETHADDR 08:00:3e:26:0a:5b? #define CONFIG_NETMASK 255.255.255.0 #define CONFIG_IPADDR 192.168.1.103 #define CONFIG_SERVERIP 192.168.1.102 #define CONFIG_BOOTFILE "uImage" #define CONFIG_BOOTCOMMAND "tftp 30000000 uImage; bootm 30000000" //这是bootdelay后运行的命令 //这些宏对应与uboot的变量,即在uboot命令行下执行printenv打印出的变量。可以在这里设置(定义为默认值),也可以在uboot启动后通过setenv命令设置。 #define CFG_PROMPT "ARMSYS2410 # " /* Monitor Command Prompt */ #define CFG_LOAD_ADDR 0x33000000 /* default load address */ #define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */ #define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */ #define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */ 解决问题3: #define CONFIG_AMD_LV400? ?? ???1? ?? ? /* uncomment this if you have a LV400 flash */ #if 0 #define CONFIG_AMD_LV800? ?? ???1? ?? ? /* uncomment this if you have a LV800 flash */ #endif 改为: 注意如下两个地方: #ifdef CONFIG_AMD_LV800 #define PHYS_FLASH_SIZE? ?? ?? ?0x00100000 /* 1MB */ 这里解决了u-boot启动时的问题3即Nor Flash大小为512 kB,是因为没有选择正确的Nor flash型号。? #define CFG_MAX_FLASH_SECT? ?? ?(19)? ? /* max number of sectors on one chip */ #define CFG_ENV_ADDR? ?? ?? ?? ?(CFG_FLASH_BASE + 0x0F0000) /* addr of environment */ 宏CFG_ENV_ADDR定义了存放uboot变量的地址,换算一下为1MB-64KB=960KB地方,而实际uboot编译出来的大小仅为120KB左右,由此可以得出,即使从新烧录了新编译的uboot到Nor flash内,也不会影响先前设定使用的uboot变量。 注:可以在u-boot的README里查到这些部分宏的作用 5.解决蜂鸣器一直响问题 查看ARMSYS2410-B底板电路图,在Reset Singal模块里可以看到蜂鸣器(BUZZER)控制口连接到TOUT1引脚,并且低电平响。如下: 由s3c2410 Datasheet知道TOUT1复用了GPB1口。因此,只要在uboot启动时给GPBDAT寄存器适当赋值,关闭BUZZER就可以了。 修改smdk2410.c #vi board/smdk2410/smdk2410.c 找到board_init()函数 在gpio->GPBUP = 0x000007FF;下面 添加如下内容: /*******stop beep******/ gpio->GPBDAT &= ~0x00000002; //Open BUZZER delay (5000000); //BUZZER Delay Time gpio->GPBDAT |= 0x00000002;? 6.重新编译 #make clean #make ARCH=arm 7.烧录u-boot.bin到nor flash 启动信息: U-Boot 1.1.4 (Jan??3 2008 - 23:11:07) U-Boot code: 33F80000 -> 33F96DC4??BSS: -> 33F9B0E8 Flash:??1 MB In:? ? serial Out:? ?serial Err:? ?serial Hit any key to stop autoboot:??0? ARMSYS2410 #? uboot移植记录系列 http://blog.chinaunix.net/u2/60011/showart.php?id=1005063 本文来自ChinaUnix博客,如果查看原文请点: http://blog.chinaunix.net/u1/58640/showart_1089497.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |