- 博客(27)
- 资源 (14)
- 收藏
- 关注
原创 vim看代码的工程配置
Android开发,重点在kernel、bootloader、system等。每天有大量的代码要看,分散在很多目录下。核心思路:1. 使用数据库缓存,加速常用操作。2. 在vim中根据环境变量加载相应工程的各种符号数据库。 1,自定义shell命令,准备工程的环境变量。本地有多个代码目录,需要切换工程,可将如下语句添加到.bashrc中,路径自定义,命令名称自定
2014-12-13 15:45:50
620
原创 Linux下开发环境配置
核心思路:1. 使用数据库缓存,加速常用操作。2. 在vim中根据环境变量加载相应工程的各种符号数据库。 1,自定义shell命令,准备工程的环境变量。本地有多个代码目录,需要切换工程,可将如下语句添加到.bashrc中,路径自定义,命令名称自定义。这些环境变量,主要是给vim准备的。alias cdsyn="export PRJTOP=~/code1/share/MT6795_SYNC ; ex
2014-12-13 15:38:05
160
原创 linux的NAPI方法收包
NAPI和传统收包方法的区别是:NAPI可以进一次中断收很多次的包,但是传统方法进一次中断后将包放到local cpu的softnet_data的input_queue,之后就退出中断。 一、传统方法 进入处理程序后,首先从物理设备中将数据分组拷贝到内
2011-09-25 19:41:22
4952
原创 操作系统相关概念的通俗理解
将一台计算机看作一个KTV娱乐中心,每一个KTV包房看作一个CPU。现在只考虑单CPU也就是只有一个KTV包房的情况。现在有很多客户想到包房里面K歌,每一个客户可以看作一个进程。资源有限,所以必须有一个排队/调度机制,谁先唱歌谁后唱歌,怎么切换。 KTV的管家,也可就是操作系统,由它来完成调度。当客人不是很多的时候,一个简单的先进先出的队列就可以解决这个问题。但是当客人越来越多的时候,如果还是先
2011-06-26 11:40:00
827
原创 使用sed修改配置文件
问题:在接口up的时候,向一个配置文件中加入一些配置项,down的时候,将这些配置项从配置文件中删除。 radvd.temp.conf 保存接口相关的配置项,radvd.conf是最终配置文件。$REALDEVICE是接口名称。 up.sh sed -e "s/ppp0/$REALDEVICE/" radvd.temp.conf >> radvd.conf down.sh CFGNUM=`wc -l radvd.temp.conf | sed 's/[[:space:]].*$//g'
2011-05-29 21:09:00
3097
原创 fedora的root无法登录的问题
fedora linux 输入root,和密码 然后就出现 故障鉴定 。这是因为fedora linux 默认禁止了root 超级用户。 通过以下修改就可以了。 进入普通用户,在终端输入 “su“ 命令然后输入root密码 然后修改 gedit /etc/pam.d/gdm gedit /etc/pam.d/gdm-password 注释掉 :auth required pam_succeed_if.so user != root quiet 如果没有普通账户,那么需
2011-05-26 22:43:00
396
原创 使用ftrace学习linux内核
linux中大量使用函数指针钩子,导致阅读代码困难。比如想知道一个函数的调用路径,那么就只能用source insight之类的工具看代码了。有没有办法可以迅速获得调用关系的整体印象?ftrace是内核提供的一种调试工具,可以对内核中发生的事情进行跟踪。比如函数的调用,进程的切换,中断的开关等等。这里利用这个工具来跟踪函数的调用。 # cat /boot/config-2.6.36 | grep FTRACE CONFIG_HAVE_FTRACE_NMI_ENTER=y CONFIG_HAV
2011-05-25 23:40:00
3607
原创 内核数据结构:红黑树(设计)
何为红黑树? 红黑树是一种具备较好平衡性的二叉搜索树,用于存储键值对类型的数据。 1. 所谓较好平衡性,是指该二叉树的任何一个子节点,其左右子树的高度都相近。从而在搜索/插入/删除节点的时候都有较高的效率。为保证这一特性,约定红黑树具有以下性质: 性质1. 节点是红色或黑色。 性质2. 根是黑色。 性质3 每个叶节点是黑色的。 性质4 每个红色节点的两个子节点都是
2011-05-18 21:11:00
1885
原创 内核数据结构:hlist_head
内核中,使用list_head作为链表,该数据结构本身即使head又是node。如果将它作为hash list的头节点,那么每个头节点会占用8个字节。因此内核中对其优化,使用hlist_head作为hash表的头节点。内核中定义其数据结构为: struct hlist_head { struct hlist_node *first; }; struct hlist_node { struct hlist_node *next, **pprev; }; 注意到
2011-05-16 20:58:00
4559
原创 fcntl设置文件为close_on_exec
用于设置文件描述符fd的标志位,目前只有FD_CLOEXEC可以设置。默认情况下,该标志位为0,表示在使用exec加载的子进程中仍然可以保持文件描述符是打开的,否则在子进程中文件描述符被关闭。close_on_exec.c #include #include #include #include #include #include int main(){ pid_t pid ; int fd ; int err = 0 ; char *s
2011-05-08 00:24:00
1181
原创 full cone的验证
1. 内部进程甲和乙是向相同的IP/port发送报文,在Modem的Wan侧镜像,看目的地址的端口号如何变化。2. 根据这个端口号,在服务器上初始化外部进程A用于收包,向该IP/port回应一个包。在内部主机上面抓包,可以收到这个包。3. 外部主机进程A向B共享WAN侧IP和端口号,进程B向该IP/port回应包。----------udptest1. 启动该进程后,陷入死循环,接受用户输入的命令2. send命令,向某个端口号发送消息3. receive命令,启动一个线程,监控某个端口号,接收消息。线程超
2011-03-30 09:54:00
1283
原创 M8 android
<br />1. cross compile<br />download from http://www.codesourcery.com/sgpp/lite/arm/portal/release1600, and install cross compile<br />cd kernel/2.6.29<br />cat .cross_compile<br />edit .cross_comile, replace the patch of cross compile to yours<br /> <br /
2010-12-19 12:47:00
121
原创 由printf引发的数据类型问题
<br />在PC上执行下面的程序:<br />int main()<br />{<br /> int j = 0xaaaa ;<br /> long long ll = 0x123456789abcdef ;<br /> unsigned char* pc = (unsigned char*)&ll ;<br /> printf("ll=0x%x, j=0x%x/n", ll, j) ;<br /> printf("ll=%llx, j=%x/n", ll, j) ;<br
2010-09-16 21:18:00
526
原创 container_of宏
<br />#include <stdio.h><br />#include <stdlib.h><br />#include <stddef.h><br />#define container_of(ptr, type, member) ({ /<br /> const typeof( ((type *)0)->member ) *__mptr = (ptr); /<br /> (type *)( (char *)__mptr - offse
2010-09-10 07:06:00
349
原创 Modem版本切换工具设计
在嵌入式开发中,烧版本是个很耗时间的操作。由于我们使用的NOR Flash,写操作较慢,通常一个烧4M的版本得耗时一份多种。然后系统会重启并重新引导。花费大量的时间。能否有一种方法,在不烧版本不重启系统的形式下切换嵌入式的内核?今天看到kexec工具,觉得可以尝试一下。有以下约束条件:1. 板子的文件系统基于squashFS,大多数目录只读的。可写的目录只有var和mnt两个。2. 新
2010-05-20 23:09:00
277
原创 GoogleTest
GoogleTest是Google提供的C++测试框架,可以用于白盒测试,改善单元测试效率。概念:测试程序,测试用例,测试项。一个测试程序可以有多个用例,一个用例可以包含多个测试项。断言:预期代码执行后的效果。assert,如果出错且导致致命错误,可以退出测试程序,否则即时出错也可以执行测试。googletest用ASSERT_和EXPECT_前缀来区分是否退出测试程序。 一
2010-05-08 22:12:00
1022
原创 云计算
搜狗也出云输入法了,似乎是个公司都可以把云的概念套在身上。云计算是什么?听多了概念,不就是把计算和存储放在远程服务器么,那现在的Web邮箱也可以叫做云了? 中午和经理聊到这个话题,才发现这绝不仅仅只是一个概念,将会成为一个大有可为的事物。 手机看视频,视频的清晰与否很大程度取决于手机的视频解码能力。现在好了,有了云计算,直接将视频的解码和存储都放在远程了,手
2010-03-27 12:49:00
250
原创 如何在kernel中调用module的函数
为什么要在内核中调用模块的函数? linux解决方案提供商在发布代码时,可能希望将某些核心代码以二进制(对于内核,就是ko文件)的模块发布,然后在内核中调用模块的函数,以保护其知识产权。 模块调用内核的函数是很容易的,在内核EXPORT_SYMBOL函数,并包含相关的头文件,直接调用即可。但反过来,在内核中调用模块的函数则不太容易。即使包含相关头文件,编译通
2010-02-27 17:01:00
1840
原创 昨日之我与今日之我
回想起学生时代做的那个Agent平台,调试一个跨主机的通信故障,通信协议不正常。很多次,怀疑消息的字段有错误,却没有抓一次包来分析。依稀想过有一次,想看一下包的结构,用到了tcpdump,不会用,作罢。想到了用工具,却使用了一个不恰当的工具。如果当时有ethreal,那半年的调试工作会轻松很多很多很多。今日之我,是否仍然有这样的困境,只是自己没有意识到?或者,对手头的工具应用得不够精通?每个人都有
2010-01-26 08:16:00
280
原创 模块 list hash
这些代码片段展示如何使用linux内核模块,list,以及hash===================tccounter.c=====================#include #include #include #include #include #include #include #include MODULE_LICENSE("GPL");
2010-01-15 21:37:00
670
原创 关于设计
在还是一个代码新手的时候,也许会觉得写代码最重要,最先考虑的是程序能够跑起来。但到了后期就会切实感受到,糟糕的设计让系统无法扩展。任何一点的新需求,都是大手术。 敏捷开发,要求快速迭代,但操作起来还是需要技巧的。
2009-11-18 00:50:00
200
原创 printk解析
需求:嵌入式开发Modem,Modem会不可预料地死掉,问题出现后只能重新上电重启Modem。而且重启之后,出错之前的信息都丢失了。一个思路是修改内核的printk模块,将printk都写到flash中保存起来。重新上电后,查看这一块flash的内容。 printk --vprintk 将待打印的句子输出到tbuf中。如果没有制定字符的级别,默认加上一个。 -
2009-10-22 23:31:00
397
原创 asp.net中使用COM组件生成word的80070005错误
错误现象: 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。 CLSID可能为000209FF,00020906啥的。 解决办法: 这个问题折磨了我很长的时间。在VS2005的调试模式下能够正常生成word文件,但是通过web服务器访问时,就报这个错误
2009-10-08 22:37:00
2124
1
原创 版本控制
一定要做版本控制。被一个DCOM组件的错误折磨了近3天的时间,至今无解。不知道是程序的问题,还是环境的问题。为此安装了完全干净的系统,问题依然存在。那么很有可能是程序的问题了。但却找不到以前的历史版本。有一些零星的程序,散布在电脑硬盘的各个旮旯里面。好不容易找到一个,发现代码和数据库文件不匹配。 需要做这么几个方面的版本控制:1. 源代码,使用svn2. 版本文件,包括代码和数
2009-10-08 09:44:00
178
原创 Linux内核学习计划
参考资料:1. 《深入理解Linux内核》2. linux kernel 2.6.31源代码 按照主题的形式组织文章,围绕具体的问题写作 包括以下内容:1. 从ioctl和system两个系统调用开始,学习系统调用的参数传递、出错处理、内核态与用户态的切换2. Linux中的汇编语言3. I/O体系结构及设备驱动程序4. 从socket和open两个系统调用
2009-09-29 00:01:00
397
转载 深入分析 Linux 内核链表
深入分析 Linux 内核链表文档选项打印本页将此页作为电子邮件发送级别: 初级杨沙洲 (pubb@163.net)国防科技大学计算
2009-09-14 18:57:00
326
原创 sql中插值法完成缺失数据的填充
在我做的大气污染报表系统中,由于原始数据缺失,经常出现一些负数或者0的大气浓度,导致最后生成的曲线很丑,会画到水平轴以下。将这些错误的数据当错缺失数据处理,需要采取一定的手段填充。缺失的数据采取插值法填充,这一点早就确定下来,但在如何实现上却困扰很久。 将原始问题简化一下。比如有这样一组数据。ID so co1 1 0.1 0.1 2 0 0.2 3
2009-09-13 23:17:00
2185
strace命令用法
2009-09-05
Chrome 4.0.206.1 Dev
2009-09-05
linux下cpp插件开发实例
2009-01-16
常见设计模式的解析和实现(C++)
2008-11-12
Understanding_the_Linux_Kernel_Third_Edition
2008-11-04
linux网络编程之 epoll简介
2008-11-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人