当前位置: 首页 > news >正文

驱动与应用的编译

无论是去驱动编译,还是应用编译,本质上都是用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 = .configinclude ../src/build.rules#add for platformexport STAGING_DIR= owtoolchain/linux64/initial/bin/
CROSS_COMPILE:= owtoolchain/linux64/initial/bin/arm-openwrt-linux-uclibcgnueabi-
CC:= $(CROSS_COMPILE)gcc
LD:= $(CROSS_COMPILE)ldCFLAGS += -Iowtoolchain/linux64/includeCFLAGS += -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


http://www.mrgr.cn/news/23817.html

相关文章:

  • 金蝶云星空查询SQL
  • iText2KG:显著降低LLM构建知识图谱时的幻觉现象
  • vue页面使用自定义字体
  • pointpillar部署-TensorRT实现(一)
  • USB转百兆网卡芯片CH397在多平台下使用说明
  • Java题集练习1
  • HTTP 协议和 APACHE 服务
  • 代码随想录算法训练营第二十七天 | 455.分发饼干,376. 摆动序列,53. 最大子序和
  • STM32时钟配置图详解
  • 在线动漫信息平台
  • 大学生租房平台:SpringBoot技术实现详解
  • 存储课程学习笔记6_io接口练习(readv,writev, 借助本地socket实现进程间(sendmsg,recvmsg)通过共享内存数据交互)
  • pointpillar部署-TensorRT实现(二)
  • PostgreSQL 日常SQL语句查询记录
  • openharmony 应用支持常驻和自启动
  • 揭秘!ArrayList 扩容机制背后的那些“小心机“——不同版本的源码深度解析
  • 时空特征融合方向小论文创新点一次性都给你!看到就是赚到
  • log4j
  • ELK 架构中 ES 性能优化
  • 在 SNMP 中的数据类型码