嵌入式驱动开发
文章平均质量分 81
coolwriter
这个作者很懒,什么都没留下…
展开
-
树莓派opencv的安装
树莓派安装opencv的教程层出不穷,但是能用的很少。我这个教程是亲自安装成功的。 我之前安装过好几次opencv2.49都失败了,唯独这个opencv3.1成功了。原创 2017-09-03 20:50:45 · 1156 阅读 · 0 评论 -
linux虚拟内存
Linux 的虚拟内存管理有几个关键概念:每个进程有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址虚拟地址可通过每个进程上页表与物理地址进行映射,获得真正物理地址如果虚拟地址对应物理地址不在物理内存中,则产生缺页中断,真正分配物理地址,同时更新进程的页表;如果此时物理内存已耗尽,则根据内存替换算法淘汰部分页面至物理磁盘中。基于以上认识转载 2017-09-18 17:36:56 · 672 阅读 · 0 评论 -
arm-linux-gcc交叉编译环境搭建
准备工作: 1、linux系统,我用的是Ubuntu 16.04 x64 64位系统。 2、arm-linux-gcc压缩包。我用的是arm-2009q3.tar arm-2009q3.tar网盘地址:http://pan.baidu.com/s/1hs053Pq开始搭建: 首先创建文件夹:cd /usr/localsudo mkdir armcd arm把arm-2009q3.tar复原创 2017-09-01 17:52:31 · 3030 阅读 · 0 评论 -
arm-linux的TFTP 服务器搭建和测试
这里并不会费劲的去介绍 TFTP 协议,那个意义不大,主要是教大家如何操作,在这个过程中进步。 网络协议非常复杂,完整的网络协议一个人将资料看一遍,估计这辈子就过去了。在这个庞大的网络工程中,不同的工程师分别做不同的工作,作为嵌入式 linux 工程师,要做的就是拿别人做好的东西移植,在嵌入式上完善功能。其实嵌入式上的所有功能从最开始,几乎都是从 PC 上移植过来的,很多代码以及软件都 是在 P原创 2017-09-01 18:34:33 · 1077 阅读 · 1 评论 -
Linux(C/C++)下的文件操作open、fopen与freopen
Linux(C/C++)下的文件操作open、fopen与freopenopen是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲。linxu下的fopen是open的封装函数,fopen最终还是要调用底层的系统调用open。所以在linux下如果需要对设备进行明确的控制,那最好使用底层系统调用(open),open对应的文件操作有:clo转载 2017-09-03 10:21:51 · 585 阅读 · 0 评论 -
linux进程编程,exec系列函数(execl,execlp,execle,execv,execvp)使用
本节目标:exec替换进程映像exec关联函数组(execl、execlp、execle、execv、execvp)一,exec替换进程映像在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行。当然,ex转载 2017-09-03 11:42:10 · 4611 阅读 · 0 评论 -
linux 4412平台GPIO的初始化
GPIO的初始化• 在内核源码目录下使用命令“ls drivers/gpio/*.o”,可以看到“gpio-exynos4”被编译进了内核– 生成.o文件代表最终被编译进了内核– 除了menuconfig配置文件,还可以通过.o文件来判定该文件是否编译进了内核 • 在“gpio-exynos4.c”文件最下面一行– core_initcall转载 2017-09-20 16:43:52 · 793 阅读 · 0 评论 -
linux最小系统的制作(嵌入式第一节课)
最小Linux 系统“麻雀虽小,五脏俱全”,它不带图形界面的Linux 系统,剔除干扰因素便于理解,用来学习Linux系统编程非常合适。 另外,Linux最小系统占用的内存空间很小,也经常用于不带图形界面的项目。最小系统制作是嵌入式环境搭建的基础,是学习嵌入式的入门。原创 2017-09-02 15:42:35 · 16832 阅读 · 0 评论 -
静态申请字符类设备号
静态申请字符类设备号原创 2017-09-21 16:46:07 · 483 阅读 · 0 评论 -
linux led驱动例程(杂项设备)
#include <linux/module.h>//与module相关的信息 #include <linux/kernel.h> #include <linux/init.h> //与init相关的函数 #include <linux/platform_device.h> #include <linux/miscdevice.h> #include原创 2017-09-22 17:05:17 · 521 阅读 · 0 评论 -
linux字符类驱动示例
/*包含初始化宏定义的头文件,代码中的module_init和module_exit在此文件中*/#include <linux/init.h>/*包含初始化加载模块的头文件,代码中的MODULE_LICENSE在此头文件中*/#include <linux/module.h>/*定义module_param module_param_array的头文件*/#include <linux/原创 2017-09-26 09:56:14 · 441 阅读 · 0 评论 -
设备注册与驱动注册
1.platform虚拟总线总线设备驱动模型主要包含总线、设备、驱动三个部分,总线可以是一条真实存在的总线,例如USB、I2C等典型的设备。但是对于一些设备(内部的设备)可能没有现成的总线。Linux 2.6内核中引入了总线设备驱动模型。总线设备驱动模型与之前的三类驱动(字符、块设备、网络设备)没有必然的联系。设备只是搭载到了总线中。在linux内核中假设存在一条虚拟总线,称之为platform总线原创 2017-09-17 17:54:03 · 4545 阅读 · 0 评论 -
linux fork函数详解
引言一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一转载 2017-09-03 21:26:23 · 433 阅读 · 0 评论 -
linux命名管道
●无名管道 主要用于父进程与子进程之间,或者两个兄弟进程之间。在linux系统中可以通过系统调用建立起一个单向的通信原创 2017-09-05 17:46:52 · 2640 阅读 · 0 评论 -
linux pipe 无名管道
管道的概念:管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。有如下特质: 1. 其本质是一个伪文件(实为内核缓冲区) 2. 由两个文件描述符引用,一个表示读端,一个表示写端。 3. 规定数据从管道的写端流入管道,从读端流出。原创 2017-09-05 11:12:35 · 573 阅读 · 0 评论 -
fprintf()函数的运用
fprintf()用于文件操作 #include <stdio.h> int fprintf( FILE *stream, const char *format, ... );fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.原创 2017-09-06 16:26:14 · 66614 阅读 · 1 评论 -
linux消息队列
消息队列提供了一种在两个不相关的进程之间传递数据的简单高效的方法原创 2017-09-06 18:24:08 · 681 阅读 · 0 评论 -
ERROR: Kernel configuration is invalid.
liunx最简单驱动原创 2017-09-14 16:12:13 · 15710 阅读 · 0 评论 -
卸载驱动出现:rmmod: can't change directory to '/lib/modules': No such file or directory
卸载驱动出现:rmmod: can't change directory to '/lib/modules': No such file or directory原创 2017-09-14 16:55:04 · 1120 阅读 · 0 评论 -
linux驱动入门,编译,动态加载
我们写的驱动程序最终都是要加载进内核的,我们有两种方法添加到内核中。第一种是直接编进内核里,第二种是动态编进内核里。动态加入内核就是我们把自己的驱动程序看成一个模块,然后把这个模块加载到内核内。直接编译进内核就是这个模块和内核一起编译,如果有什么这个驱动有什么问题的话,我们还需要调试编译整个内核,因此刚开始学习的时候我采用了模块化的动态加载内核。一、动态加入内核#include <linux/ini原创 2017-09-15 11:19:31 · 2565 阅读 · 1 评论 -
kmalloc()、kzalloc()、vmalloc() 内存申请
我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free()。注意:动态申请的内存使用完后必须要释放,否则会造成内存泄漏,如果内存泄漏发生在内核空间,则会造成系统崩溃。 那么,在内核空间中如何申请内存呢?一般我们会用到 kmalloc()、kzalloc()、vmalloc() 等,下面我们介绍一下这些函数的转载 2017-09-23 16:11:38 · 406 阅读 · 0 评论 -
Linux进程通信共享内存
1)共享内存是进程间共享数据的一种最快的方法。 一个进程向共享的内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。2)使用共享内存要注意的是多个进程之间对一个给定存储区访问的互斥。若一个进程正在向共享内存区写数据,则在它做完这一步操作前,别的进程不应当去读、写这些数据原创 2017-09-08 11:38:54 · 346 阅读 · 0 评论 -
QT5.7交叉编译安装到arm
以下采用的系统为ubuntu16.04,开发板为迅为iTOP4412,4.3寸屏。 下载qt5.7源码qt-everywhere-opensource-src-5.7.0.tar.xz http://www.download3k.com/Install-Qt.html下载ARM交叉编译工具arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-lin转载 2017-10-10 09:27:59 · 407 阅读 · 0 评论