首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将驱动程序包括文件复制到linux文件夹

将驱动程序包括文件复制到linux文件夹
EN

Unix & Linux用户
提问于 2018-07-11 10:35:28
回答 1查看 943关注 0票数 1

我正在为嵌入式socfpga系统使用buildroot。我已经成功地编写了一个驱动程序和一个应用程序来测试它,下面是BR用户手册

  • my_driver_dma :司机
  • my_dma :应用程序

我遇到的问题是,为了使用专用的驱动程序函数,我必须在"my_driver_dma.h“中包含"my_dma.c”。

我还没有弄清楚如何自动找到"my_driver_dma.h“文件。为了编译它,为了测试目的,我将它复制到"my_dma“文件夹中,但是这是不可靠的。

我假设我必须复制包含文件,比如"/build/linux-socfpga-4.16/ include /linux/“文件夹,但是我不知道怎么做。

What我是否应该修改我的文件,使my_driver_dma.h文件自动显示在my_dma应用源文件"my_dma.c“中?

这是我的档案:

我的应用程序/my_dma/Makefile my_app/my_dma/my_dma.c我的驱动程序/my_driver_dma/Makefile我的驱动程序/my_driver_dma/my_driver_dma.c my_driver_dma/my_driver_dma.h BR/package/ my_app/my_apps.mk/package/my_app/config.BR/my_app/my_dma/my_dma.mk/package/my_app/my_dma/Config_in BR/package/my_驱动器/my_drivers.mk BR/package/my_driver/Config.in BR/package/my_drivers/my_driver_dma/my_driver_dma.mk BR/package/my_driver/my_driver/Config_in

我的应用程序/my_dma/my_dma.c

代码语言:javascript
复制
#include 
[...]

我的应用程序/my_dma/Makefile

代码语言:javascript
复制
#
# sample Makefile for my_dma
#

SRC=my_dma.c
OBJ = my_dma.o
CFLAGS = -Wall -Wextra
TARGET=my_dma


# rules
all: $(TARGET)

$(TARGET): $(OBJ)
    $(CC) $^ -o $@

%.o: %.c
    $(CC) -c $(CFLAGS) $^ -o $@

.PHONY: clean
clean:
    rm -f $(OBJ)

install:
    cp my_dma $(DESTDIR)/bin/my_dma

我的驱动程序/我的驱动程序_dma/Makefile

代码语言:javascript
复制
ifneq (${KERNELRELEASE},)

    obj-m  = my_driver_dma.o
else

    KERNELDIR        ?= /lib/modules/$(shell uname -r)/build
    MODULE_DIR       ?= $(shell pwd)
    ARCH             ?=
    CROSS_COMPILE    ?=
    INSTALL_MOD_PATH ?= /

all: modules

modules:
    export ARCH=$(ARCH)
    export CROSS_COMPILE=$(CROSS_COMPILE)
    ${MAKE}  -C ${KERNELDIR} SUBDIRS=${MODULE_DIR}  modules

modules_install:
    export ARCH=$(ARCH)
    export CROSS_COMPILE=$(CROSS_COMPILE)
    ${MAKE} INSTALL_MOD_PATH=${INSTALL_MOD_PATH} -C ${KERNELDIR} SUBDIRS=${MODULE_DIR}  modules_install

clean:
    rm -f *.o *.ko *.mod.c .*.o .*.ko .*.mod.c .*.cmd *~
    rm -f Module.symvers Module.markers modules.order
    rm -rf .tmp_versions
endif

BR/package/my_drivers/my_drivers.mk

代码语言:javascript
复制
include package/my_drivers/*/*.mk

BR/package/my_app/my_apps.mk

代码语言:javascript
复制
include package/my_apps/*/*.mk

BR/package/my_app/my_dma/my_dma.mk

代码语言:javascript
复制
MY_DMA_VERSION = 1.0.0
MY_DMA_SITE = $(TOPDIR)/my_apps/my_dma
MY_DMA_SITE_METHOD = local
MY_DMA_INSTALL_TARGET = YES
MY_DMA_INSTALL_STAGING = YES

define MY_DMA_BUILD_CMDS
    $(MAKE) CC="$(TARGET_CC)" -C $(@D) all 
endef

define MY_DMA_INSTALL_STAGING_CMDS
    $(MAKE) DESTDIR=$(STAGING_DIR) -C $(@D) install
endef

define MY_DMA_INSTALL_TARGET_CMDS
    $(INSTALL) -D -m 0755 $(@D)/my_dma $(TARGET_DIR)/usr/bin/my_dma
endef

$(eval $(generic-package))

BR/package/my_drivers/my_driver_dma/my_driver_dma.mk

代码语言:javascript
复制
MY_DRIVER_DMA_VERSION = 1.0.0
MY_DRIVER_DMA_SITE = $(TOPDIR)/my_drivers/my_driver_dma
MY_DRIVER_DMA_SITE_METHOD = local
MY_DRIVER_DMA_DEPENDENCIES = linux

define MY_DRIVER_DMA_BUILD_CMDS
    $(MAKE) -C $(@D) $(LINUX_MAKE_FLAGS) KERNELDIR=$(LINUX_DIR) modules
endef

define MY_DRIVER_DMA_INSTALL_TARGET_CMDS
    $(MAKE) -C $(@D) $(LINUX_MAKE_FLAGS) KERNELDIR=$(LINUX_DIR) modules_install
endef

$(eval $(kernel-module))
$(eval $(generic-package))
EN

回答 1

Unix & Linux用户

发布于 2018-11-27 09:22:15

在buildroot (.mk)中,在安装部分添加以下内容

代码语言:javascript
复制
define MY_DRIVER_DMA_INSTALL_TARGET_CMDS
    $(INSTALL) -D -m 644 $(@D)/my_driver_dma.h $(LINUX_DIR)/include/my_driver_dma.h
endef

这就行了。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/454665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档