MT7688 SDK固件编译错误记录

编译主机:Debian10 64位

SDK:MediaTek_APSoC_SDK5030_20170331.tar

编译错误1:

extra/locale/gen_ldc.c:197:15: error: '__LOCALE_DATA_WCuplow_diff_data' undeclared (first use in this function); did you mean '__LOCALE_DATA_Cuplow_data'?
  out_i16(lso, __LOCALE_DATA_WCuplow_diff_data, __LOCALE_DATA_WCuplow_diff_TBL_LEN, "tblwuplow_diff");
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
               __LOCALE_DATA_Cuplow_data
make[1]: *** [extra/locale/Makefile.in:151: extra/locale/gen_ldc] Error 1
make[1]: Leaving directory '/home/lgcdb/MTK/MTK_APSoC_SDK/source/uClibc-0.9.33.2'
make: *** [Makefile:893: uClibc-0.9.33.2_only] Error 2
+++++++++++++++++++++++++++++++++++++++++++++++++++++

解决:

uClibc-0.9.33.2的宽字符处理有问题?(未深究)

打一个补丁http://ftp.osuosl.org/pub/manulix/scripts/build-scripts/PPFILES/ppfiles-uclibc/gen_wctype.patch

在source/uClibc-0.9.33.2目录下执行patch -p1 < gen_wctype.patch(补丁名字)

用diff 比较新旧两个文件   执行 diff gen_wctype.c gen_wctype_old.c

可以看见如下修改:

#diff uClibc-0.9.33.2/extra/locale/gen_wctype.c uClibc-0.9.33.2_bak/extra/locale/gen_wctype.c 

230,231c230
< 	/* setlocale might be just a stub */
< 	/*	if (!setlocale(LC_CTYPE, *argv)) {
---
> 		if (!setlocale(LC_CTYPE, *argv)) {
235c234
< 	*/
---
> 
310c309
< 					unsigned int curr_stdclib;
---
> 					unsigned int glibc;
312,325c311,324
< 					curr_stdclib = 0;
< 					if (isalnum(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (isalpha(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (isblank(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (iscntrl(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (isdigit(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (isgraph(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (islower(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (isprint(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (ispunct(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (isspace(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (isupper(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (isxdigit(c)) ++curr_stdclib;
< 					verbose_msg("%#8x : ctype %#4x\n", c, curr_stdclib);
---
> 					glibc = 0;
> 					if (isalnum(c)) ++glibc; glibc <<= 1;
> 					if (isalpha(c)) ++glibc; glibc <<= 1;
> 					if (isblank(c)) ++glibc; glibc <<= 1;
> 					if (iscntrl(c)) ++glibc; glibc <<= 1;
> 					if (isdigit(c)) ++glibc; glibc <<= 1;
> 					if (isgraph(c)) ++glibc; glibc <<= 1;
> 					if (islower(c)) ++glibc; glibc <<= 1;
> 					if (isprint(c)) ++glibc; glibc <<= 1;
> 					if (ispunct(c)) ++glibc; glibc <<= 1;
> 					if (isspace(c)) ++glibc; glibc <<= 1;
> 					if (isupper(c)) ++glibc; glibc <<= 1;
> 					if (isxdigit(c)) ++glibc;
> 					verbose_msg("%#8x : ctype %#4x\n", c, glibc);
331c330
< 					unsigned int curr_stdclib;
---
> 					unsigned int glibc;
334,346c333,345
< 					curr_stdclib = 0;
< 					if (iswalnum(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (iswalpha(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (iswblank(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (iswcntrl(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (iswdigit(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (iswgraph(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (iswlower(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (iswprint(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (iswpunct(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (iswspace(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (iswupper(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 					if (iswxdigit(c)) ++curr_stdclib;
---
> 					glibc = 0;
> 					if (iswalnum(c)) ++glibc; glibc <<= 1;
> 					if (iswalpha(c)) ++glibc; glibc <<= 1;
> 					if (iswblank(c)) ++glibc; glibc <<= 1;
> 					if (iswcntrl(c)) ++glibc; glibc <<= 1;
> 					if (iswdigit(c)) ++glibc; glibc <<= 1;
> 					if (iswgraph(c)) ++glibc; glibc <<= 1;
> 					if (iswlower(c)) ++glibc; glibc <<= 1;
> 					if (iswprint(c)) ++glibc; glibc <<= 1;
> 					if (iswpunct(c)) ++glibc; glibc <<= 1;
> 					if (iswspace(c)) ++glibc; glibc <<= 1;
> 					if (iswupper(c)) ++glibc; glibc <<= 1;
> 					if (iswxdigit(c)) ++glibc;
362,363c361,362
< 					if (curr_stdclib != mine) {
< 						verbose_msg("%#8x : curr_stdclib %#4x != %#4x mine  %u\n", c, curr_stdclib, mine, d);
---
> 					if (glibc != mine) {
> 						verbose_msg("%#8x : glibc %#4x != %#4x mine  %u\n", c, glibc, mine, d);
370c369
< 								   c, iswctype(c,is_comb),iswctype(c,is_comb3), curr_stdclib);
---
> 								   c, iswctype(c,is_comb),iswctype(c,is_comb3), glibc);
557c556
< 			unsigned int curr_stdclib;
---
> 			unsigned int glibc;
572,584c571,583
< 			curr_stdclib = 0;
< 			if (iswalnum(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 			if (iswalpha(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 			if (iswblank(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 			if (iswcntrl(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 			if (iswdigit(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 			if (iswgraph(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 			if (iswlower(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 			if (iswprint(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 			if (iswpunct(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 			if (iswspace(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 			if (iswupper(c)) ++curr_stdclib; curr_stdclib <<= 1;
< 			if (iswxdigit(c)) ++curr_stdclib;
---
> 			glibc = 0;
> 			if (iswalnum(c)) ++glibc; glibc <<= 1;
> 			if (iswalpha(c)) ++glibc; glibc <<= 1;
> 			if (iswblank(c)) ++glibc; glibc <<= 1;
> 			if (iswcntrl(c)) ++glibc; glibc <<= 1;
> 			if (iswdigit(c)) ++glibc; glibc <<= 1;
> 			if (iswgraph(c)) ++glibc; glibc <<= 1;
> 			if (iswlower(c)) ++glibc; glibc <<= 1;
> 			if (iswprint(c)) ++glibc; glibc <<= 1;
> 			if (iswpunct(c)) ++glibc; glibc <<= 1;
> 			if (iswspace(c)) ++glibc; glibc <<= 1;
> 			if (iswupper(c)) ++glibc; glibc <<= 1;
> 			if (iswxdigit(c)) ++glibc;
634,635c633,634
< 				if (curr_stdclib != mine) {
< 					verbose_msg("%#8x : curr_stdclib %#4x != %#4x mine %d\n", c, curr_stdclib, mine, d);
---
> 				if (glibc != mine) {
> 					verbose_msg("%#8x : glibc %#4x != %#4x mine %d\n", c, glibc, mine, d);
659c658
< 					verbose_msg("%#8x : towupper curr_stdclib %#4x != %#4x mine\n",
---
> 					verbose_msg("%#8x : towupper glibc %#4x != %#4x mine\n",
664c663
< 					verbose_msg("%#8x : towlower curr_stdclib %#4x != %#4x mine   i0 = %d\n",
---
> 					verbose_msg("%#8x : towlower glibc %#4x != %#4x mine   i0 = %d\n",
669c668
< 					verbose_msg("%#8x : totitle curr_stdclib %#4lx != %#4x mine   i0 = %d\n",
---
> 					verbose_msg("%#8x : totitle glibc %#4lx != %#4x mine   i0 = %d\n",

+++++++++++++++++++++++++++++++++++++++++++++++++++++

编译错误2:

<stdin>:1:24: fatal error: asm/unistd.h: No such file or directory
compilation terminated.
<stdin>:1:24: fatal error: asm/unistd.h: No such file or directory
compilation terminated.
ERROR: Could not generate syscalls.
Make sure that you have proper kernel headers.
Your .config in KERNEL_HEADERS="" was set to:
/home/lgcdb/MTK/MTK_APSoC_SDK/source/linux-2.6.36.x/include/
make[1]: *** [Makefile.in:174: include/bits/sysnum.h] Error 1
make[1]: Leaving directory '/home/lgcdb/MTK/MTK_APSoC_SDK/source/uClibc-0.9.33.2'
make: *** [Makefile:893: uClibc-0.9.33.2_only] Error 2

解决办法:

进入 uClibc-0.9.33.2 目录,在这个目录下打开.config

如:gedit .config

搜索KERNEL_HEADERS="$(ROOTDIR)/$(LINUXDIR)/include"

把上面的语句替换为KERNEL_HEADERS="/opt/buildroot-gcc342/include"

也就是uClibc-0.9.33.2的编译用编译器里面的头文件,而不是linux kernel里面的头文件。

+++++++++++++++++++++++++++++++++++++++++++++++++++++

编译错误3:

make[2]: *** No rule to make target '/home/lgcdb/MTK/MTK_APSoC_SDK/source/linux-2.6.36.x/include/linux/autoconf.h', needed by 'crc32.o'.  Stop.
make[2]: Leaving directory '/home/lgcdb/MTK/MTK_APSoC_SDK/source/lib/libnvram'
make[1]: *** [Makefile:381: _dir_libnvram] Error 2
make[1]: Leaving directory '/home/lgcdb/MTK/MTK_APSoC_SDK/source/lib'
make: *** [Makefile:893: lib_only] Error 2


解决办法:

执行make dep

原因是建立好依赖关系,修改linux中每个子目录下的.depend文件,该文件包含了该目录下每个目标文件所需要的头文件(绝对路径的方式列举)(来自https://www.cnblogs.com/Dennis-mi/articles/5032302.html)

+++++++++++++++++++++++++++++++++++++++++++++++++++++

编译错误4:

make -f /home/lgcdb/MTK/MTK_APSoC_SDK/source/user/busybox/Makefile silentoldconfig
/home/lgcdb/MTK/MTK_APSoC_SDK/source/user/busybox/Makefile:437: *** mixed implicit and normal rules: deprecated syntax
/home/lgcdb/MTK/MTK_APSoC_SDK/source/user/busybox/Makefile:1278: *** mixed implicit and normal rules: deprecated syntax
make[4]: *** No rule to make target 'silentoldconfig'.  Stop.
make[3]: *** [Makefile:513: include/autoconf.h] Error 2
make[3]: Leaving directory '/home/lgcdb/MTK/MTK_APSoC_SDK/source/user/busybox'
make[2]: *** [Makefile:222: busybox] Error 2
make[2]: Leaving directory '/home/lgcdb/MTK/MTK_APSoC_SDK/source/user'
make[1]: *** [Makefile:214: all] Error 2
make[1]: Leaving directory '/home/lgcdb/MTK/MTK_APSoC_SDK/source/user'
make: *** [Makefile:893: user_only] Error 2


解决办法:

主机make编译器太新,而该SDK的busybox的Makefile适应不了新的make编译器。

打开 MTK_APSoC_SDK/source/user/busybox/Makefile

注释掉437行:#config %config: scripts_basic outputmakefile FORCE

修改为:

%config: scripts_basic outputmakefile FORCE

注释掉1269行左右:(我自己编译的时候修改437即可,这里并未修改,但可以通过编译)

/ %/: prepare scripts FORC

改为:

%/: prepare scripts FORC

+++++++++++++++++++++++++++++++++++++++++++++++++++++

编译错误5:

Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
make[2]: *** [/home/lgcdb/MTK/MTK_APSoC_SDK/source/linux-2.6.36.x/kernel/Makefile:137: kernel/timeconst.h] Error 255
make[1]: *** [Makefile:893: kernel] Error 2
make[1]: Leaving directory '/home/lgcdb/MTK/MTK_APSoC_SDK/source/linux-2.6.36.x'
make: *** [Makefile:435: linux] Error 1
解决办法:

打开MTK_APSoC_SDK/source/linux-2.6.36.x/kernel/timeconst.pl

找到373行 if (!defined(@val)) {

修改为 if (!@val) {

+++++++++++++++++++++++++++++++++++++++++++++++++++++

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值