buildroot添加本地自定义代码编译步骤

configs/my_module_defconfig添加定义

#
# MY_MODULE package
#
BR2_PACKAGE_MY_MODULE=y

package/Config.in添加配置

menu "MY_MODULE package"
source "package/my_module/Config.in"

新建package/es-dma/

添加Config.in和my_module.mk
Config.in:

config BR2_PACKAGE_MY_MODULE
bool "my_module"
help
      my_module help.

my_module.mk:

###########################################################
# my_module
###########################################################

MY_MODULE_VERSION:= 0.9
MY_MODULE_SITE:= $(TOPDIR)/../libs/my_module
MY_MODULE_SITE_METHOD:=local
MY_MODULE_INSTALL_TARGET:=YES

define MY_MODULE_BUILD_CMDS
$(MAKE) CC="$(TARGET_CC)" LD="$(TARGET_LD)" -C $(@D) all
endef

define MY_MODULE_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/libmy_module.so $(TARGET_DIR)/lib
endef

$(eval $(generic-package))

MY_MODULE_SITE:= KaTeX parse error: Undefined control sequence: \mson at position 114: …根据情况可以选择其他cmake\̲m̲s̲o̲n̲等编译包. 只需要将(eval ( g e n e r i c − p a c k a g e ) ) 更 改 为 (generic-package))更改为 (genericpackage))(eval $(cmake-package))等标记即可,参考官方文档:infrastructure_for_cmake_based_packages

在源代码中修改Makefile

…/libs/my_module/Makefile

TARGET = libmy_module.so

CFLAGS += -I$(PWD)/../../../linux/linux-5.17/usr/include/ 

all: $(TARGET)

$(TARGET):my_module.c
$(CC) $(CFLAGS) $(LDFLAGS) -Wall -shared -fPIC -Os -g -o $@ $<

clean:
rm -rf $(TARGET) 

编译和安装,以及第三方依赖

  • 编译
    此时编译buildroot会自动将代码拷贝到buildroot的build目录编译.
    如果文件有修改, 可以在buildroot直接使用make my_module-rebuild单独重新拷贝编译代码.
  • 安装到目标文件夹
    并根据$(INSTALL) 命令安装到目标位置.
    $(TARGET_DIR)/lib是库路径, $(TARGET_DIR)/bin是执行文件路径.
  • 安装到本地依赖
    如果该模组是一个基础库, 要为第三方编译提供依赖, 那么也需要安装到,$(STAGING_DIR)/, 包含include,lib.
    my_module.mk中添加:
MY_MODULE_INSTALL_STAGING:=YES

define MY_MODULE_INSTALL_STAGING_CMDS
$(INSTALL) -D -m 0755 $(@D)/libmy_module.so $(STAGING_DIR)/usr/lib
$(INSTALL) -D -m 0644 $(@D)/my_module.h $(STAGING_DIR)/usr/include
endef

这样, 当其它模组在config.in中声明:

depends on BR2_PACKAGE_MY_MODULE

就可以直接在$(STAGING_DIR)中搜寻头文件和库文件, 不用在mk文件中去手动指定.
mk中定义:

B_MODULE_DEPENDENCIES += my_module

就可以在编译b_module时先编译my_module并安装对应文件。

多级目录编写

如果涉及到自定义的多级目录, 则每一几目录都需要创建Config.in和my_module.mk文件, 将子目录包含进来.
config中设定参照上述, 包含子目录的config.
my_module.mk则使用类似include $(waildcard package/my_module/sub_mode//.mk) 之类的遍历函数来包含所有的子目录.

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值