u-boot移植问题

luomuxiaoxiao98 2012-11-08 06:54:02
大家好,小弟新接触嵌入式开发,目前正在学习u-boot的移植。我的开发板是ok6410板子,但是最新的u-boot2012.10上面没有针对该核心的CPU,有smdk6400的,于是我从网上搜索了一下一致的步骤,做了以下修改:

#############################################################################
1)Borads.cfg 中第56行 加入“zcg6410 arm arm1176 ok6410 samsung s3c6410”;

#cd u-boot-2011.06/board/samsung/ //进入目录
#mkdir zcg6410 //创建zcg6410文件夹

2) 因6410和6400的资源差不多,所以就以6400项目的代码作为模板,以后再修改

#cp -ar smdk6400/* zcg6410/ //将6400下所有的代码复制到6410下
#cd zcg6410 //进入zcg6410目录
#mv smdk6400.c zcg6410.c //将zcg6410下的smdk6400.c改名为zcg6410.c
#cd ../../../ //回到u-boot根目录
#cp include/configs/smdk6400.h include/configs/zcg6410.h //建立6410配置头文件

注:把新建zcg6410下smdk6400_nand_spl.c更名位zcg6410_nand_spl.c,并且把zcg6410_nand_spl.c和makefile文件中的6400改为6410。其他文件不需要改动。

3)修改u-boot跟目录下的Makefile文件。查找到smdk6400_config的地方,在他下面按照smdk6400_config的格式建立zcg6410_config的编译选项,另外还要指定交叉编译器

#vim Makefile
CROSS_COMPILE ?= arm-linux- //指定交叉编译器为arm-linux-gcc
zcg6410_noUSB_config \
zcg6410_config : unconfig
@mkdir -p $(obj)include $(obj)board/samsung/zcg6410 // 注意@前不是空格,是Tab键
@mkdir -p $(obj)nand_spl/board/samsung/zcg6410
@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
@if [ -z "$(findstring zcg6410_noUSB_config,$@)" ]; then \
echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/zcg6410/config.tmp;\ //前面两个Tab键
$(MKCONFIG) $(@:_config=) arm arm1176 zcg6410 samsung s3c6410; \
else \
echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/zcg6410/config.tmp;\
$(MKCONFIG) $(@:_noUSB_config=) arm arm1176 zcg6410 samsung s3c6410; \
fi
@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk

*说明:arm :CPU的架构(ARCH)
arm1176:CPU的类型
zcg6410 :对应在board目录下建立新的开发板项目的目录
samsung:新开发板项目目录的上级目录,如直接在board下建立新的开发板项目的目录,则这里就为NULL
s3c64xx:CPU型号
*注意:编译选项格式的第二行要用Tab键开始,否则编译会出错

4)进入顶层目录nand_spl/board/samsung目录新建目录zcg6410,并将smdk6400下的文件复制到刚刚新建的zcg6410下

#cd nand_spl/board/samsung //
#cp –ar smdk6400/* zcg6410/

注:修改目此6410目录下的makefile文件,把里面的6400改为6410

5)测试编译新建的zcg6410开发板项目

#make zcg6410_config //如果出现Configuring for zcg6410 board...则表示设置正确
#make //编译后在根目录下会出现u-boot.bin和u-boot-nand.bin文件,则u-boot移植的第一步就算完成了

##################################################################################

上面的步骤1-4都完成了之后,make的时候出错了。。。。。。错误如下:

这个原因,好像是“‘>=’缺少了左操作符”,因此我又看了一下zcg6410.h的文档的第57行,如下图:

‘>=’的左操作符是“CONFIG_SYS_TEXT_BASE”。于是我认为是可能没有定义这个宏,但是我根据原来的u-boot make了一下smdk6400,完全可以。证明“CONFIG_SYS_TEXT_BASE”是定义过的。

我的问题是:
1.“CONFIG_SYS_TEXT_BASE”定义的位置在哪里?
2.如果确实定义了,那么为什么我会make失败呢?
...全文
699 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
LinuxMan 2013-03-20
  • 打赏
  • 举报
回复
u-boot移植未错误,来学习
dotfoxsystem 2013-01-13
  • 打赏
  • 举报
回复
这个问题我见过,,, #cd u-boot-2011.06/board/samsung/ //进入目录 不要#mkdir zcg6410 //创建zcg6410文件夹 2) 因6410和6400的资源差不多,所以就以6400项目的代码作为模板,以后再修改 不要#cp -ar smdk6400/* zcg6410/ //将6400下所有的代码复制到6410下 要 #cp -rf smdk6410 zcg6410 #cd zcg6410 //进入zcg6410目录 #mv smdk6400.c zcg6410.c //将zcg6410下的smdk6400.c改名为zcg6410.c vi ./Makefile 中 smdk6400 -> zcg6410 #cd ../../../ //回到u-boot根目录 #cp include/configs/smdk6400.h include/configs/zcg6410.h //建立6410配置头文件 注:把新建zcg6410下smdk6400_nand_spl.c更名位zcg6410_nand_spl.c,并且把zcg6410_nand_spl.c和makefile文件中的6400改为6410。其他文件不需要改动。 3)修改u-boot跟目录下的Makefile文件。查找到smdk6400_config的地方,在他下面按照smdk6400_config的格式建立zcg6410_config的编译选项,另外还要指定交叉编译器 另:我发生以上错误时,我没有改好文件名所导致
kernel288 2013-01-11
  • 打赏
  • 举报
回复
JQGuardian 他已经分析很清楚了。 你用我的这个配置吧 kb6410_noUSB_config \ kb6410_config : unconfig @mkdir -p $(obj)include $(obj)board/samsung/kb6410 @mkdir -p $(obj)nand_spl/board/samsung/kb6410 @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk @if [ -z "$(findstring kb6410_noUSB_config,$@)" ]; then \ echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/kb6410/config.tmp;\ else \ echo "RAM_TEXT = 0xc7e00000" >> $(obj)board/samsung/kb6410/config.tmp;\ fi @$(MKCONFIG) kb6410 arm arm1176 kb6410 samsung s3c6410 #### #@$(MKCONFIG) kb6410 arm arm1176 kb6410 samsung s3c64xx @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk [root@zhaoji kb-uboot-2011.12]# make kb6410_config warning: Please migrate to boards.cfg. Failure to do so will mean removal of your board in the next release. Configuring for kb6410 board...
rpf413 2012-12-17
  • 打赏
  • 举报
回复
呵呵!说的有道理
lpp380 2012-12-16
  • 打赏
  • 举报
回复
还真是高人多啊!新手,学习了!谢谢!
HMGuardian 2012-12-13
  • 打赏
  • 举报
回复
引用 11 楼 nadleeh123 的回复:
变量前面_平台相关 __和芯片相关,就像7楼说的,u-boot官方版不可能没s3c6410的,没得就去三星官网找找.
uboot里的确是木有6410的,不过通过6400的移植还是很轻松的……,三星官网更难找……连DATASHEET都木有下载的链了&……
HMGuardian 2012-12-13
  • 打赏
  • 举报
回复
引用 10 楼 cumtgao 的回复:
我越来越发对楼上的楼上那只小猫感兴趣了。。。。。如果小猫在 也请解决下我的疑问,我用的交叉编译链是4.3.3的 编译我买的TQ2440的板子时提示版本出错,上网查了下 说是我用的版本太新了,开发板光盘里自带的是3.4.5的 我可以在虚拟机里装两个交叉工具链么?
工具链可以有多个的,但要注意,如果你的交叉编译器名字相同,又都在PATH环境变量的情况下,通常是使用PATH值里面靠前的那个,所以,有多个的话使用的时候最好改下PATH
nadleeh 2012-12-12
  • 打赏
  • 举报
回复
变量前面_平台相关 __和芯片相关,就像7楼说的,u-boot官方版不可能没s3c6410的,没得就去三星官网找找.
wesley 2012-12-12
  • 打赏
  • 举报
回复
我越来越发对楼上的楼上那只小猫感兴趣了。。。。。如果小猫在 也请解决下我的疑问,我用的交叉编译链是4.3.3的 编译我买的TQ2440的板子时提示版本出错,上网查了下 说是我用的版本太新了,开发板光盘里自带的是3.4.5的 我可以在虚拟机里装两个交叉工具链么?
tmxkpzl 2012-11-12
  • 打赏
  • 举报
回复
哈哈 学习了,谢谢大神!
nadleeh 2012-11-12
  • 打赏
  • 举报
回复
u-boot官方的没有6410就换一个,改來改去的天知道要改多久,如果真心要改注意 写法为__的玩意儿,那个和芯片息息相关,多半都是改这些
HMGuardian 2012-11-09
  • 打赏
  • 举报
回复
呵呵,我跟你说哈,我用的是u-boot-2012.10版本的u-boot, 请打开根目录下的makefile,找到smdk6400_config目标: 看看echo "RAM_TEXT = 0x57e00000" >> $(obj)board/samsung/smdk6400/config.tmp;\这一句,明确的告诉你这里的RAM_TEXT将会用于生成宏CONFIG_SYS_TEXT_BASE 而这个信息是在执行make smdk6400_config 的时候写入到config.tm这个临时文件的。 再看board\samsung\smdk6410\config.mk这个文件,里面有如下行: ifndef CONFIG_NAND_SPL CONFIG_SYS_TEXT_BASE = $(RAM_TEXT) else CONFIG_SYS_TEXT_BASE = 0 endif 好我们再看根目录下的config.mk,搜索CONFIG_SYS_TEXT_BASE,会发现如下行: ifneq ($(CONFIG_SYS_TEXT_BASE),) CPPFLAGS += -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE) endif 这个还只是一个环境变量而已。 这次是真的好了,CPPFLAGS最后会作为gcc,as这些编译器的控制标志,而 -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE) 就等价于#define CONFIG_SYS_TEXT_BASE X 其中X 是$(CONFIG_SYS_TEXT_BASE)的值,这次是真的宏常量了。 好了,到此,CONFIG_SYS_TEXT_BASE的成生旅程就走完了……您还有疑问么??
XXOO0396 2012-11-09
  • 打赏
  • 举报
回复
或许你的基地址等参数值不正确,还有#define CONFIG_MACH_后面的值,看芯片手册分析一下对不对
HMGuardian 2012-11-09
  • 打赏
  • 举报
回复
细看了一下,建议你配置完后打开include/config.mk(如果你make 的时候指定了BUILD_DIR=或-O=)那就是你指定的那个目录下的include/config.mk,详细检查一下以下这几个变量是否正确: 你的应该是 ARCH = arm arm CPU = arm1176 arm1176 BOARD = smdk6410 zcg6410 VENDOR = samsung samsung SOC = s3c64xx s3c6410 CONFIG_NAND_U_BOOT = y y 还有就是如果配置的时候指定了BUILD_DIR=或-O=,那么make 的时候也要带上! /board/samsung/zcg6410/config.mk中 sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp /config.mk中 ifdef BOARD sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk # include board specific rules endif 有关CONFIG_SYS_TEXT_BASE宏的变量就VENDOR和BOARD。 呵呵,我也在学习,可以一起啊……
luomuxiaoxiao98 2012-11-08
  • 打赏
  • 举报
回复
引用 1 楼 XXOO0396 的回复:
start.S中初始化部分
.globl _TEXT_BASE _TEXT_BASE: .word CONFIG_SYS_TEXT_BASE 你指的是这一部分吗?那既然定义了的话,为什么make会出现上述错误呢?我该怎么修改一下?请指教!谢谢!
luomuxiaoxiao98 2012-11-08
  • 打赏
  • 举报
回复
.globl _TEXT_BASE _TEXT_BASE: .word CONFIG_SYS_TEXT_BASE 你指的是这一部分吗?那既然定义了的话,为什么make会出现上述错误呢?我该怎么修改一下?请指教!谢谢!
XXOO0396 2012-11-08
  • 打赏
  • 举报
回复
start.S中初始化部分

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧