驱动与应用的编译

无论是去驱动编译,还是应用编译,本质上都是用gcc这个工具,后面跟不同的参数来完成

驱动编译

放入内核编译

obj-y += $(TARGET_SDK).o,就会直接将驱动编译成.o。供内核链接的时候,链接进整个内核镜像;
obj-m += $(TARGET_SDK).o,就会直接将驱动编译成ko ,不需要像外部单独编译,来在其Makefile指定参数

外部驱动编译:-C 表示切换到指定目录(内核构建目录),M=$(PWD) 表示当前目录为模块的源代码目录 ,modules表示编译成模块

obj-m:=HelloWorld.o
KDIR:=/home/god/Desktop/raspberry/linux    # path of kernel file
PWD:=$(shell pwd)  # path of current file
all: 
     $(MAKE) -C $(KDIR) M=$(PWD) modules
     @rm -rf *.mod.*  
     @rm -rf *.o  
     @rm -rf Module.* 
     @rm -rf modules.*
clean:
     $(MAKE) -C $(KDIR) M=$(PWD) clean

应用编译

交叉编译一个应用,一般需要如下几步

1.交叉编译工具:CROSS_COMPILE
2.引用的头文件目录:CFLAGS += -I
3.引用的库文件目录:LIBS += -L

比如交叉编译hostapd,需要在Makefile添加如下内容

ALL=hostapd hostapd_cli
CONFIG_FILE = .config

include ../src/build.rules

#add for platform

export STAGING_DIR= owtoolchain/linux64/initial/bin/
CROSS_COMPILE:= owtoolchain/linux64/initial/bin/arm-openwrt-linux-uclibcgnueabi-
CC:= $(CROSS_COMPILE)gcc
LD:= $(CROSS_COMPILE)ld

CFLAGS += -Iowtoolchain/linux64/include

CFLAGS += -Istaging_dir/target-arm_cortex-a7+neon-vfpv4_uClibc-1.0.25_eabi/usr/include/libnl3
LIBS += -Lbuild_dir/target-arm_cortex-a7+neon-vfpv4_uClibc-1.0.25_eabi/root-mmp/usr/lib
CFLAGS += -Istaging_dir/target-arm_cortex-a7+neon-vfpv4_uClibc-1.0.25_eabi/usr/include/
LIBS += -Lstaging_dir/target-arm_cortex-a7+neon-vfpv4_uClibc-1.0.25_eabi/usr/lib

#add for paltform end
...

CFLAGS += $(EXTRA_CFLAGS)
CFLAGS += -I$(abspath ../src)
CFLAGS += -I$(abspath ../src/utils)

库的编译

无论是静态库,还是动态库编译也是gcc指定不同参数实现;链接的话,可以使用同样的参数:-L指定库文件路径,-l指定库文件名字,-I指定头文件路径

静态库

编译静态库
ar -crv libfunc.a func.o

编译执行文件
gcc main.c -o main -L . -l func

运行执行文件
./main

动态库

编译动态库  
gcc func.o -shared -o libfunc.so

编译执行文件
假设func动态库在当前目录下
gcc main.c -o main -L . -l func

运行执行文件
先将动态库放到可执行文件的同级目录下;或者执行如下命令(linux环境时)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:动态库所在目录路径

然后执行可执行文件
./main

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值