首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >arm gcc5的交叉编译-正确使用memcpy

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

Stack Overflow用户
提问于 2016-04-11 10:19:28
回答 1查看 226关注 0票数 0

我正在尝试从amlogic编译S805/S812 SoC的内核(uImage)。我已经设法解决了除一个之外的所有编译错误,可能是因为我对c++和编译器的了解还不够深入。让我来解释一下这个问题,这个问题存在于文件phydev.c中:

给出错误的代码行是:

代码语言:javascript
复制
memcpy(&phydev->name, &dev_para->name, MAX_DEVICE_NAME_LEN*sizeof(char));

以下是(交叉)编译器错误:

代码语言:javascript
复制
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中定义的,但是在这个文件上乱搞似乎并不是个好主意。

非常感谢,

Wim

EN

回答 1

Stack Overflow用户

发布于 2016-04-12 11:01:56

确实有人足够聪明: Struct phydev { const char* name;...

删除const,一切都很好(至少memcpy行是这样。但是我可以用strcpy或者strdup或者其他什么。它试图写入一个常量。

在调试通过所有其他错误后,我能够制作U-Boot映像。还没有测试过。

此外,使许多函数成为静态的,而不是将使用的静态变量复制到本地属性中。不知道它会做什么。(可能是由于某些分段错误或其他原因而崩溃:-)。

我现在必须等待我的ttl usb适配器...

除非任何人知道在哪里找到这个东西的adb驱动程序,并且它支持fw_setenv或其他什么……

我猜一旦ttl适配器到达,它将按下tty1上的空格键。

感谢你们的帮助。如果我在这个盒子上安装了Ubuntu,我会发布一篇博客:-)

干杯&谢谢

Wim

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36538827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档