Linux内核
kevin1078
这个作者很懒,什么都没留下…
展开
-
修改Linux内核启动参数
内核启动参数一般保存在 /boot/grub/menu.lst (对应"kernel"开头的行) 或者 /boot/grub/grub.cfg (对应linux开头的行)文件中, 系统启动时由grub引导并传递给内核. 以下是/boot/grub/menu.lst文件中的示例片段: title Fedora Core (2.6.18-1.2798.fc6)原创 2012-03-27 22:22:53 · 18834 阅读 · 1 评论 -
linux内核中分配4M以上大内存的方法
在内核中, kmalloc能够分配的最大连续内存为2的(MAX_ORDER-1)次方个page(参见alloc_pages函数, "if (unlikely(order >= MAX_ORDER)) return NULL;"), page的大小一般是4K bytes, MAX_ORDER缺省定义为11, 所以如果不修改内核, kmalloc能够分配的最大连续内存一般是4M原创 2012-03-28 00:05:35 · 6790 阅读 · 0 评论 -
Linux内核编译简略步骤
在内核源代码目录下执行以下步骤: 1."make mrproper", 清理源代码目录, 对于刚下载的内核, 可省略该步骤 2."make menuconfig", 直接保存默认配置即可(一般默认配置就是发行版的默认配置), 也可根据需要修改相关配置. 3."make dep", 检查模块间的依赖关系 4."make bzImage", 编译内核 5."make modu原创 2012-03-27 20:07:22 · 2112 阅读 · 0 评论 -
内核空间到用户空间的共享内存映射
当内核空间和用户空间存在大量数据交互时, 共享内存映射就成了这种情况下的不二选择; 它能够最大限度的降低内核空间和用户空间之间的数据拷贝, 从而大大提高系统的性能. 以下是创建从内核空间到用户空间的共享内存映射的模板代码(在内核2.6.18和2.6.32上测试通过): 1.内核空间分配内存: #include #include #include int mmap_原创 2012-03-28 22:20:33 · 5057 阅读 · 0 评论 -
使用KGDB调试内核和模块
内核空间的代码(包括内核和模块)无法像应用程序那样使用gdb进行简单直观的调试. 代码调试一般有两种方法: 一种是通过调试器辅助调试, 如gdb, Visual C++的集成调试环境, JTAG仿真器的集成调试环境; 这种调试方法可以对代码进行单步跟踪, 所以一次运行基本上就可以排查一条运行路径; 也可以在程序出错时检查调用栈信息, 从而迅速定位问题所在; 所以这种调试方法尤其适合于初期原创 2012-03-27 23:02:40 · 8845 阅读 · 2 评论 -
基于netfilter机制的IP数据包过滤驱动模版
#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if L原创 2012-04-20 16:32:52 · 1631 阅读 · 0 评论 -
Linux 2.6内核驱动模块Makefile模版
这个模版非常简洁,单目录下增减源文件时无需修改。 注意模块的编译有两次make调用的过程,这两次过程之间Makefile中定义的变量是无法自动传递的,所以必须通过命令行来传递。 KVERS = $(shell uname -r) # Kernel modules MODNAME=test obj-m := $(MODNAME).o OBJS = $(patsubs原创 2012-04-20 16:57:48 · 1030 阅读 · 0 评论 -
使用netlink机制实现内核空间和用户空间的双向消息通讯
linux内核2.6版本中提供的各种用户空间和内核空间的通讯机制中, 只有netlink机制能够提供类似于Windows内核中事件通知机制类似的通信能力: 既可以从内核空间主动发消息给用户空间(Windows上是KeSetEvent; linux上是netlink_unicast/netlink_broadcast), 也可以在用户空间阻塞等待唤醒(Windows是WaitForSingleObj原创 2012-03-29 00:08:03 · 5747 阅读 · 0 评论