编译linux驱动程序出现的一些问题

本文针对在Ubuntu 12.04环境下编译Linux内核字符驱动时遇到的多个编译错误进行了解析,并给出了具体的解决方案,包括如何处理缺失的头文件和隐式声明函数的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


我的makefile文件一:

KVERS = $(shell uname -r)

# Kernel modules
obj-m += second.o

# Specify flags for the module compilation.
#EXTRA_CFLAGS=-g -O0

build: kernel_modules user_test

kernel_modules:
	make -C /lib/modules/$(KVERS)/build M=$(CURDIR) modules
user_test:
	gcc -o second_test second_test.c

clean:
	make -C /lib/modules/$(KVERS)/build M=$(CURDIR) clean


我的makefile文件二:

KVERS = $(shell uname -r)

# Kernel modules
obj-m += second.o

# Specify flags for the module compilation.
#EXTRA_CFLAGS=-g -O0

build: kernel_modules user_test

kernel_modules:
	make -C /usr/src/linux-headers-$(KVERS)/ M=$(CURDIR) modules
user_test:
	gcc -o second_test second_test.c

clean:
	make -C /usr/src/linux-headers-$(KVERS)/ M=$(CURDIR) clean
linux源码树 目录,两种都可编译通过。不知道为什么。。。

一、在ubuntu12.04 内核版本为linux3.5的虚拟机上编译字符驱动程序,出现如下错误:

致命错误: asm/system.h:没有那个文件或目录



头文件错误:

以下是我驱动程序源码的头文件部分:

#include <linux/module.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/cdev.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/uaccess.h>

找到linux源码目录   /lib/modules/3.5.0-23-generic-build/arch/arm/include/asm/



打开system.h文件,以下是文件内容:

/* FILE TO BE DELETED. DO NOT ADD STUFF HERE! */
#include <asm/barrier.h>
#include <asm/compiler.h>
#include <asm/cmpxchg.h>
#include <asm/exec.h>
#include <asm/switch_to.h>
#include <asm/system_info.h>
#include <asm/system_misc.h>

第一行说明该文件被删除请不要包含!

可见,linux内核不同版本头文件有些许改变,出现此问题可查看自己版本的头文件。




二、删除system.h再次编译

又出现如下错误:

/home/liushan/drivers/second/second.c: 在函数‘second_init’中:
/home/liushan/drivers/second/second.c:106:3: 错误: 隐式声明函数‘kmalloc’ [-Werror=implicit-function-declaration]
/home/liushan/drivers/second/second.c:106:15: 警告: 赋值时将整数赋给指针,未作类型转换 [默认启用]
/home/liushan/drivers/second/second.c: 在函数‘second_exit’中:
/home/liushan/drivers/second/second.c:127:3: 错误: 隐式声明函数‘kfree’ [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors


提示错误出现在:kmalloc和kfree函数。

解决:加入#include <linux/slab.h>即可解决。

又是头文件问题,找到linux源码目录   /lib/modules/3.5.0-23-generic-build/include/linux/


打开该文件可以看到一些关于申请内存和释放内存的函数。


再次编译通过。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值