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

相关文章

SpringBoot全局异常拦截与自定义错误页面实现过程解读

《SpringBoot全局异常拦截与自定义错误页面实现过程解读》本文介绍了SpringBoot中全局异常拦截与自定义错误页面的实现方法,包括异常的分类、SpringBoot默认异常处理机制、全局异常拦... 目录一、引言二、Spring Boot异常处理基础2.1 异常的分类2.2 Spring Boot默

JAVA Calendar设置上个月时,日期不存在或错误提示问题及解决

《JAVACalendar设置上个月时,日期不存在或错误提示问题及解决》在使用Java的Calendar类设置上个月的日期时,如果遇到不存在的日期(如4月31日),默认会自动调整到下个月的相应日期(... 目录Java Calendar设置上个月时,日期不存在或错误提示java进行日期计算时如果出现不存在的

Nginx错误拦截转发 error_page的问题解决

《Nginx错误拦截转发error_page的问题解决》Nginx通过配置错误页面和请求处理机制,可以在请求失败时展示自定义错误页面,提升用户体验,下面就来介绍一下Nginx错误拦截转发error_... 目录1. 准备自定义错误页面2. 配置 Nginx 错误页面基础配置示例:3. 关键配置说明4. 生效

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

VSCode开发中有哪些好用的插件和快捷键

《VSCode开发中有哪些好用的插件和快捷键》作为全球最受欢迎的编程工具,VSCode的快捷键体系是提升开发效率的核心密码,:本文主要介绍VSCode开发中有哪些好用的插件和快捷键的相关资料,文中... 目录前言1、vscode插件1.1 Live-server1.2 Auto Rename Tag1.3

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

Agent开发核心技术解析以及现代Agent架构设计

《Agent开发核心技术解析以及现代Agent架构设计》在人工智能领域,Agent并非一个全新的概念,但在大模型时代,它被赋予了全新的生命力,简单来说,Agent是一个能够自主感知环境、理解任务、制定... 目录一、回归本源:到底什么是Agent?二、核心链路拆解:Agent的"大脑"与"四肢"1. 规划模

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻