linux内核开发--LDD3 scull错误集合,内核版本迁移清单

2024-02-21 09:48

本文主要是介绍linux内核开发--LDD3 scull错误集合,内核版本迁移清单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

由于linux内核版本的升级,往往会让能在老版本内核上编译通过的驱动程序移植到新版本内核中出现各种编译和链接错误,这里就将我遇到的一些问题做个整理,让后续开发更流畅^_^!

当前内核版本为3.2.4


1.make[1]: Entering directory `/usr/src/linux-***' scripts/Makefile.build:49: *** CFLAGS was changed in "***/Makefile". Fix it to use ***.  Stop.

原因:与Makefile.build中的CFLAGS冲突

建议:删除CFLAGS或者将CFLAGS重命名


2. fatal error: linux/config.h: No such file or directory

原因:linux-2.6.20起,linux/config.h被移除了

建议:可以添加如下代码

#if(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18))

#if(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33))

#include <generated/autoconf.h>

#else

#include <linux/autoconf.h>

#endif

#else

#include <linux/config.h>

#endif

3. error: unknown field ‘ioctl’ specified in initializer

原因:linux-2.6.26起,file_operations修改了,移除了ioctl,添加了如下两个接口

long(*unlocked_ioctl)(structfile *, unsignedint,unsignedlong);

long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
建议:视程序使用情况,把.ioctl修改成为.unlocked_ioctl或者compat_ioctl


4 error: implicit declaration of function ‘init_MUTEX’

原因:linux-2.6.25起,移除init_MUTEX,init_MUTEX_LOCKED宏定义

建议:添加如下代码

#include <linux/semaphore.h>

#define init_MUTEX(a) sema_init(a,1)

#define init_MUTEX_LOCKED(a) sema_init(a,0)


5. error: ‘TASK_INTERRUPTIBLE’ undeclared (first use in this function)

原因:linux-2.6.19起,TASK_INTERRUPTIBLE的定义被移动到linux/sched.h

建议:添加头文件 linux/sched.h


6. error: ‘SPIN_LOCK_UNLOCKED’ undeclared here 

原因:新版本内核中,SPIN_LOCK_UNLOCKED被移除

建议:使用DEFINE_SPINLOCK(lock)宏来替代


7. error: ‘struct task_struct’ has no member named ‘uid’/ ‘euid’

原因:linux-2.6.31起,struct task_struct定义在include/linux/sched.h中,原来task_struct结构体定义有所改动,将uid和euid等挪到 cred中,见include/linux/sched.h和              include/linux/cred.h

建议:只需要将报error的代码做如下修改

current->uid 修改为 current->cred->uid

current->euid 修改为 current->cred->euid


这篇关于linux内核开发--LDD3 scull错误集合,内核版本迁移清单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/731362

相关文章

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

SpringBoot3匹配Mybatis3的错误与解决方案

《SpringBoot3匹配Mybatis3的错误与解决方案》文章指出SpringBoot3与MyBatis3兼容性问题,因未更新MyBatis-Plus依赖至SpringBoot3专用坐标,导致类冲... 目录SpringBoot3匹配MyBATis3的错误与解决mybatis在SpringBoot3如果

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长