linux内核驱动在本机编译与交叉编译

linux内核驱动具有通用性,可以在内核驱动中跟随系统一同编译,也可以通过模块形式编译。

这里介绍写在模块形式编译时本机编译与交叉编译的配置。

源代码是一样的,只需要修改makefile文件即可。

这里以一个RK3588的驱动为例。

1. 本机编译(一般Ubuntu系统具备)

SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/ -e s/s390x/s390/ -e s/parisc64/parisc/ -e s/ppc.*/powerpc/ -e s/mips.*/mips/ -e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ -e s/riscv.*/riscv/)
CURARCH ?= $(SUBARCH)
ARCH ?= $(SUBARCH)
PWD :=$(shell pwd)
EXTRA_CFLAGS = -Wall -g -I$(CURDIR) -I$(subst fuxi-linux-release-package/module_fuxi/src,common,$(PWD)) -I$(PWD)
EXTRA_CFLAGS += -DFXGMAC_DEBUG
KSRC_BASE = /lib/modules/$(shell uname -r)
KSRC =  $(KSRC_BASE)/build
KDST = ./
ko_dir = $(KSRC_BASE)/$(KDST)/
KFILE = ***
ko_full = $(ko_dir)$(KFILE).koyt6801-objs :=  ***.o
obj-m += ***.omodules:make -C $(KSRC) M=$(PWD) modulesinstall:@echo "KFILE: " $(KFILE)@echo "KDST: " $(KDST)make -C $(KSRC) M=$(PWD) INSTALL_MOD_DIR=$(KDST) modules_installsudo ls -l $(ko_dir)depmod $(shell uname -r)modprobe $(KFILE)@file $(ko_full)@echo install done.@modinfo $(ko_full)uninstall:sudo ls -l $(ko_dir)sudo rm $(ko_full)sudo ls -l $(ko_dir)clean:make -C $(KSRC) M=$(PWD) clean.PHONY:modules install uninstall clean

2.交叉编译

ARCH ?= arm64
CROSS_COMPILE ?= /home/gan/proj/rk3588_sdk/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-
PWD :=$(shell pwd)KSRC = /home/gan/proj/rk3588_sdk/kernelEXTRA_CFLAGS = -Wall -g -I$(PWD) 
EXTRA_CFLAGS += -DFXGMAC_DEBUG
EXTRA_CFLAGS += -I$(KSRC)/arch/arm64/include
EXTRA_CFLAGS += -I$(KSRC)/arch/arm64/include/generated
EXTRA_CFLAGS += -I$(KSRC)/arch/arm64/include/generated/uapi
EXTRA_CFLAGS += -I$(KSRC)/arch/arm64/include/uapi
EXTRA_CFLAGS += -I$(KSRC)/include
EXTRA_CFLAGS += -I$(KSRC)/include/generated/uapiKFILE = ***
ko_full = $(ko_dir)$(KFILE).koyt6801-objs :=  ***.o 
obj-m += ***.omodules:make -C $(KSRC) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) M=$(PWD) modulesclean:make -C $(KSRC) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) M=$(PWD) clean
.PHONY:modules clean

从中可以看出主要区别有几点:

交叉编译需要指定ARCH 、CROSS_COMPILE;

KSRC 指linux目录,本机编译在/lib/modules/下,交叉编译根据linux源码目录来;

重点的交叉编译需要指定EXTRA_CFLAGS ,将需要的头文件包含进来,主要是asm一类的头文件。把下面的包含了基本就行了。

EXTRA_CFLAGS += -I$(KSRC)/arch/arm64/include
EXTRA_CFLAGS += -I$(KSRC)/arch/arm64/include/generated
EXTRA_CFLAGS += -I$(KSRC)/arch/arm64/include/generated/uapi
EXTRA_CFLAGS += -I$(KSRC)/arch/arm64/include/uapi
EXTRA_CFLAGS += -I$(KSRC)/include
EXTRA_CFLAGS += -I$(KSRC)/include/generated/uapi

交叉编译时在make指令需要指定ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE),表示是交叉编译。

如此一个驱动就可以从本机编译到交叉编译的轻松转换了。

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

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

相关文章

MyBatis细节注意

1.参数占位符:${}和#{} #{}:占位符会将传入的值安全地转义,防止SQL注入攻击,它会在预编译阶段将占位符替换为一个问号 ?,然后通过PreparedStatement设置参数值,从而确保安全性。适用于实际参数值作为参数传递给SQL语句…

Java 图形用户界面

JFrame JFrame是Java中用于创建图形用户界面(GUI)的顶级容器类。 JFrame类是Swing库中的一个关键组件,它代表一个窗口,可以向其中添加各种GUI组件来构建应用程序的用户界面。以下是JFrame的一些基本用法和特性: 创建JFrame对象&#xff1a…

240330-大模型资源-使用教程-部署方式-部分笔记

A. 大模型资源 Models - Hugging FaceHF-Mirror - Huggingface 镜像站模型库首页 魔搭社区 B. 使用教程 HuggingFace HuggingFace 10分钟快速入门(一),利用Transformers,Pipeline探索AI。_哔哩哔哩_bilibiliHuggingFace快速入…

ChatGPT引领学术风潮:写作技巧与实践

ChatGPT无限次数:点击直达 ChatGPT引领学术风潮:写作技巧与实践 引言 在当今信息爆炸的时代,各行各业对于内容创作的需求日益增长,人们追求更高效、更优质的写作工具。ChatGPT作为一款具有自我学习和生成文本能力的先进AI技术,成…

【计算机视觉】四篇基于Gaussian Splatting的SLAM论文对比

本文对比四篇论文: [1] Gaussian Splatting SLAM [2] SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM [3] Gaussian-SLAM: Photo-realistic Dense SLAM with Gaussian Splatting [4] GS-SLAM: Dense Visual SLAM with 3D Gaussian Splatting …

汇编语言——用INT 21H 的A号功能,输入一个字符串存放在内存,倒序输出

用INT 21H 的A号功能,输入一个字符串“Hello, world!”,存放在内存,然 后倒序输出。 在DOS中断中,INT 21H是一个常用的系统功能调用中断,它提供了多种功能,其中A号功能用于字符串的输入。 在使用这个功能时…

高级排序算法:归并排序(优化版)

题目描述 leecode第912题:排序数组: 给你一个整数数组 nums,请你将该数组升序排列。 示例 1: 输入:nums [5,2,3,1] 输出:[1,2,3,5]示例 2: 输入:nums [5,1,1,2,0,0] 输出&…

【PSINS工具箱】基于工具箱,自己设计的轨迹,并生成IMU数据和三维视图(完整代码)

完整代码 在有工具箱的情况下,直接运行代码,即可 % 基于PSINS工具箱的三维轨迹生成、三维图像绘制与IMU数据生成 % date:2024-2-13 % Evand(evandworldqq.com) % Ver1 clear;clc;close all; glvs ts 0.1; % sampling int…

RuntimeError: CUDA error: an illegal memory access was encountered

前言 我在跑深度学习模型。其中卷积用CUDA写的。数据集是cifar10。在运行了1个epoch后,就报错:RuntimeError: CUDA error: an illegal memory access was encountered。这个错误是在调用loss.backward()方法时出现的。 在网上看了很多方法,有…

linux自定义命令

文章目录 1、自定义命令介绍2、自定义命令步骤 (centos7)2.1 新建隐藏目录存放自定义命令脚本文件2.2 将新建的目录配置环境变量2.3 取别名的方式简化已有命令2.4 编写自定义命令脚本 1、自定义命令介绍 不管是linux系统还是windows系统都支持自定义命令,windows端…

学习 C++ 一定要搭配 Linux 吗?

学习C并不一定非要搭配Linux,但使用Linux环境进行学习和开发确实有其独特的优势,尤其对于深入理解和实践某些高级主题及特定领域的开发工作。以下是关于是否需要搭配Linux学习C的详细分析: 为了帮助您更好地入门并深入掌握C,我们精…

PLC的大脑和心脏——CPU及西门子S7-1200CPU分类、CPU型号及端子接线图示例

CPU不断地采集输入信号,执行用户程序,刷新系统的输出。 根据供电方式和输入/输出方式的不同,西门子S7-1200 CPU分为3类,如下图1。 图1 CPU的分类 第1对字母,表示CPU的供电方式,AC(Alternating…

Python实现的网页爬虫示例

当然可以。以下是一个使用Python实现的基础网页爬虫示例。这个示例将使用requests库来发送HTTP请求,并使用BeautifulSoup库来解析HTML文档。如果你还没有安装这两个库,请先使用pip进行安装: pip install requests beautifulsoup4接下来是网页…

代码随想录第25天|216.组合总和III 17.电话号码的字母组合

216.组合总和III 216. 组合总和 III - 力扣(LeetCode) 代码随想录 (programmercarl.com) 和组合问题有啥区别?回溯算法如何剪枝?| LeetCode:216.组合总和III_哔哩哔哩_bilibili 找出所有相加之和为 n 的 k 个数的组…

【KingSCADA】播放语音

1.函数介绍 PlaySound(string strWaveFileName, int nMode);下面是官方帮助文档中的解释: 2.生成语音文件 3.使用脚本播放音频文件 将音频文件存放在工程目录下面,我存放在了…\Resources\文件夹下: 我简单的写了一个定时1分钟播放一次语…

Fluent循环流动案例(模拟循环泵,含换热、散热、VOF、UDF)

在此特意记录下循环通道的fluent思路和参数设置 该案例中,主要关注的是催化剂域的温度变化情况,因此需要监控的是温度的变化曲线,关于泵如何进行模拟,这里有两种思路,一种是用风扇代替泵,优点是整个流体域基…

HarmonyOS ArkTS 骨架屏加载显示(二十五)

目录 前言1、骨架屏代码显示2、代码中引用3、效果图展示 前言 所谓骨架屏,就是在页面进行耗时加载时,先展示的等待 UI, 以告知用户程序目前正在运行,稍等即可。 等待的UI大部分是 loading 转圈的弹窗,有的是自己风格的小动画。其实…

JS - const 关键字声明的变量并不是常量

// 1. 赋值给一个变量 const declare function (x) { return x * x; }; 读到这部分时‘ 疑惑注释为什么会是说 把这个函数表达式赋值给一个变量 在 JavaScript 中,使用 const 关键字声明的变量并不是常量(immutable),而是常量引用…

vue3路由跳转

在 Vue 3 中,路由跳转通常是通过 Vue Router 实现的。Vue Router 是 Vue.js 官方的路由管理器,它和 Vue.js 深度集成,使构建单页面应用变得易如反掌。 下面是一些在 Vue 3 中使用 Vue Router 进行路由跳转的基本步骤: 安装 Vue …

武汉大学开设 “雷军班”:计算机专业、今年招收 15 名本科生。武汉大学已经联合小米成立了机器系

更多精彩内容在公众号。 3月25日,武汉大学官方网站发布了一则新闻,报道了校长张平文对计算机学院的调研活动。在报道中,张平文校长特别强调了关于“雷军班”及机器人系的发展规划。他表示,希望计算机学院能够立足于更高层次&#…