- 博客(260)
- 资源 (4)
- 收藏
- 关注
原创 主题:钩子函数简析及实例
钩子函数、回调函数、注册函数,挂钩子这些我们代码中经常涉及到的东西,是否已经困扰你很久了?它们究竟是怎么回事,究竟怎么用?下面我来为你一一解答。什么是钩子函数?钩子函数也叫回调函数,是通过函数指针来实现的,那我们来看看什么是函数指针。首先看看以下例子:int *p;int a,b;我们可以让指针p先后指向a, b,这样,p就先后代表了不同变量的地
2014-09-17 11:41:12 15371 11
转载 《UNIX环境高级编程》笔记--read函数,write函数,lseek函数
1.read函数调用read函数从文件去读数据,函数定义如下:[cpp] view plaincopyprint?#include ssize_t read(int filedes, void* buff, size_t nbytes); #include ssize_t read(int filedes, void* buff, size_
2014-03-21 16:38:19 1099
转载 写给中产阶层的几条投资理财建议
吴向宏先定义一下,我所认为的国内中产阶层,是指受过较高等教育、有较稳定工作和社会保障、特别是有城市户口的中等收入人群,基本上就是城市白领。国外的中产阶层往往也包括制造业和劳动密集型的服务业工人,因为他们收入达标,社会地位也和白领阶层相同。中国的制造业和劳动密集型服务业从业人员,尽管收入有可能不低,却在户籍、社保等关键社会地位上处于受歧视状态,其生活状况、其面对的人生命题,也与城市中产阶
2014-03-14 22:38:39 2035
转载 自己动手编译Linux内核
原始出处 、作者信息和本声明。否则将追究法律责任。 http://sprocessor.blog.51cto.com/160089/28903 整理了一下Linux内核编译的方法,原始内核版本为Linux-2.4.20.8,新内核版本为Linux-2.4.22,其它内核版本编译方法类似。 一 准备工作 首先当然是获得内核了,可
2014-03-05 22:00:40 1071
转载 linux常用查看硬件设备信息命令
# uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo # 查看CPU信息# hostname # 查看计算机名# lspci -tv # 列出所有PCI设备# lsusb -t
2014-02-28 20:36:48 971
转载 linux rtc驱动
Linux的RTC驱动相对还是比较简单的,可以将它作为一个普通的字符型设备,或者一个misc设备,也可以是一个平台设备,这都没有关系,主要还是对rtc_ops这个文件操作结构体中的成员填充,这里主要涉及到两个方面比较重要: 1. 在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。当Linu
2014-02-25 17:15:10 1357
原创 深入理解linux网络技术内幕--通知链
一 通知链概述: 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统,Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。通知链表是一个函数链表,链表上的每一个节点都注册了一个函数。当某个事情发生时,链表上所有节点对应的函数就会
2014-02-24 20:11:02 1843 1
原创 linux网络学习之分配net_device结构体
一 网络设备利用net_device结构体来定义,该结构体定义在头函数:kernel/linux/netdevice.h,该结构体的使用函数定义在函数:kernel/net/core/dev.c中: 该结构体是有函数:alloc_netdev_mps进行分配。二 alloc_netdev_mps函数解析: 1 函数原型:struct net_device *alloc
2014-02-24 08:54:04 6296 1
原创 linux下PCI设备驱动程序之注册详解
一 识别方式: 天朝为了方便每个人的管理,搞了一套身份识别的玩意(档案和身份证)。kernel本省就像一个社会,每个进来的设备必须要有它独特的名字和一些档案。这个工作对PCI来说,它是由pci_device_id这个结构体来进行身份信息保存的: 17 struct pci_device_id { 18 __u32 vendor, device; /* Vend
2014-02-22 13:33:22 3881
原创 Linux内核态与用户态进程通信方法-用户上下文
运行在用户上下文环境中的代码是可以阻塞的,这样,便可以使用消息队列和 UNIX 域套接字来实现内核态与用户态的通信。但这些方法的数据传输效率较低,Linux 内核提供 copy_from_user()/copy_to_user() 函数来实现内核态与用户态数据的拷贝,但这两个函数会引发阻塞,所以不能用在硬、软中断中。一般将这两个特殊拷贝函数用在类似于系统调用一类的函数中,此类函数在使用中往往"穿梭
2014-02-19 19:53:09 6433 2
原创 解决隐式声明与内建函数不兼容问题
一 运行一段带有memset,memcpy等函数操作的代码,编译器上报如下错误:netlink-exam-user-send.c: 在函数‘main’中:netlink-exam-user-send.c:39: 警告: 隐式声明与内建函数‘memset’不兼容netlink-exam-user-send.c:54: 警告: 隐式声明与内建函数‘memcpy’不兼容netlink-e
2014-02-19 08:23:04 20222
转载 套接字中的数据转换(大端模式/小端模式)
通常使用的有两种数据类型:短型(两个字节)和长型(四个字节)。 下面介绍的这些转换函数对于这两类的无符号整型变量都可以正确的转换。 如果你想将一个短型数据从主机字节顺序转换到网络字节顺序的话,有这样一个函数htnos: 它是以"h”开头的,代表“主机”; 紧跟着它的是"to",代表“转换到”; 然后是"n",代表“网络”; 最后是"s
2014-02-17 08:29:23 1496
转载 通过proc文件系统输出必要的Linux内核信息(下)
3、使用seq_file接口的例子 本例通过/proc/seq_file_test文件输出Linux内核的十个随机数,并与printk打印的信息进行比较。 (1)、例子源代码 [cpp] view plaincopyprint?#include #include #include #include #include
2014-02-15 10:12:09 970
转载 通过proc文件系统输出必要的Linux内核信息(中)
2、使用旧式proc接口的例子 本示例比较简单,先通过kmalloc函数分配一段TANGLINUX_LEN大小的内存,然后通过tanglinux_read和tanglinux_write函数来实现对这段内存的读写操作。 (1)、例子源代码 [cpp] view plaincopyprint?#include #include #inc
2014-02-15 10:11:05 1169
转载 通过proc文件系统输出必要的Linux内核信息(上)
开发平台:Ubuntu 11.04 编译器:gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) 内核源码:linux-2.6.38.8.tar.bz2 proc是基于内存的文件系统,用来实现外界与Linux内核的信息交互(通过/proc目录下的各种文件)。 1、proc文件系统的初始化 proc文
2014-02-14 13:31:45 1553
转载 linux的poll机制
Poll就是监控文件是否可读的一种机制,作用与select一样。应用程序的调用函数如下:int poll(struct pollfd *fds,nfds_t nfds, int timeout);Poll机制会判断fds中的文件是否可读,如果可读则会立即返回,返回的值就是可读fd的数量,如果不可读,那么就进程就会休眠timeout这么长的时间,然后再来判断是否有文件可读
2013-12-09 08:26:45 1727
原创 UDP的send、sendto和sendmsg测试代码
#include #include #include #include #include #include #include void udp_test(int mode, const char *saddr,unsigned short port, const char* text){ int s = socket(AF_INET,SOCK_
2013-11-07 10:27:19 5552
转载 内核宏ALIGN的含义
在linux2.6.30.4中,在include/linux/kernel.h文件中,ALIGN宏的定义如下:[cpp] view plaincopyprint?#define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) #define __ALIGN_MASK(x,mask) (((x)+(mask
2013-10-24 13:49:33 1164
转载 推荐几个学习linux的国外著名论坛网站
http://crunchbanglinux.org/forums/forum/8/tips-tricks-scripts/http://bbs.archlinux.org/http://www.linuxforums.org/http://www.linuxsir.org/bbs/index.php (国内)
2013-10-22 20:43:14 1357
原创 TCP/IP协议简介
一、分层:TCP/IP通常被认为是一个四层协议系统:应用层:Telnet(远程登录)、FTP(文件传输协议)和e_mail等运输层:TCP(传输控制协议)和UDP(用户数据协议)网络层:IP(网际协议)、ICMP(Internet互联网控制报文协议)和IGMP(Internet组管理协议)
2013-10-22 20:38:56 4237 1
转载 printk的使用-日志等级
日志等级内核根据日志级别来判断是否在终端(console)上打印消息:内核把级别比某个特定值低的所有消息显示在终端(console)上。但是所有信息都会记录在printk的“ring buffer”中。 printk有8个loglevel,定义在中:#define KERN_EMERG ""/* 系统不可使用 */#define KERN_ALERT ""/*
2013-10-02 07:59:12 1232
转载 深入linux设备驱动程序内核机制(第八章) 读书笔记
第八章 时间管理 驱动对时间进行操作, 典型的可以分为两大类:延时与定时. 前者是两个连续的动作A与B之间插入一段时间空 白, 即在A执行后需要等待若干时间才能执行B, 这段时间空白内, 处理哭也许是进入忙等待, 也许是切换到一 个新进程上. 后者是在一个指定的时间点到后执行某此动作, 轮询是最典型的应用. 欢迎转载本文, 请标明出处 本文
2013-09-29 08:18:32 788
转载 网络驱动移植之sk_buff结构体及其相关操作函数(下)
2、结构体相关操作函数 (1)、dev_alloc_skb 实际上,函数dev_alloc_skb最终是调用__alloc_skb函数来分配数据缓冲区和sk_buff结构体的,如下图: 从dev_alloc_skb到__alloc_skb所涉及的源代码如下: [cpp] view plaincopyprint?/* linux-2.6
2013-09-11 18:54:53 1679
转载 网络驱动移植之sk_buff结构体及其相关操作函数(上)
开发平台:Ubuntu11.04 编译器:gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) 内核源码:linux-2.6.38.8.tar.bz2 struct sk_buff是Linux操作系统网络相关代码中最重要的结构体之一,用于管理已接收或正要传输的网络数据包。此结构体定义在include/linux/skb
2013-09-11 18:09:53 1041
转载 Linux的自旋锁struct spinlock_t的使用
在Linux中提供了一些机制用来避免竞争条件,最简单的一个种就是自旋锁,例如:当一个临界区的数据在多个函数之间被调用时,为了保护数据不被破坏,可以采用spinlock来保护临界区的数据,当然还有一个就是信号量也是可以实现临界区数据的保护的。以后在介绍信号量吧。这里还是先说说splinlock吧。1:定义和初始化spinlock 在linux中定义spinlock的方法很简
2013-05-12 13:39:08 981
原创 用函数printk打印内核信息的方法
Linux内核用函数printk打印调试信息,该函数的用法与C库打印函数printf格式类似,但在内核使用。用户可在内核代码中的某位置加入函数printk,直接把所关心的信息打打印到屏幕上或日志文件中。函数printk根据日志级别(loglevel)对调试信息进行分类。日志级别用宏定义,展开为一个字符串,在编译时由预处理器将它和消息文本拼接成一个字符串,因此函数printk中的日志级别和格
2013-05-04 22:12:04 1747
转载 Linux下查找命令(收集整理)
一.Linux查找文件的相关命令常 用 命 令简要中文说明程序所在目录more分页显示一个文件或任何输出结果/binless分页显示一个文件并且可以回头/usr/binwhereis寻找文件工具
2013-01-16 20:29:42 9923
转载 Linux驱动加载实例
日志也是用户应该注意的地方之一。不要低估日志文件对网络安全的重要作用,因为日志文件能够详细记录系统每天发生的各种各样的事件。用户可以通过日志文件检查错误产生的原因,或者在受到攻击和黑客入侵时追踪攻击者的踪迹。日志的两个比较重要的作用是:审核和监测。配置好的Linux的日志非常强大。对于Linux系统而言,所有的日志文件都在/var/log下。默认情况下,Linux的日志文件已经足够强大,但没有记录
2012-12-21 23:30:16 814
转载 Linux查看硬件信息及驱动设备
查看板卡信息:cat /proc/pci查看PCI信息:lspci (相比cat /proc/pci更直观)查看内存信息:cat /proc/meminfo查看USB设备:cat /proc/bus/usb/devices查看键盘和鼠标:cat /proc/bus/input/devices查看系统硬盘信息和使用情况:fdisk & disk - l & df查看各设备的中
2012-12-21 22:46:04 1131
转载 MODULE_DEVICE_TABLE
1. MODULE_DEVICE_TABLE (usb, skel_table);该宏生成一个名为__mod_pci_device_table的局部变量,该变量指向第二个参数。内核构建时,depmod程序会在所有模块中搜索符号__mod_pci_device_table,把数据(设备列表)从模块中抽出,添加到映射文件/lib/modules/KERNEL_VERSION/modules.pci
2012-12-19 21:19:50 1460
转载 少编码多思考:代码越多 问题越多
摘要:本文作者Ed Finkler是一名PHP、Python、JavaScript程序员。有许多产品开发经验,例如Spaz,一个开源微博客户端桌面和WebOS。他在编码时总结了一些非常益用的编码守则,分享给大家。大约一年前,我曾编写过一些PHP Web编程守则——MicroPHP Manifesto。但我发现各个语言之间有一些共同的编程/编码规则,这或许是我在熟悉各种类型的编程语言后的
2012-12-19 20:41:30 585
转载 Linux性能监控
转自:http://blog.csdn.net/chosen0ne/article/details/8200737#t1 linux性能监控,就是要监控系统的各个子系统是否正常。linux主要的子系统包括:CPU、Memory、IO和Network,它们之间相互依赖,一个出问题可能会影响其他的。比如:网卡流量很大会导致更多的CPU开销,因为频繁的响应中断执行协议栈。 性
2012-11-23 23:40:11 1031
原创 linux device drive 第六章代码示例-scullpipe的实验(poll和fasync方法的实现)之三
实验测试结果[Tekkaman2440@SBC2440V4]#cd /lib/modules/[Tekkaman2440@SBC2440V4]#insmod pipe.ko[Tekkaman2440@SBC2440V4]#cat /proc/devicesCharacter devices: 1 mem 2 pty 3 ttyp 4 /dev/vc/0 4 tty
2012-11-23 21:17:54 1168
原创 linux device drive 第六章代码示例-scullpipe的实验(poll和fasync方法的实现)之二
一 测试程序头文件 scull.h#include /* needed for the _IOW etc stuff used later *//* * Ioctl definitions *//* Use 'k' as magic number */#define SCULL_IOC_MAGIC 'k'/* Please use a different 8-bit numb
2012-11-23 21:16:58 1433
原创 linux device drive 第六章代码示例-scullpipe的实验(poll和fasync方法的实现)之一
一 scullpipe的代码 1 scull.h #ifndef _SCULL_H_#define _SCULL_H_#include /* needed for the _IOW etc stuff used later *//* * Macros to help debugging */#undef PDEBUG /* undef
2012-11-23 21:12:59 1865
原创 printk及控制台的日志级别
函数printk的使用方法和printf相似,用于内核打印消息。printk根据日志级别(loglevel)对消息进行分类。日志级别用宏定义,日志级别宏展开为一个字符串,在编译时由预处理器将它和消息文本拼接成一个字符串,因此printk 函数中日志级别宏和格式字符串间不能有逗号。下面是两个printk的例子,一个用于打印调试信息,另一个用于打印临界条件信息。printk(KER
2012-11-23 20:26:02 2796
原创 LDD3源码分析之llseek分析(二)
一 对llseek做了不同的分析: #include #include #include #include #include #include #define BUF_SIZE 50 #define DEVICE_FILE "test.c"int main(int argc, char *argv[]){ int fd; int nu
2012-11-20 22:48:08 970
转载 linux read 用法
1、基本读取read命令接收标准输入(键盘)的输入,或其他文件描述符的输入(后面在说)。得到输入后,read命令将数据放入一个标准变量中。下面是read命令的最简单形式::#!/bin/bashecho -n "Enter your name:" //参数-n的作用是不换行,echo默认是换行read name //
2012-11-18 21:52:23 931
转载 LDD3源码分析之llseek分析
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz编译环境:Ubuntu 10.10内核版本:2.6.32-38-generic-paeLDD3源码路径:examples/scull/main.c本文分析LDD3第6章的llseek函数。 一、用户空间的lseek函数要理解驱动中llseek函数的实现,必须先清
2012-11-18 21:34:39 554
转载 S3C2440看门狗定时器
看门狗定时器的主要作用是在程序因为干扰而跑飞后,能够使系统复位,不至于使系统永远的死下去。它的原理与一般的定时器没有多大区别,就是先要设置好一段时间,当超过这段时间后,就从当前运行的程序中跳出进入中断处理程序中。但两者的主要差别是,一般的定时器中断是我们希望它发生的,因此我们不会在定时器中断发生前的那个时间段内干预它;而看门狗定时器中断是我们不希望它发生的,因此我们要想方设法地避免其发生。主要的方
2012-11-13 21:24:01 665
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人