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

问题描述 投票:0回答:1

我写了一个实现IOCTL处理的基本模块。我试图将这个模块交叉编译到arm64,并与4.19.114内核源码进行对比。这是我的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

内核配置是 配置 没有任何变化。试着运行 make clean && make mrproper 但是没有任何帮助。

linux-kernel kernel linux-device-driver
1个回答
0
投票

问题是我没有生成modules.Run。

make <args> modules

可能会解决这个问题

© www.soinside.com 2019 - 2024. All rights reserved.