duhao
易百纳技术社区
易百纳技术社区
0 访问量
0 原创专栏
0 资料
0 粉丝
个性签名:此E友还没有留下个性签名哦~
加入易百纳时间:2014-09-17

个人成就

易百纳技术社区 共获得 0 个点赞
易百纳技术社区 共获得 2 个收藏
易百纳技术社区 共获得 31 次评论/回复

个人勋章

暂无勋章
分类专栏

Ta擅长的领域

暂无
  • 3515c的用户指南上,海思3515的23脚是JTAG_TDI,这也是我3515c上的一个接口,通过查用户手册,如下: [img][/img] [img][/img] [img][/img] 但是发现一个问题,海思23脚这个接口没有复用寄存器,但是上面的图片显示这个接口有作为GPIO口的功能,我不知道这个要怎么来设置这个接口为GPIO口,望大神指教
    2015-04-26
    4 0 2640
  • 参考1:http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=4858&extra=page%3D1 参考2: http://ebaina.com/bbs/forum.php?mod=viewthread&tid=5328&highlight=opencv 我用的系统是ubuntu12.04.4 64位,安装了海思3515官方配套的SDK,gcc版本是4.6.3,cmake是2.8.10.1,然后新建一个build和output文件夹: root@duhao-virtual-machine:/home/study/hi-opencv-2.4.10# ls build opencv-2.4.10 output test 进入opencv-2.4.10,进行cmake-gui,然后配置是按参考2中的配置,输出选成上面的output目录 之后进入build目录,开始make和make install,最后在output里面生成 include,lib,share,LICENSE 。没有生成bin文件。: root@duhao-virtual-machine:/home/study/hi-opencv-2.4.10/output# ls include lib LICENSE share 然后将include下的opencv和opencv2拷贝到交叉编译器的include下 把lib下的文件也拷贝到交叉编译器的lib文件下 arm-hisiv100-linux-uclibcgnueabi-g++ face.cpp -I/home/study/hi-opencv-2.4.10/output/include/opencv -lopencv_highgui -lopencv_imgproc -lopencv_core -lpthread -lrt -ljpeg -lpng -lxml2 -lopencv_objdetect -o face 来编译以下参考1的程序 /*Author:9crk 2014-12-24***/ include "cv.h" include "highgui.h" include "stdio.h" /**for time mesurement*****/ include struct timeval tpstart,tpend; unsigned long timeuses; void timeRec() { gettimeofday(&tpstart,0); } int timeRep() { gettimeofday(&tpend,0); timeuses=(tpend.tv_sec-tpstart.tv_sec)*1000000+tpend.tv_usec-tpstart.tv_usec; printf("use time: %uus\n",timeuses); return timeuses; } /****end**/ int main(int argc, char argv[]) { IplImage img = NULL; IplImage cutImg = NULL; CvMemStorage storage = cvCreateMemStorage(0); CvHaarClassifierCascade cascade = (CvHaarClassifierCascade)cvLoad("./haarcascade_frontalface_alt2.xml", 0, 0, 0); CvSeq* faces; img = cvLoadImage(argv[1], 0); timeRec(); faces = cvHaarDetectObjects(img, cascade, storage, 1.2, 2, 0, cvSize(25,25) ); timeRep(); if (faces->total == 0){ printf("no face!\n"); } cvSetImageROI(img, ((CvRect)cvGetSeqElem( faces, 0))); cvSaveImage("face.bmp", img); cvResetImageROI(img); printf("face detected! in face.bmp!\n"); } 出现以下错误: /usr/local/hi-arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libxml2.so: warning: gethostbyname is obsolescent, use getnameinfo() instead. /usr/local/hi-arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_objdetect.a(haar.cpp.obj): In function cvHaarDetectObjectsForROC(void const*, CvHaarClassifierCascade*, CvMemStorage*, std::vector >&, std::vector >&, double, int, int, CvSize, CvSize, bool)': haar.cpp:(.text._Z25cvHaarDetectObjectsForROCPKvP23CvHaarClassifierCascadeP12CvMemStorageRSt6vectorIiSaIiEERS5_IdSaIdEEdii6CvSizeSC_b+0x538): undefined reference tocvCvtColor' haar.cpp:(.text._Z25cvHaarDetectObjectsForROCPKvP23CvHaarClassifierCascadeP12CvMemStorageRSt6vectorIiSaIiEERS5_IdSaIdEEdii6CvSizeSC_b+0x16e8): undefined reference to cvCanny' /usr/local/hi-arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_objdetect.a(cascadedetect.cpp.obj): In functioncv::CascadeClassifier::detectMultiScale(cv::Mat const&, std::vector >&, std::vector&, std::vector&, double, int, int, cv::Size, cv::Size, bool)': cascadedetect.cpp:(.text._ZN2cv17CascadeClassifier16detectMultiScaleERKNS_3MatERSt6vectorINS_5Rect_IiEESaIS6_EERS4_IiSaIiEERS4_IdSaIdEEdiiNS_5Size_IiEESH_b+0x2b4): undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' collect2: ld returned 1 exit status 这几个错误不懂要怎么改。希望大神来指导一下,感激不尽啊!!!
    2015-06-06
    2 0 4028
  • [i=s] 本帖最后由 duhao 于 2015-6-9 11:19 编辑 [/i] 开贴之前,首先感谢9crk大哥的无私耐心的帮助,真心非常感激!!! 下面开始: 参考1:http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=4858&extra=page%3D1 参考2: http://ebaina.com/bbs/forum.php? ... mp;highlight=opencv 我用的系统是ubuntu12.04.4 64位,安装了海思3515官方配套的SDK,交叉编译的编译器环境是uclibc的编译器环境,gcc版本是4.6.3,cmake是2.8.10.1,然后新建一个build和output文件夹: root@duhao-virtual-machine:/home/study/hi-opencv-2.4.10# ls build opencv-2.4.10 output test 进入opencv-2.4.10,进行cmake-gui,然后配置是按参考2中的配置,配置如下:[attach]2474[/attach] [attach]2474[/attach] [attach]2475[/attach] 输出选成上面的output目录,既配置时CMAKE_INSTALL_PREFIX我设定的是/home/study/hi-opencv-2.4.10/output 之后进入build目录,开始make和make install,编译过程没有出现多少错误,记得一个,就是下面这样的: undefined reference to pthread_once'; undefined reference topthread_spin_lock'; 这样的类型的错误,好些个。 解决办法:参考一中提供的: 修改CMakeCache.txt大约195行处 //Flags used by the linker. CMAKE_EXE_LINKER_FLAGS:STRING= -lpthread -lrt 接着 make,后面好像没什么错误 最后在output里面生成 include,lib,share,LICENSE 。没有生成bin文件。: root@duhao-virtual-machine:/home/study/hi-opencv-2.4.10/output# ls include lib LICENSE share 之后进行编译测试 然后将output下生成的include下的opencv和opencv2拷贝到交叉编译器的include下 cp include/ /usr/local/hi-arm/arm-hisiv100-linux/arm-hisiv100-linux-uclibcgnueabi/include/ -r 把output下生成的lib下的文件也拷贝到交叉编译器的lib文件下 cp lib/ /usr/local/hi-arm/arm-hisiv100-linux/arm-hisiv100-linux-uclibcgnueabi/lib/ 可能还需要把output下的lib下的文件拷贝到/usr/local/hi-arm/arm-hisiv100-linux/target/lib下; cp lib/* /usr/local/hi-arm/arm-hisiv100-linux/target/lib 然后来编译参考1中给的如下人脸检测程序,编译命令如下: arm-hisiv100-linux-uclibcgnueabi-g++ face.cpp -I /opt/opencv-2.2.4/Hi3518e/include/opencv -lopencv_highgui -lopencv_core -lopencv_imgproc -lpthread -lrt -lopencv_objdetect -o face 检测程序如下: /*Author:9crk 2014-12-24***/ include "cv.h" include "highgui.h" include "stdio.h" /**for time mesurement*****/ include struct timeval tpstart,tpend; unsigned long timeuses; void timeRec() { gettimeofday(&tpstart,0); } int timeRep() { gettimeofday(&tpend,0); timeuses=(tpend.tv_sec-tpstart.tv_sec)*1000000+tpend.tv_usec-tpstart.tv_usec; printf("use time: %uus\n",timeuses); return timeuses; } /****end**/ int main(int argc, char argv[]) { IplImage img = NULL; IplImage cutImg = NULL; CvMemStorage storage = cvCreateMemStorage(0); CvHaarClassifierCascade cascade = (CvHaarClassifierCascade)cvLoad("./haarcascade_frontalface_alt2.xml", 0, 0, 0); CvSeq* faces; img = cvLoadImage(argv[1], 0); timeRec(); faces = cvHaarDetectObjects(img, cascade, storage, 1.2, 2, 0, cvSize(25,25) ); timeRep(); if (faces->total == 0){ printf("no face!\n"); } cvSetImageROI(img, ((CvRect)cvGetSeqElem( faces, 0))); cvSaveImage("face.bmp", img); cvResetImageROI(img); printf("face detected! in face.bmp!\n"); } 之后出现如下许多错误: /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_png.cpp.obj): In function cv:ngDecoder::readDataFromBuf(void*, unsigned char*, unsigned int)': grfmt_png.cpp.text._ZN2cv10PngDecoder15readDataFromBufEPvPhj+0x14): undefined reference topng_get_io_ptr' grfmt_png.cpp.text._ZN2cv10PngDecoder15readDataFromBufEPvPhj+0x12c): undefined reference to png_error' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_png.cpp.obj): In functioncv:ngDecoder::close()': grfmt_png.cpp.text._ZN2cv10PngDecoder5closeEv+0x4c): undefined reference to png_destroy_read_struct' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_png.cpp.obj): In functioncv:ngDecoder::readHeader()': grfmt_png.cpp.text._ZN2cv10PngDecoder10readHeaderEv+0x34): undefined reference to png_create_read_struct' grfmt_png.cpp.text._ZN2cv10PngDecoder10readHeaderEv+0x44): undefined reference topng_create_info_struct' grfmt_png.cpp.text._ZN2cv10PngDecoder10readHeaderEv+0x50): undefined reference to png_create_info_struct' grfmt_png.cpp.text._ZN2cv10PngDecoder10readHeaderEv+0xa8): undefined reference topng_set_longjmp_fn' grfmt_png.cpp.text._ZN2cv10PngDecoder10readHeaderEv+0x118): undefined reference to png_init_io' grfmt_png.cpp.text._ZN2cv10PngDecoder10readHeaderEv+0x170): undefined reference topng_read_info' grfmt_png.cpp.text._ZN2cv10PngDecoder10readHeaderEv+0x1a0): undefined reference to png_get_IHDR' grfmt_png.cpp:(.text._ZN2cv10PngDecoder10readHeaderEv+0x358): undefined reference topng_set_read_fn' grfmt_png.cpp:(.text._ZN2cv10PngDecoder10readHeaderEv+0x3a0): undefined reference to png_get_tRNS' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_png.cpp.obj): In functioncv:ngEncoder::write(cv::Mat const&, std::vector const&)': grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x38): undefined reference to png_create_write_struct' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0xb0): undefined reference topng_create_info_struct' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0xd8): undefined reference to png_set_longjmp_fn' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x118): undefined reference topng_set_write_fn' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x3c0): undefined reference to png_destroy_write_struct' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x420): undefined reference topng_set_compression_level' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x430): undefined reference to png_set_compression_strategy' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x4a4): undefined reference topng_set_IHDR' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x4b4): undefined reference to png_write_info' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x4c8): undefined reference topng_set_packing' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x4d4): undefined reference to png_set_bgr' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x4f8): undefined reference topng_set_swap' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x66c): undefined reference to png_write_image' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x67c): undefined reference topng_write_end' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x804): undefined reference to png_init_io' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x81c): undefined reference topng_set_filter' grfmt_png.cpp:(.text._ZN2cv10PngEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x82c): undefined reference to png_set_compression_level' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_png.cpp.obj): In functioncv:ngEncoder::writeDataToBuf(void, unsigned char, unsigned int)': grfmt_png.cpp:(.text._ZN2cv10PngEncoder14writeDataToBufEPvPhj+0x24): undefined reference to png_get_io_ptr' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_png.cpp.obj): In functioncv:ngDecoder::readData(cv::Mat&)': grfmt_png.cpp:(.text._ZN2cv10PngDecoder8readDataERNS_3MatE+0x140): undefined reference to png_set_longjmp_fn' grfmt_png.cpp:(.text._ZN2cv10PngDecoder8readDataERNS_3MatE+0x208): undefined reference topng_set_gray_to_rgb' grfmt_png.cpp:(.text._ZN2cv10PngDecoder8readDataERNS_3MatE+0x210): undefined reference to png_set_interlace_handling' grfmt_png.cpp:(.text._ZN2cv10PngDecoder8readDataERNS_3MatE+0x21c): undefined reference topng_read_update_info' grfmt_png.cpp:(.text._ZN2cv10PngDecoder8readDataERNS_3MatE+0x2ec): undefined reference to png_read_image' grfmt_png.cpp:(.text._ZN2cv10PngDecoder8readDataERNS_3MatE+0x2f8): undefined reference topng_read_end' grfmt_png.cpp:(.text._ZN2cv10PngDecoder8readDataERNS_3MatE+0x320): undefined reference to png_set_rgb_to_gray' grfmt_png.cpp:(.text._ZN2cv10PngDecoder8readDataERNS_3MatE+0x32c): undefined reference topng_set_bgr' grfmt_png.cpp:(.text._ZN2cv10PngDecoder8readDataERNS_3MatE+0x338): undefined reference to png_set_strip_alpha' grfmt_png.cpp:(.text._ZN2cv10PngDecoder8readDataERNS_3MatE+0x344): undefined reference topng_set_swap' grfmt_png.cpp:(.text._ZN2cv10PngDecoder8readDataERNS_3MatE+0x358): undefined reference to png_set_expand_gray_1_2_4_to_8' grfmt_png.cpp:(.text._ZN2cv10PngDecoder8readDataERNS_3MatE+0x364): undefined reference topng_set_strip_16' grfmt_png.cpp:(.text._ZN2cv10PngDecoder8readDataERNS_3MatE+0x378): undefined reference to png_set_palette_to_rgb' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_jpeg.cpp.obj): In functioncv::JpegEncoder::write(cv::Mat const&, std::vector const&)': grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0xcc): undefined reference to jpeg_CreateCompress' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0xd8): undefined reference tojpeg_std_error' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x340): undefined reference to jpeg_set_defaults' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x354): undefined reference tojpeg_set_quality' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x364): undefined reference to jpeg_start_compress' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x474): undefined reference tojpeg_write_scanlines' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x4b0): undefined reference to jpeg_write_scanlines' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x4e0): undefined reference tojpeg_write_scanlines' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x518): undefined reference to jpeg_write_scanlines' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x544): undefined reference tojpeg_write_scanlines' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_jpeg.cpp.obj):grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x570): more undefined references to jpeg_write_scanlines' follow /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_jpeg.cpp.obj): In functioncv::JpegEncoder::write(cv::Mat const&, std::vector const&)': grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x5bc): undefined reference to jpeg_finish_compress' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x5cc): undefined reference tojpeg_destroy_compress' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x6ec): undefined reference to jpeg_stdio_dest' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x77c): undefined reference tojpeg_write_scanlines' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x7f0): undefined reference to jpeg_write_scanlines' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x858): undefined reference tojpeg_write_scanlines' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x8c8): undefined reference to jpeg_write_scanlines' grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x92c): undefined reference tojpeg_write_scanlines' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_jpeg.cpp.obj):grfmt_jpeg.cpp:(.text._ZN2cv11JpegEncoder5writeERKNS_3MatERKSt6vectorIiSaIiEE+0x990): more undefined references to jpeg_write_scanlines' follow /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_jpeg.cpp.obj): In functioncv::JpegDecoder::close()': grfmt_jpeg.cpp:(.text._ZN2cv11JpegDecoder5closeEv+0x18): undefined reference to jpeg_destroy_decompress' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_jpeg.cpp.obj): In functioncv::JpegDecoder::readHeader()': grfmt_jpeg.cpp:(.text._ZN2cv11JpegDecoder10readHeaderEv+0x34): undefined reference to jpeg_std_error' grfmt_jpeg.cpp:(.text._ZN2cv11JpegDecoder10readHeaderEv+0x80): undefined reference tojpeg_CreateDecompress' grfmt_jpeg.cpp:(.text._ZN2cv11JpegDecoder10readHeaderEv+0x17c): undefined reference to jpeg_stdio_src' grfmt_jpeg.cpp:(.text._ZN2cv11JpegDecoder10readHeaderEv+0x198): undefined reference tojpeg_read_header' grfmt_jpeg.cpp:(.text._ZN2cv11JpegDecoder10readHeaderEv+0x290): undefined reference to jpeg_resync_to_restart' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_jpeg.cpp.obj): In functionT.419': grfmt_jpeg.cpp:(.text.T.419+0x358): undefined reference to jpeg_alloc_huff_table' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_highgui.a(grfmt_jpeg.cpp.obj): In functioncv::JpegDecoder::readData(cv::Mat&)': grfmt_jpeg.cpp:(.text._ZN2cv11JpegDecoder8readDataERNS_3MatE+0xe0): undefined reference to jpeg_start_decompress' grfmt_jpeg.cpp:(.text._ZN2cv11JpegDecoder8readDataERNS_3MatE+0x1ac): undefined reference tojpeg_read_scanlines' grfmt_jpeg.cpp:(.text._ZN2cv11JpegDecoder8readDataERNS_3MatE+0x1dc): undefined reference to jpeg_finish_decompress' grfmt_jpeg.cpp:(.text._ZN2cv11JpegDecoder8readDataERNS_3MatE+0x298): undefined reference tojpeg_read_scanlines' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(persistence.cpp.obj): In function icvGets(CvFileStorage*, char*, int)': persistence.cpp:(.text._ZL7icvGetsP13CvFileStoragePci+0x224): undefined reference togzgets' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(persistence.cpp.obj): In function T.3367': persistence.cpp:(.text.T.3367+0x1b8): undefined reference togzeof' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(persistence.cpp.obj): In function icvXMLSkipSpaces(CvFileStorage*, char*, int)': persistence.cpp:(.text._ZL16icvXMLSkipSpacesP13CvFileStoragePci+0x2b8): undefined reference togzeof' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(persistence.cpp.obj): In function icvYMLSkipSpaces(CvFileStorage*, char*, int, int)': persistence.cpp:(.text._ZL16icvYMLSkipSpacesP13CvFileStoragePcii+0x1cc): undefined reference togzeof' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(persistence.cpp.obj): In function icvPuts(CvFileStorage*, char const*)': persistence.cpp:(.text._ZL7icvPutsP13CvFileStoragePKc+0x1dc): undefined reference togzputs' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(persistence.cpp.obj): In function icvClose(CvFileStorage*, std::basic_string, std::allocator >*)': persistence.cpp:(.text._ZL8icvCloseP13CvFileStoragePSs+0x2b0): undefined reference togzclose' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(persistence.cpp.obj): In function cvOpenFileStorage': persistence.cpp:(.text.cvOpenFileStorage+0x614): undefined reference togzrewind' persistence.cpp:(.text.cvOpenFileStorage+0x7d0): undefined reference to gzclose' persistence.cpp:(.text.cvOpenFileStorage+0x87c): undefined reference togzopen' persistence.cpp:(.text.cvOpenFileStorage+0xe20): undefined reference to gzclose' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(system.cpp.obj): In functioncv::Mutex::trylock()': system.cpp:(.text._ZN2cv5Mutex7trylockEv+0x8): undefined reference to pthread_spin_trylock' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(system.cpp.obj): In functioncv::Mutex::unlock()': system.cpp:(.text._ZN2cv5Mutex6unlockEv+0x4): undefined reference to pthread_spin_unlock' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(system.cpp.obj): In functioncv::Mutex::lock()': system.cpp:(.text._ZN2cv5Mutex4lockEv+0x4): undefined reference to pthread_spin_lock' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(system.cpp.obj): In functioncv::Mutex:perator=(cv::Mutex const&)': system.cpp:(.text.ZN2cv5MutexaSERKS0+0x54): undefined reference to pthread_spin_destroy' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(system.cpp.obj): In functioncv::Mutex::~Mutex()': system.cpp:(.text._ZN2cv5MutexD1Ev+0x40): undefined reference to pthread_spin_destroy' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(system.cpp.obj): In functioncv::Mutex::~Mutex()': system.cpp:(.text._ZN2cv5MutexD2Ev+0x40): undefined reference to pthread_spin_destroy' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(system.cpp.obj): In functioncv::Mutex::Mutex()': system.cpp:(.text._ZN2cv5MutexC1Ev+0x18): undefined reference to pthread_spin_init' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_core.a(system.cpp.obj): In functioncv::Mutex::Mutex()': system.cpp:(.text._ZN2cv5MutexC2Ev+0x18): undefined reference to pthread_spin_init' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_imgproc.a(templmatch.cpp.obj): In functioncv::crossCorr(cv::Mat const&, cv::Mat const&, cv::Mat&, cv::Size, int, cv:oint, double, int)': templmatch.cpp:(.text._ZN2cv9crossCorrERKNS_3MatES2_RS0_NS_5Size_IiEEiNS_6Point_IiEEdi+0x4a4): undefined reference to cv::getOptimalDFTSize(int)' templmatch.cpp:(.text._ZN2cv9crossCorrERKNS_3MatES2_RS0_NS_5Size_IiEEiNS_6Point_IiEEdi+0x4c4): undefined reference tocv::getOptimalDFTSize(int)' templmatch.cpp:(.text._ZN2cv9crossCorrERKNS_3MatES2_RS0_NS_5Size_IiEEiNS_6Point_IiEEdi+0xbd8): undefined reference to cv::dft(cv::_InputArray const&, cv::_OutputArray const&, int, int)' templmatch.cpp:(.text._ZN2cv9crossCorrERKNS_3MatES2_RS0_NS_5Size_IiEEiNS_6Point_IiEEdi+0x15e8): undefined reference tocv::dft(cv::_InputArray const&, cv::_OutputArray const&, int, int)' templmatch.cpp:(.text._ZN2cv9crossCorrERKNS_3MatES2_RS0_NS_5Size_IiEEiNS_6Point_IiEEdi+0x167c): undefined reference to cv::mulSpectrums(cv::_InputArray const&, cv::_InputArray const&, cv::_OutputArray const&, int, bool)' templmatch.cpp:(.text._ZN2cv9crossCorrERKNS_3MatES2_RS0_NS_5Size_IiEEiNS_6Point_IiEEdi+0x16b8): undefined reference tocv::dft(cv::_InputArray const&, cv::_OutputArray const&, int, int)' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_objdetect.a(haar.cpp.obj): In function cvHaarDetectObjectsForROC(void const*, CvHaarClassifierCascade*, CvMemStorage*, std::vector >&, std::vector >&, double, int, int, CvSize, CvSize, bool)': haar.cpp:(.text._Z25cvHaarDetectObjectsForROCPKvP23CvHaarClassifierCascadeP12CvMemStorageRSt6vectorIiSaIiEERS5_IdSaIdEEdii6CvSizeSC_b+0x538): undefined reference tocvCvtColor' haar.cpp:(.text._Z25cvHaarDetectObjectsForROCPKvP23CvHaarClassifierCascadeP12CvMemStorageRSt6vectorIiSaIiEERS5_IdSaIdEEdii6CvSizeSC_b+0x15e4): undefined reference to cvCanny' /usr/local/arm/arm-hisiv100-linux/bin/../lib/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabi/lib/libopencv_objdetect.a(cascadedetect.cpp.obj): In functioncv::CascadeClassifier::detectMultiScale(cv::Mat const&, std::vector >&, std::vector&, std::vector&, double, int, int, cv::Size, cv::Size, bool)': cascadedetect.cpp:(.text._ZN2cv17CascadeClassifier16detectMultiScaleERKNS_3MatERSt6vectorINS_5Rect_IiEESaIS6_EERS4_IiSaIiEERS4_IdSaIdEEdiiNS_5Size_IiEESH_b+0x2b4): undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' collect2: ld returned 1 exit status 解决方法: 1.对于grfmt_png.cpp的各种undefined reference to,原因是交叉编译环境缺少libpng,解决办法是下载libpng,然后进行交叉编译,编译后生成include和lib文件夹,分别把include和lib下的文件拷贝到交叉编译环境的include和lib文件下,我的也就是上面的/usr/local/hi-arm/arm-hisiv100-linux/arm-hisiv100-linux-uclibcgnueabi/include/和/usr/local/hi-arm/arm-hisiv100-linux/arm-hisiv100-linux-uclibcgnueabi/lib/ 然后再进行编译,记得编译命令上加上-lpng,然后发现grfmt_png.cpp的错误都没有了。 2.对于grfmt_jpeg.cpp的各种undefined reference to,是交叉编译环境缺少了libjpeg,解决办法参考上面的1,下载libjpeg,交叉编译,拷贝include和lib文件到交叉编译环境的include和lib下,编译加上-ljpeg 3对于persistence.cpp的各种undefined reference to,是交叉编译环境缺少了libxml2,解决办法同上,编译时加上-xlm2后,这个错误就没了。 对于后面剩下的问题,发现是链接库的顺序导致的,下面是我修改了编译命令: arm-hisiv100-linux-uclibcgnueabi-g++ face.cpp -I/home/study/hi-opencv-2.4.4/output/include/opencv -lopencv_highgui -lopencv_imgproc -lopencv_core -lpthread -lrt -ljpeg -lpng -lxml2 -lopencv_objdetect -o face 顺序为: -lopencv_highgui -lopencv_imgproc -lopencv_core 编译后,错误为: /usr/local/hi-arm/arm-hisiv100-linux/bin/..b/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabibbxml2.so: warning: gethostbyname is obsolescent, use getnameinfo() instead. /usr/local/hi-arm/arm-hisiv100-linux/bin/..b/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabibbopencv_objdetect.a(haar.cpp.obj): In function cvHaarDetectObjectsForROC(void const*, CvHaarClassifierCascade*, CvMemStorage*, std::vector >&, std::vector >&, double, int, int, CvSize, CvSize, bool)': haar.cpp.text._Z25cvHaarDetectObjectsForROCPKvP23CvHaarClassifierCascadeP12CvMemStorageRSt6vectorIiSaIiEERS5_IdSaIdEEdii6CvSizeSC_b+0x538): undefined reference tocvCvtColor' haar.cpp.text._Z25cvHaarDetectObjectsForROCPKvP23CvHaarClassifierCascadeP12CvMemStorageRSt6vectorIiSaIiEERS5_IdSaIdEEdii6CvSizeSC_b+0x16e8): undefined reference to cvCanny' /usr/local/hi-arm/arm-hisiv100-linux/bin/..b/gcc/arm-hisiv100-linux-uclibcgnueabi/4.4.1/../../../../arm-hisiv100-linux-uclibcgnueabibbopencv_objdetect.a(cascadedetect.cpp.obj): In functioncv::CascadeClassifier::detectMultiScale(cv::Mat const&, std::vector >&, std::vector&, std::vector&, double, int, int, cv::Size, cv::Size, bool)': cascadedetect.cpp.text._ZN2cv17CascadeClassifier16detectMultiScaleERKNS_3MatERSt6vectorINS_5Rect_IiEESaIS6_EERS4_IiSaIiEERS4_IdSaIdEEdiiNS_5Size_IiEESH_b+0x2b4): undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' collect2: ld returned 1 exit status 这个问题两天还没解决,最后发现是因为编译命令漏掉了之前的-lopencv_objdetect,说来惭愧,因为无意漏掉这个导致两天没解决错误。最后还是在9crk大哥的帮助下一步一步找出问题所在的,希望大家引以为戒,平时学习做事都要细心一些。最后编译命令为: arm-hisiv100-linux-uclibcgnueabi-g++ face.cpp -I/home/study/hi-opencv-2.4.4/output/include/opencv -lopencv_objdetect -lopencv_highgui -lopencv_imgproc -lopencv_core -lpthread -lrt -ljpeg -lpng -lxml2 -lopencv_objdetect -o face 发现没有错误了,就只有一个警告,后面发现这个警告没影响。有生成二进制文件,把生成的二进制文件face,lena.jpg,haarcascade_frontalface_alt2.xml拷贝到ubuntu下的nfs目录,同时把output下lib里面的libopencv_imgproc.so,libopencv_objdetect.so,libopencv_highgui.so,libopencv_core.so这四个文件拷贝到ubuntu下的nfs目录,把然后通过nfs挂载到开发板hi3515,到开发板端做软连接库到/lib目录下; ln -s nfsroot/libopencv_imgproc.so /lib/libopencv_imgproc.so ln -s nfsroot/libopencv_objdetect.so /lib/libopencv_objdetect.so ln -s nfsroot/libopencv_highgui.so /lib/libopencv_highgui.so ln -s nfsroot/libopencv_core.so /lib/libopencv_core.so 然后在face文件处,执行./face lena.jpg。 提醒有错误: 意思就是libjpeg.so.62没加载,libpng15.so.15没加载,libxml2.so.2没加载这样的问题。 原因是arm板上lib里面缺少这些库 解决方法: 在交叉编译环境把这三个文件拷贝到nfs下,nfs挂载到开发板后,然后在开发板作软连接,将这三个库软连接到arm上的lib下: ln -s nfsroot/libjpeg.so.62 /lib/libjpeg.so.62 ln -s nfsroot/libpng15.so.15 /lib/libpng15.so.15 ln -s nfsroot/libxml2.so.2 /lib/libxml2.so.2 再在face目录下执行:./face lena.jpg 结果没有错误,可以正常运行,生成图片文件。 到这里,就结束了,希望能给移植opencv的人提供一些帮助,尽量少走一些弯路! 最后,再次郑重感谢9crk大哥的无私帮助。非常非常感谢。。。
    2015-06-09
    7 1 8701
  • 大家好,想问一下,海思配置寄存器来设置中断触发方式的问题,寄存器设置我是按下面步骤来的 1. 配置GPIO_IS,选择边沿触发或电平触发。 2. 配置GPIO_IEV,选择下降沿/上升沿触发和高电平/低电平触发。 3. 如果选择边沿触发,需配置GPIO_IBE,选择单沿或双沿触发方式。 4. 保证GPIO 数据线在以上操作过程中保持稳定。 5. 向寄存器GPIO_IC 写0xFF,清中断。 6. 配置GPIO_IE 为1,使能中断。 然后申请中断request_irqs(),为什么老是出错。 下面是代码是驱动程序里面open函数里面的,gpio7的中断号为112 *gpio7_6_reg &= ~0x1;   //设置gpio7-6为通用寄存器 *gpio7_7_reg &= ~0x1;   //设置gpio7-7为通用寄存器         *gpio7_dir &= 0x0<<6; //gpio6.7为输入Î        // *gpio7_is&=0x00<<6;           *gpio7_is|=0x03<<6;gpio6,7为电平触发           *gpio7_iev&=0x0<<6;gpio6,7为低电平触发        // *gpio7_ibe&=0x00<<6;         *gpio7_ic|=0xff;清中断         *gpio7_ie|=0x3<<6;使能中断        irq_err0 = request_irq(wiegand_irqs[0].irq, wiegand_irq0,IRQ_TYPE_LEVEL_HIGH,wiegand_irqs[0].name, (void *)&wiegand_irqs[0].id);         if (irq_err0)          {             printk("request_irq error %d",wiegand_irqs[0].id);          } irq_err1 = request_irq(wiegand_irqs[1].irq, wiegand_irq1,IRQ_TYPE_LEVEL_HIGH,wiegand_irqs[1].name, (void *)&wiegand_irqs[1].id);         if (irq_err1)          {             printk("request_irq error %d",wiegand_irqs[1].id);          } 驱动安装成功后,运行测试程序时,调用open函数打开设备时就显示打开设备失败: setting trigger mode 2 for irq 112 failed (gic_set_type+0x0/0xc4) request_irq error 6 setting trigger mode 2 for irq 112 failed (gic_set_type+0x0/0xc4) request_irq error 7 还是不懂为什么,有人指导一下么?谢谢。。。
    2014-12-11
    6 1 8548
  • 刷卡器数据线接到3521的GPIO7_6(DATA0)和GPIO7_7(DATA1),先设置了这两个口为通用gpio口且设置为输入,看数据手册显示整个GPIO7的中断号为112,下面是wiegand驱动程序. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include #include #include #define WIEGAND_MAJOR 244         //delay 33ms to convert data #define TIMER_DELAY HZ/30 #define DEVICE_NAME  "wiegand" bool TIMEER_FLAG = false;    bool RF_OPEN_FLAG = false; struct wiegand_irq_desc{ int irq; int pin; int number; char *name;   };   static struct wiegand_irq_desc wiegand_irqs[]={   {112,6,1,"wiegand_data0"},{112,7,2,"wiegand_data1"}, }; struct wiegand_dev {         char wiegand[26];    //Wiegand Data 26Bits         int hid;         int pid;         //unsigned char state;         int count;    //Global Counter         struct cdev cdev;         struct semaphore sem;         struct completion receive_completion;         struct timer_list wiegand_timer;         struct  wiegand_irq_desc wiegand_irqs[2];        }; static struct wiegand_dev *rf_card;   static volatile unsigned long *gpio7_6_dat = NULL;   static volatile unsigned long *gpio7_6_reg = NULL;   static volatile unsigned long *gpio7_7_dat = NULL;   static volatile unsigned long *gpio7_7_reg = NULL;   static struct class *wiegand_class = NULL;   static volatile unsigned long *gpio7_dir = NULL;   //static volatile unsigned long *gpio7_ie = NULL; //应该除了初始化外,只能有这一个地方能够将rf_card->count置为0,其余地方置为0皆不合法 static char convert_data(void) {         int i;         int even;         int  odd;             even = 0;             for(i = 1; i < 13;i++)             {                  if(rf_card->wiegand == 1)                          even = (~even) & 0x01;             }              if(even != rf_card->wiegand[0])               {                 rf_card->count = 0;                 goto error;               }                            odd = 1;             for(i = 13; i< 25;i++)             {             if(rf_card->wiegand == 1)                                                  odd = (~odd)& 0x01;                           }              if(odd != rf_card->wiegand[25])               {                 rf_card->count = 0;                goto error;               }         //奇偶校验通过         rf_card->hid = 0;         for(i = 1 ;i<=12;i++)//hid转换                 rf_card->hid =  rf_card->hid << 1 |rf_card->wiegand;                rf_card->pid = 0;         for(i = 13 ;i<=25;i++)//pid转换                 rf_card->pid =  rf_card->pid << 1 |rf_card->wiegand;                               rf_card->count = 0;         return 0;         error:         printk("Parity Efficacy Error!\n");         return -1; } static void wiegand_do_timer(unsigned long arg) {         printk("%s:wait wieg_data completed\n",__func__);         wait_for_completion(&(rf_card->receive_completion));//等待维根数据传送完毕才进行转换         disable_irq(112);         disable_irq(112);//防止wieg_data在转换期间发生变化         convert_data();         up(&rf_card->sem);         printk("%s:complete convert wieg_data,hid = %d,pid = %d \n",__func__,rf_card->hid,rf_card->pid);         TIMEER_FLAG = false;         enable_irq(112);         enable_irq(112); } static void enable_irqs(void) {                enable_irq(112);         enable_irq(112);         printk("%s:the irq is setup!\n",__func__); } static irqreturn_t wiegand_irq0(int irq, void *dev_id) {         disable_irq_nosync(112);         printk("%s:IN\n",__func__);           udelay(5);         if(*gpio7_6_dat== 0)         {                    rf_card->wiegand[rf_card->count] = 0;                    printk("%s:wiegand[%d] = %d\n",__func__,rf_card->count,rf_card->wiegand[rf_card->count]);                 rf_card->count ++;                 udelay(300);         }         else                 goto end;                 // (*gpio7_ie)|=(0x3<<6);         enable_irq(112);         if(rf_card->count == 1)                 init_completion(&(rf_card->receive_completion));         else if(rf_card->count == 26)                 complete(&(rf_card->receive_completion));            if(TIMEER_FLAG == false)            {                 rf_card->wiegand_timer.expires = jiffies + TIMER_DELAY;                 add_timer(&rf_card->wiegand_timer);                 TIMEER_FLAG = true;                 printk("%s:add_timer\n",__func__);         }         printk("%s:OUT\n",__func__);           return IRQ_HANDLED; end:         printk("%s:error data\n",__func__);         enable_irq(112);         return IRQ_HANDLED; } static irqreturn_t wiegand_irq1(int irq, void *dev_id) {         disable_irq_nosync(112);//必须用这个函数              printk("%s:IN\n",__func__);             udelay(5);         if(*gpio7_7_dat == 1 && rf_card->count < 26)         {                    rf_card->wiegand[rf_card->count] = 1;                 printk("%s:wiegand[%d] = %d\n",__func__,rf_card->count,rf_card->wiegand[rf_card->count]);                 rf_card->count ++;                 udelay(300);         }         else                 goto end;                 enable_irq(112);         //rf_card->count经过上面“++”之后都会大1         if(rf_card->count == 1)                 init_completion(&(rf_card->receive_completion));         else if(rf_card->count == 26)                 complete(&(rf_card->receive_completion));//只能在此处complete            if(TIMEER_FLAG== false)            {                 rf_card->wiegand_timer.expires = jiffies + TIMER_DELAY;                 add_timer(&rf_card->wiegand_timer);                 TIMEER_FLAG = true;                 printk("%s:add_timer\n",__func__);           }         printk("%s:OUT\n",__func__);           return IRQ_HANDLED; end:         printk("%s:error data\n",__func__);         enable_irq(112);         return IRQ_HANDLED; } static ssize_t rfcd_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos) {               printk("in kernel 1 read\n");         down_interruptible(&rf_card->sem);                   printk("in kernel 2 read\n");                  if(size <= rf_card->count)         size = rf_card->count;                                 return copy_to_user(buf,rf_card->wiegand, size); } static ssize_t rfcd_write(struct file *filp, const char __user *buf, size_t size, loff_t *ppos) {         return 0; } static int request_irqs(void)              {        int ret;         printk("%s:start request irqs\n",__func__);         if(ret = request_irq(112,wiegand_irq0,IRQF_SHARED,"wiegand_data0",rf_card))         {                 printk("%s:request 112:%d,ret:%d failed!\n",__func__,112,ret);                 return -1;            }         if(ret = request_irq(112,wiegand_irq1,IRQF_SHARED,"wiegand_data1",rf_card))         {                 printk("%s:request 112:%d,ret:%d failed!\n",__func__,112,ret);                 return -1;            }         printk("%s:request irqs success!\n",__func__);         return 0; } static int rfcd_open(struct inode *inode, struct file *filp) {            if(RF_OPEN_FLAG)         return -EBUSY;//Don't open again!         RF_OPEN_FLAG = true;         TIMEER_FLAG = false;                  *gpio7_6_reg &= ~0x1;   //通用GPIO         *gpio7_7_reg &= ~0x1;         *gpio7_dir &= 0x00<<6; //6.7为输入   //      (*gpio7_ie)|=(0x3<<6);         setup_timer(&rf_card->wiegand_timer,wiegand_do_timer,0);         memset(rf_card->wiegand,0x00,26);         rf_card->count = 0;         enable_irqs();         printk("%s: the device have been open\n",__func__);         return 0; } static void free_irqs(void) {         free_irq(112,rf_card);         free_irq(112,rf_card); } int rfcd_release(struct inode *inode, struct file *filp) {         disable_irq(112);         disable_irq(112);         RF_OPEN_FLAG = false;         del_timer_sync(&rf_card->wiegand_timer);         return 0; } static struct file_operations rfcd_fops = {         .owner = THIS_MODULE,         .read = rfcd_read,         .write = rfcd_write,         .open = rfcd_open,         .release = rfcd_release, }; static int __init wiegand_init(void) {         int err,result;         dev_t devno = MKDEV(WIEGAND_MAJOR, 0);         if(WIEGAND_MAJOR)                 result = register_chrdev_region(devno,1,DEVICE_NAME);            else                 result = alloc_chrdev_region(&devno,0,1,DEVICE_NAME);                 if(result < 0)         {                 printk("%s:register_chrdev_region error\n",__func__);                 return result;         }         rf_card = kmalloc(sizeof(struct wiegand_dev),GFP_KERNEL);         if (!rf_card)         {                 result = -ENOMEM;                 goto fail_malloc;         }         memset(rf_card,0,sizeof(struct wiegand_dev));         rf_card->count = 0;         cdev_init(&(rf_card->cdev), &rfcd_fops);               rf_card->cdev.owner = THIS_MODULE;         err = cdev_add(&rf_card->cdev, devno, 1);                 if(err)         {                 printk("adding err\r\n");                 unregister_chrdev_region(devno,1);                 kfree(rf_card);                 free_irqs();                 return err;         }                          wiegand_class = class_create(THIS_MODULE,"wiegand_class");          device_create(wiegand_class,NULL,MKDEV(WIEGAND_MAJOR,0),NULL,"wiegand");         init_completion(&(rf_card->receive_completion));         //init_MUTEX_LOCKED(&rf_card->sem);         sema_init(&rf_card->sem,0);         //s3c_gpio_setpull(S3C64XX_GPL(9), S3C_GPIO_PULL_UP);         //s3c_gpio_setpull(S3C64XX_GPL(10), S3C_GPIO_PULL_UP);         result = request_irqs();         if(result < 0)         {                 printk("%s:request_irqs error\n",__func__);                 return result;         }         disable_irq(112);         disable_irq(112);                           gpio7_6_reg        = ioremap(0x200f0000+0x0120,4);         gpio7_7_reg        = ioremap(0x200f0000+0x0124,4);         gpio7_dir        = ioremap(0x201c0000+0x0400,4);     //          gpio7_ie        = ioremap(0x201c0000+0x0410,4);         gpio7_6_dat        = ioremap(0x201c0000+0x0100,4);         gpio7_7_dat        = ioremap(0x201c0000+0x0200,4);         printk ("\n@@@@@@@@@@@@@@@@@@@@@@@@@@\n");         printk (DEVICE_NAME"\tinitialized\n");         printk ("\n@@@@@@@@@@@@@@@@@@@@@@@@@@\n");         return 0; fail_malloc:         unregister_chrdev_region(devno,1);                 return result; } static void __exit wiegand_exit(void) {         cdev_del(&rf_card->cdev);         kfree(rf_card);         free_irqs();         unregister_chrdev_region(MKDEV(WIEGAND_MAJOR,0),1);         printk ("\n@@@@@@@@@@@@@@@@@@@@@@@@@@\n");         printk (DEVICE_NAME"\tremoved\n");         printk ("\n@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); } module_init(wiegand_init); module_exit(wiegand_exit); MODULE_AUTHOR("Changsheng.Guo,[email]gcshy@126.com[/email]"); MODULE_LICENSE("GPL"); 但是最后在开发板上运行测试程序时,刷卡后,既未接收到0信号,也没收到1信号,不知道问题出在哪里,求大神指导 补充内容 (2014-12-8 16:12): 之后把GPIO7_7改成GPIO7_6,中断号为107,避开两个中断号都为一样,下面寄存器配置gpio7-6都改成gpio2-7,之前卸载驱动时忘了解除映射,都加上,最后测试时发现还是未能进入中断,也就是刷卡后,没有数据通过gpio7-6和gpio2-7,不知道为什么?
    2014-12-04
    0 0 4295
  • 最近开始学海思板,之前学2440配置gpio时,记得寄存器配置方法比较简单,先通过控制寄存器配置gpio为输入或输出,之后再通过数据寄存器控制它的电平高低,但是海思的管脚配置方式好像不一样,如果通过复用寄存器配置管脚的功能为gpio输入输出口了,接下来要怎么控制它是输入还是输出,高电平还是低电平啊?
    2014-11-11
    4 0 4834
  • 有编写过3520LED驱动的么?
    2014-11-04
    5 0 3245
  • 之前hi3520a板里面有系统,之后我用tftp下载了一个可能不能用的u-boot到板子的0到100000的地址,之后断电重启显示 U-Boot 2010.06 (Nov 15 2012 - 13:46:38) DRAM:  256 MiB NAND:  Special Nand id table Version 1.35 Nand ID: 0x78 0x78 0x78 0x78 0x78 0x78 0x78 0x78 Register dump: 0x10000000: 00000183 00000AAA 00FFFFFF 00000090 0x10000010: 00000000 00000000 00000840 00000266 0x10000020: 0000001F 00000000 00000001 00000000 0x10000030: 00000000 00000000 00000000 00000000 0x10000040: 00000000 00000000 00000000 00000000 0x10000050: 00000000 00000000 00000000 00000021 0x10000060: 00000070 00000000 00000000 00000000 0x10000070: 0000007F 00000310 00000000 00000000 0x10000080: 00000000 00000000 00000000 00000000 0x10000090: 0004FFFF 00000002 00000000 hinfc301.c(464): !!! BUG hardware config is inconsistent, config pagesize 2048, but the nand chip pageszie is 512 然后我用fastboot烧录时是100%downloaded 但是加载就一直显示超时,不知道怎么解决
    2014-09-17
    3 0 3798
易百纳技术社区
共8条
易百纳技术社区