热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Fedora编译vivi的**-linux-as:unrecognizedoption'-__ASSEMBLY__'解决

一,编译环境:gcc-2.95.3;FedoraCore9;vivi-0.1.4(带网络版)二,错误描述:编译VIVI时,出现错误提示:“/opt/host/armv4l/bin/armv4l-unknown-linux-as-D__ASSEMBLY__-I/home/echokuki/s3c2410/Experimentbck/Bootloaderv1/Bootloader/i
一,编译环境:gcc-2.95.3 ; Fedora Core 9 ; vivi-0.1.4(带网络版)

二,错误描述:
编译VIVI时,出现错误提示:

/opt/host/armv4l/bin/armv4l-unknown-linux-as -D__ASSEMBLY__ -I/home/echokuki/s3c2410/Experimentbck/Bootloaderv1/Bootloader/include -I/opt/host/armv4l/include/ -mapcs-32 -march=armv4 -msoft-float -o arch/s3c2410/head.o arch/s3c2410/head.s
/opt/host/armv4l/bin/armv4l-unknown-linux-as: unrecognized option '-__ASSEMBLY__'
make: *** [arch/s3c2410/head.o] Error 1

导致不能生成目标文件。


三,引用,参考:

一 GNU AS简介

   GNU AS是GNU汇编器,主要用于把汇编代码转换成二进制代码,并存放到一个object文件中。GNU AS工具本身的使用方法比较简单,主要参考文档《Using as--the GNU Assembler》(2.14)。首先看一下1.1 Structure of this Manual。

    This manual is intended to describe what you need to know to use gnu as. We cover the syntax expected in source files, including notation for symbols, constants, and expressions;the directives that as understands; and of course how to invoke as.

    This manual also describes some of the machine-dependent features of various flavors of the assembler.

    On the other hand, this manual is not intended as an introduction to programming in assembly language—let alone programming in general! In a similar vein, we make no attempt to introduce the machine architecture; we do not describe the instruction set, standard mnemonics, registers or addressing modes that are standard to a particular architecture. You may want to consult the manufacturer’s machine architecture manual for this information.


    大致意思如下:本手册要介绍如何使用gnu as,涵盖了源代码文件使用的语法(符号、常量、表达式的表示方法)、as识别的指令、如何调用as。
    本手册还描述as汇编器所支持的一些机器依赖的特性。
    另外,本手册并不介绍如何编写汇编程序。同样的思路,不回尝试去介绍机器架构,不会描述机器指令集、针对于某特定架构的标准寄存器或寻址模式。这些知识的获取,你可以参考厂商的机器架构手册。

    从上述描述可以看出,这篇文档仅仅讲述编译器as如何使用,不会教你如何编写汇编程序。原来在instruction和directive上还有所疑惑。 现在可以区分了。instrcution是CPU架构相关,比如ARM体系结构会包含指令集体系结构,这时所给出的指令集就是instruction set。而directive是汇编器相关,也就是说为了更好的使用汇编语言进行编程,汇编器会增加一部分指令,提高可读性,这部分指令就是 directive。不同的指令集体系结构对应的instruction不同,比如ARM和X86的instruction不同;不同的汇编器对应的 directive也不同,比如GNU AS和ADS汇编器对应的directive不同。

二 命令行选项

    这个需要的时候现查现看。

三 语法

1 预处理 Preprocessing


    The as internal preprocessor:
    ·adjusts and removes extra whitespace. It leaves one space or tab before the keywords on a line, and turns any other whitespace on the line into a single space.
    • removes all comments, replacing them with a single space, or an appropriate number of newlines.
    • converts character constants into the appropriate numeric values.

    意思如下:as的内部预处理主要包括三个方面的工作。一是调整和去除额外的间隔符。保留每行的关键字前的一个空格或者TAB,其他任意的间隔符都转换为一个空格。二是去除所有注释,代之以一个空格,或者新行的合适的数字。三是把字符常量转换成相应的数字值。

    它不能做宏处理和文件包含处理,如果你需要用,那么可以交给C 预处理器来处理。交给CPP处理的文件包含格式是不同的,需要用#include,跟C的一样(AS中用.include)。那么CPP如何识别这样的文 件呢?答案是通过后缀。man gcc可以获得,

       file.s
           Assembler code.

       file.S
           Assembler code which must be preprocessed.


四,结论
      这也就是在vivi的[arch/s3c2410/head.S]中扩展名为什么是大写字母S,而不是小写字母s的原因了。vivi的配置机制的结果引用就是通过#include "config.h"来完成的,对它的处理则是通过CPP完成的预处理。
      
五,解决
      重命名arch/s3c2410/head.s为arch/sc32410/head.S,命令:“#mv arch/s3c2410/head.s arch/s3c2410.S”。

      若有错误之处,欢迎指正。谢谢。

免责声明:本文仅代表作者个人观点,与Linux公社无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。


推荐阅读
  • Linuxchmod目录权限命令图文详解在Linux文件系统模型中,每个文件都有一组9个权限位用来控制谁能够读写和执行该文件的内容。对于目录来说,执行位的作用是控制能否进入或者通过 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文主要讨论了在xps15上安装双系统win10和MacOS后,win10无法正常更新的问题。分析了可能的引导问题,并提供了解决方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 树莓派Linux基础(一):查看文件系统的命令行操作
    本文介绍了在树莓派上通过SSH服务使用命令行查看文件系统的操作,包括cd命令用于变更目录、pwd命令用于显示当前目录位置、ls命令用于显示文件和目录列表。详细讲解了这些命令的使用方法和注意事项。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
author-avatar
123妖_精
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有