Kernel中Module调用编译问题

个人使用ChatGLM-6B遇到的部分问题汇总 项目的github网址(https://github.com/THUDM/ChatGLM-6B)中有解决问题专用的Issues模块。建议遇到问题先将部分报错写在这里进行查询,大概率能找到问题的解决方法。本文章只用于记录个人在使用过程中遇到的问题,供以后回忆之用。以下都是在运行cli_demo.py遇到。推荐版本是4.27.1 ,但是好像不太行。以上修改完成后,我的程序就已经可以运行了。这里有多个问题需要解决。 阅读详情

   最近在kernel driver中写一个功能,遇到module之间调用的问题,以此记录一下。

在kernel中两个不同的模块之间是不能通过简单的#include “XX.h”来相互调用函数的。如果这样在调用的地方不会出现语法错误,但是在最后生成模块文件XXX.ko时就会出现error:“xxxx” 【xxx.ko】undefined! 在生成 .ko文件(kernel object)这个时候就报资源没有定义的错误了。

出现这样的情况是因为kernel的模块都是相互独立的,如果要共享就必须做一些处理了。


以/driver中的gpio和ir这两个module为例,如下:

ir.c中调用gpio中对gpio口操作的函数:

void MDrv_GPIO_Set_High(U8 u8IndexGPIO);


一.被调用模块gpio


1.gpio.c中被调用函数必须添加EXPORT_SYMBOL声明,如下:

void MDrv_GPIO_Set_High(U8 u8IndexGPIO)
{
    MHal_GPIO_Set_High(u8IndexGPIO);
}
EXPORT_SYMBOL(MDrv_GPIO_Set_High);

用EXPORT_SYMBOL声明一下函数是为了奖此函数导出,可供外部使用!


2.gpio模块中的Kconfig以及Makefile设置

Kconfig中必须定义Kernel中相对应的模块名:

config MDRV_GPIO

Makefile中编译目标:

obj-$(CONFIG_MDRV_GPIO)	+= gpio.o

3.被调用模块上层的Makefile配置

gpio.c的上一目录driver中的Makefile中:

obj-$(CONFIG_MDRV_GPIO)                            += gpio/

其中gpio也就是gpio.c所在的目录。


这样MDrv_GPIO_Set_High才能被正确的导出到kernel的根目录下的Module.symvers文件,这个文件里面就是kernel里所有的EXPORT_SYMBOL和EXPORT_SYMBOL_GPL导出来的符号以及函数,EXPORT_SYMBOL_GPL和EXPORT_SYMBOL的区别就是:如果module的协议不是GPL的, 那么EXPORT_SYMBOL_GPL导出的那些符号以及函数,就用不了!

这个Module.symvers每次编译kernel的时候重新生成!

如果碰到上面的编译错误,第一步就是到这个Module.symvers中查看是否有你要调用的函数或者变量!


二.调用模块ir

在ir.c中需要调用MDrv_GPIO_Set_High(U8 u8IndexGPIO):

extern void MDrv_GPIO_Set_High(U8 u8IndexGPIO);




这样ir.c中的函数就可以调用 MDrv_GPIO_Set_High(U8 u8IndexGPIO)这个函数啦!


撰写不易,转载请注明出处http://blog.youkuaiyun.com/jscese/article/details/16991679




深入解析Linux内核模块编译:kernel-devel与kernel-headers的协同作用及常见问题排查 本文深入解析Linux内核模块编译中kernel-devel与kernel-headers的核心作用与区别。kernel-devel提供完整的内核构建环境,是编译内核模块的关键;而kernel-headers则主要为用户空间程序提供API接口。文章详细阐述了二者协同工作的机制,并针对常见的“No such file or directory”等编译错误提供了系统的排查思路与解决方案。 阅读详情

相关推荐

基于Android平台的kernel module编程

如何加载kernel module我已在上一篇文章中详细描述,可以参考下。 这篇文章主要是针对我在android平台上编写kernel module时遇到的一些问题的记录及解决方案。 kernel module兼容性问题:      首先不得不吐嘈下在android平台上做kernel module是个完全没有前景的事,由于kernel module是版本依赖和机器依赖的,一般能作为

Carelife的小站 769

驱动编译进内核或编译模块的区别

linux内核中Kconfig文档的作用 2.6内核的源码树目录下一般都会有两个文文:Kconfig和Makefile。分布在各目录下的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出配置菜单,用户配置完后保存到.config(在顶层目录下生成)中

sooolo的专栏 5072

【OpenWrt】添加自定义kernel内核模块并编译

OP系统添加自定义内核模块

博客 7174

Linux下一个ko模块中函数调用另一个ko模块中函数

mod_a.c // Module A (mod_a.c) #include<linux/init.h> #include<linux/module.h> #include<linux/kernel.h> static int func1(void) { printk("In Func: %s...\n",__func__); ...

xinshuai111的博客 6659

Linux kernel module symbols relocation

尝试回答两个问题: 1. Module如何解决kernel的函数调用问题 2. Module如何解决使用到其它module的函数调用问题 *.ko是个ELF文件,本质上与跑在user space的APP一样. 从Module编译结果看起: 执行指令: readelf -a usb_wwan.ko,摘录部分与本主题有关系:00002104  0001801c R_ARM_CALL

jymfist的专栏 1030

CODESYS EtherCAT通讯断了怎么办?手把手教你用ST语言写状态监测程序(附完整代码)

本文详细解析了CODESYS平台下EtherCAT通讯中断的故障排查与恢复方法,通过ST语言编写状态监测程序实现链路监测、故障隔离和伺服恢复。文章包含完整代码示例,帮助工程师快速诊断EtherCAT网络问题,提升工业自动化设备的运行稳定性。

weixin_30919571的博客 209

写一个kernel driver module

修改上一级的Kconfig和Makefile:(driver/Kconfig driver/Makefile)

weixin_42492218的博客 251

炼丹-Pyecharts: JupyterLab无法render_notebook

炼丹-Pyecharts: JupyterLab无法render_notebook问题描述Jupyter-Lab 环境下render_notebook显示空白 问题描述Jupyter-Lab 环境下render_notebook显示空白 首先需要使用pyecharts自带的config来申明一下使用pyecharts的运行环境 from pyecharts.globals import Curre...

MichaelZzzzz的博客 4688

从零实现Transformer的简易版与强大版:从300多行到3000多行

transformer强大到什么程度呢,基本是17年之后绝大部分有影响力模型的基础架构都基于的transformer(比如,有200来个,包括且不限于基于decode的GPT、基于encode的BERT、基于encode-decode的T5等等)通过博客内的这篇文章《》,我们已经详细了解了transformer的原理(如果忘了,建议先务必复习下再看本文)

结构之法 算法之道 5万+

Arduino Uno R3开发板系列学习教程(番外篇:USB驱动安装与疑难排解)

本文详细介绍了Arduino Uno R3开发板USB驱动安装与疑难排解的完整指南,特别针对国产克隆版常见的CH340驱动问题提供解决方案。从识别开发板类型到Windows/Mac系统驱动安装步骤,再到常见问题排查与高级排错技巧,帮助开发者快速解决连接问题,确保程序烧录顺利进行。

weixin_29182481的博客 583

从零到一:DETR模型在自定义数据集上的实战部署与调优

本文详细介绍了DETR模型在自定义数据集上的实战部署与调优过程,包括环境准备、数据转换、模型配置、训练技巧及问题排查。通过具体代码示例和实用建议,帮助开发者高效完成从零到一的DETR模型部署,特别适合目标检测领域的实践应用。

weixin_42524100的博客 463

4.18的kernel上无法卸载内核驱动模块

本人的两外一个博客地址:https://www.joeys.top,欢迎大家光临,哈哈哈 问题描述: module在4.18的kernel上面无法在rmmod的时候会如下报错 [root@node-1 zjp]# insmod hello7.ko [root@node-1 zjp]# rmmod hello7.ko rmmod: ERROR: could not remove 'hello7': Device or resource busy rmmod: ERROR: could not remo.

zhao305149619的专栏 1324

光学系统设计:波段、光源、光纤与探测器匹配指南

在光学测量和光纤通信系统中,波段、光源、光纤和探测器的匹配关系是系统设计的核心基础。波段指电磁波谱中的特定波长范围,光源负责产生特定波长的光信号,光纤作为传输介质需要与波长匹配以降低损耗,探测器则负责将光信号转换为电信号。理解各组件的光谱特性对于系统性能至关重要,例如在850nm短波长多模光纤系统中,VCSEL激光器与PIN光电二极管的组合能提供最佳性价比。典型应用场景包括生物医学成像、光纤通信和气体传感,其中光谱重叠优化、模场直径匹配和偏振特性协调是关键技术要点。通过实测数据对比不同组合的传输性能,可以为

weixin_33812433的博客 338

kernel module的单独的编译与insmod

单独编译kernel的module,方便调试。下面介绍详细测试过程。

wolfnx 1431

SerDes系列之FFE均衡技术

FFE的基本结构可以在RX侧或TX侧实现,其基本工作原理相同:它通过从同一信号源应用适当的延迟来产生多径信号,然后对它们进行线性缩放和组合以消除信道ISI。

一只豌豆象的博客 4243

手把手教你完成YOLOv8 PyQt5和PySide6目标检测界面搭建,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

目标检测是计算机视觉中的重要任务,广泛应用于安防监控、自动驾驶、智能家居等领域。YOLO系列模型由于其高效的检测速度和较高的准确率,成为目标检测任务的首选算法之一。本项目结合 YOLOv8 与 PyQt5,构建了一个图形化界面,便于用户进行目标检测的操作和展示,实现对图片、视频和摄像头的实时目标检测,不仅可以用于大论文的工作量展示,还可以作为毕业设计。支持目标检测、目标分割等模型进来检测

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1万+

android.mk多个module,Android.mk:编译一个kernel module

# Copyright Statement:#LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)WIFI_PROJ_CONFIG_FILE := $(LOCAL_PATH)/config/$(TARGET_DEVICE).configlocal_path_full := $(shell pwd)/$(LOCAL_PATH)wifi_module_ou...

weixin_39863631的博客 719

微信开发 - 最新第三方网站接入微信登录、微信支付时,本地 redirect_uri 参数错误导致无法调试的解决方案(微信开放平台)完美解决每次都需要部署到线上测试,在本地使用本地 ip 就能轻松调试

redirect_uri参数错误,微信第三方登录,没有服务器时的测试方法,微信开放平台的回调域名怎么设置为本地域名IP,微信登录微信支付每次调试都需要放到服务器上怎么办,微信登录支付业务在本地调试不了怎么办,在本地怎么测试微信支付和登录,微信第三方登陆本地测试,怎么在本地进行测试,微信回调域怎么设置为本地IP,微信扫码登录redirect_uri参数错误,微信开放平台,微信开放平台开发的第三方登录和支付,vue2,nuxt2,vue3,nuxt3,uniapp,微信开放平台,公众号,微信支付,微信登录授权,

🏆 前端领域优质创作者 8791

linux kernel、module编译

linux kernel编译,大致可分为几个步骤: 1. 获取d

zengxi0302的专栏 5236

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

linux kernel驱动之module_init

在接触过的linux kernel驱动中(camera sensor驱动, TP驱动),模型都是一样的 #include //...... //....... static int __init XXX_init(void) { //... } static void __exit XXX_exit(void) { //... } module_init(XXX_i

miemie88的专栏 796

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

linux module 加载kernel log

一、Linux Module背景 1、什么是Linux kernel module 操作系统的内核是单一体系结构(monolithic kernel)的。整个内核是一个单独的非常大的程序。与单一体系结构相对的是微内核体系结构(micro kernel),比如Windows NT采用的就是微内核体系结构。对于微内核体系结构特点,操作系统的核心部分是一个很小的内核,实现一些最基本的服务,如创建和删除进程、内存管理、中断管理等等。而文件系统、网络协议等其它部分都在微内核外的用户空间里运行。 这两种体系的内核各有

sdl0358的博客 514

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

如何在kernel中调用module的函数

     为什么要在内核中调用模块的函数?     linux解决方案提供商在发布代码时,可能希望将某些核心代码以二进制(对于内核,就是ko文件)的模块发布,然后在内核中调用模块的函数,以保护其知识产权。      模块调用内核的函数是很容易的,在内核EXPORT_SYMBOL函数,并包含相关的头文件,直接调用即可。但反过来,在内核中调用模块的函数则不太容易。即使包含相关头文件,编译通

1886

kernel的module目录名疑问

原因:kernel的module目录匹配是由kernel编译时生成的版本决定的,本来制作rootfs时创建module文件夹名字是4.1.15,但是修改了内核,内核的version生成信息变了,相应的源码如下:(kernel的顶层Makefile)当修改内核后重新编译后烧到设备上,启动后发现kernel的module名和uname -r对不上了,导致驱动无法加载,出现如下的错误信息。脚本执行的结果拼接而成,其中$(KERNELVERSION)就是内核原本的版本号4.1.15,而。这里主要分为两个部分。

qq_40731414的博客 1089

将firmware编译进kernel空间

将firmware编译进kernel空间 文章目录将firmware编译进kernel空间Overview法1:kernel 4.9 及之前版本的方法法2:kernel 4.14版本方法1. 在defconfig中增加如下修改2. 在kernel根目录下的firmware目录中添加`.bin`固件 Overview kernel原本就是支持将firmware编译进内核的。 早些年,用的比较多的是方法一。这也就导致了kernel里面多了很多firmware文件,这些文件对于kernel源码来说。不适合放在re

王涵的博客 4558

linux内核模块编译,多个源文件的makefile编写解决init_module不调用的问题

当你存在两个源文件test.c test2.c test.h;其中test.c源依赖于test2.c 要如何编写makefile,来实现内核模块test.ko的编译,并且不会有不调用init_module入口函数的问题。 Kbuild的文档,有如下描述: If a kernel module is built from several source files, you specify...

zgp2917的专栏 1355

module license ‘unspecified‘ taints kernel编译问题解决

MODULE_LICENSE("GPL");

u013391407的专栏 1020
上一篇: TTL以及LVDS接口传输
下一篇: Android——启动过程详解
南丶烟
博客等级 码龄14年 569粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值