内核模块编程之入门(二)—必备知识

模块编程属于内核编程,因此,除了对内核相关知识有所了解外,还需要了解与模块相关的知识。 1.应用程序与内核模块的比较 为了加深对内核模块的了解,表一给出应用程序与内核模块程序的比较。 表一 应用程序与内核模块程序的比较 C语言应用程序 内核模块程序 使用函数 Libc库 内核函数 运行空间 用户空间 内核空间 运行权限 普通用户 超级用户 入口函数 main() module_init...

作者: nxsky 发布时间: 12-22

DMA映射 dma_addr_t

DMA映射 dma_addr_t 2010-09-20 11:09 DMA映射 一个DMA映射是要分配的DMA缓冲区与为该缓冲区生成的、设备可访问地址的组合。 DMA映射建立了一个新的结构类型---dma_addr_t来表示总线地址。 dma_addr_t类型的变量对驱动程序是不透明的, 唯一允许的操作是将它们传递给DMA支持例程以及设备本身。 根据DMA缓冲区期望保留的时间长短,PCI代码有两种DMA映射: 1)一致性映射 2)流式...

作者: 空灵静世 发布时间: 12-22

ubuntu下设置开启终端的快捷键

目标:设置Alt+Ctrl+x作为开启终端的快捷键 设置方法: System —> Preferences ->Keyboard Shutcuts -> Desktop -> Run a Terminal 然后在shutcuts中按Alt+Ctrl+x即可。

作者: Alan0521 发布时间: 12-22

Linux下pstack的实现

Linux下有时候我们需要知道一个进程在做什么,比如说程序不正常的时候,他到底在干吗?最直接的方法就是打印出他所有线程的调用栈,这样我们从栈再配合程序代码就知道程序在干吗了。 Linux下这个工具叫做pstack. 使用方法是 # pstack Usage: pstack <process-id> 当然这个被调查的程序需要有符号信息。 比较雷人的是 这个程序竟然是个shell脚本,核心实现是gdb的 thread app...

作者: prefect 发布时间: 12-22

strcpy源码

strcpy源码 char *strcpy(char *dest, const char *src) { char *tmp = dest; while ((*dest++ = *src++) != '\0') /* nothing */; return tmp; } 内核实现的strcpy函数如上所示,函数体内只有三行代码,很精简。第一次看到此类函数的源码时有些奇怪,为何不做任何参数检验?若是出错,则可造成进程直接崩掉。网上对于这段代码也有热烈的讨论,对于是否需要参数检验,我也觉...

作者: shenhailuanma 发布时间: 12-21

linux下网络收发包之 send recv

从网上摘抄,根据自己的理解整理的 int send( SOCKET s, const char FAR *buf, int len, int flags ); 1 参数 len 大于s的发送缓冲长度(可由setsockopt设置), 返回SOCKET_ERROR; 2 参数 len 小于等于缓冲区长度,发送完正在发送的数据,并查看缓冲区剩余空间大小left a. len > left,等待协议栈发送数据至 len <= left,后同"b" b. len <= left,将数据拷贝至套接字的缓冲...

作者: fireworks2 发布时间: 12-21

中断原理和中断类别

中断是指CPU运行过程中,外设遇到紧急的事物要处理,使得CPU暂停当前指令的执行转去执行中断指令,执行完中断服务程序后又回到当前的指令继续执行。 中断可以分为硬中断和软中断 硬中断是指CPU外设对CPU产生中断。 软中断是指应用程序产生异常,或者人为的产生中断,它是对内核进行中断。 对控制器来说,中断源很多,必须有一个中断控制器来管理这些中断。INTEL8259就是一个...

作者: cjjnjust 发布时间: 12-21

第02章 建立和运行模块

源码代码: 文件: 02.rar 大小: 14KB 下载: 下载 (1) 驱动模块不能使用lib(内核本身应该可以使用C库吧), 只能使用 内核导出的函数.--- cat /proc/kallsyms 有个宏,可以让你的符号进入全局不符号表kallsyms中. 这个宏叫做: 从这个文件中看到的: drivers\usb\core\message.c EXPORT_SYMBOL_GPL(usb_interrupt_msg); EXPORT_SYMBOL(usb_control_msg); (2) 以双下划线(__)开始的...

作者: purple_river 发布时间: 12-21

console tty 串口

console tty 串口 http://blog.sina.com.cn/s/blog_6151984a0100ejfg.html 使用的命令: tty 查看使用哪个终端 who 查看登入的用户 w 查看登入的用户 echo "abc" >> /dev/pts/* echo "123" >> /dev/ttyAMA0 不同终端之间信息的传递 当你运行一个程序的时候,此进程一定会对应一个终端,printf打印信息会在终端出现,而当程序进入内核态时(如调用驱动),printk打印信息会在...

作者: purple_river 发布时间: 12-21

Fedora 启动过程

1、从/etc/inittab获取运行级别(runlevel); 2、执行/etc/rc.d/rc.sysinit; 3、执行/etc/rc.d/rc.local(可以再这里加入自启动脚本); 4、执行/bin/login; 以上只是粗略地说一下,其中还有好多详细的还没有列出; 11) 用户登陆后执行的脚本: 执行/etc/profile,这个文件本身会根据不同的用户设置一些环境变量,然后会调用/etc/profile.d/*.sh下的文件,这下面有好多文件,都...

作者: returnx 发布时间: 12-21