mailarchive of the ptxdist mailing list
 help / color / mirror / Atom feed
* [ptxdist] kernel headers in ptxdist
@ 2017-01-31  9:27 Alejandro Vázquez
  2017-01-31  9:49 ` Juergen Borleis
  0 siblings, 1 reply; 3+ messages in thread
From: Alejandro Vázquez @ 2017-01-31  9:27 UTC (permalink / raw)
  To: ptxdist


[-- Attachment #1.1: Type: text/plain, Size: 768 bytes --]

Hi, All.

I need use kernel headers to build a IPU app.
I select KERNEL_HEADERS in ptxdist and I add
CFLAGS="-I$(KERNEL_HEADERS_INCLUDE_DIR)" in *.make.
Also I have added in the makefile -I$(KERNEL_HEADERS_INCLUDE_DIR)

But it still does not compile because it does not find the headers.
It looks like the variable KERNEL_HEADERS_INCLUDE_DIR is empty, this can be
seen in the output of the compilation.

-------------------------
> target: alpha_ex1.compile
> -------------------------
> make[1]: Entering directory `/ptxdist/BSP/local_src/alpha_ex1'
> arm-v7a-linux-gnueabihf-gcc -g -O0 -o alpha_ex1 alpha_ex1.c -I \
> -I/uapi
> alpha_ex1.c:26:25: fatal error: linux/mxcfb.h: No such file or directory
>  #include <linux/mxcfb.h>


Is there something wrong?

Thanks!

[-- Attachment #1.2: Type: text/html, Size: 1223 bytes --]

[-- Attachment #2: alpha_ex1.c --]
[-- Type: text/x-csrc, Size: 6207 bytes --]

/*
* Copyright 2013 Freescale Semiconductor, Inc. All Rights Reserved.
*/

/*
* The code contained herein is licensed under the GNU Lesser General
* Public License. You may obtain a copy of the GNU Lesser General
* Public License Version 2.1 or later at the following locations:
*
* http://www.opensource.org/licenses/lgpl-license.html
* http://www.gnu.org/copyleft/lgpl.html
*/

#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <linux/mxcfb.h>
#include <linux/ipu.h>

static unsigned int fmt_to_bpp(unsigned int pixelformat)
{
	unsigned int bpp;
 
        switch (pixelformat)
        {
                case IPU_PIX_FMT_RGB565:
               /*interleaved 422*/
                case IPU_PIX_FMT_YUYV:
                case IPU_PIX_FMT_UYVY:
                /*non-interleaved 422*/
                case IPU_PIX_FMT_YUV422P:
                case IPU_PIX_FMT_YVU422P:
                        bpp = 16;
                        break;
                case IPU_PIX_FMT_BGR24:
                case IPU_PIX_FMT_RGB24:
                case IPU_PIX_FMT_YUV444:
                case IPU_PIX_FMT_YUV444P:
                        bpp = 24;
                        break;
                case IPU_PIX_FMT_BGR32:
                case IPU_PIX_FMT_BGRA32:
                case IPU_PIX_FMT_RGB32:
                case IPU_PIX_FMT_RGBA32:
                case IPU_PIX_FMT_ABGR32:
                        bpp = 32;
                        break;
                /*non-interleaved 420*/
                case IPU_PIX_FMT_YUV420P:
                case IPU_PIX_FMT_YVU420P:
                case IPU_PIX_FMT_YUV420P2:
                case IPU_PIX_FMT_NV12:
    case IPU_PIX_FMT_TILED_NV12:
                        bpp = 12;
                        break;
                default:
                        bpp = 8;
                        break;
        }
        return bpp;
}

int main (int argc, char *argv[])
{
	struct ipu_task task;
	struct timeval begin, end;
	struct fb_var_screeninfo fb_var;
	struct fb_fix_screeninfo fb_fix;
	dma_addr_t outpaddr;

	int sec, usec, run_time;
	int fd_ipu, fd_fb, isize, ovsize, osize;
	int ret, i;
 
	void *inbuf = NULL;
	void *ovbuf = NULL;
	void *outbuf = NULL;

	// Clear &task	
	memset(&task, 0, sizeof(task));
 
	// Input image size and format
	task.input.width    = 1024;
	task.input.height   = 768;
	task.input.format   = v4l2_fourcc('R', 'G', 'B', 'P');
 
	// Overlay image size and format
	task.overlay.width    = 1024;
	task.overlay.height   = 768;
	task.overlay.format   = v4l2_fourcc('R', 'G', 'B', 'P');
	task.overlay_en = 1;
	task.overlay.alpha.mode = 0; //0 - Global alpha blending
	task.overlay.alpha.gvalue = 0;

	// Output image size and format
	task.output.width   = 1024;
	task.output.height  = 768;
	task.output.format  = v4l2_fourcc('R', 'G', 'B', 'P');
 
	// Open IPU device
	fd_ipu = open("/dev/mxc_ipu", O_RDWR, 0);
	if (fd_ipu < 0) {
		printf("open ipu dev fail\n");
		ret = -1;
		goto done;
	}

	// Calculate input size from image dimensions and bits-per-pixel
	// according to format
	isize = task.input.paddr =
		task.input.width * task.input.height
		* fmt_to_bpp(task.input.format)/8;

	// Allocate contingous physical memory for input image
	// input.paddr contains the amount needed
	// this value will be replaced with physical address on success
	ret = ioctl(fd_ipu, IPU_ALLOC, &task.input.paddr);
	if (ret < 0) {
		printf("ioctl IPU_ALLOC fail: (errno = %d)\n", errno);
		goto done;
	}

	// Create memory map and obtain the allocated memory virtual address
	inbuf = mmap(0, isize, PROT_READ | PROT_WRITE,
		MAP_SHARED, fd_ipu, task.input.paddr);
	if (!inbuf) {
		printf("mmap fail\n");
		ret = -1;
		goto done;
	}

	// Fill input buffer with white color
	memset(inbuf, 0xff, isize);

	// Calculate the overlay size 
	ovsize = task.overlay.paddr =
		task.overlay.width * task.overlay.height
		* fmt_to_bpp(task.overlay.format)/8;

	// Allocate contiguous  physical memory for overlay buffer
	ret = ioctl(fd_ipu, IPU_ALLOC, &task.overlay.paddr);
	if (ret < 0) {
		printf("ioctl IPU_ALLOC fail\n");
		goto done;
	}

	// Map the overlay buffer
	ovbuf = mmap(0, ovsize, PROT_READ | PROT_WRITE,
			MAP_SHARED, fd_ipu, task.overlay.paddr);
	if (!ovbuf) {
		printf("mmap fail\n");
		ret = -1;
		goto done;
	}

	// Fill overlay buffer with 4 color strips
	memset(ovbuf, 0x2222, ovsize/4);
	memset(ovbuf+ovsize/4, 0x6666, ovsize/4);
	memset(ovbuf+ovsize/2, 0xaaaa, ovsize/4);
	memset(ovbuf+ovsize*3/4, 0xdddd, ovsize/4);

	// Open Framebuffer and gets its address
	if ((fd_fb = open("/dev/fb0", O_RDWR, 0)) < 0) {
		printf("Unable to open /dev/fb0\n");
		ret = -1;
		goto done;
	}

	if ( ioctl(fd_fb, FBIOGET_FSCREENINFO, &fb_fix) < 0) {
		printf("Get FB fix info failed!\n");
		ret = -1;
		goto done;
	}

	ioctl(fd_fb, FBIOGET_FSCREENINFO, &fb_fix);

	// Set IPU output address as framebuffer address
	outpaddr = fb_fix.smem_start;	
	task.output.paddr = outpaddr;

	// Create memory map for output image
	outbuf = mmap(0, osize, PROT_READ | PROT_WRITE,
	MAP_SHARED, fd_ipu, task.output.paddr);
	if (!outbuf) {
		printf("mmap fail\n");
		ret = -1;
		goto done;
	}

	for (i=0; i < 256 ; i++) {

		task.overlay.alpha.gvalue = i;
		printf("Global Alpha Value = %d\n", i);

		gettimeofday(&begin, NULL);
	
		// Perform combining 
		ret = ioctl(fd_ipu, IPU_QUEUE_TASK, &task);
		if (ret < 0) {
			printf("ioct IPU_QUEUE_TASK fail %x\n", ret);
			goto done;
		}
	 
		gettimeofday(&end, NULL);
		sec = end.tv_sec - begin.tv_sec;
		usec = end.tv_usec - begin.tv_usec;
		if (usec < 0) {
			sec--;
			usec = usec + 1000000;
		}
		run_time = (sec * 1000000) + usec;
	
	  	printf("Resize time: %d usecs\n", run_time);
		usleep(100000);
	}
 
done:
	if (outbuf)
		munmap(outbuf, osize);
	if (task.output.paddr)
		ioctl(fd_ipu, IPU_FREE, &task.output.paddr);
	if (inbuf)
		munmap(inbuf, isize);
	if (ovbuf)
		munmap(ovbuf, isize);
	if (task.input.paddr)
		ioctl(fd_ipu, IPU_FREE, &task.input.paddr);
	if (fd_ipu)
		close(fd_ipu);
	if (fd_fb)
		close(fd_fb);

	return ret;
}


[-- Attachment #3: alpha_ex1.in --]
[-- Type: application/octet-stream, Size: 113 bytes --]

## SECTION=project_specific

config ALPHA_EX1
	tristate
	prompt "alpha_ex1"
	select KERNEL_HEADER
	help
	  FIXME

[-- Attachment #4: alpha_ex1.make --]
[-- Type: application/octet-stream, Size: 2932 bytes --]

# -*-makefile-*-
#
# Copyright (C) 2017 by <>AV
#
# See CREDITS for details about who has contributed to this project.
#
# For further information about the PTXdist project and license conditions
# see the README file.
#

#
# We provide this package
#
PACKAGES-$(PTXCONF_ALPHA_EX1) += alpha_ex1

#
# Paths and names
#
ALPHA_EX1_VERSION	:= 1
ALPHA_EX1_MD5		:=
ALPHA_EX1		:= alpha_ex1-$(ALPHA_EX1_VERSION)
ALPHA_EX1_URL		:= file://local_src/alpha_ex1
ALPHA_EX1_DIR		:= $(BUILDDIR)/$(ALPHA_EX1)
ALPHA_EX1_LICENSE	:= unknown

# ----------------------------------------------------------------------------
# Extract
# ----------------------------------------------------------------------------

#$(STATEDIR)/alpha_ex1.extract:
#	@$(call targetinfo)
#	@$(call clean, $(ALPHA_EX1_DIR))
#	@$(call extract, ALPHA_EX1)
#	@$(call patchin, ALPHA_EX1)
#	@$(call touch)

# ----------------------------------------------------------------------------
# Prepare
# ----------------------------------------------------------------------------

#ALPHA_EX1_PATH	:= PATH=$(CROSS_PATH)
ALPHA_EX1_CONF_TOOL	:= NO
ALPHA_EX1_MAKE_ENV	:= $(CROSS_ENV) \
CFLAGS="-I$(KERNEL_HEADERS_INCLUDE_DIR)"

#$(STATEDIR)/alpha_ex1.prepare:
#	@$(call targetinfo)
#	@$(call world/prepare, ALPHA_EX1)
#	@$(call touch)

# ----------------------------------------------------------------------------
# Compile
# ----------------------------------------------------------------------------

#$(STATEDIR)/alpha_ex1.compile:
#	@$(call targetinfo)
#	@$(call world/compile, ALPHA_EX1)
#	@$(call touch)

# ----------------------------------------------------------------------------
# Install
# ----------------------------------------------------------------------------

#$(STATEDIR)/alpha_ex1.install:
#	@$(call targetinfo)
#	@$(call world/install, ALPHA_EX1)
#	@$(call touch)

# ----------------------------------------------------------------------------
# Target-Install
# ----------------------------------------------------------------------------

$(STATEDIR)/alpha_ex1.targetinstall:
	@$(call targetinfo)

	@$(call install_init, alpha_ex1)
	@$(call install_fixup, alpha_ex1,PRIORITY,optional)
	@$(call install_fixup, alpha_ex1,SECTION,base)
	@$(call install_fixup, alpha_ex1,AUTHOR,"<>AV")
	@$(call install_fixup, alpha_ex1,DESCRIPTION,missing)

#
# TODO: Add here all files that should be copied to the target
# Note: Add everything before(!) call to macro install_finish
#
	@$(call install_copy, alpha_ex1, 0, 0, 0755, $(ALPHA_EX1_DIR)/alpha_ex1, /usr/bin/alpha_ex1)

	@$(call install_finish, alpha_ex1)

	@$(call touch)

# ----------------------------------------------------------------------------
# Clean
# ----------------------------------------------------------------------------

$(STATEDIR)/alpha_ex1.clean:
	@$(call targetinfo)
	@-cd $(ALPHA_EX1_DIR) && \
		$(ALPHA_EX1_ENV) $(ALPHA_EX1_PATH) $(MAKE) clean
	@$(call clean_pkg, ALPHA_EX1)

# vim: syntax=make

[-- Attachment #5: Makefile --]
[-- Type: application/octet-stream, Size: 201 bytes --]

all: ipu-examples

ipu-examples: alpha_ex1.c
	$(CC) -g -O0 -o alpha_ex1 alpha_ex1.c -I$(KERNEL_HEADERS_INCLUDE_DIR) \
	-I$(KERNEL_HEADERS_INCLUDE_DIR)/uapi

clean:
	-rm alpha_ex1

.PHONY: all clean

	

[-- Attachment #6: Type: text/plain, Size: 91 bytes --]

_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [ptxdist] kernel headers in ptxdist
  2017-01-31  9:27 [ptxdist] kernel headers in ptxdist Alejandro Vázquez
@ 2017-01-31  9:49 ` Juergen Borleis
  2017-01-31 10:36   ` Alejandro Vázquez
  0 siblings, 1 reply; 3+ messages in thread
From: Juergen Borleis @ 2017-01-31  9:49 UTC (permalink / raw)
  To: ptxdist; +Cc: Alejandro Vázquez

Hi Alejandro,

On Tuesday 31 January 2017 10:27:04 Alejandro Vázquez wrote:
> I need use kernel headers to build a IPU app.
> I select KERNEL_HEADERS in ptxdist and I add
> CFLAGS="-I$(KERNEL_HEADERS_INCLUDE_DIR)" in *.make.
> Also I have added in the makefile -I$(KERNEL_HEADERS_INCLUDE_DIR)
>
> But it still does not compile because it does not find the headers.
> It looks like the variable KERNEL_HEADERS_INCLUDE_DIR is empty, this can
> be seen in the output of the compilation.
>
> -------------------------
> > target: alpha_ex1.compile
> > -------------------------
> > make[1]: Entering directory `/ptxdist/BSP/local_src/alpha_ex1'
> > arm-v7a-linux-gnueabihf-gcc -g -O0 -o alpha_ex1 alpha_ex1.c -I \
> > -I/uapi
> > alpha_ex1.c:26:25: fatal error: linux/mxcfb.h: No such file or
> > directory #include <linux/mxcfb.h>
>
> Is there something wrong?

Yes. You modify CFLAGS but you do not use it in your local Makefile.

Try this instead:

[...]
ALPHA_EX1_MAKE_ENV	:= $(CROSS_ENV) \
	"KERNEL_HEADERS_INCLUDE_DIR=$(KERNEL_HEADERS_INCLUDE_DIR)"
[...]

This should set and forward the variable to 'make' when it works through
your local Makefile.

Happy hacking
Juergen

-- 
Pengutronix e.K.                              | Juergen Borleis             |
Industrial Linux Solutions                    | http://www.pengutronix.de/  |

_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [ptxdist] kernel headers in ptxdist
  2017-01-31  9:49 ` Juergen Borleis
@ 2017-01-31 10:36   ` Alejandro Vázquez
  0 siblings, 0 replies; 3+ messages in thread
From: Alejandro Vázquez @ 2017-01-31 10:36 UTC (permalink / raw)
  To: Juergen Borleis; +Cc: ptxdist


[-- Attachment #1.1: Type: text/plain, Size: 1576 bytes --]

Perfect. This way work fine.

Thanks!


2017-01-31 10:49 GMT+01:00 Juergen Borleis <jbe@pengutronix.de>:

> Hi Alejandro,
>
> On Tuesday 31 January 2017 10:27:04 Alejandro Vázquez wrote:
> > I need use kernel headers to build a IPU app.
> > I select KERNEL_HEADERS in ptxdist and I add
> > CFLAGS="-I$(KERNEL_HEADERS_INCLUDE_DIR)" in *.make.
> > Also I have added in the makefile -I$(KERNEL_HEADERS_INCLUDE_DIR)
> >
> > But it still does not compile because it does not find the headers.
> > It looks like the variable KERNEL_HEADERS_INCLUDE_DIR is empty, this can
> > be seen in the output of the compilation.
> >
> > -------------------------
> > > target: alpha_ex1.compile
> > > -------------------------
> > > make[1]: Entering directory `/ptxdist/BSP/local_src/alpha_ex1'
> > > arm-v7a-linux-gnueabihf-gcc -g -O0 -o alpha_ex1 alpha_ex1.c -I \
> > > -I/uapi
> > > alpha_ex1.c:26:25: fatal error: linux/mxcfb.h: No such file or
> > > directory #include <linux/mxcfb.h>
> >
> > Is there something wrong?
>
> Yes. You modify CFLAGS but you do not use it in your local Makefile.
>
> Try this instead:
>
> [...]
> ALPHA_EX1_MAKE_ENV      := $(CROSS_ENV) \
>         "KERNEL_HEADERS_INCLUDE_DIR=$(KERNEL_HEADERS_INCLUDE_DIR)"
> [...]
>
> This should set and forward the variable to 'make' when it works through
> your local Makefile.
>
> Happy hacking
> Juergen
>
> --
> Pengutronix e.K.                              | Juergen Borleis
>   |
> Industrial Linux Solutions                    | http://www.pengutronix.de/
>  |
>

[-- Attachment #1.2: Type: text/html, Size: 2318 bytes --]

[-- Attachment #2: Type: text/plain, Size: 91 bytes --]

_______________________________________________
ptxdist mailing list
ptxdist@pengutronix.de

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-01-31 10:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-31  9:27 [ptxdist] kernel headers in ptxdist Alejandro Vázquez
2017-01-31  9:49 ` Juergen Borleis
2017-01-31 10:36   ` Alejandro Vázquez

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox