积累
yhc1991
这个作者很懒,什么都没留下…
展开
-
windows 下安装 python pip
windows下安装python pip原创 2022-04-04 10:08:34 · 587 阅读 · 0 评论 -
驱动字符设备的基础
在linux2.6内核中使用cdev结构体描述一个字符设备,cdev结构体定义如下:struct cdev { struct kobject kobj;//内嵌的kobject对象 struct module *owner;//所属模块 const struct file_operations *ops;//指向文件操作结构体指针 struct list_head list;转载 2014-11-03 09:38:35 · 527 阅读 · 0 评论 -
内核零内存拷贝策略
Linux驱动和用户程序之间内存零拷贝实现转载 2014-05-30 09:40:33 · 1945 阅读 · 0 评论 -
linux下混杂设备驱动
设备驱动程序中的注册函数原创 2014-05-29 15:23:42 · 624 阅读 · 0 评论 -
linux 公社资料
免费下载地址在 http://linux.linuxidc.com/用户名与密码都是www.linuxidc.com原创 2014-07-02 11:10:27 · 502 阅读 · 0 评论 -
通过proc fs获取设备状态
驱动程序加载(insmod)之后,通过什么样的手段来观测设备的运行状况呢?通常可以在file_operation对应的各个函数里面用printk(内核态常用的打印函数)打印出需要了解的调试信息。如果仔细留意的话可以发现在嵌入式系统的文件系统目录下通常会有proc目录,在该目录下可以通过cat interrupt去了解ARM嵌入式系统中ARM处理器中断的情况,通过cat devices可以了解dev转载 2014-06-12 09:58:40 · 564 阅读 · 0 评论 -
内核与用户空间的内存共享(测试通过)
Make:obj-m := k_mem.oKDIR := /lib/modules/3.2.18/buildPWD := $(shell pwd)default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modulesclean: $(RM) -rf .*.cmd *.mod.c *.o *.ko .tmp* Module.s转载 2014-05-29 10:58:58 · 905 阅读 · 0 评论 -
与内存映射相关的宏
三. 内核对页表的设置CPU做出映射的前提是操作系统要为其准备好内核页表,而对于页表的设置,内核在系统启动的初期和系统初始化完成后都分别进行了设置。3.1 与内存映射相关的几个宏这几个宏把无符号整数转换成对应的类型 #define __pte(x) ((pte_t) { (x) } ) #define __pmd(x)转载 2014-06-12 10:42:26 · 579 阅读 · 0 评论 -
Linux下使用交叉编译工具ltib开发powerpc(mpc83xx)
Linux下使用交叉编译工具开发powerpc(mpc83xx)写在前面 符号'##'后面语句均为注释 需要做的操作命令以 '$' 或 '#'开头,且都位于一行的开始 以下绝大部分操作是针对于我们的开发主机(PC),其他是针对于开发板(MPC8349itx) 对于主机上的操作,所说目录路径是相对于/usr/local/mpc8转载 2014-05-27 14:43:51 · 1396 阅读 · 1 评论 -
内核与用户空间共享内存之mmap
一、用到的API与数据结构先看用户空间使用的API#include sys/mman.h>void *mmap(void *start, //映射的范围首地址,通常设NULL,让系统自动选地址,映射成功后返回该地址 size_t length, //映射的范围的大小 int prot, //映射区的保护属性 P转载 2014-05-29 16:54:49 · 1097 阅读 · 0 评论 -
关于驱动开发中mmap函数的实现
在编写设备驱动程序的时候,如果要想把设备内存映射到用户空间,那需要我们实现mmap,通过看ldd3上面的介绍,对实现mmap有了一点了解.书上介绍主要是利用int remap_pfn_range(struct vm_area_struct *vma, unsigned long virt_addr,unsigned long pfn, unsigned long size,pgprot_t p转载 2014-06-06 17:18:42 · 611 阅读 · 0 评论 -
/usr/bin/ld: cannot find : No such file or directory解决
linux gcc编程时可能出现下面的错误:/usr/bin/ld: cannot find : No such file or directory cannot find后面什么都没有,很有可能是因为命令中间多了个空格符导致(一般在逗号后面),请仔细检查;有的话则可能是缺少某种类型的库,选择安装后即可,如下(无mysql库导致,apt-get install libmysql转载 2014-11-25 17:05:11 · 14607 阅读 · 0 评论 -
Linux内核代码中的__setup的用途
在Linux内核代码中经常会看到__setup,如下所示: __setup("nfsroot=", nfs_root_setup); 这是一个宏,它的定义在include/linux/init.h #define __setup(str, fn) __setup_param(str, fn, fn, 0) 我们这里暂不管__se转载 2014-11-27 10:39:39 · 726 阅读 · 0 评论 -
中断与任务——vxworks
中断处理是整个运行系统中优先级最高的代码,可以抢占任何任务级代码运行。中断机制是多任务环境运行的基础,是系统实时性的保证。几乎所有的实时多任务操作系统都需要一个周期性系统时钟中断的支持,用以完成时间片调度和延时处理。VxWorks 提供tickAnnounce(),由系统时钟中断调用,周期性地触发内核。 为了快速响应中断,VxWorks的中断服务程序(ISR)运行在特定的空间。不同于一般的任...转载 2018-07-21 10:47:57 · 2922 阅读 · 0 评论 -
Vxworks 任务重启示例
/* includes */#include "vxWorks.h"#include "taskLib.h"#include "sysLib.h"int tid;/* task function */void myFunc(void){ int i; printf("Hello, I am task %d\n", taskIdSelf()); /* Print t...转载 2018-07-21 10:44:24 · 2215 阅读 · 0 评论 -
device_create() class_create()
前面章节“class 类 class_create class_destroy”了解了 class_create使用,这章节中介绍device_create device_destroy使用,并通过这两章节内容 自动建立备文件节点========================================================================转载 2017-11-25 15:41:52 · 430 阅读 · 0 评论 -
Linux内核中实现保留内存的方法
Linux中保留内存(Reserved memory)是指把系统中的一部分内存保留起来,内核不会为它建立页表,一般的应用程序无法访问到这段内存。在板卡调试、内存测试和设备DAM调试的过程中,可以运用这种办法,先验证系统在只有低端内存的情况下能否顺利启动;此外,服务器和存储系统的环境下,也可以用这种方法从大量系统内存中保留出一部分,留给特殊用途使用或者模拟诸如NVDIMM等设备。因此,有必要对Res转载 2017-11-05 09:31:04 · 13695 阅读 · 0 评论 -
#Pragma Pack(n)与内存分配
#pragma pack(n)解释一:每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n=1,2,4,8,16来改变这一系数,其中的n就是你要指定的“对齐系数”。 规则: 1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在off转载 2015-10-25 18:31:56 · 406 阅读 · 0 评论 -
Android/Linux驱动开发之使用dev_dbg调试设备驱动
原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8789807,作者:gqb6661、最近在写I2C下EEPROM的驱动程序,但发现使用i2c_new_probed_device函数无法枚举到设备,于是想调试该函数(位于driver/i2c/i2c-core.c内),看到其中有些调试信息如下:转载 2015-05-13 13:40:53 · 479 阅读 · 0 评论 -
c语言 void*的相关知识
比如void *P=...;那么*P表示什么?warning: dereferencing 'void *' pointer [enabled by default]error: invalid use of void expressionvoid*类型定义的指针变量只接收对象的地址,没有对象的类型概念。所以该指针变量是不能直接用“*指针变量”去访问对象的,只能经强转载 2015-04-07 16:59:01 · 3673 阅读 · 0 评论 -
STM32 SPI DMA 的使用
一是想总结一下SPI总线的特点与注意点,二是总结一下SPI DMA的使用一、SPI信号线说明 通常SPI通过4个引脚与外部器件相连:MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。SCK:串口时钟,作为主设备的输出,从设备的输入NSS:从设备选择。这是一转载 2015-04-22 16:13:50 · 3426 阅读 · 0 评论 -
Git Hub的初步配置
github原创 2015-01-21 16:48:11 · 642 阅读 · 0 评论 -
OTP (One Time Programmable)的介绍
随着嵌入式应用的越来越广泛,产品的安全也显得越来越重要。一方面是为了保护硬件设计,另外一方面也是为了产品本身的安全,防止被HACKED.在嵌入式系统当中,所有的代码和系统数据都是被存储在FLASH芯片内部的。FLASH芯片的特点是可多次擦写,而且掉电数据不会丢失。为了保护FLASH中的数据,越来越多的FLASH厂商在FLASH内部提供了一种特殊的寄存器:OTP寄存器。OTP=ONE TIM转载 2014-11-24 16:28:31 · 4612 阅读 · 1 评论 -
页表及内存映射
用户空间:0x00000000~0xbfffffff内核空间:0xc0000000~0xffffffff内核前896M线性空间:0xc0000000~0xc0037fff 从多少M计算出其对应的地址:3M = 3*1024 = 3072K3072 / 4 = 768 即3M占用768个页框768D = 300H转载 2014-06-06 17:08:14 · 2884 阅读 · 0 评论 -
用户空间和内核空间通讯之【proc文件系统】
今天我们介绍另一种用户内核空间通信的方法:proc文件系统。proc文件系统作为linux提供的一种虚拟文件系统并不占用实际外围存储空间,它仅存在于内存中,系统断电即消失。proc文件系统最开始的设计主要是为满足内核向用户态进程报告其状态而设计,并没有为输入做规定和说明。随着发展,现在的proc文件系统已经演变成一个“用户-内核”空间半双工的通信方式了(虽然目前已经开始有点混乱了,但某些早期开转载 2014-06-06 10:07:09 · 785 阅读 · 0 评论 -
嵌入式系统中设备控制函数实现的分析
在嵌入式Linux下对设备操作的时候,一般都会用到read、 write、llseek和ioctl 等函数,通过这些函数可以像使用文件那样使用外部设备。这些函数的实现过程基本上是类似的,下面以write函数为例来分析用户使用write函数怎么把数据写到设备里面去。 3.1应用程序中函数的格式用户程序中的write函数有三个参数,函数格式如下: write(int fd转载 2013-11-06 11:27:01 · 667 阅读 · 0 评论 -
BusyBox 简化嵌入式 Linux 系统
BusyBox 是如何工作的?为了让一个可执行程序看起来就像是很多可执行程序一样,BusyBox 为传递给 C 的 main 函数的参数开发了一个很少使用的特性。回想一下 C 语言的 main 函数的定义如下:POSIX 环境尽管 BusyBox 的目标 是提供一个相当完整的 POSIX(可移植操作系统接口)环境,这是一个期望,而不是一种需求。这些工具虽然并不完整,但是转载 2013-11-19 09:07:29 · 998 阅读 · 0 评论 -
linux重要
http://blog.csdn.net/zdwzzu2006/article/details/4334791原创 2013-10-14 10:21:31 · 449 阅读 · 0 评论 -
linux下的proc
1. /proc目录Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文转载 2013-10-14 10:17:54 · 526 阅读 · 0 评论 -
C的xml编程-libxml2
1、下载与安装LIBXML2Libxml2是一个C语言的XML程序库,可以简单方便的提供对XML文档的各种操作,并且支持XPATH查询,以及部分的支持XSLT转换等功能。Libxml2的下载地址是http://xmlsoft.org/,完全版的库是开源的,并且带有例子程序和说明文档。最好将这个库先下载下来,因为这样可以查看其中的文档和例子。由于我是在linux下用C语言进行开发的,转载 2013-10-11 16:24:52 · 835 阅读 · 0 评论 -
valgrind 的使用简介
valgrind 的使用简介分类: liunx2012-07-10 16:43 2829人阅读 评论(0) 收藏 举报工具leakdst单元测试delete测试目录(?)[+] zz自 http://blog.csdn.net/destina/article/details/6198443 感谢作者的分享!一转载 2013-09-05 08:23:34 · 653 阅读 · 0 评论 -
Linux驱动程序接口
正如Linux torvalds 所说\"we\re back to the times when men were men and wrote their device drivers\",come on ,then! 以下我将我的小心得与大家分享,并请高手指点江山啊! §1. Linux驱动程序接口 系统调用是操作系统内核与应用程序之间的接口,设备驱动程序则是操作系统内核与转载 2013-08-13 16:36:02 · 1499 阅读 · 0 评论 -
shell 脚本
linux下把环境变量的设置export 放到shell 脚本中?解决方案 设置环境变量,想把export放到脚本里。这是我写的脚本:export.sh#!/bin/shexport $='/opt/Qtopia4.4.3/bin:/sbin:/usr/sbin:/bin:/usr/bin'export QPEDIR='/opt/Qtopia4.4.3'export QTD转载 2013-04-22 13:50:11 · 562 阅读 · 0 评论 -
Qt/Embedded在嵌入式Linux系统下的移植与应用
Qt/Embedded在嵌入式Linux系统下的移植与应用1 Qt/Embedded开发环境介绍 Qt/Embedded应用程序的开发可以在安装了一个跨平台开发工具链的不同的平台上编译。系统采用的是在Linux平台下开发,在Linux平台下以虚拟缓冲帧的方式来运行,其实是有一个X11的应用程序虚拟了一个缓冲帧。通过指定显示设备的宽度、高度和颜色深度,虚拟出来的缓冲帧将和物转载 2013-01-10 14:18:41 · 1503 阅读 · 0 评论 -
linux测试
第一部分 笔试(时长60分钟,分值40分)!!命令是做的什么的?操作系统性能测试都有什么测试工具?它们分别的是测试什么性能的?在Linux操作系统中,可以用来度量时间的工具有哪些?某文件的权限为:d-rw-r--r--,用数值形式表示该权限,则该八进制数为:__,该文件属性是___。守护进程crond的作用是?在Linux操作系统中,硬盘和串口属转载 2012-12-04 13:26:45 · 909 阅读 · 0 评论 -
堆 栈 静态区
堆 栈 静态区2012-02-19 22:21 691人阅读 评论(0) 收藏 举报数据结构编译器delete存储windowsbyte 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放 ,转载 2013-12-30 16:47:05 · 634 阅读 · 0 评论 -
常见的内存错误
1 内存泄露大家都知道,在堆上分配的内存,如果不再使用了,应该把它释放掉,以便后面其它地方可以重用。在C/C++中,内存管理器不会帮我们自动回收不再使用的内存。如果忘了释放不再使用的内存,这些内存就不能被重用,就造成了所谓的内存泄露。 它是最为常见的一类错误。一两处内存泄露通常不至于让程序崩溃,也不会出现逻辑上的错误,加上进程退出时,系统会自动释放该进程所有相关的内存转载 2014-02-10 15:23:38 · 669 阅读 · 0 评论 -
uboot分析之第一阶段源码
这两天在分析uboot,昨天分析完了makefile之后,今天分析了第一阶段的源码,故而分享之。新手望各位指教开始先插一下,uboot移植的思路:1首先来确定UBOOT的每一步动作,以及这个动作所使用的文件,函数等等2再来确定哪一个动作需要修改的3一般CPU都是ARM920T所以主要修改的是板级函数,在board文件夹下下来进行分析:分析的前转载 2014-05-14 08:45:16 · 675 阅读 · 0 评论 -
有关IO端口和IO内存的区别
外设IO寄存器地址独立编址的CPU,这时应该称外设IO寄存器为IO端口,访问IO寄存器可通过ioport_map将其映射 到虚拟地址空间,但实际上这是给开发人员制造的一个“假象”,并没有映射到内核虚拟地址,仅仅是为了可以使用和IO内存一样的接口访问IO寄存器;也可以 直接使用in/out指令访问IO寄存器。 例如:Intel x86平台普通使用了名为内存映射(MMIO)的技转载 2014-05-19 10:50:54 · 547 阅读 · 0 评论 -
IO端口与IO内存
从CPU连出来一把线:数据总线、地址总线、控制总线,这把线上挂着N个接口,有相同的,有不同的,名字叫做存储器接口、中断控制接口、DMA接口、并行接口、串行接口、AD接口……一个设备要想接入,就用自己的接口和总线上的某个匹配接口对接……于是总线上出现了各种设备:内存、硬盘,鼠标、键盘,显示器……对于CPU而言,如果它要发数据到某个设备,其实是发到对应的接口,接口电路里有多个寄存器(也称为端口),转载 2014-05-16 11:25:51 · 1037 阅读 · 0 评论