How to create a new package under buildroot

In the earlier post I have explained how to add a kernel module as a new buildroot package. You can check that post here:
https://vivekbhadra.wordpress.com/2017/06/15/how-to-addcompile-a-kernel-module-as-a-new-buildroot-package/

In this module I will explain the steps to add a program which is not a kernel module but a user space c program for testing the earlier kernel module.


Following the same way as earlier start with the below step:
Create a new folder under buildroot/package folder.

cd buildroot
mkdir package/test

Now we need to create two files inside the newly created “test” folder: Config.in and test.mk.

touch package/test/Config.in
touch package/test/test.mk

Now let’s populate these files with what will eventually add xyz as a new package.
Config.in

config BR2_PACKAGE_TEST
bool "test"
depends on BR2_PACKAGE_XYZ
help
This is test library package for XYZ driver.

As you can see a new line has been added in the above Config.in file which starts with depends on.
depends on BR2_PACKAGE_XYZ – this is how we specify the dependency between packages. If a package is dependent on another then it will add a config option with depend on . In this case the test application is only relevant if there is the driver package available as it only tests the specific driver XYZ. Hence we have made it a dependency package of XYZ by adding this line in the Config.in.

Also, as we have made this package a dependency package of package XYZ, we have to make a little modification as below:

config BR2_PACKAGE_XYZ
bool "xyz"
select BR2_PACKAGE_TEST
help
This is sample package.
This selects the test application too.

test.mk

TEST_VERSION = 1.0
TEST_SITE = <strong>../path/to/your/source/code/test</strong>
TEST_SITE_METHOD = local
TEST_INSTALL_TARGET = YES

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

define TEST_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/test $(TARGET_DIR)/bin
$(INSTALL) -D -m 0755 $(@D)//run_test.sh $(TARGET_DIR)/bin
$(TARGET_DIR)/root
endef

$(eval $(generic-package))

Now we have to tell the package system that we want to be added. Hence we do the below modification in the package config file:
buildroot/package/Config.in

menu "Menu-name whatever you like"
source "package/test/Config.in"
endmenu

In this example test.mk the source path has been set as ../path/to/your/source/code/test. This is a relative path from the buildroot directory. You can specify any absolute path in your local machine as well. But important thing to remember is any relative path has to be with respect to the buildroot directory.
<strong>Test makefile</strong>

SRC=$(wildcard code/*.c)
CFLAGS = -Wall -g
INC=-I./include
all:
$(CC) $(INC) $(CFLAGS) $(SRC) -o test
clean:

The structure of the test source code is as below:
.
├── code
│   └── test.c
├── include
│   └── test.h
├── makefile
├── scripts
│   └── run_test.sh
└── test

Now the installation as below:

$(INSTALL) -D -m 0755 $(@D)/test $(TARGET_DIR)/bin - this copies the test binary test to the $(TARGET_DIR)/bin directory and similary:
$(INSTALL) -D -m 0755 $(@D)//run_test.sh $(TARGET_DIR)/bin

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s