针对内核源交叉编译为arm64,找不到头文件

时间:2020-06-04 06:26:44

标签: linux-kernel kernel linux-device-driver

我写了一个实现IOCTL处理的基本模块。我正在尝试将此模块针对4.19.114内核源代码交叉编译为arm64。这是我的Makefile:

ARCH=arm64
CROSS_COMPILE=aarch64-linux-gnu-

obj-m := chardev.o
KDIR := linux-4.19.114
PWD := $(shell pwd)
default:
              $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
              $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean

这是我的模块来源:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/ioctl.h>
#include <linux/uaccess.h>

#define NAME "chardev_roi"

#define MAGIC 'a'
#define READPARAM 'b'
#define WRITEPARAM 'c'
#define IOCTL_READ_ROI _IOR(MAGIC, READPARAM, int64_t*)
#define IOCTL_WRITE_ROI _IOW(MAGIC, WRITEPARAM, int64_t*)

static ssize_t ext_read(struct file *filp, char __user *buf, size_t len, loff_t *off)
{ 
        printk("Reading from driver\n");
        return 0;
}

static ssize_t ext_write(struct file *filp, const char __user *buf, size_t len, loff_t *off)
{
        printk("Writing to driver...\n");
        return 0;
}

static long ext_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
        char* _from_user_buffer = NULL;
    switch (cmd)
    {
    case IOCTL_WRITE_ROI:
        printk("IOCTL_WRITE_ROI just has benn called\n");
        _from_user_buffer = kmalloc(32, GFP_KERNEL);
        copy_from_user(_from_user_buffer, (char*) arg, sizeof(_from_user_buffer));
        break;
    case IOCTL_READ_ROI:
        printk("IOCTL_READ_ROI just has been called\n");
        copy_to_user((char*) arg, "Hello, World!\n", 14);
        break;
    }

}

static int init(void)
{ 
        int major_number;
        static struct file_operations _fops =
        {
                .owner = THIS_MODULE,
                .read = ext_read,
                .write = ext_write,
                .unlocked_ioctl = ext_ioctl
        };
        major_number = register_chrdev(0, NAME, &_fops);
        return 0;
}

运行此命令:sudo ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make -d -C linux-4.19.114 M=$(pwd) modules

引发此错误:

./include/uapi/linux/types.h:5:10: fatal error: asm/types.h: No such file or directory

内核配置为 defconfig ,没有任何更改。试图运行make clean && make mrproper,但没有帮助。

1 个答案:

答案 0 :(得分:0)

问题是我没有生成模块。 运行:

make <args> modules

可能会解决问题。

相关问题