Makefile 模板 --- 内核模块

内核模块模板

  • 驱动源码同级目录下
#*******************************************************************************
# xxx Co., Ltd. All Right Reserved.
# Author       :
# Version      : V1.0.0  2020.10.21
# Description  :
# Note         :  gaoyang3513@163.com     Modified        2020.10.21
#*******************************************************************************

#*******************************************************************************
# Path information
#*******************************************************************************
LOCAL_DIR    := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
KERNEL_DIR   ?= /home/gaoyang3513/Source/06-SG20x/02-Projects/SDK_SG200x_V2/linux_5.10/build/sg2000_milkv_duos_glibc_arm64_sd
#KERNEL_DIR   ?= $(HOME)/Source/06-SG20x/02-Projects/SDK_SG200x_V2/linux_5.10/build/sg2000_milkv_duos_glibc_arm64_sd/

# ParDirectory
LIBS_DIR     :=
INCLUDE_DIR  :=

# Subdirectory

# Output
OUTPUT_DIR   := $(LOCAL_DIR)/output
INSTALL_DIR  ?= $(LOCAL_DIR)/__install

#*******************************************************************************
# Variables
#*******************************************************************************
MULTI_CORES ?= $(shell grep -c ^processor /proc/cpuinfo)

MOD_NAME := test_panic

#*******************************************************************************
# Compile configure
#*******************************************************************************
ARCH          ?= arm64
CROSS_COMPILE ?= ${HOME}/Source/06-SG20x/02-Projects/SDK_SG200x_V2/host-tools/gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

CC            := $(CROSS_COMPILE)gcc
LD            := $(CROSS_COMPILE)ld
AR            := $(CROSS_COMPILE)ar
STRIP         := $(CROSS_COMPILE)strip
OBJDUMP       := $(CROSS_COMPILE)objdump

export ARCH CROSS_COMPILE

#*******************************************************************************
# Targets
#*******************************************************************************
.PHONY: all install clean

ifeq ($(KERNELRELEASE),)
all: init
	@$(MAKE) modules         -C $(KERNEL_DIR) M=$(LOCAL_DIR) -j$(MULTI_CORES)
#	@$(MAKE) modules_install -C $(KERNEL_DIR) M=$(LOCAL_DIR) INSTALL_MOD_PATH=$(KERNEL_DIR)/_install_modules INSTALL_MOD_DIR=private
	@$(OBJDUMP) -hdS test_ps.o > test_ps.dmp

clean:
#       File
	@for n in *.o *.ko *.mod.c *.mod *.cmd *.symvers *.order; do \
		find $(LOCAL_DIR) -type f -name $$n  -exec rm {} \;;\
	done
#       Directory
	@if [ -d $(LOCAL_DIR)/output        ]; then rm -rf $(LOCAL_DIR)/output;        fi;
	@if [ -d $(LOCAL_DIR)/__install     ]; then rm -rf $(LOCAL_DIR)/__install;     fi;
	@if [ -d $(LOCAL_DIR)/.tmp_versions ]; then rm -rf $(LOCAL_DIR)/.tmp_versions; fi;


install:
	@mkdir -p $(INSTALL_DIR)/lib/modules/private
	@install -m 644 -D $(MOD_NAME).ko $(INSTALL_DIR)/lib/modules/private;

init:
	@mkdir -p $(OUTPUT_DIR)

else
obj-m := $(MOD_NAME).o

$(MOD_NAME)-objs := test_ps.o

INC_DIRS :=

ccflags-y +=

EXTRA_CFLAGS += -Wno-error=date-time	# Fix compile error on gcc 4.9 and later
EXTRA_CFLAGS += -Wno-date-time -g
endif # ifeq ($(KERNELRELEASE),)
  • 上级目录
#*******************************************************************************
#  xxx Co., Ltd. All Right Reserved.
# Author       :
# Version      : V1.0.0  2020.10.21
# Description  :
# Note         : gaoyang3513@163.com     Modified        2020.10.21
#*******************************************************************************

#*******************************************************************************
# Path information
#*******************************************************************************
LOCAL_DIR    := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
KERNEL_DIR   ?= /home/gaoyang3513/Source/06-SG20x/02-Projects/SDK_SG200x_V2/linux_5.10/build/sg2000_milkv_duos_glibc_arm64_sd
#KERNEL_DIR   ?= $(HOME)/Source/06-SG20x/02-Projects/SDK_SG200x_V2/linux_5.10/build/sg2000_milkv_duos_glibc_arm64_sd/

# ParDirectory
LIBS_DIR     :=
INCLUDE_DIR  :=

# Subdirectory
SUB_DIRS := $(LOCAL_DIR)/01-Panic

# Output
OUTPUT_DIR   := $(LOCAL_DIR)/output
INSTALL_DIR  ?= $(LOCAL_DIR)/__install

#*******************************************************************************
# Variables
#*******************************************************************************
MULTI_CORES ?= $(shell grep -c ^processor /proc/cpuinfo)

MOD_NAME := test_panic

#*******************************************************************************
# Compile configure
#*******************************************************************************
ARCH          ?= arm64
CROSS_COMPILE ?= ${HOME}/Source/06-SG20x/02-Projects/SDK_SG200x_V2/host-tools/gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

CC            := $(CROSS_COMPILE)gcc
LD            := $(CROSS_COMPILE)ld
AR            := $(CROSS_COMPILE)ar
STRIP         := $(CROSS_COMPILE)strip

export ARCH CROSS_COMPILE

#*******************************************************************************
# Targets
#*******************************************************************************
.PHONY: init all clean install menuconfig

ifeq ($(KERNELRELEASE),)
all: init
	@for sub in $(SUB_DIRS); do \
		$(MAKE)                                   -C $$sub || exit "$$?"; \
		$(MAKE) install INSTALL_DIR=$(OUTPUT_DIR) -C $$sub || exit "$$?"; \
	done;

clean:
	@for sub in $(SUB_DIRS); do \
		$(MAKE) clean -C $$sub || exit "$$?"; \
	done;
#       Directory
	@if [ -d $(LOCAL_DIR)/output        ]; then rm -rf $(LOCAL_DIR)/output;        fi;
	@if [ -d $(LOCAL_DIR)/__install     ]; then rm -rf $(LOCAL_DIR)/__install;     fi;

install:
	@mkdir -p $(INSTALL_DIR)
	@cp -arf $(OUTPUT_DIR)/. $(INSTALL_DIR)

init:
	@mkdir -p $(OUTPUT_DIR);
else
# called from kernel build system: just declare what our modules are
obj-y += $(SUB_DIRS)

INC_DIRS :=

subdir-ccflags-y += $(addprefix -I, $(INC_DIRS))

endif # ifeq ($(KERNELRELEASE),)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python基础语法(上)

目录 一、print函数及常量表达式 1.print函数 2.常量表达式 二、变量 1.定义变量的规则 2.python的动态类型特性 3.字符串 三、注释 四、input函数 1.input函数 2.变量类型转换 五、运算符 1.算数运算符 2.关系运算符 (1)整形的比较 &am…

2024 年度总结

时光荏苒,2024 年即将画上句号,回顾这一年的写博历程,有付出、有收获、有成长,也有诸多值得回味与反思的瞬间。 一、内容创作 主题涉猎:这一年,我致力于探索多样化的主题,以满足不同读者群体的…

汉王扫描王 2.9.16 |免费无广告的智能扫描软件,支持多种格式导出

汉王扫描王是一款功能全面的智能扫描软件,集成了文字识别、表格提取和文档转换等功能。它支持将文档转换为PDF、Word、Excel等多种格式,非常适合学生、教师、业务人员和财务工作者使用。该软件具备手机扫描仪功能,能够自动抠边、矫正文档&…

“善弈者”也需妙手,Oclean欧可林:差异化不是说说而已

作者 | 曾响铃 文 | 响铃说 俗话说,“牙痛不是病,痛起来要人命”。这话意思大家都知道,牙痛虽不是什么大病,可一旦发作却是极难忍受。 前几日,Oclean欧可林举办了一场AirPump A10氧气啵啵冲牙器新品品鉴会&#xff…

VBA 64位API声明语句第005讲

跟我学VBA,我这里专注VBA, 授人以渔。我98年开始,从源码接触VBA已经20余年了,随着年龄的增长,越来越觉得有必要把这项技能传递给需要这项技术的职场人员。希望职场和数据打交道的朋友,都来学习VBA,利用VBA,起码可以提高…

golang 编程规范 - 项目目录结构

原文:https://makeoptim.com/golang/standards/project-layout 目录结构 Go 目录 cmdinternalpkgvendor 服务端应用程序目录 api Web 应用程序目录 web 通用应用程序目录 buildconfigsdeploymentsinitscriptstest 其他目录 assetsdocsexamplesgithooksthird_par…

OFDM学习-(二)长短序列和PPDU整体数据处理流程

OFDM学习 (二)长短序列和PPDU整体数据处理流程 OFDM学习前言一、短序列短序列的作用 二、长序列三、PLCP/SIGNAL/DATA数据处理流程三、fpga实现STS模块LTS模块训练序列模块仿真波形 总结 前言 根据框图可以知道发射机这部分信号在DA转换之前&#xff0c…

解决 `pnpm install` 出现 `ERR_PNPM_ENOENT` 错误的方法

解决 pnpm install 出现 ERR_PNPM_ENOENT 错误的方法 在使用 pnpm 进行项目开发时,我们可能会遇到 ERR_PNPM_ENOENT 这样的错误,本文将详细介绍该错误的解决方法。 错误描述 当我们运行 pnpm install 命令时,可能会遇到如下错误信息&#…

Flutter中的网络请求图片存储为缓存,与定制删除本地缓存

Flutter中的网络请求图片存储为缓存,与定制删除本地缓存 1:封装请求图片函数 2:访问的图片都会转为本地缓存,当相同的请求url,会在本地调用图片 3:本地缓存管理【windows与andriod已经测试】【有页面】【有…

数据库新建用户后(Host:%),报错:localhost无法连接

存在问题 在给数据库(MySQL、MariaDB等)创建了新的用户名(eg:maxscale)后,无法使用新用户名登录,并报如下错误:ERROR 1045 (28000): Access denied for user maxscalelocalhost (us…

1-markdown转网页样式页面 --[制作网页模板] 【测试代码下载】

markdown转网页 将Markdown转换为带有样式的网页页面通常涉及以下几个步骤:首先,需要使用Markdown解析器将Markdown文本转换为HTML;其次,应用CSS样式来美化HTML内容。此外,还可以加入JavaScript以增加交互性。下面我将…

通过 4 种方式快速将音乐从 iPod 传输到 Android

概括 在 iPod 上听音乐很酷,但是当您拥有最新的 Android 手机时,也许您想在新手机上欣赏 iPod 音乐。那么,你的计划是什么?如何将音乐从 iPod 传输到 Android? 如果您担心这个问题,请看看下面的方法。他们…

grouped.get_group((‘B‘, ‘A‘))选择分组

1. df.groupby([team, df.name.str[0]]) df.groupby([team, df.name.str[0]]) 这一部分代码表示对 DataFrame df 按照 两个条件 进行分组: 按照 team 列(即团队)。按照 name 列的 首字母(df.name.str[0])。 df.name.s…

力扣28找出字符串中第一个匹配项的下标

class Solution:def strStr(self, haystack: str, needle: str) -> int:# 特殊情况处理if not needle:return 0# 获取 haystack 和 needle 的长度a len(needle)b len(haystack)# 遍历 haystack,检查每个子字符串是否与 needle 匹配for i in range(b - a 1):if…

icp备案网站个人备案与企业备案的区别

个人备案和企业备案是在进行ICP备案时需要考虑的两种不同情况。个人备案是指个人拥有的网站进行备案,而企业备案则是指企业或组织名下的网站进行备案。这两者在备案过程中有一些明显的区别。 首先,个人备案相对来说流程较为简单。个人备案只需要提供个人…

ElasticSearch备考 -- 整体脉络梳理

1、 search 、Update、reindex ElasticSearch 备考 -- 查询&高亮&排序 ElasticSearch 备考 -- 聚合查询 ElasticSearch 备考 -- 异步检索 2、search temple ElasticSearch备考 -- Search template 3、custom analyzer ElasticSearch 备考 -- 自定义分词 2、…

用css实现瀑布流布局

上效果 知识理解 column-count: 4; column-gap: 15px;实现固定四行瀑布流布局 columns: 200px auto;column-gap: 15px;由浏览器根据容器的宽度自动调整&#xff0c;尽可能一行多个200px宽度的列数 <!DOCTYPE html> <html lang"en"><head><me…

Springboot日志打印、SpringBoot集成Log4j2、异步日志

文章目录 一、Log4j2介绍1.1、常用日志框架1.2、为什么选用log4j2 二、Log4j2整合步骤2.1、引入jar包2.2、配置文件2.3、配置文件模版 三、异步日志3.1、引入disruptor3.2、修改启动类3.3、修改日志文件的内容3.4、再次进行测试 四、可能遇到的问题4.1、日志打印不生效&#xf…

浏览器选中文字样式

效果 学习 Chrome: 支持 ::selection。Firefox: 支持 :-moz-selection 和 ::selection。Safari: 支持 ::selection。Internet Explorer: 支持 :-ms-selection。Microsoft Edge: 支持 ::-ms-selection 和 ::selection。 代码 <!DOCTYPE html> <html lang"en&qu…

【UE5】UnrealEngine源码构建2:windows构建unreal engine 5.3.2

参考大神知乎的文章:UE5 小白也能看懂的源码编译指南 据说会耗费400G的空间。 代码本身并不大,可能是依赖特别多,毕竟看起来UE啥都能干,核心还是c++的, 【UE5】UnrealEngine源码构建1:tag为5.3.2源码clone 本着好奇+ 学习的态度,想着也许有机会能更为深入的熟悉UE的机制…