我正在尝试为 amlogic 的 S805/S812 SoC 编译内核 (uImage)。我设法解决了除一个之外的所有编译错误,可能是因为我对 C++ 和编译器的了解还不够深入。让我解释一下存在于文件 phydev.c 中的问题:
给出错误的行是:
memcpy(&phydev->name, &dev_para->name, MAX_DEVICE_NAME_LEN*sizeof(char));
这些是(交叉)编译器错误:
drivers/amlogic/../../../hardware/amlogic/nand/amlnf/dev/phydev.c: In function ‘amlnand_phydev_init’:
drivers/amlogic/../../../hardware/amlogic/nand/amlnf/dev/phydev.c:1114:10: error: passing argument 1 of ‘memcpy’ discards ‘const’ qualifier from pointer target type [-Werror=discarded-array-qualifiers]
memcpy(&phydev->name, &dev_para->name, MAX_DEVICE_NAME_LEN*sizeof(char));
^
In file included from include/linux/string.h:17:0,
from include/linux/dynamic_debug.h:111,
from include/linux/kernel.h:14,
from include/linux/cache.h:4,
from include/linux/time.h:4,
from include/linux/stat.h:18,
from include/linux/module.h:10,
from drivers/amlogic/../../../hardware/amlogic/nand/amlnf/dev/../include/../include/amlnf_type.h:18,
from drivers/amlogic/../../../hardware/amlogic/nand/amlnf/dev/../include/../include/amlnf_dev.h:4,
from drivers/amlogic/../../../hardware/amlogic/nand/amlnf/dev/../include/phynand.h:4,
from drivers/amlogic/../../../hardware/amlogic/nand/amlnf/dev/phydev.c:14:
/root/Downloads/Beelink3/arm-src-kernel-2015-01-15-321cfb5a46/arch/arm/include/asm/string.h:16:15:
note: expected ‘void *’ but argument is of type ‘const char (*)[16]’
extern void * memcpy(void *, const void *, __kernel_size_t);
^
几天来我一直在尝试解决这个问题,还尝试直接赋值(这显然不适用于数组),改用 strcpy 等等,但这只会产生更多错误,而且我找不到确切的根本原因。我想我需要某种强制转换或中间常量 void ptr,但我不知道如何解决这个问题。
谁能给我一些关于这个问题以及如何解决的建议。 memcpy 函数定义在 arch/arm/include/asm/string.h 但是弄乱这个文件似乎不是一个好主意。
非常感谢,
Vim
最佳答案
确实有人足够聪明: 结构 phydev { 常量字符*名称; ...
删除了 const,一切都很好(至少是 memcpy 行。但我可以使用 strcpy 或 strdup 或其他任何东西。它试图写入常量。
在调试所有其他错误后,我能够制作 U-Boot 镜像。还没有测试过。
此外,将许多函数设为静态,而不是将使用过的静态变量复制到局部属性中。不知道它会做什么......(可能因某些段错误或其他原因而崩溃:-)。
我现在必须等待我的 ttl USB 适配器...
除非有人知道在哪里可以找到这个东西的 adb 驱动程序并且它支持 fw_setenv 或其他东西....
猜想一旦 ttl 适配器到达,它将在 tty1 上按空格键。
感谢大家的帮助。如果我设法在这个盒子上安装 Ubuntu,我会发布一个关于它的博客:-)
干杯&谢谢
Vim
关于c++ - arm gcc5 的交叉编译 - 正确使用 memcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36538827/