摘要:1. USB协议 1.1 USB主机系统 在USB主机系统中,通过根集线器与外部USB从机设备相连的处理芯片,称为USB主机控制器。USB主机控制器包含硬件、软件和固件一部分。 1.2 USB设备系统 USB设备按功能分为两部分:集线器(Hub)和功能部件。从下图可知,主机通过根集线器连接到各种外围
阅读全文
摘要:1 Video Class 基础概念Usb协议中,除了通用的软硬件电气接口规范等,还包含了各种各样的Class协议,用来为不同的功能定义各自的标准接口和具体的总线上的数据交互格式和内容。这些Class协议的数量非常多,最常见的比如支持U盘功能的Mass Storage Class,以及通用的数据交换
阅读全文
摘要:上转博文《TI-Davinci开发系列之五CCS5.2使用gdbserver远程调试应用程序》使用CCS5.2远程调试内核时,只需导入Linux内核源码,而不需要编译内核,也就不会用到交叉编译链,同时不需要使用gdbserver,但需要仿真器XDS560V2,所以Windows和Linux都可以完成...
阅读全文
摘要:多核CPU运行模式主要有以下三种: •非对称多处理(Asymmetric multiprocessing,AMP)——每个CPU内核运行一个独立的操作系统或同一操作系统的独立实例(instantiation)。 •对称多处理(Symmetric multiprocessing,SMP)——一个操...
阅读全文
摘要:相对于linux来说,udev还是一个新事物。然而,尽管它03年才出现,尽管它很低调(J),但它无疑已经成为linux下不可或缺的组件了。udev是什么?它是如何实现的?最近研究Linux设备管理时,花了一些时间去研究udev的实现。 udev是什么?u 是指user space,dev是...
阅读全文
摘要:内核中提供了USB设备文件系统(usbdevfs,Linux 2.6改为usbfs,即USB文件系统),它和/proc类似,都是动态产生的。通过在/etc/fstab文件中添加如下一行:none /proc/bus/usb usbfs defaults或者输入命令:mount -t usbfs no...
阅读全文
摘要:usb驱动分为通过usbfs操作设备的用户空间驱动,内核空间的内核驱动。两者不能同时进行,否则容易引发对共享资源访问的问题,死锁!使用了内核驱动,就不能在usbfs里驱动该设备。 下面转载的一篇分析usb-skeleton.c文章。 初次接触与OS相关的设备驱动编写,感觉还挺有意思的,为了不...
阅读全文
摘要:U-boot会给Linux Kernel传递很多参数,如:串口,RAM,videofb等。而Linux kernel也会读取和处理这些参数。两者之间通过struct tag来传递参数。U-boot把要传递给kernel的东西保存在struct tag数据结构中,启动kernel时,把这个结构体的物理...
阅读全文
摘要:一、USB协议基础知识前序:USB概念概述 USB1.0版本速度1.5Mbps(低速USB) USB1.1版本速度12Mbps(全速USB) USB2.0版本速度480Mbps(高速USB)。 USB 分为主从两大体系,一般而言, PC 中的 USB 系统就是作主,而一般的 USB 鼠标, U ...
阅读全文
摘要:一、Linux Security Modules Linux Security Modules (LSM) 是一种 Linux 内核子系统,旨在将内核以模块形式集成到各种安全模块中。在 2001 年的 Linux Kernel 峰会上,NSA 代表建议在 Linux 内核版本 2.5 中包含强制控...
阅读全文
摘要:2005 年 7 月 01 日本文详细地介绍了 Linux 2.6 内核中新的锁机制 RCU(Read-Copy Update) 的实现机制,使用要求与典型应用。一、引言众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一...
阅读全文
摘要:内核版本:2.6.37参考[作者:kendo的文章(基于内涵版本2.6.12)]第一部份 Socket套接字的创建socket 并不是 TCP/IP协议的一部份。 从广义上来讲,socket 是Unix/Linux 抽像的进程间通讯的一种方法。网络 socket 通讯仅仅是其若干协议中的一类。而tc...
阅读全文
摘要:本质上,Ext3 mount的过程实际上是inode被替代的过程。例如,/dev/sdb块设备被mount到/mnt/alan目录。命令:mount -t ext3 /dev/sdb /mnt/alan。那么mount这个过程所需要解决的问题就是将/mnt/alan的dentry目录项所指向的ino...
阅读全文
摘要:linux下Ramdisk驱动1 什么是RamdiskRamdisk是一种模拟磁盘,其数据实际上是存储在RAM中,它使用一部分内存空间来模拟出一个磁盘设备,并以块设备的方式来组织和访问这片内存。对于用户来说可以把Ramdisk与通常的硬盘分区同等对待来使用。那些经常被访问、并且不会被更改的文件,可以...
阅读全文
摘要:1、块设备的I/O操作特点字符设备与块设备的区别: 块设备只能以块为单位接受输入和返回输出,而字符设备则以字符为单位。 块设备对于I/O请求有对应的缓冲区,因此它们可以选择以什么顺序进行响应,字符设备无需缓冲区且直接被读写。 字符设备只能被顺序读写,而块设备可以随机读写。 但是对于磁盘等机械...
阅读全文
摘要:一、SD/MMC/SDIO概念区分SD(SecureDigital)与MMC(MultimediaCard)SD是一种flash memory card的标准,也就是一般常见的SD记忆卡,而MMC则是较早的一种记忆卡标准,目前已经被SD标准所取代。在维基百科上有相当详细的SD/MMC规格说明:[ht...
阅读全文
摘要:Linux系统通过向内核发出系统调用(system call)实现了用户态进程和硬件设备之间的大部分接口。系统调用是操作系统提供的服务,用户程序通过各种系统调用,来引用内核提供的各种服务,系统调用的执行让用户程序陷入内核,该陷入动作由swi软中断完成。1、用户可以通过两种方式使用系统调用:第一种方式是通过C库函数,包括系统调用在C库中的封装函数和其他普通函数。第二种方式是使用_syscall宏。2.6.18版本之前的内核,在include/asm-i386/unistd.h文件中定义有7个_syscall宏,分别是:_syscall0(type,name) _syscall1(type,na.
阅读全文
摘要:目录[-]一 调试前的准备二 内核中的bug三 内核调试配置选项1 内核配置2 调试原子操作四 引发bug并打印信息1 BUG()和BUG_ON()2 dump_stack()五 printk()1 printk函数的健壮性2 printk函数脆弱之处3 LOG等级4 记录缓冲区5 syslogd/klogd6 dmesg7 注意8 内核printk和日志系统的总体结构9 动态调试六 内存调试工具1 MEMWATCH2 YAMD3 Electric Fence七 strace八 OOPS1 ksymoops2 kallsyms3 Kdump九 KGDB1 kgdb的调试原理2 Kgdb的安装与
阅读全文
摘要:编写基于V4L2视频驱动主要涉及到以下几个知识点:1> 摄像头方面的知识 要了解选用的摄像头的特性,包括访问控制方法、各种参数的配置方法、信号输出类型等。2> Camera解码器、控制器 如果摄像头是模拟量输出的,要熟悉解码器的配置。最后数字视频信号进入camera控制器后,还要熟悉camera...
阅读全文
摘要:4 总线驱动4.1 概述I2C总线驱动是I2C适配器的软件实现,提供I2C适配器与从设备间完成数据通信的能力,比如起始,停止,应答信号和master_xfer的实现函数。I2C总线驱动由i2c_adapter和i2c_algorithm来描述4.2DM8168 I2C控制器的硬件描述DM8168处理...
阅读全文