linux编译驱动文件命令,用GCC编译驱动时命令行参数

Linux驱动开发学习笔记(3):用GCC编译驱动的时候,命令行参数的含义

通过研究系统提供的makefile,我们知道,其实还是使用gcc编译器来编译驱动的源码的。打开.hello.o.cmd文件,发现这样的信息:

gcc -Wp,-MD,/home/temp/.hello.o.d -nostdinc -iwithprefix include -D__KERNEL__ -Iinclude  -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Os -fomit-frame-pointer -g -Wdeclaration-after-statement -pipe -msoft-float -m32 -fno-builtin-sprintf -fno-builtin-log2 -fno-builtin-puts  -mpreferred-stack-boundary=2 -fno-unit-at-a-time -march=i686 -mregparm=3 -Iinclude/asm-i386/mach-generic -Iinclude/asm-i386/mach-default     -DMODULE -DKBUILD_BASENAME=hello -DKBUILD_MODNAME=hello -c -o /home/temp/.tmp_hello.o /home/temp/hello.c

上面一长串就是编译驱动源码的参数。下面将逐个破译这些参数的含义:

1、头文件引用类:

1.1 参数中引用了如下头文件的目录:(注意,这些头文件的当前路径

是/lib/modules/2.6.9-42.ELsmp/build)

-Iinclude

-Iinclude/asm-i386/mach-generic

-Iinclude/asm-i386/mach-default

1.2 -nostdinc:这个指令告诉GCC不要包含libc等库的标准头文件

1.3 -iwithprefix include

使用include这个目录名作为第二包含路径,这里实际上没有用处,

因为没有使用 -iprefix来指定一个前缀

2、宏定义:

参数中定义了如下宏:

-D__KERNEL__

-DMODULE

-DKBUILD_BASENAME=hello

-DKBUILD_MODNAME=hello

3、警告选项:

-Wall  打开所有警告

-Wstrict-prototypes     如果函数的声明或定义没有指出参数类型,编译器就发出警告

-Wno-trigraphs  没找打这个参数的说明(直译是:不要“三字母一音”?)

-Wdeclaration-after-statement 在语句后面定义变量就会产生警告

Warn when a declaration is found after

a statement in a block.

4、优化选项:

-fno-builtin-sprintf

Optimize sprintf into strcpy if possible

-fno-builtin-log2     不使用内建的对数函数log2(n)

-fno-builtin-puts     不使用puts()函数

-fno-strict-aliasing  没找打这个参数的说明(直译是:不要使用严格的别名?)

-fno-common  即使未初始化的全局变量也分配在目标文件的bss段,

而不是把它们当做普通块(common block)建立.这样的结果是,

如果在两个不同的编译结果中声明了同一个变量(没使用extern ),

连接它们时会产生错误. 这个选项可能有用的唯一情况是,

你希望确认程序能在其他系统上运行,而其他系统总是这么做.

-fomit-frame-pointer  对于不需要帧指针(frame pointer)的函数,

不要在寄存器中保存帧指针.这样能够避免保存,设置和恢复

帧指针的指令;同时对许多函数提供一个额外的寄存器.

-fno-unit-at-a-time

-msoft-float  输出包含浮点库调用的目标码.

-m32  目标平台为32位,相对应的选项为-m64

-mpreferred-stack-boundary=2     没找打这个参数的说明

-march=i686 处理器架构

-mregparm=3      没找打这个参数的说明

5、基本选项:

5.1 -pipe  在编译过程的不同阶段间使用管道而非临时文件进行通信.

5.2 -g  产生调试信息

5.3 -c 编译,不链接

5.3 -o 指定输出文件

6、依赖文件:

-Wp,-MD,/home/temp/.hello.o.d  这一句是生成依赖文件的语法。

-MD这个选项在GCC文档中可以查到,-Wp这个选项查不到。

参数虽然多,无非也就是这六大类。看来,就算系统不提供makefile,我们也知道如何去编译驱动了,当然,系统提供的makefile还是非常好用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值