How to use axi dma kernel module in custom application in petalinux? - yocto
I am trying to build the axidma-benchmark application with the Xilinx-axidma driver (Github repo) provided by bperez77.
I am using Petalinux 20.2 to build Linux for my custom project.
In the new version of the kernel, some functions are changed and I get some errors when running petalinux-build. I changed the driver files as mentioned here and build the kernel module successfully.
In the following, I create the custom application by running:
petalinux-create -t apps --name axidma-benchmark --enable
Then I copy the application files into the recipes-apps directory and append all C and header files to the SRC_URI List in the axidma-benchmark.bb as:
SRC_URI = "file://axidma-benchmark.c \
file://axidma_ioctl.h \
file://conversion.h \
file://libaxidma.h \
file://util.c \
file://util.h \
file://Makefile \
"
Then I add APP_OBJS += util.o to the Makefile and build the application by running:
petalinux-build -c axidma-benchmark
But I got these errors:
ERROR: axidma-benchmark-1.0-r0 do_compile: oe_runmake failed
ERROR: axidma-benchmark-1.0-r0 do_compile: Execution of '/media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/temp/run.do_compile.21635' failed with exit code 1:
aarch64-xilinx-linux-gcc -march=armv8-a+crc -mtune=cortex-a72.cortex-a53 -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/recipe-sysroot -o axidma-benchmark axidma-benchmark.o util.o -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -fstack-protector-strong -Wl,-z,relro,-z,now
/media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-xilinx-linux/../../libexec/aarch64-xilinx-linux/gcc/aarch64-xilinx-linux/9.2.0/ld: axidma-benchmark.o: in function main': /usr/src/debug/axidma-benchmark/1.0-r0/axidma-benchmark.c:491: undefined reference to axidma_init'
/media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-xilinx-linux/../../libexec/aarch64-xilinx-linux/gcc/aarch64-xilinx-linux/9.2.0/ld: /usr/src/debug/axidma-benchmark/1.0-r0/axidma-benchmark.c:499: undefined reference to axidma_malloc' /media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-xilinx-linux/../../libexec/aarch64-xilinx-linux/gcc/aarch64-xilinx-linux/9.2.0/ld: /usr/src/debug/axidma-benchmark/1.0-r0/axidma-benchmark.c:505: undefined reference to axidma_malloc'
/media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-xilinx-linux/../../libexec/aarch64-xilinx-linux/gcc/aarch64-xilinx-linux/9.2.0/ld: /usr/src/debug/axidma-benchmark/1.0-r0/axidma-benchmark.c:514: undefined reference to axidma_get_vdma_tx' /media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-xilinx-linux/../../libexec/aarch64-xilinx-linux/gcc/aarch64-xilinx-linux/9.2.0/ld: /usr/src/debug/axidma-benchmark/1.0-r0/axidma-benchmark.c:515: undefined reference to axidma_get_vdma_rx'
/media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-xilinx-linux/../../libexec/aarch64-xilinx-linux/gcc/aarch64-xilinx-linux/9.2.0/ld: axidma-benchmark.o: in function single_transfer_test': /usr/src/debug/axidma-benchmark/1.0-r0/axidma-benchmark.c:396: undefined reference to axidma_twoway_transfer'
/media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-xilinx-linux/../../libexec/aarch64-xilinx-linux/gcc/aarch64-xilinx-linux/9.2.0/ld: axidma-benchmark.o: in function main': /usr/src/debug/axidma-benchmark/1.0-r0/axidma-benchmark.c:558: undefined reference to axidma_free'
/media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-xilinx-linux/../../libexec/aarch64-xilinx-linux/gcc/aarch64-xilinx-linux/9.2.0/ld: /usr/src/debug/axidma-benchmark/1.0-r0/axidma-benchmark.c:560: undefined reference to axidma_free' /media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-xilinx-linux/../../libexec/aarch64-xilinx-linux/gcc/aarch64-xilinx-linux/9.2.0/ld: /usr/src/debug/axidma-benchmark/1.0-r0/axidma-benchmark.c:562: undefined reference to axidma_destroy'
/media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-xilinx-linux/../../libexec/aarch64-xilinx-linux/gcc/aarch64-xilinx-linux/9.2.0/ld: /usr/src/debug/axidma-benchmark/1.0-r0/axidma-benchmark.c:519: undefined reference to axidma_get_dma_tx' /media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-xilinx-linux/../../libexec/aarch64-xilinx-linux/gcc/aarch64-xilinx-linux/9.2.0/ld: /usr/src/debug/axidma-benchmark/1.0-r0/axidma-benchmark.c:520: undefined reference to axidma_get_dma_rx'
/media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/recipe-sysroot-native/usr/bin/aarch64-xilinx-linux/../../libexec/aarch64-xilinx-linux/gcc/aarch64-xilinx-linux/9.2.0/ld: axidma-benchmark.o: in function time_dma': /usr/src/debug/axidma-benchmark/1.0-r0/axidma-benchmark.c:426: undefined reference to axidma_twoway_transfer'
collect2: error: ld returned 1 exit status
make: *** [Makefile:12: axidma-benchmark] Error 1
WARNING: /media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/temp/run.do_compile.21635:1 exit 1 from 'exit 1'
ERROR: Logfile of failure stored in: /media/fpgaws/projects/DevelopmentLab/build/apu/ultrazed7ev/build/tmp/work/aarch64-xilinx-linux/axidma-benchmark/1.0-r0/temp/log.do_compile.21635
What is my mistake?
I have forgotten to add the libaxidma.c files into the file directory. By adding this file application was built successfully.
Update:
You can access the final version of my code via this link.
If you have any problems, please let me know.
Related
How to enable dbus-X11 in the yocto
I'm using poky and meta-openembedded(git://git.openembedded.org/meta-openembedded(branch: master)) in yocto I want to build metacity and cyrus-sasl(2.1.26) for my SDK platform I run the following command I add BBCLASSEXTEND += " nativesdk" to metacity's bb and run bitbake nativesdk-metacity but I will get error message ERROR: Nothing RPROVIDES 'nativesdk-dbus-x11' (but virtual:nativesdk:poky/meta/rec on or otherwise requires it) ERROR: Nothing RPROVIDES 'nativesdk-dbus-x11' (but virtual:nativesdk:poky/meta/recipes-core/dbus/dbus-glib_0.110.bb RDEPENDS on or otherwise requires it) ERROR: Required build target 'nativesdk-metacity' has no buildable providers. Missing or unbuildable dependency chain was: ['nativesdk-metacity', 'nativesdk-libcanberra', 'nativesdk-pulseaudio', 'nativesdk-gconf', 'nativesdk-dbus-glib', 'nativesdk-dbus-x11'] ERROR: Nothing PROVIDES 'dbus-x11'. Close matches: dbus RPROVIDES dbus-x11 I cannot find dbus-x11's bb in my all meta and I cannot see dbus-x11 then run bitbake -s How can I enable dbus-x11 ?? and... I also add BBCLASSEXTEND += " nativesdk" to cyrus-sasl_2.1.26.bb and bitbake nativesdk-cyrus-sasl get error message | x86_64-pokysdk-linux-gcc --sysroot=/poky/build-fw/tmp/work/x86_64-nativesdk-pokysdk-linux/nativesdk-cyrus-sasl/2.1.26-r0/recipe-sysroot -O2 -pipe -Wl,-O1 -o saslauthd mechanisms.o auth_dce.o auth_getpwent.o auth_krb5.o auth_krb4.o auth_pam.o auth_rimap.o auth_httpform.o auth_shadow.o auth_sia.o auth_sasldb.o lak.o auth_ldap.o cache.o cfile.o krbtf.o utils.o ipc_unix.o ipc_doors.o saslauthd-main.o md5.o -lresolv | auth_getpwent.o: In function `auth_getpwent': | auth_getpwent.c:(.text+0x42): undefined reference to `crypt' | auth_shadow.o: In function `auth_shadow': | auth_shadow.c:(.text+0x109): undefined reference to `crypt' | collect2: error: ld returned 1 exit status | Makefile:456: recipe for target 'saslauthd' failed How can I add -lcrypt to cyrus-sasl_2.1.26.bb bb?? thanks a lot John
Error while running make command for srilm
While executing make command, I recieve the following error: /home/cse/phd/16071009/NLP//lib/i686-m64/libmisc.a(File.o): In function File::~File()': /home/cse/phd/16071009/NLP/misc/src/File.cc:127: undefined reference tolibiconv_close' /home/cse/phd/16071009/NLP//lib/i686-m64/libmisc.a(File.o): In function File::reopen(char const*, char const*)': /home/cse/phd/16071009/NLP/misc/src/File.cc:167: undefined reference tolibiconv_close' /home/cse/phd/16071009/NLP//lib/i686-m64/libmisc.a(File.o): In function File::reopen(char const*)': /home/cse/phd/16071009/NLP/misc/src/File.cc:217: undefined reference tolibiconv_close' /home/cse/phd/16071009/NLP//lib/i686-m64/libmisc.a(File.o): In function File::reopen(char const*, unsigned long, int)': /home/cse/phd/16071009/NLP/misc/src/File.cc:249: undefined reference tolibiconv_close' /home/cse/phd/16071009/NLP//lib/i686-m64/libmisc.a(File.o): In function File::reopen(std::string&, int)': /home/cse/phd/16071009/NLP/misc/src/File.cc:273: undefined reference tolibiconv_close' /home/cse/phd/16071009/NLP//lib/i686-m64/libmisc.a(File.o): In function File::fgetsUTF8(char*, int)': /home/cse/phd/16071009/NLP/misc/src/File.cc:387: undefined reference tolibiconv' /home/cse/phd/16071009/NLP/misc/src/File.cc:345: undefined reference to libiconv_open' /home/cse/phd/16071009/NLP/misc/src/File.cc:349: undefined reference tolibiconv_open' collect2: error: ld returned 1 exit status test -f ../bin/i686-m64/ngram make[2]: * [../bin/i686-m64/ngram] Error 1 make[2]: Leaving directory /home/cse/phd/16071009/NLP/lm/src' make[1]: *** [release-programs] Error 1 make[1]: Leaving directory/home/cse/phd/16071009/NLP' make: * [World] Error 2 [16071009#compute-01 NLP]$
The -liconv appears nowhere in the link command, so that's why you're getting the undefined references. Try putting: SYS_LIBRARIES = -L<path-to-libiconv_install> -liconv For example, if you install srilm on Ubuntu x64, edit this file: common/Makefile.site.i686-m64. Make sure the -L option points to the directory that has the libiconv.so or libiconv.a file. For me, libiconv install srilm on Ubuntu 18.04 x64 using make are locate on /usr/local/lib. So I add following line to common/Makefile.site.i686-m64: SYS_LIBRARIES = -L/usr/local/lib -liconv Solution from: http://mailman.speech.sri.com/pipermail/srilm-user/2014q3/001694.html
Compiling alsa-utils 1.1.0 on Raspberry Pi
I have compiled and installed alsa-lib 1.1.0 and moved on to compiling and installing the new alsa-util. The ./configure works: ./configure --disable-bat --disable-xmlto --disable-alsaconf --with-curses=ncursesw however the make fails and I have had no luck finding a resolution: Making all in topology make[1]: Entering directory '/home/pi/apps/alsa_utils/alsa-utils-1.1.0/topology' gcc -g -O2 -o alsatplg topology.o -lasound -lasound -lm -ldl -lpthread topology.o: In function `main': /home/pi/apps/alsa_utils/alsa-utils-1.1.0/topology/topology.c:99: undefined reference to `snd_tplg_new' /home/pi/apps/alsa_utils/alsa-utils-1.1.0/topology/topology.c:105: undefined reference to `snd_tplg_verbose' /home/pi/apps/alsa_utils/alsa-utils-1.1.0/topology/topology.c:107: undefined reference to `snd_tplg_build_file' /home/pi/apps/alsa_utils/alsa-utils-1.1.0/topology/topology.c:114: undefined reference to `snd_tplg_free' /home/pi/apps/alsa_utils/alsa-utils-1.1.0/topology/topology.c:110: undefined reference to `snd_tplg_free' collect2: error: ld returned 1 exit status Makefile:318: recipe for target 'alsatplg' failed make[1]: *** [alsatplg] Error 1 make[1]: Leaving directory '/home/pi/apps/alsa_utils/alsa-utils-1.1.0/topology' Makefile:352: recipe for target 'all-recursive' failed make: *** [all-recursive] Error 1 I understand that this error means that undefined references exist but I cannot understand why? Thanks.
MEX cuda code with dynamic parallelism - unable to compile
I have a code by name mexCodeCuda.cu which uses dynamic parallelism. In the matlab interface, when I try to execute the following commands, I get the following error : system('nvcc --compile mexCodeCuda.cu -o mexCodeCuda.o --compiler-options -fPIC -m64 -rdc=true -gencode arch=compute_35,code=sm_35 -O3 -lineinfo -use_fast_math -lcudadevrt -I/cm/shared/apps/MATLAB/extern/include') system('nvcc -arch=sm_35 -dlink mexCodeCuda.o -o dlink.o') eval('mex mexCodeCuda.o dlink.o -L'CUDA_LIB_PATH '-lcudart') It gives the following error : Error using mex /usr/bin/ld: dlink.o: relocation R_X86_64_32S against `__nv_module_id' can not be used when making a shared object; recompile with -fPIC dlink.o: could not read symbols: Bad value collect2: error: ld returned 1 exit status Can anyone help me ? Thanks in advance...
A few changes: Add -fPIC to the second nvcc command (using --compiler-options, just as you did with the first nvcc). Specify the cudadevrt runtime option on the mex command (-lcudadevrt), just as you have with the first nvcc call. And you may need to add -fPIC to the mex linking via LDCXXFLAGS or LDFLAGS. Not sure.
fortran: using pgplot with eclipse photran
So I am really not a Fortran programmer at all, but I have some code I am working with that uses the pgplot graphics libraries in fortran. I am able to get the code running in fortran from the console using the following commands. gfortran -o simple discrete.f -lpgplot -IX11 discrete.f is the name of the file. So this works when I run it from the console. However, I want to run the code in the eclipse photran plugin so that I can use the debugger so that I can step through the code and observe some of the variables. I tried to put the -lpgplot and -IX11 flags in Eclipse, but I am getting errors about pgbbuf and pgnumb_ functions as undefined reference (which means that the -lpgplot function is not working when called from eclipse. Can anyone please tell me how to set the flags correctly to run this code in Photran so that I can compile it and see the pgplot figure come up? I am adding the console output: 02:57:05 **** Clean-only build of configuration Debug for project burglar_code_martin **** make clean rm -rf ./burglary_model.o burglar_code_martin 02:57:05 Build Finished (took 61ms) 02:57:05 **** Build of configuration Debug for project burglar_code_martin **** make all Building file: ../burglary_model.f Invoking: GNU Fortran Compiler gfortran -funderscoring -I/usr/lib -O0 -g -Wall -c -fmessage-length=0 -lpgplot -IX11 -o "burglary_model.o" "../burglary_model.f" Warning: Nonconforming tab character in column 1 of line 225 Warning: Nonconforming tab character in column 1 of line 228 ../burglary_model.f:155.27: call probcheck(frac,1,outc) 1 Warning: Rank mismatch in argument 'problist' at (1) (rank-1 and scalar) ../burglary_model.f:54.33: call probcheck(robprob,1,outcome) 1 Warning: Rank mismatch in argument 'problist' at (1) (rank-1 and scalar) ../burglary_model.f:95.30: call probcheck(placeprob,1,outcome) 1 Warning: Rank mismatch in argument 'problist' at (1) (rank-1 and scalar) ../burglary_model.f:206.36: subroutine output(A,burgsatloc,t,l,pic,screen,A0,Bbar) 1 Warning: Unused dummy argument 'burgsatloc' at (1) ../burglary_model.f:206.44: subroutine output(A,burgsatloc,t,l,pic,screen,A0,Bbar) 1 Warning: Unused dummy argument 'pic' at (1) ../burglary_model.f:206.51: subroutine output(A,burgsatloc,t,l,pic,screen,A0,Bbar) 1 Warning: Unused dummy argument 'screen' at (1) ../burglary_model.f:145.32: integer l,pic,screen,i,j,k,PGOPEN,burgsatloc(512,*),nbar,outc 1 Warning: Unused variable 'k' declared at (1) ../burglary_model.f:146.15: real rand,red,green,blue 1 Warning: Unused variable 'rand' declared at (1) ../burglary_model.f:143.53: subroutine initialize(burgsatloc,B,l,pic,screen,rbar,Bbar) 1 Warning: Unused dummy argument 'screen' at (1) ../burglary_model.f:4.58: integer i,j,n,l,pic,screen,guy,burgsatloc(512,512),k, 1 Warning: Unused variable 'k' declared at (1) Finished building: ../burglary_model.f Building target: burglar_code_martin Invoking: GNU Fortran Linker gfortran -lpgplot -IX11 -o "burglar_code_martin" ./burglary_model.o ./burglary_model.o: In function `output_': /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:241: undefined reference to `pgbbuf_' /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:242: undefined reference to `pgnumb_' /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:244: undefined reference to `pgenv_' /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:246: undefined reference to `pglab_' /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:247: undefined reference to `pgimag_' /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:253: undefined reference to `pgebuf_' ./burglary_model.o: In function `initialize_': /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:165: undefined reference to `pgopen_' /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:168: undefined reference to `pgpap_' /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:169: undefined reference to `pgask_' /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:170: undefined reference to `pgscir_' /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:175: undefined reference to `pgscr_' /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:181: undefined reference to `pgscr_' /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:187: undefined reference to `pgscr_' /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:193: undefined reference to `pgscr_' /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:199: undefined reference to `pgscr_' ./burglary_model.o: In function `implicit': /media/jaimini/workspace/eclipsejuno/burglar_code_martin/Debug/../burglary_model.f:109: undefined reference to `pgclos_' collect2: ld returned 1 exit status make: *** [burglar_code_martin] Error 1 02:57:05 Build Finished (took 209ms)