- 博客(25)
- 收藏
- 关注
原创 LDD读书笔记——并发与竞态
信号量semaphore down_interruptible故名思义是可以被中断的(这也是为什么要检查返回值的原因),而与之对应的是down无法被中断,这个接口是一般不用的。读写信号量rwsem( read/write semaphore ) 接口命名上与信号量类似。completion completion用于“在当
2013-01-01 22:24:52
591
原创 LDD读书笔记——调试技术
本章主要分为四个部分:通过日志(打印)调试,通过proc(查询)调试,通过strace(监视)调试以及通过kgdb调试。kgdb简单看了下,没动手,感觉作用不是很大,如果以后有需要再回头看。先按章节来总结。通过日志调试 p83页上开户/关闭调试信息的宏的技巧不错,加至了实验代码。 这节可以总结的东西很少,不过,还是遗留下了一个问题——klogd无法安装。由于起初想把de
2012-12-31 20:36:02
725
原创 LDD读书笔记——字符设备驱动程序
编写字符设备的驱动程序一般流程:定义驱动程序为用户程序提供的能力(机制);决定模块的核心数据结构,如:描述设备的,描述设备数据在内存中的存放形式的等;确定主、次设备号;通过/proc/devices可获得设备的主设备号,依此在/dev下mknod出设备文件;编写模块的init, exit函数;编写file_operations结构中的功能函数:open release,
2012-12-28 20:22:44
578
原创 关于copy_to_user和copy_from_user的学习小结
花了一天时间,希望能理解这两个接口和内核空间下对用户空间数据的拷贝问题,可惜事与愿违,虽有收获,还是留下了很多问题。遗留的问题首先,关于内核空间下是不允许发生页面错误的疑惑:1.内核的内存空间本身就具有虚拟性的概念,那么当内核的内存区需要换页时,该如何实现的呢?2.这样的规定是基于什么原因设定的?是操作系统设计时安全性,性能考虑,还是CPU体系结构上就做出了这样的设定?或者说假
2012-12-26 16:50:46
3798
原创 LDD读书实验笔记——构造和运行模块
本章主要是介绍性的东西为主,可写的东西不多,其中做了两个实验——hello world和带参数的模块,算是为驱动学习最简单的两个模块了。这章的知识体系较散乱,也就胡乱记些了版本依赖和平台依赖上,并不是很理解,但感觉也不是很重要,记得vermagic.o与这两者息息相关即可。 不过在此节提及一个观点/忠告:尽量把条件编译放到尽量低层的宏和函数中去。内核
2012-12-11 22:09:10
717
原创 对前几天内核编译的小结
在新的F13十分顺畅的完成了内核的编译, 几乎没有遇到任何阻力, 可见版本差异还是关键问题. 不过最后, 由于只给了虚拟机12g的容量, 最后居然不够用了, 一来是因为我的内核配置几乎完全按照发行版的选项, 二来10g容量可能是小了些. 那么之后, 粗略的剪裁了内核(还是省了几百M的), 再make clean之后, 其实就有3G多的剩余了, 不过还是试着追加了下硬盘容量, 主要参考的是扩展虚拟机
2012-12-10 20:45:40
412
原创 内核编译(三)
为了内核的问题请教了tinnal, 他指出了三处问题: 1. 编译的命令使用的是Make defconfig; 2. 文件系统, 尤其是LVM的问题; 3. 编译环境的内核版本比要编译的内核版本高太多;按照这个思路, 首先, 在原内核配置基础上, 将发行版中文件系统的配置几乎复制过来(仅忽略没有的配置项), 重新编译后, 问题依旧.之后, make distclean, 直接Ma
2012-12-09 22:56:43
2483
原创 内核编译(二)
继昨天之后, 开始对内核中的硬件开始配置, 方法是, 根据发行版给出的硬件模块, 找出在内核中对应的的选项. 具体是先执行脚本find_all_modules.sh -- 源自一书, 其代码:#!/bin/sh#for i in `find /sys/ -name modalias -exec cat {} \;`; do /sbin/modprobe --config /d
2012-12-07 21:00:58
868
原创 内核编译(一)
大致流程为:下载内核代码 -> 修改内核配置(make menuconfig/gconfig/xconfig) -> 构建内核( make ) -> 安装内核( make modules_install -> make install )此次编译只为熟悉流程了解原理修改内核配置 采用默认配置. 此处应该正确选择驱动的类型构建内核 直接用make, 将生成vmlinux,
2012-12-06 20:45:43
754
原创 gcc4.7编译linux2.6.30的错误解决方法
1.arch/x86/kernel/ptrace.c:1472:17: error: conflicting types for 'syscall_trace_enter' 解决方法: Patch--- linux-2.6.32.59/arch/x86/include/asm/ptrace.h+++ fix_ptrace.o_compile_error/arch
2012-12-05 20:27:55
2184
原创 关于搭建samba服务器
搭建上主要注意两点: 1. smb.conf的配置, 可能还会需要smbusers文件的配置, 具体的配置方法网上很多 2. 在配置完成后, 记得的关闭防火墙和selinux, 否则会出现无法访问的问题. (修改SElinux的方法目测比较繁琐, 直接关闭算了)
2012-12-05 20:16:44
448
转载 关于inline函数的资料整理
1. inline并不是在所有地方都会inline(这个是早就知道的,例如递归不能展开,使用了函数名作为地址也不能展开)2. C标准对于何时该inline,何时不inline定义的很模糊,造成了不同编译器在实现inline功能时存在较大差异。3. 如果在c文件中定义一个inline函数,那么编译器实际上一定会产生一份该函数的汇编代码(object code),该函数会在这个文件中任
2012-04-15 16:41:51
418
转载 Tcpdump的使用
来源:http://www.china-pub.com/computers/emook/0424/info.htm作者:李国莉 tcpdump采用命令行方式,它的命令格式为: tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -
2011-08-30 13:15:31
364
转载 strace使用详解(转)
(一) strace 命令 用途:打印 STREAMS 跟踪消息。 语法:strace [ mid sid level ] ... 描述:没有参数的 strace 命令将所有的驱动程序和模块中的所有 STREAMS 事件跟踪消息写到它的标准输出中。 这些消息是从STREAMS日志驱动程序中获取的。如果提供参数,它们必须是在三元组中。每个三元组表明跟踪消息要从给定的模块或驱动程序、
2009-10-30 11:08:00
1327
转载 宏定义中的#,##操作符和... and _ _VA_ARGS_ _
1.Preprocessor Glue: The ## Operator预处理连接符:##操作符Like the # operator, the ## operator can be used in the replacement section of a function-like macro.Additionally, it can be used in the replacement
2009-08-14 15:10:00
2332
转载 手机信号格数与GPRS关系
我们在做GPRS覆盖区的调查时,由于没有专用的仪器!我们用移动的手机来测当地GPRS覆盖好坏!能不能这样说手机信号格数越多GPRS信号就强,覆盖就好!反之也成立用普通手机信号格数来大概判断信号覆盖的强度是可以的。但是这个信号是GSM网络的信号强度,而反映GSM网络信号强度的指标又分为全帧信号强度(RxLevelFULL)和子帧信号强度(RxLevelSUB),在手机没有接通的状态下,反映的也只是G
2009-07-02 15:16:00
3775
原创 linux/c下对动态库的编译和装载的学习
测试的方法是将一个日志函数(mr_errlog), 单独记录在一个C文件(errlog.c)中, 对该C文件编译为一个动态库(libtest.so), 再用测试程序(main.c)调用该动态库. 1. 对动态库的编译 对动态库的编译命令可以为: gcc -fPIC -shared -o libtest.so errlog.c 其中gcc的选项说明如下:
2009-04-09 12:53:00
2030
转载 嵌入式Linux内核测试题
如果你能正确回答以下问题并理解相关知识点原理,那么你就可以算得上是基本合格的Linux内核开发工程师,试试看!1) Linux中主要有哪几种内核锁? 2) Linux中的用户模式和内核模式是什么含意?3) 怎样申请大块内核内存? 4) 用户进程间通信主要哪几种方式? 5) 通过伙伴系统申请内核内存的函数有哪些? 6)
2009-04-01 15:21:00
848
转载 嵌入式系统中进程间通信的监视方法
文详细描述了一种利用 ptrace 系统调用,实现嵌入式系统内部进程通信的监视方法,并提供了相应的实现方案。 Linux 中的 ptrace 系统调用是监视进程间通信的关键。 ptrace 为我们提供了一种观察和控制其它进程的方法。利用 ptrace ,我们可以截获正在运行的进程的所有的系统调用。所谓截获是指,监视程序可以在这些系统调用发生和退出时,获得系统调用的参数,甚至修改参数。这些系统调
2009-03-30 15:41:00
791
转载 如何做一名成功的IT工程师 – 续(MDE版)
我在MDE这个团队做了4年了,基于过去的经验,谈谈做MDE工作的感受吧。做MDE的工程师,和售前,售后,服务的工程师的工作有一定的相似性。MDE的全名是Market Development Engineering,所做的工作是帮助ISV在Sun的平台上进行开发,为他们进行移植,性能调优,测试提供技术支持,目标就是让ISV的产品在Sun的平台上运行得最好。MDE的工程师和服务部门的工程师是有区别的,
2009-03-28 15:19:00
1484
转载 如何做一名成功的IT工程师
进入到IT这个圈子,很多人是从工程师开始做起的,那么如何成长为一名成功的工程师呢?或者是如何成功地转换为下一个角色呢?你需要做哪些准备呢?作为MDE(Market Development Engineering)的工程师和产品开发的工程师,还是有些不同的,我下面重点想说的是比较通用的,关于MDE的工程师,或者类似的做技术支持的工程师,我想后面再单独写一篇。让我们先来看看成功的工
2009-03-28 15:18:00
459
转载 C时间函数的应用
1,时间的获取:通过time()函数来获得日历时间(Calendar Time),其原型为:time_t time(time_t * timer);#include "stdafx.h"#include "time.h"#include "stdio.h"#include "stdlib.h"int main(void){struct tm t; //定义tm时间结构,用来存
2009-03-27 14:53:00
7638
3
转载 vi中结合ctag查找函数声明
本人以前做windows方面开发,在windows下面写代码大多依靠功能强大的集成开发环境IDE,如微软的Visual studio 系列,IBM的Eclipse, Borland的JBuilder,Delphi等等。现在突然转到Linux下,使用vi的感觉很不自在,比如一个*.c文件中引入一大堆的.h文件, 在这个*.c文件中,使用的某个函数function(param1,param
2009-03-27 00:29:00
5074
转载 Source Insight的具体用法
今天学习了Source Insight的具体用法,现列出教程,以备后用。作为一个开放源代码的操作系统,Linux附带的源代码库使得广大爱好者有了一个广泛学习、深入钻研的机会,特别是Linux内核的组织极为复杂,同时,又不能像windows平台的程序一样,可以使用集成开发环境通过察看变量和函数,甚至设置断点、单步运行、调试等手段来弄清楚整个程序的组织结构,使得Linux内核源代码的阅读变得尤为困
2009-03-24 23:27:00
2084
转载 可重入函数
一、可重入函数 1)什么是可重入性? 可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数
2008-07-26 19:55:00
501
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人