编译主机: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) {
+++++++++++++++++++++++++++++++++++++++++++++++++++++