- 博客(45)
- 资源 (3)
- 收藏
- 关注
转载 Linux内核模块的符号导出
http://zh5202.blog.163.com/blog/static/1780251952012112453928908/
2014-02-26 21:20:58 468
转载 如何使用crash工具分析Linux内核崩溃转储文件
使用crash工具分析linux崩溃转储文件,对解决linux内核代码中的bug会起到非常重要的作用。详细使用方法,请参考这篇文章吧,挺详细, http://www.ithov.com/linux/121016.shtml。
2014-02-13 21:25:25 376
原创 使用锁的几个重要理念
写过些内核代码后,再次阅读LDD感觉理解就好多了。简单总结了几个使用锁的重要理念。一、锁的设计和使用策略。1、当我们创建了一个可被并行访问的对象时,应该同时定义用来控制访问的锁。锁定模式必须在一开始就安排好,否则其后的改进将会非常困难。先期的时间投入会在调试阶段收益。2、几个函数均需要访问某个受特定锁保护的数据结构时,某给获得锁的函数绝对不能再次调用同样试图获得这个锁的函数,否则就会导
2014-02-12 21:36:11 337
原创 解决类似 BUG: soft lockup - CPU#2 stuck for 67s! 问题的思路
编写内核程序,出现soft lockup错误是再常见不过了。刚开始调试内核时,出现这样的错误,往往两眼一麻黑不知道该如何下手了。但其实,这样的问题解决多了,会发现基本就两种情况,死锁和死循环。所以,在出现soft lockup错误时,不用慌张,只要分析相关代码是不是存在死循环,比如 for循环的退出条件弄错了导致循环无法退出,等等;或者就是分析是不是相关代码在使用锁不当导致了死锁。比如,s
2014-02-11 23:51:44 8744
原创 linux自旋锁使用时需要注意的几个地方
常常觉得需要写下来的东西,却往往由于没有及时写下来慢慢淡忘了。写了一段时间内核代码,在不断修改错误的同时也多多少少积累了一点经验。暂且把使用自旋锁(spinlock)时需要注意的几个地方写下来。1、在内核多线程编程时,为了保护共享资源通常需要使用锁,而使用的比较多的就是spinlock,但需要注意的是:所有临界区代码都需要加锁保护,否则就达不到保护效果。也就是,访问共享资源的多个线程需要协
2014-02-10 23:13:33 681
原创 linux内核并发和竞态学习笔记
linux内核开发中,多线程并发的管理毫无疑问是重中之重;不可避免地,并发的相关缺陷也是最容易制造的,也是最难找的。即使是Linux内核专家也会偶尔制造并发相关的缺陷。为此,我们有必要好好学习和理解内核对并发的管理。
2014-01-01 16:15:03 489
原创 解决编译错误:dereferencing pointer to incomplete type 的办法
在使用c语言写程序时,可能遇到错误:error :dereferencing pointer to incomplete type。其实,这个错误是指针指向的结构体类型没有定义。原因可能有很多,但最多情况可能下面两种:1,使用库函数或内核等提供的结构体时,没有包含相应的头文件。解决方法很简单,就是包含对应头文件就ok了。2,若是自己定义的结构体,而且这个结构体恰恰是定义在.c文件中。在
2013-12-12 21:20:48 10262
原创 破解显示"secured"的PDF电子书
从网上下载到的电子文档,往往有些是经过加密处理的,就不能在上面加注释或者打印了,这样就很是不方便。 在网上查阅了资料,然后自己实践了一下,觉得下面这个方法还不错,就是在ubuntu下打开pdf文档,然后再打印该文档,非常简单。具体操作就不赘述了,参照这个网友方法操作就可以。http://blog.163.com/jsjcsk@yeah/blog/static/1709302382010
2013-11-25 21:21:40 1107
转载 linux-RPM中文解释(已安装包和未安装包)
查询功能 命令格式 rpm {-q|–query} [select-options] [query-options] RPM的查询功能是极为强大,是极为重要的功能之一;举几个常用的例子,更为详细的具体的,请参考#man rpm 1、对系统中已安装软件的查询 1)查询系统已安装的软件 语法:rpm -q 软件名 举例:[root@local
2012-12-21 11:11:32 412
原创 linux内核中使用TSC时间戳方法
前几天,由于工作需要要在驱动程序中打时间戳。网上找了几个资料,最终选定并使用了TSC方法,在这里简单总结一下。 使用TSC(时间戳计数器)据说精度相对高些。但需要注意硬件是否支持。以X86体系结构为例:从pentium开始,很多80x86微处理器都引入TSC,一个用于时间戳计数器的64位的寄存器,它在每个时钟信号 (CLK, CLK是微处理器中一条用于接收外部振荡器的时
2012-12-14 21:38:19 2174 1
原创 loop设备使用
什么是Loop设备?简单说,可以称其为循环设备。在实际工作中,可以用其虚拟块设备供调试用。想要知道更详细的话,可以上网百度一下。笔者在这里主要想简单介绍下其使用方法,也是自己工作的一个小小总结。 如何修改loop设备的缺省数量通常在linux系统中,缺省就有几个loop设备。本人使用CentOS6.3,缺省有8个loop设备。如果需要更多的loop设备,网上也有多种
2012-12-14 21:09:06 462
原创 rpm初始源码上直接打patch的方法
通常情况下,我们从网上下载的rpm源码包包含三种文件,patch、tar.bz2和spec文件。patch是源代码补丁文件;tar.bz2是源代码程序包;spec是控制源代码编译的脚本文件。可能我们需要的仅仅是其打上所有补丁后的源码,但如何从rpm源码包中获取其已打补丁后的源码呢?本文是我在实际操作后总结所得,可供参考。基础知识。可以大概了解下RPM软件包的制作和安装方
2012-10-19 17:26:52 921
转载 linux下删除svn文件夹的命令
find . -name .svn -type d -exec rm -fr {} \; 参考:http://lee2013.iteye.com/blog/1181332
2012-10-19 17:16:22 1167
原创 使用kgdb调试内核模块
实验环境:硬件环境:两台物理机,并使用串口连接操作系统: CentOS-6.3-x86,CentOS是RedHat的一个社区版本调试内核:linux-2.6.32 (自从linux kernel 2.6.26已经集成kgdb,kgdb再不需要单独下载)实验原理:实验步骤:编译安装内核在开发机上编译内核并将其安装在目标机。内核的编译和安装方法在此不再赘述
2012-10-12 20:36:29 529
原创 make install 错误解决方法
错误提示如下:WARNING: No module ehci-hcd found for kernel 2.6.32, continuing anywayWARNING: No module ohci-hcd found for kernel 2.6.32, continuing anywayWARNING: No module uhci-hcd found for kernel 2.
2012-10-10 14:56:04 1355
原创 使用NFS实现linux内核一机编译多机安装
使用NFS实现linux内核一机编译多机安装OS:CentOS6.3(默认安装NFS)在一台机器(称之为服务器)上编译内核,假定IP:192.168.0.101、修改/etc/exports文件,添加如下内容:/home/用户目录/linux 192.168.0.*(rw,sync,no_root_squash)保存后执行exportfs –r说明:192.168.0.*
2012-09-28 08:56:47 340
原创 使用NFS在一台机器上编译linux内核在多台机器上安装
OS:CentOS6.3(默认安装NFS)在一台机器(称之为服务器)上编译内核,假定IP:192.168.0.101、修改/etc/exports文件,添加如下内容:/home/用户目录/linux 192.168.0.*(rw,sync,no_root_squash)保存后执行exportfs –r说明:192.168.0.* 代表能访问该NFS服务的IP地址2、重启服务
2012-09-28 08:52:07 133
原创 linux压缩文件在windows下解压后,中文文件名称显示问题解决方法
一,下载7z开源解压缩工具下载地址:http://www.7-zip.org/download.html可以下载源码编译,也可以直接下载bin使用。第一种方法:下载源码编译安装。tar xvjf p7zip_9.20.1_src_all.tar.bz2makemake install./install.shldconfig第二种方法:官方下载页有bin版本,
2012-09-20 16:26:51 361
转载 转linux的lvm管理
摘自:http://blog.sgs-studio.com/?p=960LVM是Logical VolumeManager(逻辑卷管理器)的简写,它为主机提供了更高层次的磁盘存储管理能力。LVM可以帮助系统管理员为应用与用户方便地分配存储空 间。在LVM管理下的逻辑卷可以按需改变大小或添加移除。另外,LVM可以为所管理的逻辑卷提供定制的命名标识。因此,使用LVM主要是方便了对存储系统 的管
2012-06-24 22:32:20 891
原创 Git分支详解(备忘)
近些日接触Android底层开发,在使用git 时,常常需要用到分支。网友提供的Git分支详解感觉很不错,在此记录下来,以便不断的实践,不断学习。http://www.open-open.com/lib/view/open1328069889514.html
2012-02-07 13:27:42 243
原创 Source Insight 中文路径引发的问题,以及设置字体大小,中文注释为乱码的解决方法。
在用Source Insight 创建了工程,但使用了包含中文的路径,因此导致打开工程和删除工程都失败。1,解决不支持中文路径的方法,创建工程时路径中不要包含中文。参考:http://hi.baidu.com/inter_recoba20/blog/item/0248b00343ba820e728da560.html2,如何删除以前的出错工程呢?用十六进制编辑器打开"d:\docume
2012-02-04 16:12:12 1567
原创 如何取消vi中显示的^M符号
现象:在linux下使用vim时,有时会遇到出现很多^M符号。原因:其实 ^M 是ascii中的'\r', 回车符,是16进制的0x0D。对于换行,unix下一般只有一个0x0A表示换行,windows下一般都是0x0D和0x0A两个字符,所以windows下的文件在Linux下打开时就可能会遇到上述情况。解决方法:使用专门的工具dos2unix。比如,dos2unix file_
2012-01-31 20:22:30 1126
原创 修改ubunu更新源(备忘)
1,网上搜索Ubuntu9.10的更新源,官方强烈推荐的ubuntu9.10更新源,其中台湾这个使用过是可以的。http://bbs.ylmf.net/forum.php?mod=viewthread&tid=14396272, 修改 source.listcd /etc/apt,备份原来的source.list,然后用新的源覆盖旧的源。3,试验apt-get
2012-01-31 20:13:51 315
原创 .vimrc for me
"首先,安装 ctags,taglist和cscope,具体安装方法可百度一下,在这就不细说了。ctags和taglist可参考:http://www.linuxdiyf.com/viewarticle.php?id=84326cscope可参考:http://blog.csdn.net/dengxiayehu/article/details/6330200vi/vim使用进阶可参考:
2012-01-06 15:21:26 265
转载 开发嵌入式系统C必会的0x10个问题
转自:http://i.eol.cn/blog_read.php?topicid=103600C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的
2011-08-08 21:31:20 423
转载 static的作用
转自:http://www.cnblogs.com/dc10101/archive/2007/08/22/865556.html在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多
2011-08-08 21:16:42 219
原创 intel实习笔试题二
#include struct test { int a; int b;};struct test *fun1(){ struct test t; t.a = 1; t.b = 2; return &t;}void fun2(struct test *t1, struct tes
2011-07-20 20:58:48 373
原创 linux开机logo制作
kernel:2.6.271、制作logo的方法:首先选择一个自己喜欢的图片,然后通过GIMP软件将该图片保存为.png格式,变换方式这个就不说了(very easy),比如保存为linuxlogo.png.然后将该图片传入到装有Linux PC比如(ubuntu),按照以下顺序
2011-07-20 20:25:52 1881
原创 Linux gpio 键盘设备工作流程
参考:http://www.linuxidc.com/Linux/2011-03/33302.htm结构图:
2011-07-20 19:58:43 382
原创 intel实习笔试题一
1.声明不同类型的变量。a) An integer b) A pointer to an integer c) A pointer to a pointer to an integer d) An array of 10 integers e) An array of 10 p
2011-07-20 13:08:34 332
原创 用shell程序解决自己的需求
由于助教工作的需要,需要把先前收到的学生的作业重新组织下。考虑到学生作业多,若要纯手工操作,会是件相当麻烦的事情,于是决定写个shell脚本来解决这个问题。此前基本没用shell写过程序,所以,折腾下来也差不多用了一天多的时间。虽然如此,觉得还是蛮有成就感,毕竟印象中这还是第一次自己写程序解决自己遇到的问题。 需求描述 有一百个学生,每个学生交了三次作业。第N次作业存放在命名为第N次作业的文件
2011-06-11 01:27:00 289
转载 ( 转 ) Linux内核中常用的汇编
AT&T 汇编语言的相关知识 在 Linux 源代码中,以 .S 为扩展名的文件是“纯”汇编语言的文件。这里,我们结合具体的例子再介绍一些 AT&T 汇编语言的相关知识。 1 . GNU 汇编程序 GAS ( GNU Assembly 和连接程序 当你编写了一个程序后,就需要对其进行汇编( assembly )和连接。在 Linux 下有两种方式,一种是使用汇编程序 GAS 和连接程序 ld ,一种是使用 gcc 。我们先来看一下 GAS 和 ld: GAS 把汇编语言源文件( .o )转换为目标文
2011-05-24 20:44:00 266
原创 asserted / de-asserted
deasserted(de-asserted) 在阅读芯片数据手册的时候经常会遇到asserted和deasserted这样的词汇。 asserted的意思就是把信号变为active(可以理解为有效),根据系统要求不同,该有效电平可以是高电平(即高有效),也可以是低电平(即低有效)。 与前者相反,deasserted的意思就是解除active状态,就是信号变为非active状态,可以是高也可以是低。
2011-05-22 14:22:00 2969 3
原创 Atmel例程中宏定义的理解
近日来一直在调试 AT91SAM9G45 开发板例程,遇到很多宏定义,归纳起来也基本就是如下几种: #ifndef __ASSEMBLY__ typedef volatile unsigned int AT91_REG;// Hardware register definition #define AT91_CAST(a) (a) #else #define AT91_CAST(a) #endif // 用实例说明 AT91_CAST(a) 的功能 //
2011-05-21 21:33:00 778
原创 有关volatile的解释
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。简单说,就是用来防止编译器优化。 使用该关键字的例子如下: volatile int nVint; 当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。 例如: volat
2011-05-21 17:33:00 263
原创 Linux内核设计与实现-内存管理学习小结
一,页 内存管理以页为基本单位,用 struct page 表示系统中的每个物理页。系统中的每个结构都要分配这样一个结构体,假定系统的物理页为4kb,系统有128M的物理内存,那么系统仅需1MB的内存用来管理就可以了,代价并不高。有个地方还不是很明白,书中说page结构与物理页相关,与虚拟页无关。因此,该结构对页的描述只是暂时的。书中也作解释了,但还不是很明白。 二,区 由于硬件的限制,内核把页划分成了不同的区。 Linux使用了三种区,分别为:ZONE_DMA, ZONE_NORMAL, ZONE
2011-05-15 19:57:00 571
转载 linux 内存管理之kmalloc
在设备驱动程序中动态开辟内存,不是用malloc,而是kmalloc,或者用get_free_pages直接申请页。释放内存用的是kfree,或free_pages. 对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。 进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4
2011-05-15 17:11:00 295
原创 vim+ctags
Vi大家都很熟悉,某些情况下它是我们在Linux下唯一可用的文本编辑器。其实我们平时所指的VI其实是VIM (ViImproved,VI增强版)。有人常常拿VIM和emacs比较,VIM尽管不象emacs那样有那么多的功能,但是比emacs更方便、好用。VIM简单易用,只要看看VIM自带的vitutor(直接输入vimtutor),大约只要20分钟就能掌握VIM的用法。对于Linux下的C/C++的程序员,使用VIM+ Ctags的组合来写程序也许是最佳的选择。 VI的使用方法这里就不罗嗦了,本文假设大家
2011-05-13 17:02:00 581
原创 浅析运行Linux内核的PC机的启动过程
概括来讲,运行Linux内核的PC机启动过程是这样的: power on —> bios —> bootloader —> kernel —> init 一、BIOS启动 CPU在上电后处于实地址模式,并且代码段寄存器CS的内容为0xffff,指令寄存器IP的内容为0x0;
2011-05-13 16:59:00 468
原创 Linux内核情景分析——X86系列CPU内存寻址和分析
今天阅读LINUX内核情景分析,终于搞清楚了几个问题,甚是高兴。 一、说一个CPU 是“16位”和“32位”时,到底是指什么呢? 二、intel X86系列处理器中“实模式”和“保护模式”到底是怎么回事? 三、Intel Pentium Pro处理器的内存扩展机制PSE和PAE是如何工作? 一、通常,在人们提到一款处理器是“16位”或“32位”时是指什么呢"? 其实是指:处理器中“算术逻辑单元”(ALU)的宽度。然而一直以来,我都认为是指CPU地址总线的位数,好惭愧啊。比如,16
2011-05-09 17:47:00 886
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人