- 博客(111)
- 资源 (21)
- 收藏
- 关注
原创 ARM汇编指令MCR/MRC学习
MCR指令将ARM处理器的寄存器中的数据传送到协处理器的寄存器中。如果协处理器不能成功地执行该操作,将产生未定义的指令异常中断。指令的语法格式:MCR{} p15, 0, , , {,}MCR2 p15, 0, , , {,}其中,为指令执行的条件码。当忽略时指令为无条件执行。MCR2中,为Ob1111,指令为无条件执行指令。 为协处理器将执行的操作的操作码。对于CP15协处理
2014-07-13 11:26:44
1729
原创 STM32外部中断详解
一、基本概念 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI
2014-06-02 23:17:44
3429
原创 STM32学习笔记之EXTI(外部中断)
参考资料:STM32数据手册、网络资料=========================================分割线========================================= 外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。每个输
2014-06-02 22:20:04
3831
转载 Linux内核学习笔记(一)CFS完全公平调度类
Linux内核学习笔记(一)CFS完全公平调度类 我的邮箱:zhw.smile@gmail.com 总结可能存在很多错误,欢迎交流 前导: 最近在学习Linux内核的相关知识,参考的资料是《Professional Linux Kernel Architecture》和linux2.6.24的内核源码。对Linux2.6.24中的核心
2014-05-21 18:00:08
1493
原创 linux中的likely与unlikely
likely() 与 unlikely()是内核(2.6的版本应该都有)中定义的两个宏。位于/include/linux/compiler.h中,具体定义如下:#define likely(x) __builtin_expect(!!(x), 1)#define unlikely(x) __builtin_expect(!!(x), 0)__builtin_expect是gcc
2014-05-20 17:21:53
955
原创 (void)(&x==&y)
#define max(x,y) ({ \typeof(x) _x = (x); \typeof(y) _y = (y); \(void) (&_x == &_y); \_x > _y ? _x : _y; })typeof(x)的意思是取x的类型,这不是标准C里的,gcc支持,vc不支持(void) (&_x == &_y);这句话本身从执行程序来讲
2014-05-19 21:25:33
2119
原创 作为一个新人,怎样学习嵌入式Linux?
作为一个新人,怎样学习嵌入式Linux?被问过太多次,特写这篇文章来回答一下。 在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。比如写一个数组排序、输入数字求和什么的。学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。以前我
2014-05-16 10:54:04
1472
原创 系统编程是什么
目录(?)[+] 部分摘自《Linux System Programming 》作者: Robert Love刘建文略译(http://blog.csdn.net/keminlau)KEY:系统论 系统编程 System Programming过去的Unix编程是没有系统不系统之分的。即便是开发 X Window也是在系统级(system-level
2014-05-15 12:09:58
1636
转载 学习linux内核能做什么?
学习Linux内核能干什么?我个人的理解是:1、了解Linux内核的具体工作细节,对我们系统编程来说是非常有用处的,比如你了解了某个系统调用在内核中是怎么实现,用起来就会更加得心应手。2、学习Linux内核的工作原理和具体实现细节,本身就是一种挑战,内核是个非常庞大的工程,无论是从理论还是实现细节理解起来就是很有难度的,如果我们能坚持的把内核中某个子模块完全的理解后,一定会提升自己的自信心
2014-05-15 11:45:14
4771
转载 linux经典书籍推荐
入门篇 《LINUX权威指南》书不错,写的很全面也比较广,涉及的不深,做为入门书籍不错,可以比较全面的了解linux 。另外比较热门的也可以看看《鸟哥的私房菜》等书,偏管理类的书。如果想做server方向的可以找来看看。驱动 篇 《LINUX设备驱动程序 》就是网上说的“LDD”,经典之作,必备书籍。国产经典《Linux驱动详细解》也是一本非常不错的书,很实用,书中源代码 分析比较
2014-05-14 23:23:39
1654
原创 向linux内核添加系统调用新老内核比较
2.6内核1>修改linux-source-2.6.31/kernel/sys.c文件,在文件末尾添加系统响应函数。函数实现如下:asmlinkage int sys_mycall(int number) { printk("这是我添加的第一个系统调用"); return number; }2>在linux-source-2.6.31
2014-05-14 17:29:09
1253
转载 python十分钟入门
本原创文章属于《Linux大棚》博客,博客地址为http://roclinux.cn。文章作者为Rocrocket Wu。为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅。===【简介】Python(蟒蛇)是一种动态解释型的编程语言。Python可以在Windows、UNIX、MAC等多种操作系统上使用,也可以在Java、.NET开发平台上使用。pytho
2014-05-12 23:27:45
610
转载 程序员幽默笑话
场景一:我叫程序 本人苦逼男程一枚,异地恋。每次女友打电话问我在干啥,我都说在搞程序。 隔了一阵子我发现她状态改成“我真希望我叫程序…” 场景二:发帖 一个女程序员twitter上发了一条tweet: 昨晚梦见男朋友和别的女人在逛街,梦里我的第一反应是查源代码…结果调试半天查不出来为什么显示的是那个女人不是我,最后含泪把那个女人给注释掉了,再一运行就是我男朋友自己逛街了…醒
2014-05-12 22:54:39
1365
原创 linux下的多线程
1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 为什么有了进程的概念后,还要再引入线程呢?使用
2014-05-12 22:20:34
976
转载 linux下进程与线程的区别
进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。
2014-05-12 22:11:50
757
原创 list_for_each与list_for_each_entry详解
一、list_for_each1.list_for_each原型#define list_for_each(pos, head) \ for (pos = (head)->next, prefetch(pos->next); pos != (head); \ pos = pos->next, prefetch(pos->next))它实际上是一个 for 循环,利用
2014-05-12 11:22:03
6348
1
转载 list_entry()详解
Linux内核中,获取节点地址的函数list_entry()非常常用,由于其定义有点晦涩,先解析如下:list_entry的宏定义:#define list_entry(ptr, type, member) / ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) 这个倒是不难理解:从一个结构的成员指
2014-05-11 21:21:48
1008
转载 linux中断嵌套以及中断丢失
在linux内核里,如果驱动在申请注册中断的时候没有特别的指定,do_irq在做中断响应的时候,是开启中断的,如果在驱动的中断处理函数正在执行的过程中,出现同一设备的中断或者不同设备的中断,这时候新的中断会被立即处理,还是被pending,等当前中断处理完成后,再做处理。在2.4和2.6内核里,关于这一块是否有什么不同。一般申请中断的时候都允许开中断,即不使用SA_INTERRUPT标志。
2014-05-07 23:01:20
1563
转载 [ARM]ldr和 adr/adrl 伪指令的区别
一.首先熟悉几个arm地址相关的概念:首先arm地址有三个地址概念:编译地址、期望运行物理地址、实际运行物理地址、相对地址、绝对地址、位置无关编译地址 :编译阶段的生成地址,其是相对地址 ,有些地址还没确定,如调用其他.O文件中的函数或库函数期望运行物理地址:链接阶段生成的地址(期望绝对地址),会确定编译阶段没有确定的地址,并会根据链接器假设期望的程序烧录运行物理启始地址
2014-04-28 21:50:29
1326
转载 input_event
设备有着自己特殊的按键键码,我需要将一些标准的按键,比如0-9,X-Z等模拟成标准按键,比如KEY_0,KEY-Z等,所以需要用到按键模拟,具体方法就是操作/dev/input/event1文件,向它写入个input_event结构体就可以模拟按键的输入了。linux/input.h中有定义,这个文件还定义了标准按键的编码等struct input_event {struct
2014-04-21 16:15:46
1852
原创 mod_timer函数及其它定时器函数
当一个定时器已经被插入到内核动态定时器链表中后,我们还可以修改该定时器的expires值。函数mod_timer()实现这一点修改注册入计时器列表的handler的起动时间int mod_timer(struct timer_list *timer, unsigned long expires) { int ret; unsigned long flags; spin_
2014-04-20 21:41:19
14534
1
转载 输入子系统---按键
一、linux输入子系统——基础知识 1、首先我们要知道什么时候我们可以用到input输入子系统,以及为什么我们要用input输入子系统?像按键、触摸屏、鼠标等输入设备我们都可以采用input接口函数来实现设备驱动。那么采用input输入子系统有什么优点呢?其实一句话,采用input输入子系统可以使驱动程序变得异常简单。2、input输入子系统体系结构 我们看到输入
2014-04-20 20:51:02
1119
转载 学习linux驱动经典书籍
Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书为《linux_device_driver 3rd Edition》,这是一本很经典的书,无奈Linux的东东还是过于庞大,这本侧重于实战的书籍也只能停留在基本的接口介绍上,更深入的东东只能靠我们自己摸索了。但万事总有一个开头,没有对Linux驱动整体框架的把握是很难做一个优秀的驱动开发者的。除了这本Jonathan Corbet,
2014-04-18 13:26:20
1674
原创 outb,inb等I/O端口操作函数
功能:如 i386 ,在区别 I/O 空间和内存空间的进程的 I/O 空间写入数据。outb() I/O 上写入 8 位数据 ( 1 字节 );outw() I/O 上写入 16 位数据 ( 2 字节 );outl () I/O 上写入 32 位数据 ( 4 字节)。原型:引用 #include void outb (unsigned char
2014-04-18 11:42:10
16256
转载 IO端口和IO内存的区别及分别使用的函数接口
目录(?)[+]IO端口和IO内存的区别及分别使用的函数接口 每个外设都是通过读写其寄存器来控制的。外设寄存器也称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三大类。根据访问外设寄存器的不同方式,可以把CPU分成两大类。一类CPU(如M68K,Power PC等)把这些寄存器看作内存的一部分,寄存器参与内存统一编址,访问寄存器就通过访问一般的内存指令
2014-04-18 11:41:29
5226
原创 s3c2410 cs8900a 网卡驱动
/* CS8900a.h */ #define CONFIG_CERF_CS8900A 1 /* * cs8900a.c: A Crystal Semiconductor (Now Cirrus Logic) CS8900A driver for SMDK-s3c2410 (based on cs89x0.c) * * Author: Yong-iL Joh t
2014-04-17 22:04:12
1309
原创 关于request_region()
void request_region(unsigned long from, unsigned long num, const char *name) 这个函数用来申请一块输入输出区域。 如果这段I/O端口没有被占用,在我们的驱动程序中就可以使用它。在使用之前,必须向系统登记,以防止被其他程序占用。登记后,在/proc/ioports文件中可以看到你登记的io口。
2014-04-17 21:43:19
2564
转载 linux内核及驱动开发中有关__init,__exit和__initdata的用法
要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性或定义的函数或数,__attribute__主要用于改变所声明据的特性,它有很多子项,用于改变作用对象的特性。比如对函数,noline将禁止进行内联扩展、noreturn表示没有返回值、pure表明函数除返回值外,不会通过其它(如全局变量、指针)对函数外部产生任何影响。但这里我们比较感兴趣的是对代
2014-04-15 17:26:45
1315
转载 misc设备驱动模型及实例解析
1、misc设备驱动模型 本节我们来看一下misc设备驱动模型的有关内容,首先是看看它的设备结构体,定义在include/linux/miscdevice.h中:[cpp] view plaincopystruct miscdevice { int minor; //次设备号,若为 MISC_DYNAMIC
2014-04-11 15:49:10
858
转载 linux驱动头文件位置的说明
在不同版本的内核源码上,头文件所在的位置是不同的,比如说在#include#include同样是regs-gpio.h,是在比较低的版本(比如2.6.25)上位于arch/arm/include/asm中,而mach/regs-gpio.h则是位于arch/arm/mach-s3c2410/include/mach中,2.6.30版本的内核是这种结构,所以,要根据所采用的不
2014-04-07 20:58:48
1699
转载 linux的poll机制
linux的poll机制Poll就是监控文件是否可读的一种机制,作用与select一样。应用程序的调用函数如下:int poll(struct pollfd *fds,nfds_t nfds, int timeout);Poll机制会判断fds中的文件是否可读,如果可读则会立即返回,返回的值就是可读fd的数量,如果不可读,那么就进程就会休眠timeout这么长的时间,然
2014-03-26 23:13:57
1170
转载 EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接
EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接EWOULDBLOCK用于非阻塞模式,不需要重新读或者写EINTR指操作被中断唤醒,需要重新读/写在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-b
2014-03-24 23:08:01
838
转载 size_t 与 ssize_t 类型
ssize_t是什么类型的?解释一:为了增强程序的可移植性,便有了size_t,它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t可能不一样。 在32位系统上 定义为 unsigned int 也就是说在32位系统上是32位无符号整形。在64位系统上定义为 unsigned long 也就是说在64位系统上是64位无符号整形。size_t一般用来表示一种计数
2014-03-23 22:42:51
971
转载 密码截获
实际上求的是最长回文数,what I have done is that 分开奇偶来匹配,枚举中间点,如果是下一个字符与前一个字符相等,就执行偶数的匹配,奇数的必须执行,因为存在baaab的情况,再找出最大的那个..That'sall! >_ Time Limit:1000MS Memory Limit:1024KDescription:Catc
2014-03-23 20:34:30
1567
转载 全概率公式:敏感问题的调查
热度 (1413 views)2013 年 07 月 28 日暂无评论Tag: 全概率,概率 西祠胡同的创始响马大叔搞了个轻社区孢子,口号是一起玩,不孤单,某天心血来潮想在上面搞个统计调查,稍微涉及到隐私信息,孢子不支持匿名回答,只好借助下面的手段来获得这些敏感性的信息。涉及到的知识很简单,就是全概率公式。 1965年Stanley L.Warner发明了一种能
2014-03-21 23:15:35
7536
1
转载 Linux下的压缩解压缩命令详解
linux zip命令zip -r myfile.zip ./*将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件.2.unzipunzip -o -d /home/sunny myfile.zip把myfile.zip文件解压到 /home/sunny/-o:不提示的情况下覆盖文件;-d:-d /home/sunny 指
2014-03-14 19:40:32
850
转载 ARM异常处理解析
ARM异常处理解析1.1 ARM处理器异常处理所谓异常就是正常的用户程序被暂时中止,处理器就进入异常模式,例如响应一个来自外设的中断,或者当前程序非法访问内存地址都会进入相应异常模式。1.1.1 异常分类(1)复位异常当CPU刚上电时或按下reset重启键之后进入该异常,该异常在管理模式下处理。(2)一般/快速中断请求CPU和外部设备是分别独立的硬件执行单元,CPU
2014-03-14 11:53:12
1493
转载 arm指令之mov
ARM中的MOV指令 ARM中的MOV指令格式是这样的 op2是占了12位,其中bit11-bit8是移位数(rotate),bit7-0是一个8位的立即数(imm),MOV Rn, op2,执行之后,Rn=op2 >> (rotate * 2),这里的移位是循环右移,这就决定了MOV指令不是所有的立即数都能表示的,以下是几个例子: 1、mov
2014-03-13 20:10:47
1788
转载 write的奥秘-linux系统调用如何实现?
在Linux下我们在使用设备的时候,都会用到write这个函数,通过这个函数我们可以象使用文件那样向设备传送数据。可是为什么用户使用write函数就可以把数据写到设备里面去,这个过程到底是怎么实现的呢?这个奥秘就在于设备驱动程序的write实现中,这里我结合一些源代码来解释如何使得一个简简单单的write函数能够完成向设备里面写数据的复杂过程。这里的源代码主要来自两个地方。第一是ore
2014-03-09 19:01:31
3026
Google官方下拉刷新组件SwipeRefreshLay
2014-04-03
编写程序,使用两个线程,一个队列,其中一个线程从键盘读取数据,放入到队列中,直到读取的数据是字符串quit则结束
2014-07-03
jQuery 移动网络应用开发 核心技术
2014-04-03
W3School离线手册
2014-04-03
DELPHI XE5 UP2 破解
2014-04-03
控制台游戏之推箱子及地图编辑器
2014-04-03
控制台游戏之推箱子及地图编辑器.zip
2014-04-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅