linux kernel内核编译错误:PATH_MAX未声明

HOSTCC  scripts/mod/sumversion.o
make[1]: “include/asm-arm/mach-types.h”是最新的。
scripts/mod/sumversion.c: 在函数‘get_src_version’中:
scripts/mod/sumversion.c:384: 错误:‘PATH_MAX’未声明(在此函数内第一次使用)
scripts/mod/sumversion.c:384: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
scripts/mod/sumversion.c:384: 错误:所在的函数内也只报告一次。)
scripts/mod/sumversion.c:384: 警告:未使用的变量‘filelist’
make[2]: *** [scripts/mod/sumversion.o] 错误 1
make[2]: *** 正在等待未完成的任务....
make[1]: *** [scripts/mod] 错误 2
make: *** [scripts] 错误 2
  CHK     include/linux/version.h
make[1]: “include/asm-arm/mach-types.h”是最新的。
  HOSTCC  scripts/mod/sumversion.o
scripts/mod/sumversion.c: 在函数‘get_src_version’中:
scripts/mod/sumversion.c:384: 错误:‘PATH_MAX’未声明(在此函数内第一次使用)
scripts/mod/sumversion.c:384: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
scripts/mod/sumversion.c:384: 错误:所在的函数内也只报告一次。)
scripts/mod/sumversion.c:384: 警告:未使用的变量‘filelist’
make[2]: *** [scripts/mod/sumversion.o] 错误 1
make[1]: *** [scripts/mod] 错误 2
make: *** [scripts] 错误 2
[root@lqm build]#


解决办法:

grep一下,发现PATH_MAX在limits.h中定义,在/scripts/mod/sumversion.c中添加#include <limits.h>即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我理解了您的问题。以下是一个示例程序和Makefile,满足您的需求: 程序示例: ```c #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/uaccess.h> #define DEVICE_NAME "userAdmin_max" #define FILE_PATH "/tmp/userAdmin_max.conf" MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("A simple Linux kernel module for reading file contents"); static int major_number; static char buffer[1024]; static int buffer_length = 0; static int device_open(struct inode *inode, struct file *file) { printk(KERN_INFO "Device %s opened.\n", DEVICE_NAME); return 0; } static int device_release(struct inode *inode, struct file *file) { printk(KERN_INFO "Device %s closed.\n", DEVICE_NAME); return 0; } static ssize_t device_read(struct file *file, char *buf, size_t count, loff_t *offset) { int bytes_read = 0; if (buffer_length > 0) { bytes_read = buffer_length - copy_to_user(buf, buffer, buffer_length); buffer_length = 0; } return bytes_read; } static ssize_t device_write(struct file *file, const char *buf, size_t count, loff_t *offset) { int bytes_written = 0; if (count > sizeof(buffer)) { printk(KERN_ALERT "Write buffer too large!\n"); return -EINVAL; } bytes_written = count - copy_from_user(buffer, buf, count); buffer_length = bytes_written; printk(KERN_INFO "File contents written to device buffer.\n"); return bytes_written; } static struct file_operations fops = { .owner = THIS_MODULE, .open = device_open, .release = device_release, .read = device_read, .write = device_write, }; static int __init init_module(void) { major_number = register_chrdev(0, DEVICE_NAME, &fops); if (major_number < 0) { printk(KERN_ALERT "Failed to register device: %d\n", major_number); return major_number; } printk(KERN_INFO "Device %s registered with major number %d.\n", DEVICE_NAME, major_number); return 0; } static void __exit cleanup_module(void) { unregister_chrdev(major_number, DEVICE_NAME); printk(KERN_INFO "Device %s unregistered.\n", DEVICE_NAME); } ``` Makefile: ```Makefile obj-m += userAdmin_max.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean ``` 您需要将上述程序示例保存为"userAdmin_max.c"文件,然后在终端中进入该文件所在目录,执行以下命令进行编译和加载模块: ``` make sudo insmod userAdmin_max.ko ``` 此时,您的内核模块就已经加载成功了。当应用程序写入"/tmp/userAdmin_max.conf"文件时,您的内核模块会自动读取该文件的内容,并将其保存在buffer数组中。您可以使用"cat /dev/userAdmin_max"命令来读取该内容。注意,如果该文件的大小超过了1024字节,那么只会读取前1024个字节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值