- 博客(30)
- 资源 (6)
- 收藏
- 关注
原创 在非process context中,不能做什么
<br /> When you are outside of process context (i.e., in interrupt context), you must observe the<br />following rules:<br /> • No access to user space is allowed. Because there is no process context, there is<br /> no path to the user space ass
2010-11-30 21:49:00 1134
原创 Overloading new & delete
1. Overloading global new & delete这种方式貌似不太建议使用。不论是built-in type 还是 class,都使用了新的new方法。不论是单个的obj,还是数组,也都用了新的new。如果找不到合适的空间,其实是需要 抛出异常的。 返回值 是个void*在这两个函数内,不能使用cin,cout。 因为cin,cout会调用new,这样会死锁。在new数组时,可以看到分配的空间多于实际空间。这个空间用来指示,有多少obj创建了。#include #include
2010-11-30 14:30:00 1067
转载 总结C++中三种关于”new”的使用方法
http://brightli.wordpress.com/2007/03/29/%E6%80%BB%E7%BB%93c%E4%B8%AD%E4%B8%89%E7%A7%8D%E5%85%B3%E4%BA%8Enew%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/虽然有三种new的用法,但是分为两大类也未尝不可,那么是哪两类呢?其一是new operator,也叫new表达式;其二是operator new,也叫new操作符。这两个英文名称起的也太绝了,很
2010-11-29 15:08:00 1047
原创 Eclipse的一些快捷键
编辑java1. ctrl-o 显示当前文件中,类的方法,成员 再按一次ctrl-o,显示当前文件定义类的成员,包括继承的。2. alt-/ 自动补全
2010-11-29 11:31:00 757
原创 文件异步读写
文件异步读写在应用程序侧,使用SIGIO的信号来处理。1. 设置接受SIGIO信号的函数。2. F_SETOWN3. FASYNC在驱动侧,需要fasync函数来处理。/* * ===================================================================================== * * Filename: async.c * * Description: this program test the
2010-11-26 10:28:00 1087
原创 一个 select函数的例子
<br />其实这个例子是从man 里面拷贝出来的。 稍加修改而已。<br /> <br />重要的一点是让我理解了这个函数的第一个参数一定要比想要询问的fd多1!<br />经过测试,select确实调用到了 file_operations 结构中的 poll。 这点和poll的机制是一样的。<br />/*<br /> * =====================================================================================<br
2010-11-25 21:52:00 889
原创 A poll() example
<br />这是一个简单的poll函数的例子。 用来检测/dev/scullpipe0设备是否可读。 <br /> <br />从console中可以看出,当调用了poll后,.poll函数被调用到了。<br /> <br />#include <poll.h><br />#include <stdio.h><br />#include <fcntl.h><br /><br />int main()<br />{<br /> struct pollfd fda
2010-11-25 15:14:00 1969
原创 Nonblock I/O 及其使用
<br />这是个很有趣的topic,而且这个东东影响到了kernel/driver和application之间的交互。<br /> <br />首先要来说下这个概念的东东。 当应用程序被block后,这个程序就进入了sleep状态。有可能会block的地方有:<br />1. open<br />2. read<br />3. write<br /> <br />一般情况下,文件的读写是阻塞的,可以通过fcntl()函数来设置为非阻塞读写。且这一点需要driver的配合。 <br />好,来看看一个实
2010-11-24 17:22:00 1734
原创 打印出 本次编译时的变量及其值
<br />有一天我突发奇想,也是实在没办法,不知道人家编译的时候干了什么。就像把人家用的某个变量打出来,而且我又不知道人家变量叫啥。悲剧!<br /> <br />我就干脆在网上找,有没有办法。 果然被我找到一个。下面这两个 <br />第一个打印出用户定义的变量。第二个是什么都打出来。 <br />其实主要是用了 .VARIABLES 变量 和 origin 函数。<br /> <br />.PHONY: printvars<br />printvars:<br /> @$(foreac
2010-11-23 14:29:00 1498
转载 Oops 消息的产生, 例子, 定位出错位置
oops消息的产生网上一分析oop流程的帖子, 留着以后看.http://blog.sina.com.cn/s/blog_3e4774e30100ooey.htmloops消息的例子1. 引用空指针 Unable to handle kernel NULL pointer dereference at virtual address 00000000
2010-11-23 11:55:00 5424
原创 使用seq_file,实现大文件的/proc file
<br />下面是个用seq_file实现大文件/proc file的例子。 重要的就是那几个迭代的函数。<br />值得一提的是,我这个例子在cat /proc/seq_test的时候 会显示出很多东西。也就是比我想象的要多。<br />后来我仔细的看了log,发现输出如下<br />Nov 21 15:44:14 wizard-desktop kernel: [ 9354.426472] scull: position is 0<br />Nov 21 15:44:14 wizard-desktop
2010-11-21 16:05:00 2586 1
原创 使用/proc 文件,只读的例子
<br />只用/proc文件是常用的调试方式,因为如果用很多的printk的话,对性能,及log显示都不是很好。<br />下面是一个简单的创建只读的proc文件的kernel module的例子。<br />例子中只是简单的输出了一句话,对于实际的项目可以打印不同的东西。<br /> <br />但是这个例子的缺点在于,使用proc文件读取时,只能读取一个page的大小?<br />/*<br /> * ================================================
2010-11-21 13:52:00 1625
原创 忘记了root密码后怎么办?
<br />忘记了root密码,就要进入single模式,用passwd root来修改了。<br /> <br />如果是用grub 那么就直接在选项的地方,选择对应的kernel。<br />如果是grub2,那么就要按住shift 让这个菜单显示出来。<br /> <br />找到对应的启动项, 按e。<br />找到类似这行,kernel /vmlinuz-2.4.18-0.4 ro root=/dev/hda2,再按e。<br />在文本行最后 加入 single,指定进入single模式。<br
2010-11-17 21:30:00 904
转载 解决version magic 不一致的问题
<br />http://tldp.org/LDP/lkmpg/2.6/html/x380.html<br />编译完一个kernel module后,如果安装这个module的机器运行的不是一致的kernel,会报<br />insmod: error inserting 'poet_atkm.ko': -1 Invalid module format<br /><br />仔细看一下/var/log/message 文件可以发现是说, version magic不一致。<br />Jun 4 22
2010-11-17 11:39:00 18401 2
原创 C++ constants
const是c++中比较常用的一个修饰符,下面按照const的作用来列出各种用法。1. Value Substitution这个作用就是代替了原来的#define const int a = 9;必须初始化写在头文件internal linkage, 即一般情况下在编译时就替换了,和用define一样,没有分配空间。但对于复杂的结构体,需要分配空间,但仍然是internal linkage, 在link的时候看不到的。2. 你知道这个值是不会变的,把它定义成常量一种是compile time 常量,即上面这
2010-11-12 17:47:00 1128
原创 MTD 设备学习的笔记
<br />不懂mtd设备,学习之。 <br /> <br />第一个找到的函数是init_mtdblock。调用了register_mtd_blktrans函数,传入参数是一个mtd_blktrans_ops类型的结构。<br />static struct mtd_blktrans_ops mtdblock_tr = {<br /> .name = "mtdblock",<br /> .major = 31,<br /> .part_bits
2010-11-11 15:47:00 2742
原创 ARM condition code
大部分的arm指令可以条件执行,也就是可以根据状态寄存器中的值的情况条件执行。下面是condition code的列表Opcode[31:28] Mnemonic extension Meaning Condition flag state0000 EQ Equal
2010-11-09 11:16:00 2769
原创 ARM compressed/head.S 文件的分析
/* * linux/arch/arm/boot/compressed/head.S * * Copyright (C) 1996-2002 Russell King * Copyright (C) 2004 Hyok S. Choi (MPU support) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Ge
2010-11-08 17:01:00 2510
原创 Arm结构下 kernel是如何编译出zImage的。
首先要感谢一下这个帖子,给了我一点启发。http://blog.csdn.net/pottichu/archive/2009/06/11/4261150.aspx后来又发现个国外的帖子http://book.opensourceproject.org.cn/embedded/embeddedprime/opensource/0136130550/ch05lev1sec1.html
2010-11-04 22:24:00 3218
原创 MMU for ARM
<br />下图摘自arm_arch<br /> <br /><br /> <br />这个高级的FCSE(Fast Context Switch Extension) 由CP15 Process ID Register c13来设置。<br />具体的用法不详。<br />
2010-11-03 11:30:00 1028
原创 Pointer to Const & const pointer
<br />这是c++语法中比较绕的一个概念,也是笔试面试中经常会考的知识点。 c++你为什么是c++啊?<br /> <br />下面的内容摘自 Thinking in C++ Chapter 8 Constants<br /> <br />Pointer to const<br /> <br />这有两种定义形式<br />const int* u;<br /> <br />Starting from the identifier, we read “u is a pointer, which poin
2010-11-02 14:08:00 2195
原创 c++是如何处理 对象 作为返回值 和 输入参数的 -- 拷贝构造
1. 唯一(?)安全的做法是要将返回值存放在一个register中,因为放在stack和全局都不安全。2. 对象所占用的空间是不能保存在一个register中的。所以现在的做法是,在函数参数中传入一个对象的指针,将对象的值存放在这个地方,最后返回的时候返回这个指针。
2010-11-02 10:43:00 2323
转载 这是什么高级的c++语法 const char* & NOT char* const &
<br />http://www.moon-soft.com/doc/42185.htm
2010-11-02 10:12:00 1067
原创 C++ Reference 引用用法
1. Free Standing Referenceint y;int& r = y; 定义一个引用的时候,必须初始化其值,否则编译器报错。或者 const int& q = 12; 其相应的规则1. A reference must be initialized when it is created. (Pointers can be initialized at any time.)2. Once a reference is initialized to an object,
2010-11-01 21:56:00 8484
原创 ARM Addressing Modes
arm的寻址方式果然不同!ARM一共有五种不同的寻址模式,每个模式下面又有不同的子类• Addressing Mode 1 - Data-processing operands on page A5-2貌似加减乘除这几种运算用这种形式的比较多些。{}{S} , , where is one of the following:1. #2. 3. , LSL #4. , LSL 5. , LSR #6. , LSR 7. , ASR #8. , ASR 9. , ROR
2010-11-01 15:24:00 2646
原创 Arm 中 几个位移运算指令的比较
<br />http://simplemachines.it/doc/arm_inst.pdf<br />在arm结构中,支持几种位移运算<br />LSL Logical shift left<br /> <br />LSR Logical shift right<br />ASR Arithmetic shift right<br /> <br />ROR Rotate right<br />RRX Rotate right with ex
2010-11-01 14:43:00 1565
原创 ARM instruction set
The ARM instruction set can be divided into six broad classes of instruction:Arm指令集分成了六大类• Branch instructions• Data-processing instructions on page A1-7• Status register transfer instructions on page A1-8• Load and store instructions on page A1-8•
2010-11-01 10:11:00 2316
原创 Arm Register
<br />ARM has 31 general-purpose 32-bit registers. At any one time, 16 of these registers are visible. The other<br />registers are used to speed up exception processing. All the register specifiers in ARM instructions can<br />address any of the 16 vi
2010-11-01 10:03:00 2113
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人