- 博客(33)
- 资源 (52)
- 收藏
- 关注
原创 S3C6410开发板adc驱动代码分析及测试代码分析
在本文中,我们对S3C6410开发板adc驱动代码的实现过程进行分析,然后通过一个实例对adc功能进行测试。在本文的资源中包含了设备驱动的源码和测试的源码。一、设备驱动源码分析 adc的设备驱动主要实现了模块的初始化、模块的卸载、设备打开、设备关闭、设备读取的功能。1、模块初始化 模块的初始化的源码如下所示。static int _...
2020-01-31 20:36:59 450
原创 S3C6410开发板按键驱动代码分析及测试代码分析
在本文中,我们对S3C6410开发板按键驱动代码的实现过程进行分析,然后通过一个实例对按键功能进行测试。在本文的资源中包含了设备驱动的源码和测试的源码。一、设备驱动源码分析 按键的设备驱动主要实现了模块的初始化、模块的卸载、设备打开、设备关闭、设备读取、设备阻塞功能。1、模块初始化 模块的初始化的源码如下所示。static int _...
2020-01-31 19:04:06 717
原创 深度学习caffe---编译caffe时,报错/usr/bin/ld: cannot find -lopenblas
在进行caffe安装时,编译时报如下错误/usr/bin/ld: cannot find -lopenblas在我的另外一篇文章中,可以看到类似问题的解决办法。https://blog.csdn.net/bhniunan/article/details/104123916判断为找不到libopenblas.so库。用下面的命令进行查找。locate libopenblas....
2020-01-31 17:26:15 971
原创 caffe编译报错.build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'
在进行caffe安装时,编译时报了一堆错误,其中比较有代表的是下面的一句。.build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'这是由于缺少必要的文件造成的。经过查找,找到了解决办法。打开Makefile文件。将原本如下的代码LIBRARIES...
2020-01-31 15:04:00 1783
原创 深度学习caffe---编译caffe时,报错/usr/bin/ld: cannot find -lhdf5_hl,解决办法
在进行caffe安装时,编译时报如下错误/usr/bin/ld: cannot find -lhdf5_hl/usr/bin/ld: cannot find -lhdf5这其实是一类问题,就是链接过程在默认的文件夹内找不到动态链接库文件。这类问题一般是如下报错误/usr/bin/ld: cannot find -lxxxxx其中xxxxx是动态链接库的文件名,也就是找不到 l...
2020-01-31 14:28:08 1877 1
原创 深度学习caffe---编译caffe时,报错fatal error: hdf5.h: No such file or directory compilation terminated.
在进行caffe安装时,编译时报如下错误fatal error: hdf5.h: No such file or directory compilation terminated.翻译这段话的原本意思是没有hdf5.h这个文件。显然caffe编译时需要这个文件,但是却找不到这个文件。怎么来解决呢?首先,我们来找一下这个文件,采用下面的命令对hdf5.h进行查找locate hd...
2020-01-31 14:11:43 1148
原创 深度学习caffe---编译caffe时,报错nvcc fatal : Unsupported gpu architecture 'compute_20'
在进行caffe安装时,编译时报如下错误nvcc fatal : Unsupported gpu architecture 'compute_20'报错之后,无法继续安装,查看Makefile.config文件,有如下代码。CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \ -ge...
2020-01-31 12:21:41 1700 1
原创 S3C6410开发板LED驱动代码分析及测试代码分析
在本文中,我们对S3C6410开发板LED驱动代码的实现过程进行分析,然后通过一个实例对LED进行控制。在本文的资源中包含了设备驱动的源码和测试的源码。一、设备驱动源码分析 设备驱动主要实现了模块的初始化、模块的卸载、io模块操作的功能。1、模块初始化 模块的初始化的源码如下所示。static int __init dev_init...
2020-01-30 23:31:43 293
原创 字符设备驱动例程分析(附源码)
在linux系统应用中,设备驱动程序编写是比较困难的,初学者往往摸不着头绪。在这片文章中,我给大家讲解一个实例,带大家进行一步一步的分析字符设备驱动程序的编写方法。1、功能实现 首先我们先来介绍一下,我们用这个实例来做什么。我们做的这个驱动程序的作用是将用户空间的一块1KByte的内存模拟成一个设备,并设计了这个设备的打开、关闭、读写等功能的驱动,并用一个应用程...
2020-01-29 23:15:01 1013
原创 mmap函数的用法详解及实例分析
1、mmap函数是一个比较神奇的函数,它可以把文件映射到进程的虚拟内存空间。通过对这段内存的读取和修改,可以实现对文件的读取和修改,而不需要用read和write函数。如下图所示,为mmap实现原理的示意图。在这个图中,off为映射的部分在文件中的偏移量,len为映射的长度。2、下面我们来看一下mmap函数的原型void *mmap(void *addr, size_t len,...
2020-01-29 12:21:56 21226 5
原创 编译程序时报error: stray ‘\357’ in program错误的原因
自己写的程序,在编译时报了一堆错误,如下所示。mmap_test.c: In function ‘main’:mmap_test.c:16:2: error: stray ‘\357’ in program start = (char *)mmap(NULL,128,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); ^mmap_test...
2020-01-29 10:55:21 5340 2
原创 linux系统下timer的用法详解
我们在写程序时,很多时候希望程序能够按照固定的周期执行。比较笨的办法是用一个while(1)循环,在循环里用一个sleep或者usleep函数延时,延时到一定时间执行需要执行的代码。这种方法忽略了程序代码运行的时间,所以程序循环的时间就不准了。为了能够活动比较准的定时时间,可以使用timer模块。 timer模块的使用方法有2种比较常用的的用法,一种是产生新线程的...
2020-01-28 23:42:01 3514 1
原创 select函数用法详解,及实例分析
select函数是系统调用函数,用于多路监控。当没有一个文件满足要求时,select将阻塞调用进程。在有些情况下,采用select函数可以大大简化程序结构。比如一个系统有10个输入设备,如果想实时读取这10个设备的输入数据,就比较困难,采用查询方式,显然达不到实时的目的;或者可以为每一个设备设计一个线程,每个线程实时对设备的输入进行读取,这样会使程序异常复杂,数据的交互也很混乱。有...
2020-01-27 20:57:42 7777
原创 open与fopen,read与fread,write与fwrite函数的区别
在linux系统中,open与fopen,read与fread,write与fwrite函数有着类似的功能,分别是打开文件、读取文件和写入文件的作用,但是他们之间的却别是什么呢? 由于这3组函数的差别方面是一样的,所以我们以read和fread为例进行说明1、首先,fread是ANSI的C标准库函数,而read是linux系统的系统调用函数。fread更加通用...
2020-01-27 18:03:16 1126
原创 在ubuntu体统中,搜狗输入法乱码的解决办法
在ubuntu 系统中,在安装了搜狗输入法之后,有的时候好用,有的时候输入的时候,本该显示备选汉子的位置显示的都是乱码,没法正常显示汉子。有的时候重启系统又好用了,有的时候需要反复重启好几次才能用一直比较困扰。 经过查找资料,发现了解决办法。cd ~/.configsudo rm -rf SogouPY* sogou*在终端中执行上面两条命令,再重启...
2020-01-27 09:04:25 634
原创 linux系统中copy_to_user()函数和copy_from_user()函数的用法
在编写linux驱动程序的时候会用到copy_to_user()和copy_from_user()这两个函数。那这两个函数的作用是什么呢?为了便于理解,我们先来了解一下用户空间和内核空间。 在linux系统中,每个进程的运行空间分为内核空间和用户空间。之所以划分成这两个空间,是因为在 CPU 的所有指令中,有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存...
2020-01-26 19:03:03 14510
原创 linux系统的内核空间与用户空间理解
在linux系统中,每个进程的运行空间区分内核空间和用户空间。1、内核空间和用户空间的定义 对于 32 位的操作系统,它的寻址空间(虚拟地址空间,或叫线性地址空间)为 4G(2的32次方)。也就是说一个进程的最大地址空间为 4G。操作系统的核心是内核,它独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证内核的安全,现在的操作...
2020-01-26 18:44:07 1173
原创 linux系统是如何通过相同的系统调用函数实现对不同设备进行操作的
在linux系统中,可以采用open()、read()、write()函数对不同的设备进行访问。比如我们可以用read()来读取一个c文件中的数据,也可以用read()来读取串口发送来的数据。然而c文件和串口的结构显然是不同的,linux是如何通过同一个read()函数来实现不同类型的设备的读取的呢? 首先我们来看一下linux系统设备访问的机制,我们以最常用的字符...
2020-01-26 10:22:55 293
原创 如何将内核模块编译进linux内核
linux系统的内核模块,在编好之后,可以通过insmod命令安装到系统中,也可以将模块直接编译进内核。下面我们来做一个实例,实例的目的是编写一个简单的内核模块,然后把该模块编译进S3C6410开发板的内核中,并运行。1、内核模块的代码hello.c如下所示。#include <linux/module.h>#include <linux/init.h...
2020-01-25 18:01:35 2055
原创 内核模块开发中__init和__exit的作用
在内核模块的代码中,经常会用到__init和__exit,如下面的代码static int __init test_init(void){ return 0;}static void __exit test_exit(void){}这两个函数分别是内核模块的初始化和退出的代码。__init和__exit的作用是告诉编译器将这些函数或者数据放入相应的代码段。使...
2020-01-25 10:15:51 863
原创 tftp timeout 的原因及解决办法
在嵌入式linux应用中,经常会遇到tftp timeout的问题,这个问题的原因可能是多种原因。1、硬件连接不可靠。 首先,检查网线的连接是否牢固,并且用ping命令看是否能够ping通,比如tftp服务器的IP是192.168.0.2,命令如下ping 192.168.0.2如果能ping通说明硬件连接正常。2、服务器防火墙未关闭 防火墙开启会导致...
2020-01-24 19:24:14 28898
原创 linux开发板执行程序提示/bin/sh: Permission denied的解决办法
在使用S3C6410开发板时,编写了一个简单的hello.c程序,如下所示。 #include <stdio.h> int main() { printf("Hello!\n"); return 0; }采用下面的交叉编译命令对程序进行编译。arm-linux-gcc hello.c -o hello生成...
2020-01-24 19:10:35 20171 1
原创 linux系统中如何关闭后台运行的进程
在linux系统中,关闭某个进程的命令是kill,后边需要加进程的进程号。但是关闭进程需要知道进程的进程号,那么怎样才能知道进程的进程号呢?可以使用下面的命令来查看。ps aux执行了这个命令之后,可以看到所有正在运行的进程,格式如下所示USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAN...
2020-01-24 07:37:29 15604
原创 什么是软连接,以及软连接在linux系统中的用法
软连接是linux中一个常用命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。软连接类似与c语言中的指针,传递的是文件的地址;更形象一些,软连接类似于WINDOWS系统中的快捷方式。 例如,在a文件夹下存在一个文件hello,如果在b文件夹下也需要访问hello文件,那么一个做法就是把hello复制到b文件夹下,另一个做法就是在b文件夹下建立hello的软...
2020-01-23 21:35:08 16154
原创 Linux系统的复制cp和移动mv的常用命令
linux系统下复制文件或文件夹使用的命令是cp,cp命令相关的参数比较多,我们可以采用下面的命令来查看cp命令的帮助文档man cp执行这个命令之后,发现相关的参数很多。实际上这些参数绝大部分是不常用的,下面我们来介绍几个常用的使用方法。1、复制文件cp path1/a.c path2 这个命令将path1路径下的a.c文件复制到path2路径下,并且...
2020-01-23 11:37:33 674
原创 编译嵌入式linux内核的若干问题
编译嵌入式linux内核与编译基于X86的内核有很多不同的地方。1、首先配置内核使用的命令如下,需要制定内核的构架,否则内核的配置还是X86的内核make menuconfig ARCH=arm2、编译内核的命令如下,也与X86的命令有所不同,需要制定构架以及交叉编译工具make uImage ARCH=arm CROSS_COMPILE=arm-linux-3、除了上面两...
2020-01-23 09:03:47 185
原创 如何安装arm交叉工具链及问题解决
在进行基于arm的嵌入式linux开发时,首先要安装交叉工具链。要按照交叉工具链首先要获得交叉工具链的压缩包,我这里用的是开发板上自带的压缩包:arm-linux-gcc-4.5.1-v6-vfp.tgz1、安装交叉工具链的第一步是解压缩这个压缩包。命令如下:sudo tar xvzf arm-linux-gcc-4.5.1-v6-vfp.tgz -C /这个命令的作...
2020-01-22 16:33:48 989 1
原创 linux内核模块简单例程及编译内核模块的Makefile详解
内核模块相当于是内核的补丁,可以在内核运行时安装到内核之中。如下面一个简单的hello.c,它是一个内核模块的源码。#include <linux/module.h>#include <linux/init.h>static int __init hello_init(void){ printk(KERN_EMERG "Hello world!\...
2020-01-22 10:41:25 1094
原创 如何计算一段程序的执行时间
在编程时,在一些对时间要求比较高的情况,我们希望知道程序的运行需要用多长时间。如何才能获得程序的运行时间呢,下面我们就介绍一种方法。 这种方法基于gettimeofday()函数来实现,我们先来看一下代码:#include<stdio.h>#include<sys/time.h>void delay(){ for(unsigned l...
2020-01-19 17:17:03 2290
原创 c语言中argc和argv[ ]的作用及用法
在c语言编程中,经常可以看到如下的main函数声明:int main(int argc, char *argv[])那么argc和argv[ ]是干什么用的呢?其中argc是外部输入的参数个数,argv[ ]是参数的字符串数组。光这么说大家可能不太明白,那我们来看一个示例,如下所示的C文件argtest.c#include <stdio.h>int ...
2020-01-19 16:06:53 14422
原创 配置linux内核执行make menuconfig时的若干问题
研究linux内核是一个采坑不断的过程。从配置内核就会遇到各种问题。对于初学者可能就是束手无策了,大大影响学习的积极性以及学习进度。下面对一些常见的问题进行解释。 首先,要配置内核,就需要先下载一个内核版本。可以从官网上下载,http://www.kernel.org,解压之后,进入到内核的目录下。比如我的目录是/home/fxfreefly/Documents/kern...
2020-01-19 14:02:00 2566 1
原创 ntohl()、htonl()、ntohs()、htons()函数用法
ntohl()、htonl()、ntohs()、htons()这几个函数的作用是进行字节顺序的转换,在理解这几个函数之前,我们先了解一下数据的存储。一、大端存储和小端存储 1、大端存储:在计算机中,数据是按照字节存储的,多于一个字节的数据,把高字节部分存储在低地址,把低字节部分存储在高地址,这种方式称为大端存储。 例:0x12345678这个数据,我们一般认为左边是高字节部分...
2020-01-16 19:01:11 10596
原创 sockaddr和sockaddr_in结构体、以及inet_ntoa()和inet_addr()函数的用法
在网络通讯程序中会用到sockaddr和sockaddr_in这两个结构体,下面对这两个结构体进行一下分析。一、 sockaddr和sockaddr_in struct sockaddr 这个结构体是在<<sys/socket.h>>头文件中定义的。结构体的定义如下:struct sockaddr { sa_family_t sin_fam...
2020-01-16 18:15:56 2077
Win32DiskImager-0.9.5-install.rar
2020-03-10
blob_demo.cpp
2020-02-26
飞思卡尔XEP100单片机CAN总线测试代码
2020-02-07
飞思卡尔XEP100单片机SPI测试代码
2020-02-07
飞思卡尔XEP100单片机IIC测试代码
2020-02-07
飞思卡尔XEP100单片机ECT测试代码
2020-02-07
飞思卡尔XEP100单片机SCI串口测试代码
2020-02-07
飞思卡尔XEP100单片机锁相环测试代码
2020-02-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人