驱动与应用的编译

news2024/9/23 7:25:28

无论是去驱动编译,还是应用编译,本质上都是用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2122292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter自定义Icon的简易使用(两种)

方式一:利用第三方库(建议) 1、在阿里图标库(iconfont-阿里巴巴矢量图标库)上,加载购物车后,点击“下载素材”svg。 2、把下载的图片放入asstes目录下。​​​​​​​ 3、修改yaml配置文件,设置Icon图标所…

动态单窗口IP代理:提升网络操作的灵活性和安全性

互联网时代,各种网络工具层出不穷,而动态单窗口IP代理无疑成为了近年来的热门话题。今天,我们就来聊聊这个神奇的工具,看看它到底有什么独特之处。 什么是动态单窗口IP代理? 动态单窗口IP代理,顾名思义&a…

基于CogVideoX-2B的国产Sora文字一键生成视频

CogVideoX-2B是由THUDM团队开发的先进视频生成模型,利用最前沿的变压器技术,实现从文本到视频的高质量转换。无论是研究人员还是开发者,CogVideoX-2B都提供了一个强大的开源工具,用于视频合成和AI驱动的媒体创作。 本教程将详细介绍如何使用CogVideoX-2B,包括环境设置、模…

simd vs simt

GPU架构及运行机制学习笔记_gpu结构-CSDN博客 SIMD (Single Instruction, Multiple Data) 和 SIMT (Single Instruction, Multiple Threads) SIMD 架构是指在同一时间内对多个数据执行相同的操作,适用于向量化运算。例如,对于一个包含多个元素的数组&am…

震惊!立体连接:开启商业新模式的流量密码

摘要:本文深度揭秘在当今商业环境中立体连接的重大意义,揭示最佳匹配线下、社群和网络三度空间来实现认知、交易、关系三大功能的神奇之处。通过剖析开源链动 2 1 模式、AI 智能名片、S2B2C 商城小程序等元素在三度空间的运用,阐述如何达成最…

区块链学习笔记2--区块链技术的形成 以太坊

分布式数据存储: 在每个参与者电脑上备份 账本实时同步和对账 点对点通信 共识机制 加密算法: 对用户个人信息的加密 转账过程中的签名授权 账本一致性校验 挖矿算法的目标hash 区块链2.0技术 以太坊 比特币的出现让经济贸易变得简单,而比特…

【数据结构-二维前缀和】力扣221. 最大正方形

在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。 示例 1: 输入:matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”…

Jupyter Notebook设置代码提示和自动代码补全

算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号滴滴我 文章目录 在使用Jupyter Notebook中,会出现Jupyter不像Pycharm一样,可以 自动补全代码以及 代码方法提示等功能,这时候就需要通过给Jupyter安装插件来进行实现。 执行步骤&#…

刘慈欣:不管未来的技术怎么发展 对文化的冲击肯定会发生

导语 刘慈欣坦承,《三体》里面特别是第一部关于量子的关键描述是错误的,“说量子纠缠能够超高速通讯不太可能,当时也知道不能通讯,但为了这个故事能讲下去就把它写进去了,我没想到在后来有这么大的影响力。”   4月2…

2024年CCPC网络赛C题题解 —— 种树(gym105336C)

一道不错的树形dp题,想要提升树形dp的糕手们可以做一下,放上题面: 题意:给你一个有0有1的数,每次可以把一个大小为3(包含3个结点)的结构中,要求至少包含一个1,然后就能把…

如何管控即时通讯工具?避免聊天泄密|即时通讯管控五大妙招

在如今的数字化办公环境中,即时通讯工具已经成为了员工之间沟通的必备神器。无论是讨论项目进展,还是快速解决问题,它们都极大地提高了工作效率。但便利的背后,却潜藏着一个巨大的隐患——聊天泄密。要如何在享受高效沟通的同时&a…

SQL server 6.5升级到SQL server 2019

背景: 对日项目,客户的旧系统的数据库用的是SQL server 6.5,操作系统是windows NT。新系统要求升级到SQL server 2019,查了下资料发现旧系统的版本实在是太久远了,90年代的。 数据库部分的升级思路是这样的&#xff…

大学生租房平台:SpringBoot框架的设计与实现

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的,在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值,吸引更多的访问者访问系统,以及让来访用户可以花费更多时间停留在系统上,则表明该系统设计得比较专业…

前端使用 Konva 实现可视化设计器(22)- 绘制图形(矩形、直线、折线)

本章分享一下如何使用 Konva 绘制基础图形:矩形、直线、折线,希望大家继续关注和支持哈! 请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 Bug,欢迎来提 Issue 哟~ github源码 gitee源码 示例地址 矩形 先上效…

RAG 聊天机器人:用 Langchain 和 Streamlit开启与 PDF 的智能对话

与大量 PDF 文档的交互如今变得前所未有地便捷与智能。想象一下,您可以轻松与您的笔记、书籍和各种文档进行无缝对话,不再需要繁琐的手动查找和处理。 这篇文章将带您逐步构建一个基于 Multi-RAG 和 Streamlit 的 Web 应用程序,该应用程序通过 AI 驱动的聊天机器人来读取、…

【Linux 报错】SSH服务器拒绝了密码。请再试一次。(xshell)

出现该错误 可能的原因: 你写入的登录密码错误了,错误原因有: 1、本来输入就错误了 2、创建用户时,只创建了用户名,但密码没有重新设置 3、多人使用同一台服务器时,该服务器管理员(本体&#x…

MyEclipse2020安装教程(图文)

本章教程主要记录如何在Windows上安装MyEclipse2020.。 一、下载安装包 通过网盘分享的文件:Myeclipse 2020.rar 链接: https://pan.baidu.com/s/1fD2P0S0GU_zJlUHTPeXP-A?pwdv71m 提取码: v71m 二、安装步骤 1、打开解压后的文件夹,鼠标右击【myeclip…

农产品管理与推荐系统Python+Django网页界面+计算机毕设项目+推荐算法

一、介绍 农产品管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的…

威胁建模攻击树和攻击库

威胁建模攻击树和攻击库 1.攻击树概述2.创建新的攻击树🌲3.真实攻击树的案例诈骗攻击树思维导图式SSL风险攻击树 4.攻击库概述5.CAPEC攻击模式6.OWASP 1.攻击树概述 攻击树(Attack Tree)是一种用于分析和描述系统安全的工具,广泛…

独立产品灵感周刊 DecoHack #067 - 摸鱼神器与AI视频创作工具

本周刊记录有趣好玩的独立产品/设计/开发相关内容,每周一发布,往期内容同样精彩,感兴趣的伙伴可以到官网查看更多内容。可以邮件订阅或RSS订阅本周刊。欢迎通过 Twitter 私信推荐或投稿。 本期内容涵盖从摸鱼神器、AI视频生成,到乐…