LINUX.ORG.RU

Сообщения Alexey_Rostov

 

Не грузится драйвер NAND для Cortex a53 (Zynq MP Ultrascale+)

Добрый день! Загрузка u-boot происходит с NAND MT29F32G08ABCDBJ4. Но при загрузке Линукса драйвер NAND не загружается, т.е. в логе загрузки отсутствует

nand: device found, Manufacturer ID: 0x2c, Chip ID: 0x44
nand: Micron MT29F32G08ABCDBJ4

В DT NAND прописана

nand0: nand@ff100000 {
			compatible = "arasan,nfc-v3p10";
			status = "okay";
			reg = <0x0 0xff100000 0x0 0x1000>;
			clock-names = "clk_sys", "clk_flash";
			interrupt-parent = <&gic>;
			interrupts = <0 14 4>;
			#address-cells = <1>;
			#size-cells = <0>;
			#stream-id-cells = <1>;
			iommus = <&smmu 0x872>;
			power-domains = <&zynqmp_firmware 44>;
		};

&nand0 {
	#address-cells = <1>;
	#size-cells = <1>;
	partition@0x00000000 {
		label = "boot";
		reg = <0x00000000 0x00040000>;
	};
	partition@0x00040000 {
		label = "bootenv";
		reg = <0x00040000 0x00020000>;
	};
	partition@0x00060000 {
		label = "kernel";
		reg = <0x00060000 0x00600000>;
	};
};

В настройках kernel также драйвер включен

CONFIG_MTD_NAND_ARASAN=y
CONFIG_MTD_NAND=y

команды dmesg|grep

# dmesg | grep nand
# dmesg | grep nand -i
[    6.578350] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
# dmesg |grep mtd -i
[    6.669743] mtdoops: mtd device (mtddev=name/number) must be supplied
#

Линукс собираю Buildroot’ом, если для данных настроек kernel и DT собирать образ petalinux’ом, то драйвер NAND грузится.

 , , , ,

Alexey_Rostov
()

Openmp and POSIX in GCC 8.2.0

Добрый день! Поясните пожалуйста следующий вопрос: собрал Linux для ARM Cortex A9 (Zynq FPGA) с компилятором: gcc version 8.2.0

Пытаюсь скомпилировать С файл с примером для Openmp:

#include <omp.h>
#include "stdio.h"
int omp_get_thread_num();
int main()
{
	# pragma omp parallel
	{
	  printf("Thread rank: %d\n", omp_get_thread_num());
	}
}

появляется ошибка

fatal error: omp.h: No such file or directory

вывод команды gcc -v

Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/arm-xilinx-linux-gnueabi/8.2.0/lto-wrapper Target: arm-xilinx-linux-gnueabi Configured with: ../../../../../../work-shared/gcc-8.2.0-r0/gcc-8.2.0/configure --build=x86_64-linux --host=arm-xilinx-linux-gnueabi --target=arm-xilinx-linux-gnueabi --prefix=/usr --exec_prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/libexec --datadir=/usr/share --sysconfdir=/etc --sharedstatedir=/com --localstatedir=/var --libdir=/usr/lib --includedir=/usr/include --oldincludedir=/usr/include --infodir=/usr/share/info --mandir=/usr/share/man --disable-silent-rules --disable-dependency-tracking --with-libtool-sysroot=/scratch/petalinux-yocto/yocto_downloads_2019.1_zynq-generic/build_zynq-generic/tmp/work/cortexa9t2hf-neon-xilinx-linux-gnueabi/gcc/8.2.0-r0/recipe-sysroot --with-gnu-ld --enable-shared --enable-languages=c,c++ --enable-threads=posix --enable-multilib --enable-default-pie --enable-c99 --enable-long-long --enable-symvers=gnu --enable-libstdcxx-pch --program-prefix=arm-xilinx-linux-gnueabi- --without-local-prefix --enable-lto --disable-libssp --enable-libitm --disable-bootstrap --disable-libmudflap --with-system-zlib --with-linker-hash-style=gnu --enable-linker-build-id --with-ppl=no --with-cloog=no --enable-checking=release --enable-cheaders=c_global --without-isl --with-float=hard --with-sysroot=/ --with-build-sysroot=/scratch/petalinux-yocto/yocto_downloads_2019.1_zynq-generic/build_zynq-generic/tmp/work/cortexa9t2hf-neon-xilinx-linux-gnueabi/gcc/8.2.0-r0/recipe-sysroot --with-gxx-include-dir=/usr/include/c++/8.2.0 --without-long-double-128 libgcc_cv_powerpc_float128=no --disable-static --enable-nls --enable-initfini-array --with-arch=armv7-a+fp Thread model: posix gcc version 8.2.0 (GCC)

Файлы с POSIX компилируются без проблем, но очень хочется иметь поддержку Openmp. Какие существуют возможные варианты решения данной ситуации?

 , , ,

Alexey_Rostov
()

OpenMP + ARM Linux нет увеличения скорости for loop

Здравствуйте! Подскажите пожалуйста почему при подключении openmp не удается уменьшить время работы программы.

Плата imx8 с Cortex A53

Содержимое файла main.cpp

#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>
#include <math.h>
#include <time.h>
#include <omp.h>

#define CHANNELS 4
using namespace std;
using namespace cv;

int main()
{
    cout << "Start programm" << endl;

    vector<Mat>      matrix_1(CHANNELS);
    vector<Mat>      matrix_2(CHANNELS);
    vector<Mat>      result(CHANNELS);
    Mat rnd_image = Mat(2048, 2048, CV_32FC1, Scalar(0));
    // matrix initialization

    clock_t start, end;
    double cpu_time_used;
	
	for (int i = 0; i < CHANNELS; i++) {
        randn(rnd_image, Scalar(0), Scalar(16000));
        rnd_image.copyTo(matrix_1[i]);
        randn(rnd_image, Scalar(0), Scalar(16000));
        rnd_image.copyTo(matrix_2[i]);
	}
	
	start = clock();
    for (int i = 0; i < CHANNELS; i++) {
        multiply(matrix_1[i], matrix_2[i], result[i]);
    }
    end = clock();
    cpu_time_used = ((double)(end - start)) / CLOCKS_PER_SEC;

    cout << "Time taken by for_loop: " << cpu_time_used << " seconds " << endl;
	
    start = clock();
	
	#pragma omp parallel num_threads(2)
	for (int i = 0; i < CHANNELS; i++) {
		multiply(matrix_1[i], matrix_2[i], result[i]);
	}

    end = clock();
    cpu_time_used = ((double)(end - start)) / CLOCKS_PER_SEC;

    cout << "Time taken by for_loop with openmp: " << cpu_time_used << " seconds " << endl;
    return 0;
}

Команда для компиляции (флаг -fopenmp добавлен)

g++ main.cpp -fopenmp -I /usr/include/opencv2 -L /usr/lib -lopencv_core

Прописал переменную

root@imx8m-var-dart:~/test# printenv OMP_NUM_THREADS
2
root@imx8m-var-dart:~/test#

Компилирую и запускаю программу

root@imx8m-var-dart:~/test# ./a.out
Start programm
Time taken by for_loop: 0.930273 seconds
Time taken by for_loop with openmp: 1.83559 seconds
root@imx8m-var-dart:~/test#

По идее время на выполнение должно быть в два раза меньше... Что делаю не так?

 , , ,

Alexey_Rostov
()

RSS подписка на новые темы