- 博客(135)
- 资源 (24)
- 收藏
- 关注
原创 认识与应用声卡的“S/PDIF”接口
许多朋友都听说过S/PDIF接口,但它究竟是什么?有什么用处?恐怕许多朋友都并不了解。今天我们就简单对S/PDIF接口做一介绍,大家会发现,这真的是一项非常实用的技术。 初识S/PDIF接口 市面上许多好一点的声卡上都提供了S/PDIF接口,S/PDIF(Sony/Philips Digital InterFace:索尼和飞利浦数字接口的英文缩写)接口是由Sony与Philips公司联合
2012-12-30 16:37:02 7133
原创 Linux内核proc文件系统的冰山一角--源自对/proc/net/dev文件中各网卡参数的疑问
最近在调试网卡驱动时一直对/proc/net/dev 文件中各网卡参数是如何得来的有很大的疑问。insmod 以太网卡驱动后,cat /proc/net/dev 可以看到多了eth0的信息。开始,一直以为是驱动的代码调用某个写/proc文件的函数,从而把eth0的信息写到/proc/net/dev文件里。 可是反复看代码也没有发现相关的函数。今天突然想先拿/proc/interrupt 来分析
2012-12-30 15:46:42 841
原创 BUG: scheduling while atomic: swapper/0/0x00000100
BUG: scheduling while atomic: swapper/0/0x00000100 Modules linked in: iqs316
2012-12-28 14:06:39 1251
原创 信号集操作函数
一、信号集sigset_t 类型其实是个结构体,定义在 /usr/include/bits/sigset.h 头文件中:?1234typedef__sigset_t sigset_t typedefstruct { unsignedlongint __v
2012-12-28 09:10:18 1086
原创 select 和pselect的区别
/* According to POSIX 1003.1-2001 */ #include sys/select.h>/* According to earlier standards */ #include sys/time.h> #include sys/types.h> #include unistd.h>int select(int n, fd_set
2012-12-28 08:58:17 1191 1
原创 usb host驱动程序崩溃的问题
最近在调试一个usb主芯片,外接了四个devices.芯片->hub->4 devices.开机启动时,时好时坏.有时候能正常识别,有时候会崩溃掉.现象为:[ 468.495391] PC is at UBIRunIntIN0+0x378/0x5d0 [hcd903x]反汇编看代码总是崩溃在bulkin的数据接收上,一直没明白,以为是芯片驱动问题.后来经过仔细测试发现开机
2012-12-27 17:13:33 1950
原创 linux基础编程 套接字socket 完整的服务器端多线程socket程序
[cpp] view plaincopy#include #include #include #include #include #include #include #include #include #include #include #include #defi
2012-12-27 11:51:42 1179 2
原创 linux基础编程 链路层socket 摆脱winPcap 夸网段socket通信 可夸平台移植
在linux环境中要从链路层(MAC)直接收发数据帧,可以通过libpcap与libnet两个动态库来分别完成收与发的工作。虽然它已被广泛使用,但在要求进行跨平台移植的软件中使用就很难办到了。。这是一种更为直接地、无须安装其它库的从MAC层收发数据帧的方式,即通过定义链路层的套接字来完成。下面的代码也是我做的项目中的代码(夸网段访问网络中的嵌入式设备),去掉了敏感部分,和大家共享!
2012-12-27 11:51:01 803
原创 常见的makefile写法
1、目标名称,摆脱手动设置目标名称[cpp] view plaincopyTARGET = $(notdir $(CURDIR)) all:$(TARGET) CMD.... $(CURDIR) 表示Makfile当前目录全路径$(notdir $(path)) 表示把path目录去掉路径名,只留
2012-12-27 11:48:41 933
原创 linux基础编程 共享内存 通过消息队列实现同步 shmget
共享内存可以被描述成内存一个区域(段)的映射,这个区域可以被更多的进程所共享。这是IPC机制中最快的一种形式,因为它不需要中间环节,而是把信息直接从一个内存段映射到调用进程的地址空间。 一个段可以直接由一个进程创建,随后,可以有任意多的进程对其读和写。但是,一旦内存被共享之后,对共享内存的访问同步需要由其他 IPC 机制,例如消息队列来实现。包含文件1、msg.c2、msg
2012-12-27 11:46:02 1701
原创 linux基础编程 消息队列 msgsnd
实际上,消息队列常常保存在链表结构中。拥有权限的进程可以向消息队列中写入或读取消息。消息队列本身是异步的,它允许接收者在消息发送很长时间后再取回消息,这和大多数通信协议是不同的。例如WWW中使用的HTTP协议是同步的,因为客户端在发出请求后必须等待服务器回应。然而,很多情况下我们需要异步的通信协议。比如,一个进程通知另一个进程发生了一个事件,但不需要等待回应。但消息队列的异步特点,也造成了
2012-12-27 11:45:42 994
原创 linux基础编程 多线程同步 pthread_cond_signal
条件变量同步锁示例此例根据上一篇文章修改请包含上一篇中的两个文件(未做任何改动)1/ pthread_mutex.h2/ pthread_mutex.c上一篇的thread.c文件修改如下[cpp] view plaincopy/* 多线程同步示例,条件变量同步锁 */ #in
2012-12-27 11:45:13 736
原创 linux基础编程 多线程中的互斥锁 pthread_mutex_lock
pthread_mutex.h头文件[cpp] view plaincopy#ifndef __SEM_UTIL_H__ #define __SEM_UTIL_H__ typedef void* SemHandl_t; SemHandl_t MakeSem(); /// int SemRelease(S
2012-12-27 11:44:35 1057
原创 linux基础编程 多线程
linux线程[cpp] view plaincopy/* 演示linux线程的基本操作,高级用法请看程序下面转载的内容 */ #include #include #include #include #define __DEBUG #ifdef __DEBUG #d
2012-12-27 11:33:09 782
原创 调试中使用反汇编的方法
/usr/local/arm/arm-2009q1/bin/arm-none-linux-gnueabi-objdump -D obj/hcd.ko > hcd.asm
2012-12-26 17:21:16 643
原创 异步通知程序编写方法
一、 初始化应用程序: signal(SIGIO, &input_handler); fcntl(fd, F_SETOWN, getpid()); oflags = fcntl(fd, F_GETFL); fcntl(fd, F_SETFL, oflags
2012-12-26 16:08:12 432
原创 对象文件格式分析工具: objdump, nm,ar
前言如果普通编程不需要了解这些东西,如果想精确控制你的对象文件的格式或者你想查看一下文件对象里的内容以便作出某种判断,刚你可以看一下下面的工具:objdump, nm, ar。当然,本文不可能非常详细的说明它们的使用方法和功能。如果你觉得本文不够清楚,你可以使用:man. 我的计划只是想让更多的人了解这些工具,以后在今后 的编程过程中能有所帮助。操作系统: Linux开始
2012-12-26 13:46:50 537
原创 ohci之usb_submit_urb 一
2012-12-07 10:55 85人阅读 评论(0) 收藏 举报目录(?)[-]a 中断类型hub root endpointb 控制类型root hub endpoint usb控制器与usb设备之间是通过urb结构来传递数据,urb是usb通信基础。 驱动在使用urb之前要先通过usb_alloc_urb来创建
2012-12-26 11:12:05 1799
原创 linux下热插拔事件的产生是怎样通知到用户空间,kobject_uevent_env之uevent
2012-12-12 16:49 41人阅读 评论(0) 收藏 举报目录(?)[-]kobject ktype ksetuevent内核部分uevent用户空间部分uevent在设备驱动模型中的应用1.kobject, ktype, ksetkobject代表sysfs中的目录。ktype代表kobject的类型,主要
2012-12-26 11:11:00 716
原创 usb枚举流程图
2012-12-05 17:55 25人阅读 评论(0) 收藏 举报目录(?)[-]usb枚举过程流程图1. usb枚举过程流程图
2012-12-26 11:07:47 1615
原创 如何在局域网安装Redmine
如何在局域网安装Redmine 本文所用的软件有: ● Redmine 0.8.2: http://rubyforge.org/projects/redmine / ● InstantRails-2.0-win: http://rubyforge.org/projects/instantrails/ 本文介绍了如何在局域网的服务器上安装Redmin
2012-12-25 16:22:34 1683
原创 关于udelay(); mdelay(); ndelay(); msleep();
这几个函数都是内核的延时函数:1.udelay(); mdelay(); ndelay();实现的原理本质上都是忙等待,ndelay和mdelay都是通过udelay衍生出来的,我们使用这些函数的实现往往会碰到编译器的警告implicit declaration of function 'udelay',这往往是由于头文件的使用不当造成的。在include/asm-???/dela
2012-12-25 15:28:33 801
原创 linux的strace命令
strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。 下面记录几个常用 option . 1 -f -F选项告诉strace同时跟踪fork和vfork出来的进程 2 -o xxx.txt 输出到某个文件。 3
2012-12-25 15:08:25 439
原创 bug:scheduling while atomic
linux内核打印"BUG: scheduling while atomic"和"bad: scheduling from the idle thread"错误的时候,通常是在中断处理函数中调用了可以休眠的函数,如semaphore,mutex,sleep之类的可休眠的函数,而linux内核要求在中断处理的时候,不允许系统高度,不允许抢占,要等到中断处理完成才能做其他事情。因此,要充分考虑
2012-12-25 12:21:42 3002
原创 关于kmalloc、vmalloc及kmap
1、 kmalloc()是内核中最常见的内存分配方式,它最终调用伙伴系统的__get_free_pages()函数分配,根据传递给这个函数的flags参数,决定这个函数的分配适合什么场合,如果标志是GFP_KERNEL则仅仅可以用于进程上下文中,如果标志GFP_ATOMIC则可以用于中断上下文或者持有锁的代码段中。kmalloc返回的线形地址是直接映射的,而且用连续物理页满足分配请求,且内置
2012-12-25 11:54:44 791
原创 Linux常用内核态内存分配方式总结
Linux常用内核态内存分配方式总结一、 alloc_pages类此类函数主要包括:struct page * alloc_page(unsigned int gfp_mask)——分配一页物理内存并返回该页物理内存的page结构指针。struct page * alloc_pages(unsigned int gfp_mask, unsigned int
2012-12-25 11:54:08 580
原创 Linux内存线性地址空间布局解析
适用平台:i386 Linux内存线性地址空间大小为4GB,分为2个部分:用户空间部分(通常是3G)和内核空间部分(通常是1G)。在此我们主要关注内核地址空间部分。内核通过内核页全局目录来管理所有的物理内存,由于线形地址前3G空间为用户使用,内核页全局目录前768项(刚好3G)除0、1两项外全部为0,后256项(1G)用来管理所有的物理内存。内核页全局目录在编译时静态
2012-12-25 11:49:57 414
原创 HTTP POST GET 本质区别详解
一 原理区别 一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETEURL全称是资源描述符,我们可以这样认 为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POS
2012-12-24 19:34:05 454
原创 关于结构体和共用体
[cpp] view plaincopy#include union { int i; char x[2]; }a; void main() { a.x[0] = 10; a.x[1] = 1; printf("%d",a.i); } 答案:266 x86的机器,小端字节
2012-12-24 15:22:34 460
原创 u-boot中fdt命令的使用
依linux community的要求,从linux-3.5后,新提交的code必须对device tree进行支持。下面介绍如何使u-boot支持device tree,以及fdt命令的使用。1. u-boot对fdt(flattened device tree)的支持。实现:只要加入#define CONFIG_OF_LIBFDT /
2012-12-21 15:30:34 2220
原创 Linux USB subsystem --- USB create HCD
目的:对USB作深入学习,在此留下笔记。欢迎讨论。[Linux-3.2][drivers/usb/core/hcd.c]函数:usb_create_hcd(const struct hc_driver *driver, struct device *dev, const char *bus_name)其中hc_driver是ehci_atmel_hc_drive
2012-12-21 15:29:40 1869 1
原创 神奇的platform_get_resource函数
阅读platformdriver的代码时,发现在probe函数直接调用platform_get_resource从pdev中获取io内存,但却没有判断传给probe的pdev是否属于这个驱动 !后来发现原来在arch目录下的对应目录里面有个devs.c文件(这个文件可能因不同的架构而不一样),这个文件里面声明了一个platform设备的资源数组foo_devices,原型如下:st
2012-12-21 15:21:29 7630
原创 Linux 调优方案, 修改最大连接数(ulimit命令)
Linux对于每个用户,系统限制其最大进程数。为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数可以用ulimit -a 来显示当前的各种用户进程限制。下面我把某linux用户的最大进程数设为10000个:ulimit -u 10240对于需要做许多 socket 连接并使它们处于打开状态的 Java 应用程序而言,最好通过使用 ulimit -n xx
2012-12-21 13:03:53 2329
原创 linux ar命令
当我们的程序中有经常使用的模块,而且这种模块在其他程序中也会用到,这时按照软件重用的思想,我们应该将它们生成库,使得以后编程可以减少开发代码量。这里介绍命令ar,用来对库操作。 1.ar基本用法 ar命令可以用来创建、修改库,也可以从库中提出单个模块。库是一单独的文件,里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member)。原始文件的内容、模式、时间戳、属主、组等
2012-12-20 15:14:39 352
原创 YCbCr与YUV的区别
正如几何上用坐标空间来描述坐标集合, 色彩空间用数学方式来描述颜色集合。常见的3 个基本色彩模型是RGB ,CMYK和YUV。 YCbCr 则是在世界数字组织视频标准研制过程中作为ITU - R BT1601 建议的一部分, 其实是YUV经过缩放和偏移的翻版。其中Y与YUV 中的Y含义一致, Cb , Cr 同样都指色彩, 只是在表示方法上不同而已。在YUV家族中, YCbCr 是在计算
2012-12-20 14:57:03 1529
原创 linux驱动开发之信号量与自旋锁
在驱动程序中,当多个线程同时访问相同的资源时(驱动程序中的全局变量是一种典型的共享资源),可能会引发"竞态",因此我们必须对共享资源进行并发控制。Linux内核中解决并发控制的最常用方法是自旋锁与信号量(绝大多数时候作为互斥锁使用)。自旋锁与信号量"类似而不类",类似说的是它们功能上的相似性,"不类"指代它们在本质和实现机理上完全不一样,不属于一类。自旋锁不会引起调用者睡眠,如果自旋锁
2012-12-20 13:51:54 551
原创 git 恢复单个文件的历史版本
首先查看该文件的历史版本信息:git log Default@2x.png记录下需要恢复的commit版本号:如 9aa51d89799716aa68cff3f30c26f8815408e926恢复该文件:git reset 9aa51d89799716aa68cff3f30c26f8815408e926 Default@2x.png提交git:git commit -m
2012-12-20 13:11:38 2875
原创 内核模块相关命令:lsmod,depmod,modprob...
lsmod 查看模块depmod 分析模块依赖性modprobe 载入模块 rmmod 删除模块modinfo 显示模块信息lsmod功能:列出内核已载入模块的状态用法:lsmod描述: lsmod 以美观的方式列出/proc/modules的内容。 输出为: Module(模块名) Size
2012-12-20 11:52:17 589
原创 ubuntu 12.04 eclipse 编辑器颜色配置
默认的提示框是黑色底色的,代码编辑器背景色是白色的,伤眼。。。。搞了半天,发现通过eclipse自带的配置无法修改,故参考了一部份网上资料,发现要通过配置修改系统的主题才可以。设置界面system settings ---->appearance默认主题:Ambiance修改配置文件,路径:/usr/share/themes/Ambiance/gtk-2
2012-12-20 11:44:44 588
原创 中断处理例程返回值的作用?
中断处理函数应该返回一个值,用来指明是否真正处理了一个中断.如果处理例程发现其设备的确需要处理,则应该返回IRQ_HANDLED,否则,返回值应该是IRQ_NONE.
2012-12-20 11:02:09 659
wifi_p2p_technical_specification_v1.1_content.
2014-03-12
Wi-Fi_Display_Technical_Specification_v1.0.0
2014-03-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人