- 博客(41)
- 资源 (12)
- 收藏
- 关注
原创 USB包格式解析
本文对应usb2.0协议的第八章Protocol Layer。 数据是由二进制数字串构成的,首先数字串构成域(有七种),域再构成包,包再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、并行传输、批量传输和控制传输)。 (一)域:是USB数据最小的单位,由若干位组成(至于是多少位由具体的域决定),域可分为七个类型: 1、同步域(SYNC),是用来告诉USB的串行
2017-09-08 17:05:15
9551
原创 usb驱动开发之USB协议枚举过程详解
本文把usb的枚举过程通过文字、程序和图形三种形式描述出来,并形成对照。一 枚举过程之文字描述 •主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察。(集线器端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个设备在D+都有一个1.5kΩ的上拉电阻。当用USB线将PC和设备接通后,设备的上拉电阻使信号线的电位升高,因此被主机集线器检测到。) • 连接
2017-09-08 09:30:34
5345
转载 ARM平台下独占访问指令LDREX和STREX的原理与使用详解
http://blog.youkuaiyun.com/roland_sun/article/details/47670099为了实现线程间同步,一般都要在执行关键代码段之前加互斥(Mutex)锁,且在执行完关键代码段之后解锁。为了实现所谓的互斥锁的概念,一般都需要所在平台提供支持。本文主要用来说明ARM平台上特有的独占访问指令LDREX和STREX的工作原理,以及如何使用。而它们也是ARM平台上,
2016-12-29 11:06:50
2575
原创 AM3359多路串口支持
AM3359共支持6路串口,我目前测试了前5路都是通的,第6路留作它用了,没有测试。配置只要涉及三个部分: 1 引脚配置 把对应引脚配成串口引脚。这里要注意在你的文件里查找,确认这个引脚没有被配成其它功能,否则的话使用的是最后被配置的功能,导致串口不通。 2 时钟模块使能 uart1-uart5使用的是L4HS提供的时钟,所以确保CM_PER_L4HS_CLKCTRL,
2016-08-09 13:58:34
1533
转载 linux kernel对于浮点运算的支持
linux kernel对于浮点运算的支持(转)http://blog.youkuaiyun.com/skyflying2012/article/details/45113193目前大多数CPU都支持浮点运算单元FPU,FPU作为一个单独的协处理器放置在处理器核外,但是对于嵌入式处理器,浮点运算本来就少用,有些嵌入式处理器就会去掉浮点协处理器。X86处理器一般都是有FPU的
2016-08-01 16:44:21
820
原创 韦东山虚拟摄像头驱动在ubuntu12.04上的修改与测试
第一部分 vivi测试视频上用的是ubuntu9.10,版本太老,已无法在线安装程序。因此现在用ubuntu12.04做测试。测试要求:安装虚拟摄像头驱动和安装xawtv测试程序视频上是把/drivers/media/video目录取出,修改Makefile,然后安装vivi.ko。由于ubuntu12.04上已经有编译好的模块,模块路径在/lib/modules/3.2.0-23
2014-12-31 11:10:41
2519
原创 DECLARE_WAIT_QUEUE_HEAD(name)使用(linux3.1.0)
目标:初始化一个摄像头等待队列头cam_wait_queue实现:static DECLARE_WAIT_QUEUE_HEAD(cam_wait_queue)使用:wait_event_interruptible(cam_wait_queue,ev_cam);wait_up_interuptible(&cam_wait_queue);解释:include/linux/wait
2014-12-26 11:36:33
1864
原创 gdb7.4安装
以前在ubuntu9.10上安装过gdb,可以使用。现在把交叉编译工具从版本从3.4.5升级到arm-linux-gcc4.3.2后,gdb在arm板上用不起来,uImage新系统是4.3.2编译出来的。由于gdb是用交叉编译工具编译出来的,故可能是这个原因。现在记录下整个过程。由于我之前已经安装过,所以有些需要预安装的工具已经安装好了,否则在编译的时候会出错。具体我也不记得了,复
2014-12-24 14:01:57
1272
原创 Ubuntu12.04 samba服务器搭建
1. 准备工作ifconfig –a 查看当前ip和主机是否是同一段,同一段的话ping看能否ping通;运行services.ms,Workstation必须开启,用于维护远程客户端的连接,否则将出现如下错误。2. ubuntu 12.04已经安装了最新版本的samba服务器,无需安装。如果使用12.04以前的版本,最好是按下边的方法升级一下samba,12.04版
2014-12-23 17:05:26
808
原创 make uImage-uImage生成过程
今天微博上看到宋宝华发的一张图,看着不错,保留了下来。0 最顶层的vmlinux是如何生成的?依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息、符号表的最初的内核,我用linux3.4.2编译出来有45M; arm-linux-gnu-ld -EL -p --no-un
2014-12-23 14:05:26
2128
原创 linux3.4.2内核编译、加载、yaffs2挂载问题汇总
1 移植linux3.4.2内核,编译出现错误:cc1: error: invalid option 'abi=aapcs-linux' 出现错误原因:编译器的解决:(1)换编译器,如arm-linux-gcc-4.3.2,包含arm-none -linux-gnueabi-gcc(2)make menuconfig 去掉Kernel Features->Us
2014-12-22 15:36:10
1545
转载 Kernel panic - not syncing: No init found. Try passing init= option to kernel
kernel panic - not syncing: No init found. Try passing init= option to kernel.这类问题很常见,先总体介绍一下解决思路。能出现让人激动的的控制台,那么系统移植已经接近完成;但是不少人在最后一步出现问题。要点如下:1. 在正确的位置烧写正确格式的文件系统映象:2. 内核支持这
2014-12-19 17:46:43
29320
4
转载 Ubuntu12.04 搭建TFTP服务
Ubuntu12.04 搭建TFTP服务TFTP协议是简单文件传输协议,基于UDP协议,没有文件管理、用户控制功能。TFTP分为服务器端程序和客户端程序,在主机上通常同时配置有TFTP服务端和客户端。默认安装的Ubuntu系统没有包含TFTP的服务端和客户端,可以通过命令行来下载安装,步骤如下:(1)安装客户端。root@xiaozhu-laptop:~# apt-get
2014-12-18 20:59:58
461
原创 ubuntu 9.04 tftp配置
如果主机已经安装了tftp服务,忘了如何使用,这里记录一下。ubuntu9.10 openbsd-inetd管理tftp服务,高版本的可用xinetd查看本机tftp路径打开配置文件 /etc/inetd.conf 最后一项/tftp就是设置路径,可以任意修改。设置完成后,使tftp服务生效/etc/init.d/openbsd-inetd restart 当
2014-12-18 20:32:07
449
原创 diff制作补丁和patch打补丁
1 制作补丁制作补丁使用diff命令假设源文件为/wx/srcdir_bak目标文件为/tmp/new1/new2/srcdir目标文件是在源文件基础上的更新,更新之后想产生一个补丁文件。所谓补丁文件,就是记录下这两个文件的异同。补丁文件作用:升级和备份。如果源文件是一个linux内核标准源码,可以在内核网站上下载,开发一定到阶段有某一稳定版本之后,我们想做个备份为V1
2014-12-16 17:38:10
659
原创 socket测试-get host name error和/etc/hosts配置
在socket网络编程测试中,两个文件tcp_sercer.c 和 tcp_client.c编译gcc tcp_server .c -o tcp_servergcc tcp_client .c -o tcp_client 运行服务器 ./tcp_server运行客户端 ./tcp_client bookbook是主机名 查看主机名#hostnameb
2014-12-05 15:42:32
1535
转载 __attribute__((weak))
__attribute__((weak))情况是这样的,碰到一个棘手的问题:我们不确定外部模块是否提供一个函数func,但是我们不得不用这个函数,即自己模块的代码必须用到func函数:extern int func(void);...................int a = func();if( a > .....){.......
2014-12-05 09:36:57
595
原创 linux内核中的xx_initcall和module_init实现机制(linux3.1.0)
在内核代码中,arch_initcall 、device_initcall、module_init等经常遇到,本文分析其实现机制。1 include/linux/init.h 下的相关定义#ifndef MODULE#define pure_initcall(fn) __define_initcall("0",fn,0)#define core_initcall(fn) __def
2014-11-29 17:53:20
881
原创 MACHINE_START-内核板级初始化实现机制(linux3.1.0)
在驱动开发时,我们都是以一块开发板为基础移植驱动程序。每一块开发板对应一个板级文件,如开发TI AM335x系列,则对应board-am335xevm.c,这个文件完成芯片和板级的初始化工作。对于驱动开发,还有一个很重要的文件devices.c,这个文件主要是设备接口相关资源。今天就来说说board-am335xevm.c文件,如何全面的了解这个文件呢?先找到这个文件的入口,在文件的
2014-11-26 17:03:37
4646
原创 linux3.1.0内核中/include/generated下mach-types.h的产生
/arch/arm/tools下面有三个文件,Makefile gen-amch-types mach-types。其中mach-types存放的就是板级信息,通过Makefile和 gen-amch-types文件,把这些板级信息重新生成一个文件include/generated/mach-types.h。看一个目录,从Makefile入手:include/generate
2014-11-25 15:59:15
2754
原创 linux内核常用的内存申请函数
驱动程序中常用到内核空间的内存申请函数kmalloc和kzallockmalloc(size_t s,gfp_t flags)data=kmalloc(datasize,GFP_KERNEL)void *memset(void *s,int c,size_t count)memset(data,0,datasize)data=kzalloc(datasize,G
2014-11-21 16:11:39
1392
原创 高速缓冲区中的b_uptodate和b_dirt
struct buffer_head{ char *b_data; /* pointer to data block (1024 bytes) *///指针。 unsigned long b_blocknr; /* block number */// 块号。 unsigned short b_dev; /* device (0 = free) */// 数据源的设备号。 u
2014-08-07 11:05:18
1622
转载 内存分配——静态存储区 栈 堆
一、内存基本构成 可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于
2014-07-11 15:24:12
571
原创 字符的编码方式 ASCII 、GBK 、UTF-8 、Unicode 、Unicode big endian
字符的编码方式很多种 ,我们常用到的是ASCII 、GBK 、UTF-8 、Unicode 、Unicode big endian等。想查看的话,可以用记事本打开新建一个txt文档,里面输入字符或汉字,然后用UltraEdit打开,按CTRL+h,即可查看字符的编码值。对于英文字符,ASCII编码方式就可以全部表示,只需要0-127这128个编码值。所以ASCII编码值小于0x80,
2014-07-09 18:13:59
1683
原创 Linux驱动和应用程序的开机自启动
相信大家都在shell命令行里通过敲指令加载过驱动和应用程序,但是如果每次开机都要重新敲一遍这些加载指令的话那太麻烦了,肯定有方法使其可以开机自动启动的。既然shell可以解析命令行,那我们把这些命令行放到一个文件里,开机启动的时候让shell去解析这个文件,然后去执行不就行了。 你一定有印象在uboot中的bootargs中一般会有init=/linuxrc,这个参数传递给内核后
2014-06-24 09:24:06
901
原创 waitstatus、active、unactive 、asserted、 de-asserted 应用和释义
0 WAIT0 asserted(inactive state)1 WAIT0 de-asserted 这里遇到了asserted和de-asserted ,asserted表示插入有效状态,假设wait0是高电平有效,则asserted就是插入1,低电平有效的话asserted就是0。所以asserted=active。wait0的高电平有效
2014-06-13 18:08:48
4142
原创 Windows、Linux、VxWorks中一个网口绑定多个IP的方法
在Windows下,我们可以通过打开“本地连接”的属性,在internet协议的属性中配置IP地址、网关、掩码等,而在这里还有一个“高级”的功能。 点击internet属性右下角的“高级”按钮进入高级配置界面,可以在此处给本地连接再添加IP地址和网关,这些IP地址可以跟之前在internet属性中配置的IP地址不同网段,这样别人就可以通过不同的IP地址去访问你的电脑,你的电脑也能被
2014-06-09 16:15:48
6444
转载 i2c驱动架构 davinc dm368 i2c驱动分析
linux驱动学习(八) i2c驱动架构(史上最全) davinc dm368 i2c驱动分析分类: linux驱动程序2012-10-22 15:47 4665人阅读 评论(7) 收藏 举报目录(?)[+]预备知识在阅读本文最好先熟悉一种i2c设备的驱动程序,并且浏览一下i2c-core.c以及芯片提供商的提供的i2c总线驱动(i2c-da
2014-04-30 14:29:03
553
ubuntu12.04 samba配置文件
2014-06-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人