自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

做一个有技术追求的人

但求好事 莫问前程!

  • 博客(223)
  • 资源 (3)
  • 收藏
  • 关注

转载 udev详解

如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev目录下。后来,采用了devfs,一个基于内核的动态设备文件系统,他首次出现在2.3.46 内核中。Mandrake,Gentoo等Linux分发版本采用了这种方式。devfs创建的设备文件是动态的。但

2013-07-17 18:58:12 3163

原创 linux内核链接脚本详解

1. 什么是链接脚本链接器主要有两个作用,一是将若干输入文件(.o文件)根据一定规则合并为一个输出文件(例如ELF格式的可执行文件);一是将符号与地址绑定(当然加载器也要完成这一部分工作)。关于链接器的工作机制可以参考《Linker and Loader》一书,本文只关心它的第一个功能,即如何根据一定规则将一个或多个输入文件合并成输出文件。这里的“一定规则”是通过链接脚本描述的。链接器有一个编

2013-07-10 23:46:39 12890

转载 嵌入汇编基本语法

具有输入和输出参数的嵌入式汇编语句的基本格式为:             asm("汇编语句"                      :输出寄存器                      :输入寄存器                      :会被修改的寄存器);       除第一行以外,后面带冒号的行若不使用就都可一省略。其中 “asm” 是内联汇编语句关键词。"汇

2013-07-05 10:23:19 1619

原创 sja1000 CAN控制器波特率计算方法详解

这段时间调试公司处理器can总线,实现最基本的对发实验,can控制器是sja1000,起初因为是对发实验,同样2块开发板,同样内核配置相同,因此时钟以及波特率肯定一样,也没有仔细研究can的时钟以及波特率,今天有客户问can控制器的时钟以及波特率,下午仔细看了一下sja1000手册,并且写了一个由波特率和时钟来计算分频值的小程序,这里总结一下。  sja1000 can工作频率和波特率之间分频

2013-05-16 23:35:52 5679 2

转载 linux下/dev/mem分析

dev/mem: 物理内存的全镜像。可以用来访问物理内存。/dev/kmem: kernel看到的虚拟内存的全镜像。可以用来访问kernel的内容。/dev/mem 用来访问物理IO设备,比如X用来访问显卡的物理内存,或嵌入式中访问GPIO。用法一般就是open,然后mmap,接着可以使用map之后的地址来访问物理内存。这其实就是实现用户空间驱动的一种方法。/dev/kmem 一般

2013-05-15 15:22:08 16850

转载 insmod: error inserting : -1 Invalid module format 解决办法

当最初开始LDD编程时,经常会碰到这种情况,下载编译的内核源代码和当前正在运行的内核不一样。 第一阶段有时候你下载的内核版本相对正确,但却仍然不能insert成功,这有另一方面的东西要check:1. gcc的版本,比较:cat /proc/version和gcc -v2. 内核config的比较,在关键的选项上不能相左当前内核config:/lib/modules

2013-05-14 17:17:40 2332

转载 linux内核函数do_div与undefined reference to `__udivdi3'解决方法

【问题】编译Linux下面的代码,经常会遇到这种错误:undefined reference to `__udivdi3'【解决过程】之前遇到过几次了,都是类似的原因导致此问题的。后来才了解,其根本原因:嵌入式中,32位系统中(目前多数系统都是,比如ARM的片子),对于普通的a除以b(b为32位):(1)当a为32位,Linux 内核中,常用uint

2013-05-08 22:31:52 1757

原创 mmap底层驱动实现方法总结

最近在调试视频卡,虽然通了,但是公司CPU主频在300MHZ,对于采集D1格式图像显示到fb中并不是很流畅,分析原因,视频采集卡是PCI插槽,PCI的带宽没有问题,有一个想法,视频卡做DMA将采集到的图像放到内存中,CPU将图像再搬运到framebuffer中,这是视频采集的大体流程,在这个过程中最费CPU的是数据的搬运,在我自己写的小测试程序中就是循环的拷贝从videobuf到framebuff

2013-05-05 11:41:09 3297

原创 ubuntu12.04修复grub方法

五一假期不知道出了什么原因,自己笔记本上的windows7启动不起来了,我的笔记本上装的是双系统,ubuntu还可以正常启动,所以就打算重新装一下win7.重装win7之后发现启动后直接引导进入win7,没有了grub引导选择操作系统,这个原因很简单,就是win7安装过程中覆盖了MBR,将原先MBR中的grub覆盖了,所以需要将grub修复。现在总结一下方法如下首先做一个ubuntu的启动盘,

2013-05-02 09:37:12 1669

转载 linux内核list_for_each_entry

在Linux内核源码中,经常要对链表进行操作,其中一个很重要的宏是list_for_each_entry:意思大体如下:假设只有两个结点,则第一个member代表head,list_for_each_entry的作用就是循环遍历每一个pos中的member子项。图1:pos:

2013-04-25 16:27:36 1533

原创 PCI设备的DMA映射操作详解

上周认真学习了LDD3第15章直接内存访问部分,这周调试PCI的网卡和视频采集卡,结合代码对DMA映射有了进一步的理解,这里按照LDD315章的顺序总结一下,记一下笔记,以后忘了再来翻,本人刚毕业1年菜鸟,理解不到的地方还希望大神指点!  根据LDD3说法,DMA是一种硬件机制,是说硬件具有这种仲裁能力,在cpu不干预的情况下设备可以作为主设备来对内存的直接读写访问,这样可以大大提高大数据流的

2013-04-14 17:27:29 15759 10

原创 mips处理器linux内核pci初始化和设备枚举详解

linux启动过程中pci总线初始化主要包括2部分,pci控制器的注册和pci设备的枚举,pci总线和其他总线一个很重要的区别就是pci总线的枚举,在启动过程中遍历pci总线树上所有可能的dev func,记录下所有存在的设备的vendor id  设备名等,这个是做为后面pci设备驱动初始化中注册pci设备驱动需要匹配的重要依据,类似于platform驱动。  先说pci控制器注册,这个与具

2013-04-06 21:12:12 5368

转载 __attribute__机制介绍

1. __attribute__ GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)__attribute__前后都有两个下划线,并且后面会紧跟一对原括弧,括弧里面是相应的__attrib

2013-04-06 17:53:22 2187

原创 linux内核__define_initcall分析

在阅读linux内核代码的过程中经常会看到驱动代码中在最后调用arch_initcall subsys_initcall module_init等函数,虽然知道这些函数是来确定驱动在内核启动过程中的加载顺序的,但是没有仔细看过实现原理,借清明节空闲来看一下具体实现,以mips处理器2.6.21内核为例。  在linux/init.h中可以看到以下代码:/* initcalls ar

2013-04-06 17:48:10 6311 2

原创 pci_bus_read_config_dword实现说明

在学习linux 内核启动pci总线枚举的过程中,发现跟踪到底层扫描总线上每个设备,是通过读取每个设备的vendor id来确定设备的有无,在这里遇到了一个问题,就是函数pci_bus_read_config_dword没有找到实现,只是找到了EXPORT_SYMBOL(pci_bus_read_config_dword),没有具体的实现,仔细看了一下access.c文件才发现这个问题所在,先贴出

2013-04-05 10:04:18 9341

转载 C宏定义# ##含义

1、在一个预处理器宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组。(原文:When you put a # before an argument in a preprocessormacro, the preprocessor turns that argument into a character array. This,combined with the fact t

2013-04-05 09:59:15 1420

转载 BUG BUG_ON dump_stack

调试的时候很有用的东西:dump_stack 使用前,先在内核配置中把kernel debug选上:make menuconfig:kernel hacking-->kernel debug 作用:一些内核调用可以用来方便标记bug,提供断言并输出信息。最常用的两个是BUG()和BUG_ON()。当被调用的时候,它们会引发oops,导致栈的回溯和错误信息的打印。为什么这

2013-03-28 19:09:10 1524

转载 linux高端内存分析

一、Linux内核地址空间一般来说Linux 内核按照 3:1 的比率来划分虚拟内存(X86等):3 GB 的虚拟内存用于用户空间,1GB 的内存用于内核空间。当然有些体系结构如MIPS使用2:2 的比率来划分虚拟内存:2 GB 的虚拟内存用于用户空间,2 GB 的内存用于内核空间,另外像ARM架构的虚拟空间是可配置(1:3、2:2、3:1)。内核线性地址空间用于为内核的运行提供最基本的支持,

2013-03-26 15:09:14 1478

转载 linux2.6内核内存描述符与线性区分析

内存描述符与线性区用户的等级与内核的等级是不同的,这个原因造成了当用户进程请求动态内存的时候,会被“拖延”,同时内核对用户进程也充满警惕,时刻准备捕获用户进程引起的所有寻址错误。用户进程所获得的空间是虚拟内存,是被称为“线性区”的空间,是一堆线性地址空间的使用权。而描述这一框架的数据结构就是内存描述符,线性区对象。内存描述符在slab分配器中,内存描述符彼此形成一个链表,而其中的字段的功能

2013-03-22 19:09:31 1942

原创 QT输入设备环境变量QWS_MOUSE_PROTO解析

该环境变量主要是帮助QMouseDriverFactory也就是Qt鼠标设备的枚举者来创建你想要的鼠标设备而不是系统默认的。默认该环境变量时空的,其实大部分情况下空就可以了,Qt能够根据系统配置猜测出你想要的设备,并且这个大多数情况下好像都是正确的。不过如果错了我们可以通过设置该变量来纠正。该环境变量的格式如下:export QWS_MOUSE_PROTO="[:]

2013-03-21 21:48:40 3179

转载 remap_pfn_range()详解

remap_pfn_range()函数的原型:int remap_pfn_range(struct vm_area_struct *vma, unsigned long virt_addr, unsigned long pfn, unsigned long size, pgprot_t prot);该函数的功能是创建页表。其中参数vma是内核根据用户的请求自己填写的,而参数addr表示

2013-03-19 15:11:40 15885 3

转载 PCI配置空间的访问方式

系统中的CPU是通过PCI设备的设备号以及配置空间中的寄存器编号来访问配置空间寄存器的CPU通过产生PCI配置空间访问周期来访问PCI设备的配置空间,产生PCI配置空间访问周期的机制有以下两种。n 机制1通过CPU中专门为PCI总线设置的PCI配置空间地址寄存器和配置空间数据寄存器来访问配置空间的寄存器,其中配置空间地址寄存器的编码格式与上面“PCI设备配置空间寄存器地址”的编码相同,

2013-03-15 14:45:42 4374

原创 内核request_mem_region 和 ioremap的理解

几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种:  (1)I/O映射方式(I/O-mapped)  典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的

2013-03-14 10:46:30 38282 4

原创 menuconfig过程详解

makefile menuconfig过程讲解当我们在执行make menuconfig这个命令时,系统到底帮我们做了哪些工作呢?这里面一共涉及到了一下几个文件我们来一一讲解Linux内核根目录下的scripts文件夹arch/$ARCH/Kconfig文件、各层目录下的Kconfig文件Linux内核根目录下的makefile文件、各层目录下的make

2013-03-11 19:59:32 25942 6

转载 C语言内嵌汇编简介

l 简要介绍n 关键字u __asm__:必须的;__volatile__:非必须的n 格式u __asm__ __volatile__ (“instruction list” : output:input : clobber/modify);u 上述除了四个部分都可以缺省,当后面三个部分没有的时候退化成基本内联汇编,否则为GCC内联汇编n 各个操作数含义u Instr

2013-03-04 15:31:17 4857

转载 PCI总线原理

PCI即Peripheral Component Interconnect,中文意思是“外围器件互联”,是由PCISIG (PCI Special Interest Group)推出的一种局部并行总线标准。在现在电子设备中应用非常广泛,下面我详细介绍下PCI总线的工作原理,希望对大家有所帮助。    PCI总线的过去现在和未来       PCI总线是由ISA(Industy St

2013-02-28 15:16:11 37209 2

转载 linux模块管理命令

1. lsmod 列出已经加载的内核模块  lsmod 是列出目前系统中已加载的模块的名称及大小等;另外我们还可以查看 /proc/modules ,我们一样可以知道系统已经加载的模块。  2.modinfo 查看模块信息  modinfo 可以查看模块的信息,通过查看模块信息来判定这个模块的用途。  3.modprobe 挂载新模块以及新模块相依赖的模块  modprobe

2013-02-27 20:17:12 1095

转载 insmod驱动模块 出现 Invalid module format

在使用命令ismod helloworld.ko 加载编译成功的模块helloworld.ko时出现错误  insmod: error inserting 'helloworld.ko': -1 Invalid module format一般出错信息被记录在文件/var/log/messages中[root@hailiang linux-2.6.15.5]# cat /var/log/me

2013-02-25 19:55:10 6347 1

转载 linux UVC摄像头驱动 简介

1. 如何判断Camera是否为UVC Camera       Linux UVC driver(uvc) 该驱动适用于符合USB视频类(USB Video Class)规范的摄像头设备,它包括V4L2内核设备驱动和用户空间工具补丁。大多数大容量存储器设备(如优盘)都遵循USB规范,因而仅用一个单一驱动就可以操作它们。与此类似,UVC兼容外设只需要一个通用驱动即可。  USB摄像头大体上

2013-02-25 15:55:41 33271 5

原创 内核宏定义container_of的理解

在阅读内核代码时特别是驱动代码,经常碰到使用contiainer_of宏定义的情况,由一个成员变量地址来获取这个包含这个成员的结构体的地址。下面来分析一下这个宏定义的实现在include/linux/kernel.h文件中定义如下:/** * container_of - cast a member of a structure out to the containing st

2013-02-24 12:01:10 1583

转载 配置内核并使用iptables做端口映射

要求将到主机 192.168.1.100:11101 的请求映射到内部网目标机的 sshd 服务端口上,即:192.168.2.101:22。配置内核(以 2.6.18 为例)如果执行 iptable -L 出现以下信息,那么就需要重新配置和编译内核:iptables v1.4.2: can’t initialize iptables table `filter’: Table d

2013-02-24 11:05:52 1806

原创 嵌入式开发板利用iptables实现NAT

最近为客户写应用程序来测试网卡,客户要求ping自己来检查是否通路,发现ping开发板自己IP时不管插不插自回环网线都能ping通,而我写的测试程序其实就是对ping命令进行的字符串分析,因此这样是不能检测出网卡的通路与否。后来知道ping自己ip时会路由到本地环回的虚网口,数据包根本没有到物理层从网卡发出。因此不管网卡好坏都可以ping通。组长跟我说用iptables命令来做NAT转换ip,可以

2013-02-24 11:02:43 3873

原创 制作和使用cramfs中遇到的问题解决方法

之前自己写的开发板使用手册上关于cramfs的使用自己也没有验证过,因为cramfs用的很少,nandflash一般都使用yaffs文件系统,资源利用率更高一些。  今天有客户要求使用cramfs文件系统格式烧写根文件系统到nand上,我就自己做了一遍,才发现命令的使用有问题,内核在启动过程中出现下面的错误信息:  VFS: Mounted root (cramfs fil

2013-02-05 09:22:54 2495

转载 linux下scp命令详解

scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录.scp命令的用处:scp在网络上不同的主机之间复制文件,它使用ssh安全协议传输数据,具有和ssh一样的验证机制,从而安全的远程拷贝文件。scp命令基本格式:scp [-1246BCpqrv] [-c ciphe

2013-02-01 16:51:07 1124

原创 ubuntu12.04安装ssh和telnet服务器

如果经常需要给客户调试程序,还需要察看自己电脑上的程序,这个时候ssh服务器和telnet服务器就显得很重要了。只要自己电脑安装了ssh或者telnet服务器,可以在另一台电脑直接登陆自己的电脑,察看程序代码。一:安装ssh服务器1.安装ssh服务器端$ sudo apt-get install openssh-server2.启动ssh-server$ sudo /etc

2013-02-01 16:43:11 4243

原创 串口应用编程

为了便于通过程序来获得和修改终端参数,Linux还提供了tcgetattr函数和tcsetattr函数。tcgetattr用于获取终端的相关参数,而tcsetattr函数用于设置终端参数。这两个函数的具体信息如表6.2所示。表6.2   tcgetattr函数和tcsetattr函数头文件函数形式int tcgetattr(i

2013-01-31 20:03:18 1715

原创 aptitude命令软件状态标志含义

linux用aptitude来搜索所需要的软件包的包名。就像这样:Linux $ aptitude search qtp   ruby-qt4-webkit:i386            - QtWebKit bindings for the Ruby language  p   scim-bridge-client-qt           - IME server o

2013-01-30 18:27:24 1695

原创 最近编译qtopia4.4.3遇到的一个问题及解决方法

之前总结过qtopia的编译移植的步骤,并且写了一个自动编译脚本,能够实现一体化的编译和安装,今天又编译了一遍,发现在configure的过程中就出现了下面的错误:.filter_system /usr/bin/make clean 2>/dev/nullfilter_system /usr/bin/make compiling ../../../qt-extended-4.4.3

2013-01-30 16:36:58 1304 6

原创 LCD屏时序分析

对于LCD屏的时序,首先有必要理解几个定义:一般TFT型LCD时序图如下所示图1我们先来理解下面引脚有寄存器中相关参数的意义吧 外部引脚信号: VSYNC: 帧同步信号,表示扫描1帧的开始,一帧也就是LCD显示的一个画面。HSYNC: 行同步信号,表示扫描1行的开始。VDEN:数据使能信号。VD[23:0] : LCD像素数据输出端口。VCLK:

2013-01-29 20:00:47 10440 1

转载 linux内核input子系统分析

这几天为公司开发板编写了矩阵键盘驱动,还有之前编写的触摸屏驱动,都属于input设备,归于input子系统之下。因此从网上找文章学习了一下input子系统。其实编写驱动并不一定需要完全明白input子系统的实现,只要知道其向下提供给具体设备的接口如何使用就可以,input子系统是内核的逻辑,是在内核和驱动之间的一层封装。下面是从网上搜到的文章,记录以便以后在学习:L

2013-01-28 15:56:00 1560

ARMV7架构官方手册

ARMV7架构的官方datasheet,详细介绍armv7架构处理器的各个模块设计细节

2016-05-25

ARM体系架构详细的官方说明手册

ARM架构的官方说明手册,其中详细介绍了ARM处理器核各个模块的详细设计和原理,非常适合嵌入式工程师使用

2016-05-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除