u-boot-2016.11移植完毕
u-boot    2017-02-27 19:50:10    181    0    0
tianwaifeixian   u-boot

看了韦东山视频的0基础部分 没有购买收费视频 

中间停了一段时间 在看C++

然后又开始直接看得还是免费的 不过是毕业班那一系列的了

然后网上各种的看资料

基本思路知道了

移植过程最初很无语

汇编  Makefile语法是一大关卡

这东西就像车 即使您不会 摸多了自然也会开

之前我还看了一本Makefile的书 

真看到这种软件的Makefile尤其是内核和android那样的 头大~

不过 在各种莫名其妙的问题里面也是不断积累的一个过程

。。。。。。。。。。。。。。。。

一个星期!

还不是很确定nand能不能完全读写

2016.11版本代码改了好多好多。。。。

移植过程make中错误:

LD      lib/built-in.o
  LD      u-boot
common/built-in.o: In function `usb_stop':
/var/smdk2440/u-boot-2016.11_smdk2440/common/usb.c:144: undefined reference to `usb_lowlevel_stop'
common/built-in.o: In function `usb_submit_int_msg':
/var/smdk2440/u-boot-2016.11_smdk2440/common/usb.c:204: undefined reference to `submit_int_msg'
common/built-in.o: In function `usb_control_msg':
/var/smdk2440/u-boot-2016.11_smdk2440/common/usb.c:240: undefined reference to `submit_control_msg'
common/built-in.o: In function `usb_bulk_msg':
/var/smdk2440/u-boot-2016.11_smdk2440/common/usb.c:274: undefined reference to `submit_bulk_msg'
common/built-in.o: In function `usb_init':
/var/smdk2440/u-boot-2016.11_smdk2440/common/usb.c:82: undefined reference to `usb_lowlevel_init'

查了一下drivers/mtd/nand/nand.c:59:

#ifdef CONFIG_MTD_DEVICE
 /*
 * Add MTD device so that we can reference it later
 * via the mtdcore infrastructure (e.g. ubi).
 */
 add_mtd_device(mtd);​

然后在头文件里面加个宏定义:

#define CONFIG_CMD_UBI
#define CONFIG_CMD_UBIFS
#define CONFIG_RBTREE
#define CONFIG_LZO

如果有编译不过去:

Error: You must add new CONFIG options using Kconfig
The following new ad-hoc CONFIG options were detected:
CONFIG_SMDK2440
CONFIG_ZERO_BOOTDELAY_CHECK

Please add these via Kconfig instead. Find a suitable Kconfig
file and add a 'config' or 'menuconfig' option.
Makefile:825: recipe for target 'all' failed
make: *** [all] Error 1

需要打补丁:

diff --git a/Makefile b/Makefile
index c66bd2f..080b913 100644
--- a/Makefile
+++ b/Makefile
@@ -740,7 +740,8 @@  DO_STATIC_RELA =
 endif
 
 # Always append ALL so that arch config.mk's can add custom ones
-ALL-y += u-boot.srec u-boot.bin u-boot.sym System.map u-boot.cfg binary_size_check
+ALL-y += u-boot.srec u-boot.bin u-boot.sym System.map u-boot.cfg \
+	binary_size_check no_new_adhoc_configs_check
 
 ALL-$(CONFIG_ONENAND_U_BOOT) += u-boot-onenand.bin
 ifeq ($(CONFIG_SPL_FSL_PBL),y)
@@ -938,6 +939,13 @@  u-boot.dis:	u-boot
 u-boot.cfg:	include/config.h FORCE
 	$(call if_changed,cpp_cfg)
 
+# Check that this build does not use CONFIG options that we don't know about
+# unless they are in Kconfig. All the existing CONFIG options are whitelisted,
+# so new ones should not be added.
+no_new_adhoc_configs_check: u-boot.cfg FORCE
+	$(srctree)/scripts/check-config.sh $< \
+		$(srctree)/scripts/config_whitelist.txt ${srctree}
+
 ifdef CONFIG_TPL
 SPL_PAYLOAD := tpl/u-boot-with-tpl.bin
 else
diff --git a/scripts/check-config.sh b/scripts/check-config.sh
new file mode 100755
index 0000000..1d87686
--- /dev/null
+++ b/scripts/check-config.sh
@@ -0,0 +1,55 @@ 
+#!/bin/sh
+# Copyright (c) 2016 Google, Inc
+# Written by Simon Glass <sjg@chromium.org>
+#
+# Check that the u-boot.cfg file provided does not introduce any new
+# ad-hoc CONFIG options
+#
+# You can generate the list of current ad-hoc CONFIG options (those which are
+# not in Kconfig) with this command:
+#
+# export LC_ALL=C LC_COLLATE=C
+# git grep CONFIG_ |tr ' \t' '\n\n' |sed -n 's/^\(CONFIG_[A-Z0-9_]*\).*/\1/p' \
+#	|sort |uniq >scripts/config_whitelist.txt;
+# unset LC_ALL LC_COLLATE
+
+# Usage
+#    check-config.sh <path to u-boot.cfg> <path to whitelist file> <source dir>
+#
+# For example:
+#   scripts/check-config.sh b/chromebook_link/u-boot.cfg kconfig_whitelist.txt .
+
+path="$1"
+whitelist="$2"
+srctree="$3"
+
+# Temporary files
+configs="${path}.configs"
+suspects="${path}.suspects"
+ok="${path}.ok"
+new_adhoc="${path}.adhoc"
+
+export LC_ALL=C
+export LC_COLLATE=C
+
+cat ${path} |sed -n 's/^#define \(CONFIG_[A-Z0-9_]*\).*/\1/p' |sort |uniq \
+	>${configs}
+
+comm -23 ${configs} ${whitelist} > ${suspects}
+
+cat `find ${srctree} -name Kconfig` |sed -n \
+	-e 's/^config \([A-Z0-9_]*\).*$/CONFIG_\1/p' \
+	-e 's/^menuconfig \([A-Z0-9_]*\).*$/CONFIG_\1/p' |sort |uniq > ${ok}
+comm -23 ${suspects} ${ok} >${new_adhoc}
+if [ -s ${new_adhoc} ]; then
+	echo "Error: You must add new CONFIG options using Kconfig"
+	echo "The following new ad-hoc CONFIG options were detected:"
+	cat ${new_adhoc}
+	echo
+	echo "Please add these via Kconfig instead. Find a suitable Kconfig"
+	echo "file and add a 'config' or 'menuconfig' option."
+	# Don't delete the temporary files in case they are useful
+	exit 1
+else
+	rm ${suspects} ${ok} ${new_adhoc}
+fi

补丁地址:https://patchwork.ozlabs.org/patch/662329/

基本上make中的错误体现在三个方面:

第一:源代码写的有问题

第二:Makefile语法问题

第三:相关头文件定义有问题

参考:http://maluta.github.io/blog/using-ubi-on-u-boot-compiling-issues

 

 

 

上一篇: ack 源码搜索利器

下一篇: 用trash-cli配置shell的rm和mv

181 人读过
立即登录, 发表评论.
没有帐号? 立即注册
0 条评论
文档导航