1. include/linux/config.h
include/linux/module.h中包含着linux/config.h的头文件,linux/config.h中包含着以#define形式定义的内核编译编译时所选择的项。
2. __init 和 __exit
在将程序编译为模块时(即gcc 编译选项了加了 _DMODULE),这两个内核宏不被识别,从而导致编译出错。
3. 驱动程序中的ioctl()的command
在 redhat 9 (kernel 2.4.20-8)中,include/asm-i386/ioctl.h中有如下定义:
#define _IOC_NRBITS 8
#define _IOC_TYPEBITS 8
#define _IOC_SIZEBITS 14
#define _IOC_DIRBITS 2
由此可见,整个ioctl() 的 command 的长度为 32 bits,各个字段的长度如上所示。
知道了这些,那些同样在include/asm-i386/ioctl.h中定义的用来构造和解析ioctl()的command的宏也就很好理解了。
4. include/linux/version.h
include/linux/version.h包含在include/linux/module.h中。在include/linux/version.h内容如下:
#include <linux/rhconfig.h>
#if defined(__module__smp)
#define UTS_RELEASE "2.4.20-8smp"
#elif defined(__module__BOOT)
#define UTS_RELEASE "2.4.20-8BOOT"
#elif defined(__module__bigmem)
#define UTS_RELEASE "2.4.20-8bigmem"
#else
#define UTS_RELEASE "2.4.20-8"
#endif
#define LINUX_VERSION_CODE 132116
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
其中,宏LINUX_VERSION_CODE扩展为内核版本的二进制表示,版本发行号的每一个部分对应一个字节。132116的16进制表示为0x020416,点分十进制即为:2.4.20.
宏 KERNEL_VERSION 以组成版本号的三部分(三个整数)为参数,创建“kernel_version_code”。
5. 模块使用计数
linux/module.h 中定义的关于模块使用技术的宏:
MOD_INC_USE_COUNT
MOD_DEC_USE_COUNT
MOD_IN_USE : 计数非0时返回真。
6. kdev_t
现在 Linux 内核使用 kdev_t 类型保存设备号。kdev_t 的相关信息在 <linux/kdev_t.h>中定义。对 kdev_t进行操作的宏以及函数如下:
MAJOR(kdev_t dev) : 从 kdev_t 结构中得出主设备号。
MINOR(kdev_t dev): 从kdev_t结构中得出次设备号。
MKDEV(int ma, int mi) : 通过主设备号和次设备号创建 kdev_t。
分享到:
相关推荐
此版本为hedhat7.X以上版本,解压文件夹,里面包含了GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz,华为高斯数据库认证HCIA-GaussDB_V1.0实验手册.pdf,华为GaussDB 客户端工具—Data Studio 安装教程,照着文档...
RedHat推出采用2.4内核的Linuxβ版.pdf
guassdb100在redhat上安装包,单机部署的包,安装步骤请看自行上网查找。GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.7z
guassdb100在redhat上安装包,单机部署的包,安装步骤请看我的文中介绍,经过大量实验搭建总结出来的文档
QNX_Neutrino_62_vs_RedHat_Embedded_Linux QNX_Neutrino_62_vs_RedHat_Embedded_LinuxQNX_Neutrino_62_vs_RedHat_Embedded_Linux
ArcGis_Server_9.3.1_Java for Redhat5.5
Oracle_11G_R2_RAC_ON_redhat5
ORACLE_10.2.0.1_RAC_FOR_RedHat_Linux_AS5安装操作手册
Oracle_10g_R2_RAC_for_Redhat_Linux_AS_4_u4安装文档
配置oracle_11G_R2_RAC_ON_redhat5
Oracle_10g_R2_RAC_ASM_for_Redhat_Linux_AS_4_u4安装文档
Oracle_10g_RAC_For_Redhat_AS_4安装指南
Redhat9 mysql是如何快速安装全过程
linux内核编译——redhat9+vm7+2.6.10
RedHat 升级内核版本离线版. kernel-lt-4.4.130-1.el6.elrepo.x86_64.rpm 修改配置文件 cp /etc/grub.conf /etc/grub.conf.bak vi /etc/grub.conf 将default=1 改为 default=0 重启服务器,并查看内核
虚拟机_vmware_安装redhat9详细教程
Oracle_for_redhat_as4.0_cluster_全过程Oracle_for_redhat_as4.0_cluster_全过程
redhat9内核升级到2.6.18,device-mapper-1.00.19-2.i386.rpm lvm2-2.00.25-1.01.i386.rpm mkinitrd-4.1.18-2.i386.rpm linux-2.6.18.tar.bz2 module-init-tools-3.2.tar.bz2 RedHat_Linux_9内核升级(2.4-2.6).doc
Oracle 11g R2在Redhat Enterprise Linux 6.4上的详细安装步骤,有详细配图