c++ - arm gcc5 的交叉编译 - 正确使用 memcpy

标签 c++ linux gcc arm cross-compiling

我正在尝试为 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/

相关文章:

linux - 看不到上传的图片

c - 与 gcc 链接时 Solaris 和 GNU/Linux 之间的 lpthread 库差异

c++ - 使用 namespace 解决 C++ 中的不明确调用

c++ - 根据模板参数以不同方式重载运算符

c++ - Google 测试 (gtest) `EXPECT_TRUE()` 宏不会使用 `std::is_same<>` 模板作为输入进行编译

c++ - 为什么全局变量会给函数调用中的编译器优化带来麻烦?

linux - 我如何知道 Linux 内核中的地址是否可读?

linux - 在 Bash 中将进程限制为 0.5 秒

c++ - 如何制作可变参数 lambda?

linux - 我怎样才能更改 gcc 在链接/bin/ld 时使用的库?