自定义博客皮肤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)
  • 收藏
  • 关注

转载 USB枚举过程分析

1. 枚举是什么?       枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。调试USB设备,很重要的一点就是USB的枚举过程,只要枚举成功了,那么就已经成功大半了。       USB架构中, hub负责检测设备的连接和断开,利用其中断IN端点(Interrupt IN Endpoint)来向主机(Host)报告

2014-12-13 22:31:42 6757 2

原创 linux kernel的cmdline参数解析原理分析

依据我的思路(时间顺序,如何开始,如何结束),首先看kernel下2种参数的注册。第一种是kernel通用参数,如console=ttyS0,115200 root=/rdinit/init等。这里以console为例。第二种是kernel下各个driver中需要的参数,在写driver中,如果需要一些启动时可变参数。可以在driver最后加入module_param()来注册一个参数,kernel启动时由cmdline指定该参数的值。这里以drivers/usb/gadget/serial.c中

2014-11-15 09:43:30 49223 3

原创 udp编程的学习

后来网上查阅TCP的协议,发现应该是TCP的握手信号导致这个问题,TCP是传输控制协议,协议内会保证数据的正确性,所以每次的数据发送都会等待接收端的ACK。而被动退出(拔掉网线),接收端根本没有回复,server端就会反复发送之前没有ACK 的数据,导致write阻塞。

2014-10-22 22:45:21 2132

原创 MAC地址格式小结

mac地址对于每块网卡是固定的,每块网卡被生产出来后,都会有一个全球唯一的编号来标识自己,不会重复,这个编号就是MAC地址,也就是网卡的物理地址。MAC地址是由48位的二进制数组成,即6个字节。在通信中是用16进制表示的。前24位是由生产厂家向IEEE标准组织申请的厂家代码,是固定的

2014-10-20 22:35:35 54680 1

原创 vim编码方式配置的学习和思考

从打开一个已有文件的过程来看这3个参数的区别,首先vim或利用fencs列表去匹配解码文件,正确解码后就设置fenc为当前解码格式,解码完成呢,接着会做一个转码,将文件转为enc所指的编码格式来显示出来。这就是这3个配置参数的作用

2014-09-30 16:20:41 4276 1

原创 socket中的SIGPIPE信号问题

网上查资料,找到原因,网络连接socket建立后,若某一端关闭连接,而另一端仍然向它写数据,第一次写数据后会收到RST响应,此后再写数据,kernel将向进程发出SIGPIPE信号,通知进程此连接已经断开。而SIGPIPE信号的默认处理是终止程序,导致上述问题的发生!

2014-09-22 14:33:56 8834

原创 流编辑器sed使用总结及利用sed从文本中提取字符串的方法

sed 是一个编辑器,但它与其它大多数编辑器不同。除了不面向屏幕之外,它还是非交互式的,我们常用的vim编辑器则是交互式的。这意味着必须将要对数据执行的命令插入到命令行或要处 理的脚本中。sed 在一个文件(或文件集)中非交互式、并且不加询问地接收一系列的命令并执行它们。因而,它流经文本就如同水流经溪流一样,因而 sed 恰当地代表了流编辑器,可以对文件或者文件集批量的进行删除 替换 插入 追

2014-09-21 11:49:58 47797

原创 阿里梦,我的梦

阿里的上市,在资本家眼中是利益,是圈钱,是套现,但是在我的眼中却只是看到了马云长达15年的史诗级屌丝逆袭之战

2014-09-20 01:37:34 2633 1

转载 open的O_DIRECT选项

#define _FILE_OFFSET_BITS 64 //访问大磁盘#define _GNU_SOURCE //定义O_DIRECT#i nclude  open的O_DIRECT选项- -                                      一个客户的技术支持。问题的背景是他们希望系统掉电时,损失最小。而用O_

2014-09-03 14:58:20 3798

原创 uboot环境变量实现分析

uboot中env的整个架构可以分为3层:(1) 命令层,如saveenv,setenv editenv这些命令的实现,还有如启动时调用的env_relocate函数。(2) 中间封装层,利用不同静态存储器特性封装出命令层需要使用的一些通用函数,如env_init,env_relocate_spec,saveenv这些函数。实现文件在common/env_xxx.c(3) 驱动层,实现不同静态存储器的读写擦等操作,这些是uboot下不同子系统都必须的。

2014-09-02 14:30:24 23287 3

转载 ubuntu安装JDK6方法

Ubuntu安装JDK6和JDK5在安装android on openwrt是出现错误:build/core/config.mk:271: *** Error: could not find jdk tools.jar, please install JDK6, which you can download from java.sun.com. Stop.需要安装JDK

2014-08-12 17:20:37 1991

原创 C语言可变参数宏定义方法

在GNU C中,宏可以接受可变数目的参数,就象函数一样,例如: 12#define pr_debug(fmt,arg...) \ printk(KERN_DEBUG fmt, ##arg)用可变参数宏(variadic macros)传递可变参数表 你可能很熟悉在函数中使用可变参

2014-08-08 11:21:17 23751 2

转载 虚拟网卡与loopback的思想

在linux上卸载了loopback网卡设备之后,本地地址全部不通,这是不应该的吗?所有的本地网卡在配置ip地址的时候会调用fib_add_ifaddr函数:void fib_add_ifaddr(struct in_ifaddr *ifa){...    fib_magic(RTM_NEWROUTE, RTN_LOCAL, addr, 32, prim);//如此一来,加入一

2014-07-22 16:32:18 3181

转载 termial创建时ptmx与pts的关系

我们打开一个terminal,那么将会在devpts文件系统/dev/pts下创建一个对应的pts字符文件,该pts字符文件节点直接由/dev/ptmx节点的驱动函数ptmx_open()调用devpts_pty_new(tty->link)[tty对应ptmx,tty->link对应/dev/pts/xxx,那么tty->link->link又对应回ptmx同样ptm_drive

2014-07-22 16:06:48 1801

转载 B或BL跳转时地址的计算方法

1.text2.global _start3_start:4 b step15 step1:6 ldr pc, =step27 step2:8 b step2反汇编代码:0: eaffffff b 0x44: e59ff000 ldr pc, [pc, #0] ; 0xc8: eafffffe

2014-07-10 18:44:04 3033

原创 ARM过程调用标准---APCS简介

介绍APCS,ARM 过程调用标准(ARM Procedure Call Standard),提供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交织在一起。最显著的一点是对这些例程来自哪里没有明确的限制。它们可以编译自 C、 Pascal、也可以是用汇编语言写成的。APCS 定义了:对寄存器使用的限制。使用栈的惯例。在函数调用之间传递/返回参数。可以被‘回溯’的基

2014-07-07 14:27:57 6740 1

原创 uboot向kernel的传参机制——bootm与tags

uboot如何启动kernel以及uboot与kernel之间的传参机制详解

2014-07-04 15:27:32 36206 10

原创 uboot中raise:Signal #8 caught的根本原因

在移植uboot时编译一切正常,但uboot启动中加载自己写的网卡驱动出现问题,一直在打印raise:Signal #8 caughtgoogle  百度了一番,也有很多人遇到了这个问题,大家都说出了解决问题的办法,就是自己编写的驱动中有出现除以0的误操作,就会一直打印raise:Signal #8 caught将除操作改为位移操作,或者避免除数为0,就可以解决这个问题。那为什么有

2014-07-02 15:42:37 6423

原创 ARM工具链的eabi规范

EABI(Embedded Application Binary Interface),嵌入式应用程序二进制接口。 ABI的定义ABI描述应用程序与操作系统、应用程序与库、应用程序的组成部分之间的低层接口。ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。 EABI的具体定义Codesourcery上有一个这样的QA:https://support.c

2014-06-30 16:36:41 2408

转载 linux kernel编译生成zImage过程详解

可以看到,在顶层makefile的第278行,包含了scripts/Kbuild.include文件,在这里定义了大量的函数和变量,供顶层makefile和其他makefile文件使用。   在顶层makefile文件的第412行,包含了arch/arm/Makefile。这个是体系结构相关makefile文件。它定义了体系结构相关的一些变量及规则。   当执行”make”时,ar

2014-06-27 10:35:07 10556

原创 kernel编译生成Image zImage uImage的区别

内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。     那么uImage又是什么的?它是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区

2014-06-27 10:28:21 21304 3

转载 tftp协议的实现

一、tftp协议介绍 TFTP是一个传输文件的简单协议,它其于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的 时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中 有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这

2014-06-25 10:09:59 4988

转载 uboot环境变量解析

(基于smdk2410) 1.相关文件 common/env_common.c 供u-boot 调用的通用函数接口,它们隐藏了env 的不同实现方式,比如dataflash, epprom, flash 等 common/env_dataflash.c env 存储在dataflash 中的实现 common/env_epprom.c env 存储在

2014-06-14 10:51:49 4225

转载 以太网帧格式

局域网包括:以太网、令牌环、光纤分布式数据接口FDDI。     IP数据报必须用数据链路层的报文和报尾封装后才能在物理媒介上发送。数据链路层的报文和报尾提供以下服务:   1. 定界 帧彼此分开。每个帧的开始和结束位置被标出,其有效负载也与报头报尾分开。   2. 协议识别 许多组织使用不同协议套件,如TCP/IP,IPX或AppleTalk,每种协议必须区分开。   3.

2014-06-10 11:10:09 25414 2

转载 linux下操作大于2G文件

1、包含所有头文件以前,先定义这些宏:#ifndef __USE_FILE_OFFSET64#define __USE_FILE_OFFSET64#endif#ifndef __USE_LARGEFILE64#define __USE_LARGEFILE64#endif#ifndef _LARGEFILE64_SOURCE#define _LARGEFILE

2014-05-19 10:59:09 4669

转载 ARM CP15协处理器说明

访问CP15寄存器指令的编码格式及语法说明如下:31  2827  2423  212019  1615  1211  87  543  0cond1 1 1 0opcode_1Lcr nrd

2014-05-14 18:29:08 11738

原创 linux线程资源回收方法

Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的。而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出,则最终线程资源耗尽,进程将不再能建立新的线程。解决这个问题,有2种方式,系统自动释放线程资源,或者由另一个线程释放该线程资源。注意,在这里,我认为进程运行后,本身,也是一个线程,主线

2014-04-28 17:25:50 13118 6

原创 X86_64机器编译32位程序

64位ubuntu安装兼容包后可以正常运行32位程序,现在编译自己写的程序

2014-04-28 14:42:27 4996

原创 github初体验

作为一个内核工程师,github的大名一、创建github账号github是一个类似sf的免费项目管理及分享的服务平台,要想使用github提供的服务,你必须先注册成为github注册用户。github的网址是:https://github.com帐号注册成功后,点击New Repository,开始创建新版本库。用户可以创建类似于 your_userid.github.com

2014-04-15 14:57:02 1235

转载 repo使用简介

1 repo介绍Android 使用 Git 作为代码管理工具,开发了 Gerrit 进行代码审核以便更好的对代码进行集中式管理,还开发了 Repo 命令行工具,对 Git 部分命令封装,将百多个 Git 库有效的进行组织。1.1    清单库文件介绍一个清单库可以包含多个清单文件和多个分支,每个清单文件和分支都有对应的版本。清单文件以xml格式组织的。举个例子:Ø

2014-04-15 10:36:20 34374

转载 makefile中的自动化变量

makefile中的自动化变量$@,$%,$ 自动化变量 模式规则中,规则的目标和依赖文件名代表了一类文件名;规则的命令是对所有这一类文件重建过程的描述,显然,在命令中不能出现具体的文件名,否则模式规则失去意义。那么在模式规则的命令行中该如何表示文件,将是本小节的讨论的重点。 假如你需要书写一个将.c 文件编译到.o 文件的模式规则,那么你该如何为g

2014-04-14 14:27:18 1278

转载 Makefile语法简介

0 Makefile概述 -------------------------------------------------------------------------------- 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要

2014-04-10 10:19:33 1090

原创 __gnu_cxx::__concurrence_broadcast_error错误解决方法

最近修改代码在主机编译运行正常,但是交叉编译在arm平台上运行出现下面错误:terminate called after throwing an instance of '__gnu_cxx::__concurrence_broadcast_error'what():  __gnu_cxx::__concurrence_broadcast_error在google上搜了一通,找到了

2014-04-03 11:20:30 5514 5

转载 编译器的编译选项解析

尽管将源代码编译为二进制文件的四个步骤由不同的程序(cpp,gcc/g ,as,ld)完成,但是事实上 cpp, as, ld 都是由 gcc/g 进行间接调用的。换句话说,控制了 gcc/g 就等于控制了所有四个步骤。从 Makefile 规则中的编译命令可以看出,编译工具的行为全靠 CC/CXX CPPFLAGS CFLAGS/CXXFLAGS LDFLAGS 这几个变量在控制。当然理论上控制

2014-04-03 09:41:57 9745

转载 C语言enum枚举类型解析

在实际应用中,有的变量只有几种可能取值。如人的性别只有两种可能取值,星期只有七种可能取值。在 C 语言中对这样取值比较特殊的变量可以定义为枚举类型。所谓枚举是指将变量的值一一列举出来,变量只限于列举出来的值的范围内取值。 定义一个变量是枚举类型,可以先定义一个枚举类型名,然后再说明这个变量是该枚举类型。例如: enum weekday{sun,mon,tue,wed,thu,fri

2014-04-01 15:37:44 181986 16

原创 gtest实现架构简单分析

公司现在需要一套成型的测试框架,选中了现在开源的gtest测试框架,公司将这个任务交给了我,要在gtest框架基础上进行一些修改,这几天一直在看gtest源码,不懂C++,看起来有点难,不过还是有一些感悟,写下来以备后用  gtest测试框架是在不同平台上(Linux,Mac OS X,Windows,Cygwin,Windows CE和Symbian)为编写C++测试而生成的。它是基于xUn

2014-04-01 14:41:39 9987 1

转载 深入解析Gtest

公司最近需要在用Gtest框架,进行修改,实现自己的测试框架,这段时间一直在看gtest源码,这篇文章从网上找到,对自己非常有帮助,贴出来供大家学习,转载地址:http://www.cnblogs.com/coderzh/archive/2009/04/11/1433744.html过几天自己也需要总结一下对gtest的理解,以备后用一、前言“深入解析”对我来说

2014-03-31 15:04:02 5428

转载 动画演示linux下10个有趣命令

Linux最强大的一个特征就是它有大量的各种小命令工具,这也可以称做是它最有趣的一个地方了。在这些大量的有用的命令和脚本中,你会发现有少部分命令工具不那么有用的——如果你不愿意说是完全没用处的话。你要知道,Linux命令终端并不是总来干一些严肃的事情的,这里列举的几个没有实际用处、但很有趣的命令,它们的有趣并不是因为无用,而是真的有趣,接下来就让我们看看它们是如何搞怪的吧。一、cmatrix

2014-01-14 09:30:47 1693

转载 DB9公母头引脚定义以及连接

1.实物及引脚简介在做开发的时候经常会用到串行接口,一般9针的串行接口居多。如下图所示:公头母头用于连接线的采用上图封装。但用于开发板的时候采用90度弯角插针的封装。如下图:各引脚的定义为:2.公头母头与MAX232的连接当公头母头与MAX232进行连接的时候,我们会发现按照上图所说的9个引脚的定义,好像除了外观,

2014-01-13 10:17:15 12713

转载 linux内核动态时钟分析

在早期的linux内核版本的时间概念都是由周期时钟提供的。虽然比较有效,但是,对于关注能耗电量的系统上,就不能满足长时间休眠的需求,因为周期系统要求必须在一定的频率下,周期性的处于活动状态。因此,linux提出了tickless system,即无时钟系统。其关键就是判定系统当前是否无事可做,若是则禁用时钟系统。判定系统当前无事可做的依据是:如果运行队列时没有活动进程,内核将选择idle进程来运行

2013-12-31 15:45:24 2407

ARMV7架构官方手册

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

2016-05-25

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

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

2016-05-25

空空如也

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

TA关注的人

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