kernel
文章平均质量分 80
方长存
主要在Linux/Solaris/HP上进行C/C++开发, 涉及JAVA/PYTHON语言,有如下开发经验: GPS Embedded开发,RADIUS/GTP/LTE的通信程序开发,大型Switch上的应用软件及驱动开发, NetFlow/sFlow监控软件开发,目前在做汽车组装检查软件相关开发。
展开
-
Linux kernel compilation steps
以下是本人总结的LINUX编译内核的主要步骤:#cd /usr/src进入内核编译目录下一、#make mrproper清除以前编译产生的痕迹(新系统可省)二、#make menuconfig配置内核,添加必要支持,如:NTFS支持(M:动态插入模块)、声卡网卡驱动(使用lspci -v查看具体设备)、无线网络、蓝牙、1394、USB等。三、#make dep 确保原创 2014-02-27 14:49:00 · 801 阅读 · 0 评论 -
Linux内核线程kthread
内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,它只在 内核空间运行,从来不切换到用户空间去;并且和普通进程一样,可以被调度,也可以被抢占。让模块在加载后能一直运行下去的方法——内核线程。要创建一个内核线程有许多种方法,我们这里要学的是最简单的一种。打开include/linux/kthread.h,你就看到了它全部的API,一共三个函数。struct task_struct kt原创 2015-12-29 14:34:44 · 17046 阅读 · 0 评论 -
EXPORT_SYMBOL
EXPORT_SYMBOL的作用 我们在编写C程序时,要调用某个文件中的函数,需要在本文件中包含声明有被调用函数的头文件,然后编译连接后,方能找到调用函数。 对于模块依赖的情况,不能简单的使用上面的方法,内核提供了一个机制,就是EXPORT_SYMBOL标签,该标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EX原创 2015-04-14 11:23:03 · 1604 阅读 · 0 评论 -
pci_register_driver
本文在http://blog.csdn.net/bi511304183/article/details/9832407的基础上完成:大多数驱动程序都要实现一个probe函数,该函数在register时被调用,具体内核是如何实现的呢?下面我们以LINUX内核中Hamachi.c为例子来分析一下: static struct pci_driver hamachi_driver = {原创 2015-04-13 10:08:49 · 4056 阅读 · 4 评论 -
The kernel module programming primer(1)-Module
内核模块是Linux内核向外部提供的一个接口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),我们简称为模块。Linux内核之所以提供模块机制,是因为它本身是一个单内核(monolithic kernel)。单内核的最大优点是效率高,因为所有的内容都集成在一起,但其缺点是可扩展性和可维护性相对较差,模块机制就是为了弥补这一缺陷。一、 什么是模块 模转载 2015-03-03 18:14:35 · 699 阅读 · 0 评论 -
The kernel module programming primer(3)-A brief introduction for module utilities
modutils是管理内核模块的一个软件包。可以在任何获得内核源代码的地方获取Modutils(modutils-x.y.z.tar.gz)源代码,然后选择最高级别的patch.x.y.z等于或小于当前的内核版本,安装后在/sbin目录下就会有insmod、rmmod、ksyms、lsmod、modprobe等实用程序。当然,通常我们在加载Linux内核时,modutils已经被载入。1.in转载 2015-03-04 10:04:19 · 520 阅读 · 0 评论 -
The kernel module programming primer(2)-Necessary Knowledge
模块编程属于内核编程,因此,除了对内核相关知识有所了解外,还需要了解与模块相关的知识。1.应用程序与内核模块的比较为了加深对内核模块的了解,表一给出应用程序与内核模块程序的比较。表一应用程序与内核模块程序的比较 C语言应用程序内核模块程序使用函数Libc库内核函数运行空间用户空间内核空间运行权限普通用户转载 2015-03-04 09:45:33 · 721 阅读 · 0 评论 -
The Linux kernel analysis
历史和体系结构分析 Linux® 内核是一个庞大而复杂的操作系统的核心,不过尽管庞大,但是却采用子系统和分层的概念很好地进行了组织。在本文中,您将探索 Linux 内核的总体结构,并学习一些主要的子系统和核心接口。由于本文的目标是对 Linux 内核进行介绍并探索其体系结构和主要组件,因此首先回顾一下 Linux 的简短历史,然后从较高的层次审视 Linux 内核的体系结构,转载 2015-03-04 10:42:37 · 657 阅读 · 0 评论 -
The kernel module programming primer(4)-Writing interrupt module with parameters
在此,我们将编写一个模块,其中有一个中断函数,当内核接收到某个 IRQ 上的一个中断时会调用它。先给出全部代码,读者自己调试,把对该程序的理解跟到本贴后面。#include #include #include static int irq;static char *interface;//MODULE_PARM_DESC(interface,”A network interf转载 2015-03-04 10:12:23 · 648 阅读 · 0 评论 -
Linux kernel upgrade steps
升级内核1)当然是下载最新的内核 www.kernel.org 2)我下载的是这个文件linux-2.6.9.tar.gz 3)打开终端(也可用图形方式复制和解压缩) #cp linux2.6.24.tar.gz /usr/src #gunzip -d linux-2.6.24.tar.gz # tar xvf linux-2.6.24.tar #cd linux-2.原创 2014-02-27 14:50:32 · 1053 阅读 · 0 评论 -
IS_ERR()、PTR_ERR() and ERR_PTR() in Linux Kernel
内核中的函数常常返回指针,通常如果调用出错,会返回NULL空指针,但linux做了更精妙的处理,能够通过返回的指针体现出来。 对任何一个指针,必然有三种情况:一种是有效指针,一种是NULL,空指针,一种是错误指针,或者说无效指针。而所谓的错误指针就是指其已经到达了最后一个page,比如对于32bit的系统来说,内核空间最高地址0xffffffff,那么最后一个page就是指的0xf原创 2015-12-29 16:19:47 · 1550 阅读 · 0 评论